From webhook-mailer at python.org Sat May 1 01:55:25 2021 From: webhook-mailer at python.org (larryhastings) Date: Sat, 01 May 2021 05:55:25 -0000 Subject: [Python-checkins] Noted my recent contributions in "What's New In Python 3.10". (#25771) Message-ID: https://github.com/python/cpython/commit/99f71aea5c5ddfdd13dc99e4253a7e3a6d10aead commit: 99f71aea5c5ddfdd13dc99e4253a7e3a6d10aead branch: master author: larryhastings committer: larryhastings date: 2021-04-30T22:55:21-07:00 summary: Noted my recent contributions in "What's New In Python 3.10". (#25771) Noted my recent contributions in "What's New In Python 3.10". Also made some edits clarifying "annotations" vs "type hints", and some other edits for correctness. files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9c8e296993879..797e1e3b21bf2 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -659,10 +659,10 @@ are added to enable the warning. See :ref:`io-text-encoding` for more information. -New Features Related to Type Annotations -======================================== +New Features Related to Type Hints +================================== -This section covers major changes affecting :pep:`484` type annotations and +This section covers major changes affecting :pep:`484` type hints and the :mod:`typing` module. @@ -671,7 +671,7 @@ PEP 604: New Type Union Operator A new type union operator was introduced which enables the syntax ``X | Y``. This provides a cleaner way of expressing 'either type X or type Y' instead of -using :data:`typing.Union`, especially in type hints (annotations). +using :data:`typing.Union`, especially in type hints. In previous versions of Python, to apply a type hint for functions accepting arguments of multiple types, :data:`typing.Union` was used:: @@ -722,8 +722,8 @@ See :class:`typing.Callable`, :class:`typing.ParamSpec`, Zijlstra in :issue:`43783`. PEP written by Mark Mendoza.) -PEP 613: TypeAlias Annotation ------------------------------ +PEP 613: TypeAlias +------------------ :pep:`484` introduced the concept of type aliases, only requiring them to be top-level unannotated assignments. This simplicity sometimes made it difficult @@ -733,8 +733,8 @@ especially when forward references or invalid types were involved. Compare:: StrCache = 'Cache[str]' # a type alias LOG_PREFIX = 'LOG[DEBUG]' # a module constant -Now the :mod:`typing` module has a special annotation :data:`TypeAlias` to -declare type aliases more explicitly:: +Now the :mod:`typing` module has a special value :data:`TypeAlias` +which lets you declare type aliases more explicitly:: StrCache: TypeAlias = 'Cache[str]' # a type alias LOG_PREFIX = 'LOG[DEBUG]' # a module constant @@ -805,6 +805,10 @@ Other Language Changes defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``. (Contributed by Batuhan Taskaya in :issue:`42737`.) +* Class and module objects now lazy-create empty annotations dicts on demand. + The annotations dicts are stored in the object?s ``__dict__`` for + backwards compatibility. + (Contributed by Larry Hastings in :issue:`43901`.) New Modules =========== @@ -987,10 +991,18 @@ inspect When a module does not define ``__loader__``, fall back to ``__spec__.loader``. (Contributed by Brett Cannon in :issue:`42133`.) -Added *globalns* and *localns* parameters in :func:`~inspect.signature` and -:meth:`inspect.Signature.from_callable` to retrieve the annotations in given -local and global namespaces. -(Contributed by Batuhan Taskaya in :issue:`41960`.) +Added :func:`inspect.get_annotations`, which safely computes the annotations +defined on an object. It works around the quirks of accessing the annotations +on various types of objects, and makes very few assumptions about the object +it examines. :func:`inspect.get_annotations` can also correctly un-stringize +stringized annotations. :func:`inspect.get_annotations` is now considered +best practice for accessing the annotations dict defined on any Python object. +Relatedly, :func:`inspect.signature`, +:func:`inspect.Signature.from_callable`, and ``inspect.Signature.from_function`` +now call :func:`inspect.get_annotations` to retrieve annotations. This means +:func:`inspect.signature` and :func:`inspect.Signature.from_callable` can +also now un-stringize stringized annotations. +(Contributed by Larry Hastings in :issue:`43817`.) linecache --------- @@ -1155,7 +1167,7 @@ of types readily interpretable by type checkers. typing ------ -For major changes, see `New Features Related to Type Annotations`_. +For major changes, see `New Features Related to Type Hints`_. The behavior of :class:`typing.Literal` was changed to conform with :pep:`586` and to match the behavior of static type checkers specified in the PEP. @@ -1255,11 +1267,12 @@ Optimizations 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 - parameter annotations. (Contributed by Yurii Karabas and Inada Naoki - in :issue:`42202`) +* When using stringized annotations, annotations dicts for functions are no longer + created when the function is created. Instead, they're stored as a tuple of + strings, and the function object lazily converts this into the annotations dict + on demand. This optimization cuts the CPU time needed to define an annotated + function by half. + (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`) * Substring search functions such as ``str1 in str2`` and ``str2.find(str1)`` now sometimes use Crochemore & Perrin's "Two-Way" string searching @@ -1569,8 +1582,8 @@ Changes in the Python API CPython bytecode changes ======================== -* The ``MAKE_FUNCTION`` instruction accepts tuple of strings as annotations - instead of dictionary. +* The ``MAKE_FUNCTION`` instruction now accepts either a dict or a tuple of + strings as the function's annotations. (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`) Build Changes From webhook-mailer at python.org Sat May 1 05:15:24 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 01 May 2021 09:15:24 -0000 Subject: [Python-checkins] bpo-43993: Update vendored pip to 21.1.1 (GH-25761) Message-ID: https://github.com/python/cpython/commit/bf99b7151663905fd5e71efe45184dc8fffc3236 commit: bf99b7151663905fd5e71efe45184dc8fffc3236 branch: master author: St?phane Bidoul committer: pfmoore date: 2021-05-01T10:15:19+01:00 summary: bpo-43993: Update vendored pip to 21.1.1 (GH-25761) files: A Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 93d8ed5bdc8581..4c606b9f2a89b8 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -12,7 +12,7 @@ __all__ = ["version", "bootstrap"] _PACKAGE_NAMES = ('setuptools', 'pip') _SETUPTOOLS_VERSION = "56.0.0" -_PIP_VERSION = "21.1" +_PIP_VERSION = "21.1.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), ("pip", _PIP_VERSION, "py3"), diff --git a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl similarity index 94% rename from Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl rename to Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl index 59395be72f135f..291cc296fa7b48 100644 Binary files a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst new file mode 100644 index 00000000000000..c9d2c458eee75c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1.1. \ No newline at end of file From webhook-mailer at python.org Sat May 1 10:05:11 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 01 May 2021 14:05:11 -0000 Subject: [Python-checkins] bpo-43989: Temporarily disable warnings in ssltests (GH-25780) Message-ID: https://github.com/python/cpython/commit/f82fd77717b58c97a16c05e25c72388b35860459 commit: f82fd77717b58c97a16c05e25c72388b35860459 branch: master author: Christian Heimes committer: tiran date: 2021-05-01T16:05:01+02:00 summary: bpo-43989: Temporarily disable warnings in ssltests (GH-25780) -Werror is currently broken. files: M Lib/test/ssltests.py diff --git a/Lib/test/ssltests.py b/Lib/test/ssltests.py index 5073ae12204b1..292453a813dcd 100644 --- a/Lib/test/ssltests.py +++ b/Lib/test/ssltests.py @@ -16,7 +16,7 @@ def run_regrtests(*extra_args): print(ssl.OPENSSL_VERSION) args = [ sys.executable, - '-Werror', '-bb', # turn warnings into exceptions + # '-Werror', '-bb', # turn warnings into exceptions '-m', 'test', ] if not extra_args: From webhook-mailer at python.org Sat May 1 11:49:42 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 01 May 2021 15:49:42 -0000 Subject: [Python-checkins] [3.9] bpo-43993: Update vendored pip to 21.1.1 (GH-25761). (GH-25782) Message-ID: https://github.com/python/cpython/commit/af1e06c62f3958082c4b409e771f291d12479b3d commit: af1e06c62f3958082c4b409e771f291d12479b3d branch: 3.9 author: St?phane Bidoul committer: pfmoore date: 2021-05-01T16:49:34+01:00 summary: [3.9] bpo-43993: Update vendored pip to 21.1.1 (GH-25761). (GH-25782) files: A Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index 783b3232c80fc4..57e576d1a3503f 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -15,7 +15,7 @@ _SETUPTOOLS_VERSION = "56.0.0" -_PIP_VERSION = "21.1" +_PIP_VERSION = "21.1.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), diff --git a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl similarity index 94% rename from Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl rename to Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl index 59395be72f135f..291cc296fa7b48 100644 Binary files a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst new file mode 100644 index 00000000000000..c9d2c458eee75c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1.1. \ No newline at end of file From webhook-mailer at python.org Sat May 1 11:50:15 2021 From: webhook-mailer at python.org (pfmoore) Date: Sat, 01 May 2021 15:50:15 -0000 Subject: [Python-checkins] [3.8] bpo-43993: Update vendored pip to 21.1.1 (GH-25761). (GH-25783) Message-ID: https://github.com/python/cpython/commit/6034c4aa58fe7257d39b53c77944393700c66396 commit: 6034c4aa58fe7257d39b53c77944393700c66396 branch: 3.8 author: St?phane Bidoul committer: pfmoore date: 2021-05-01T16:50:07+01:00 summary: [3.8] bpo-43993: Update vendored pip to 21.1.1 (GH-25761). (GH-25783) files: A Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl A Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl M Lib/ensurepip/__init__.py diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py index d77987011d3a8b..597a1ef9eeaa12 100644 --- a/Lib/ensurepip/__init__.py +++ b/Lib/ensurepip/__init__.py @@ -11,7 +11,7 @@ _SETUPTOOLS_VERSION = "56.0.0" -_PIP_VERSION = "21.1" +_PIP_VERSION = "21.1.1" _PROJECTS = [ ("setuptools", _SETUPTOOLS_VERSION, "py3"), diff --git a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl similarity index 94% rename from Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl rename to Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl index 59395be72f135f..291cc296fa7b48 100644 Binary files a/Lib/ensurepip/_bundled/pip-21.1-py3-none-any.whl and b/Lib/ensurepip/_bundled/pip-21.1.1-py3-none-any.whl differ diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst new file mode 100644 index 00000000000000..c9d2c458eee75c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst @@ -0,0 +1 @@ +Update bundled pip to 21.1.1. \ No newline at end of file From webhook-mailer at python.org Sat May 1 13:27:37 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 17:27:37 -0000 Subject: [Python-checkins] If using a frozen class with slots, add __getstate__ and __setstate__ to set the instance values. (GH-25786) Message-ID: https://github.com/python/cpython/commit/823fbf4e0eb66cbef0eacb7e8dbfb5dc8ea83b40 commit: 823fbf4e0eb66cbef0eacb7e8dbfb5dc8ea83b40 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-01T13:27:30-04:00 summary: If using a frozen class with slots, add __getstate__ and __setstate__ to set the instance values. (GH-25786) files: M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 5e5716316f095..363d0b66d208e 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1087,14 +1087,28 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, tuple(f.name for f in std_init_fields)) if slots: - cls = _add_slots(cls) + cls = _add_slots(cls, frozen) abc.update_abstractmethods(cls) return cls -def _add_slots(cls): +# _dataclass_getstate and _dataclass_setstate are needed for pickling frozen +# classes with slots. These could be slighly more performant if we generated +# the code instead of iterating over fields. But that can be a project for +# another day, if performance becomes an issue. +def _dataclass_getstate(self): + return [getattr(self, f.name) for f in fields(self)] + + +def _dataclass_setstate(self, state): + for field, value in zip(fields(self), state): + # use setattr because dataclass may be frozen + object.__setattr__(self, field.name, value) + + +def _add_slots(cls, is_frozen): # Need to create a new class, since we can't set __slots__ # after a class has been created. @@ -1120,6 +1134,11 @@ def _add_slots(cls): if qualname is not None: cls.__qualname__ = qualname + if is_frozen: + # Need this for pickling frozen classes with slots. + cls.__getstate__ = _dataclass_getstate + cls.__setstate__ = _dataclass_setstate + return cls diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 2fa0ae0126bf8..16ee4c7705d8c 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -2833,6 +2833,19 @@ class A: self.assertFalse(hasattr(A, "__slots__")) self.assertTrue(hasattr(B, "__slots__")) + # Can't be local to test_frozen_pickle. + @dataclass(frozen=True, slots=True) + class FrozenSlotsClass: + foo: str + bar: int + + def test_frozen_pickle(self): + # bpo-43999 + + assert self.FrozenSlotsClass.__slots__ == ("foo", "bar") + p = pickle.dumps(self.FrozenSlotsClass("a", 1)) + assert pickle.loads(p) == self.FrozenSlotsClass("a", 1) + class TestDescriptors(unittest.TestCase): def test_set_name(self): From webhook-mailer at python.org Sat May 1 14:24:17 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 18:24:17 -0000 Subject: [Python-checkins] Fixing doc for callback for lambda (GG-25779) Message-ID: https://github.com/python/cpython/commit/50c21ad35372983680b44130be560d856c5f27ca commit: 50c21ad35372983680b44130be560d856c5f27ca branch: master author: Shreyash Sharma committer: ericvsmith date: 2021-05-01T14:24:10-04:00 summary: Fixing doc for callback for lambda (GG-25779) Fixing callback for lambda when no return value is provided files: M Doc/library/types.rst diff --git a/Doc/library/types.rst b/Doc/library/types.rst index 956b9e8f959c6..b3fac293ecc9e 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -34,7 +34,7 @@ Dynamic Type Creation freshly created class namespace. It should accept the class namespace as its sole argument and update the namespace directly with the class contents. If no callback is provided, it has the same effect as passing - in ``lambda ns: ns``. + in ``lambda ns: None``. .. versionadded:: 3.3 From webhook-mailer at python.org Sat May 1 14:26:50 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 18:26:50 -0000 Subject: [Python-checkins] Fixing doc for callback for lambda (GH-25779) (GH-25789) Message-ID: https://github.com/python/cpython/commit/3519ac416df230d686fdec470352f25fcce4a54b commit: 3519ac416df230d686fdec470352f25fcce4a54b branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-01T14:26:46-04:00 summary: Fixing doc for callback for lambda (GH-25779) (GH-25789) Fixing callback for lambda when no return value is provided (cherry picked from commit 50c21ad35372983680b44130be560d856c5f27ca) Co-authored-by: Shreyash Sharma Co-authored-by: Shreyash Sharma files: M Doc/library/types.rst diff --git a/Doc/library/types.rst b/Doc/library/types.rst index 999a1f40c3391..ef19031910fd7 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -34,7 +34,7 @@ Dynamic Type Creation freshly created class namespace. It should accept the class namespace as its sole argument and update the namespace directly with the class contents. If no callback is provided, it has the same effect as passing - in ``lambda ns: ns``. + in ``lambda ns: None``. .. versionadded:: 3.3 From webhook-mailer at python.org Sat May 1 14:53:17 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 01 May 2021 18:53:17 -0000 Subject: [Python-checkins] bpo-43998: Default to TLS 1.2 and increase cipher suite security (GH-25778) Message-ID: https://github.com/python/cpython/commit/e983252b516edb15d4338b0a47631b59ef1e2536 commit: e983252b516edb15d4338b0a47631b59ef1e2536 branch: master author: Christian Heimes committer: tiran date: 2021-05-01T20:53:10+02:00 summary: bpo-43998: Default to TLS 1.2 and increase cipher suite security (GH-25778) The ssl module now has more secure default settings. Ciphers without forward secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2. Settings are based on Hynek Schlawack's research. ``` $ openssl version OpenSSL 1.1.1k FIPS 25 Mar 2021 $ openssl ciphers -v '@SECLEVEL=2:ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES:DHE+AES:!aNULL:!eNULL:!aDSS:!SHA1:!AESCCM' TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD TLS_AES_128_CCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESCCM(128) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256 ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256 DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256 ``` Signed-off-by: Christian Heimes files: A Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst M Doc/library/ssl.rst M Doc/using/configure.rst M Doc/whatsnew/3.10.rst M Lib/test/test_nntplib.py M Modules/_ssl.c M configure M configure.ac diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index f7c49dc7c1ea79..4d43fa0b792849 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -1509,6 +1509,14 @@ to speed up repeated connections from the same clients. context class will either require :data:`PROTOCOL_TLS_CLIENT` or :data:`PROTOCOL_TLS_SERVER` protocol in the future. + .. versionchanged:: 3.10 + + The default cipher suites now include only secure AES and ChaCha20 + ciphers with forward secrecy and security level 2. RSA and DH keys with + less than 2048 bits and ECC keys with less than 224 bits are prohibited. + :data:`PROTOCOL_TLS`, :data:`PROTOCOL_TLS_CLIENT`, and + :data:`PROTOCOL_TLS_SERVER` use TLS 1.2 as minimum TLS version. + :class:`SSLContext` objects have the following methods and attributes: diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst index 4f3953ea5d7580..c37540c7e031d6 100644 --- a/Doc/using/configure.rst +++ b/Doc/using/configure.rst @@ -441,12 +441,16 @@ Security Options * ``python`` (default): use Python's preferred selection; * ``openssl``: leave OpenSSL's defaults untouched; - * *STRING*: use a custom string, PROTOCOL_SSLv2 ignores the setting. + * *STRING*: use a custom string See the :mod:`ssl` module. .. versionadded:: 3.7 + .. versionchanged:: 3.10 + + The settings ``python`` and *STRING* also set TLS 1.2 as minimum + protocol version. macOS Options ------------- diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 797e1e3b21bf2b..a59e2e511154b2 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1105,6 +1105,13 @@ Added option to create MPTCP sockets with ``IPPROTO_MPTCP`` ssl --- +The ssl module now has more secure default settings. Ciphers without forward +secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits +weak RSA, DH, and ECC keys with less than 112 bits of security. +:class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2. +Settings are based on Hynek Schlawack's research. +(Contributed by Christian Heimes in :issue:`43998`.) + Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. (Contributed by Zackery Spytz in :issue:`31870`.) diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py index 230a4443894678..19509463a2ba13 100644 --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -37,6 +37,8 @@ class SSLError(Exception): class NetworkedNNTPTestsMixin: + ssl_context = None + def test_welcome(self): welcome = self.server.getwelcome() self.assertEqual(str, type(welcome)) @@ -273,18 +275,21 @@ def is_connected(): return False return True + kwargs = dict( + timeout=support.INTERNET_TIMEOUT, + usenetrc=False + ) + if self.ssl_context is not None: + kwargs["ssl_context"] = self.ssl_context + try: - server = self.NNTP_CLASS(self.NNTP_HOST, - timeout=support.INTERNET_TIMEOUT, - usenetrc=False) + server = self.NNTP_CLASS(self.NNTP_HOST, **kwargs) with server: self.assertTrue(is_connected()) self.assertTrue(server.help()) self.assertFalse(is_connected()) - server = self.NNTP_CLASS(self.NNTP_HOST, - timeout=support.INTERNET_TIMEOUT, - usenetrc=False) + server = self.NNTP_CLASS(self.NNTP_HOST, **kwargs) with server: server.quit() self.assertFalse(is_connected()) @@ -316,16 +321,21 @@ class NetworkedNNTPTests(NetworkedNNTPTestsMixin, unittest.TestCase): @classmethod def setUpClass(cls): support.requires("network") + kwargs = dict( + timeout=support.INTERNET_TIMEOUT, + usenetrc=False + ) + if cls.ssl_context is not None: + kwargs["ssl_context"] = cls.ssl_context with socket_helper.transient_internet(cls.NNTP_HOST): try: - cls.server = cls.NNTP_CLASS(cls.NNTP_HOST, - timeout=support.INTERNET_TIMEOUT, - usenetrc=False) + cls.server = cls.NNTP_CLASS(cls.NNTP_HOST, **kwargs) except SSLError as ssl_err: # matches "[SSL: DH_KEY_TOO_SMALL] dh key too small" if re.search(r'(?i)KEY.TOO.SMALL', ssl_err.reason): raise unittest.SkipTest(f"{cls} got {ssl_err} connecting " f"to {cls.NNTP_HOST!r}") + print(cls.NNTP_HOST) raise except EOF_ERRORS: raise unittest.SkipTest(f"{cls} got EOF error on connecting " @@ -358,6 +368,9 @@ class NetworkedNNTP_SSLTests(NetworkedNNTPTests): # Disabled as the connection will already be encrypted. test_starttls = None + ssl_context = ssl._create_unverified_context() + ssl_context.set_ciphers("DEFAULT") + ssl_context.maximum_version = ssl.TLSVersion.TLSv1_2 # # Non-networked tests using a local server (or something mocking it). diff --git a/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst b/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst new file mode 100644 index 00000000000000..6a40346128e187 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst @@ -0,0 +1,5 @@ +The :mod:`ssl` module sets more secure cipher suites defaults. Ciphers +without forward secrecy and with SHA-1 MAC are disabled by default. Security +level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of +security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS +1.2. Settings are based on Hynek Schlawack's research. diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 65370c58a38b5d..91639277a83027 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -152,15 +152,27 @@ extern const SSL_METHOD *TLSv1_2_method(void); #ifndef PY_SSL_DEFAULT_CIPHER_STRING #error "Py_SSL_DEFAULT_CIPHERS 0 needs Py_SSL_DEFAULT_CIPHER_STRING" #endif + #ifndef PY_SSL_MIN_PROTOCOL + #define PY_SSL_MIN_PROTOCOL TLS1_2_VERSION + #endif #elif PY_SSL_DEFAULT_CIPHERS == 1 /* Python custom selection of sensible cipher suites - * DEFAULT: OpenSSL's default cipher list. Since 1.0.2 the list is in sensible order. + * @SECLEVEL=2: security level 2 with 112 bits minimum security (e.g. 2048 bits RSA key) + * ECDH+*: enable ephemeral elliptic curve Diffie-Hellman + * DHE+*: fallback to ephemeral finite field Diffie-Hellman + * encryption order: AES AEAD (GCM), ChaCha AEAD, AES CBC * !aNULL:!eNULL: really no NULL ciphers - * !MD5:!3DES:!DES:!RC4:!IDEA:!SEED: no weak or broken algorithms on old OpenSSL versions. * !aDSS: no authentication with discrete logarithm DSA algorithm - * !SRP:!PSK: no secure remote password or pre-shared key authentication + * !SHA1: no weak SHA1 MAC + * !AESCCM: no CCM mode, it's uncommon and slow + * + * Based on Hynek's excellent blog post (update 2021-02-11) + * https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ */ - #define PY_SSL_DEFAULT_CIPHER_STRING "DEFAULT:!aNULL:!eNULL:!MD5:!3DES:!DES:!RC4:!IDEA:!SEED:!aDSS:!SRP:!PSK" + #define PY_SSL_DEFAULT_CIPHER_STRING "@SECLEVEL=2:ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES:DHE+AES:!aNULL:!eNULL:!aDSS:!SHA1:!AESCCM" + #ifndef PY_SSL_MIN_PROTOCOL + #define PY_SSL_MIN_PROTOCOL TLS1_2_VERSION + #endif #elif PY_SSL_DEFAULT_CIPHERS == 2 /* Ignored in SSLContext constructor, only used to as _ssl.DEFAULT_CIPHER_STRING */ #define PY_SSL_DEFAULT_CIPHER_STRING SSL_DEFAULT_CIPHER_LIST @@ -3095,8 +3107,25 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) ERR_clear_error(); PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "No cipher can be selected."); - return NULL; + goto error; } +#ifdef PY_SSL_MIN_PROTOCOL + switch(proto_version) { + case PY_SSL_VERSION_TLS: + case PY_SSL_VERSION_TLS_CLIENT: + case PY_SSL_VERSION_TLS_SERVER: + result = SSL_CTX_set_min_proto_version(ctx, PY_SSL_MIN_PROTOCOL); + if (result == 0) { + PyErr_Format(PyExc_ValueError, + "Failed to set minimum protocol 0x%x", + PY_SSL_MIN_PROTOCOL); + goto error; + } + break; + default: + break; + } +#endif /* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces memory usage for no cost at all. */ @@ -3119,6 +3148,10 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) #endif return (PyObject *)self; + error: + Py_XDECREF(self); + ERR_clear_error(); + return NULL; } static int diff --git a/configure b/configure index 08a88aa46d5e19..4dc0eabf24c03e 100755 --- a/configure +++ b/configure @@ -1604,8 +1604,8 @@ Optional Packages: override 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 Doc/library/ssl.rst + custom string, python and STRING also set TLS 1.2 as + minimum TLS version --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2 builtin hash modules, md5, sha1, sha256, sha512, sha3 (with shake), blake2 diff --git a/configure.ac b/configure.ac index b2643292b2c3e3..221996a1de52f0 100644 --- a/configure.ac +++ b/configure.ac @@ -5836,7 +5836,7 @@ AC_ARG_WITH(ssl-default-suites, python: use Python's preferred selection (default), openssl: leave OpenSSL's defaults untouched, STRING: use a custom string, - PROTOCOL_SSLv2 ignores the setting, see Doc/library/ssl.rst]), + python and STRING also set TLS 1.2 as minimum TLS version]), [ AC_MSG_RESULT($withval) case "$withval" in From webhook-mailer at python.org Sat May 1 15:26:16 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 01 May 2021 19:26:16 -0000 Subject: [Python-checkins] bpo-43957: Add a missins space to the new format enum warning (#25770) Message-ID: https://github.com/python/cpython/commit/9a42d5069a4c2a531076abfb198d2be26b57216c commit: 9a42d5069a4c2a531076abfb198d2be26b57216c branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-01T20:26:09+01:00 summary: bpo-43957: Add a missins space to the new format enum warning (#25770) files: M Lib/enum.py diff --git a/Lib/enum.py b/Lib/enum.py index bccf024b520a9..01f431001a9bf 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1018,7 +1018,7 @@ def __format__(self, format_spec): 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" + "use a format specifier, such as :d for an IntEnum member, to maintain " "the current display", DeprecationWarning, stacklevel=2, From webhook-mailer at python.org Sat May 1 15:55:54 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 19:55:54 -0000 Subject: [Python-checkins] Fixing doc for callback for lambda (GG-25779) (GH-25788) Message-ID: https://github.com/python/cpython/commit/5c018db4673aceab69dccb3e68579bbb8756164f commit: 5c018db4673aceab69dccb3e68579bbb8756164f branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-01T15:55:46-04:00 summary: Fixing doc for callback for lambda (GG-25779) (GH-25788) Fixing callback for lambda when no return value is provided (cherry picked from commit 50c21ad35372983680b44130be560d856c5f27ca) Co-authored-by: Shreyash Sharma Co-authored-by: Shreyash Sharma files: M Doc/library/types.rst diff --git a/Doc/library/types.rst b/Doc/library/types.rst index d1099cf2af085..83e2cb4cbddb6 100644 --- a/Doc/library/types.rst +++ b/Doc/library/types.rst @@ -34,7 +34,7 @@ Dynamic Type Creation freshly created class namespace. It should accept the class namespace as its sole argument and update the namespace directly with the class contents. If no callback is provided, it has the same effect as passing - in ``lambda ns: ns``. + in ``lambda ns: None``. .. versionadded:: 3.3 From webhook-mailer at python.org Sat May 1 16:17:08 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 01 May 2021 20:17:08 -0000 Subject: [Python-checkins] bpo-43998: Fix testing without ssl module (GH-25790) Message-ID: https://github.com/python/cpython/commit/a5669b3c627e64c9196d9bb58b733eb723d34e99 commit: a5669b3c627e64c9196d9bb58b733eb723d34e99 branch: master author: Christian Heimes committer: tiran date: 2021-05-01T22:17:01+02:00 summary: bpo-43998: Fix testing without ssl module (GH-25790) Signed-off-by: Christian Heimes files: M Lib/test/test_nntplib.py diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py index 19509463a2ba1..4f0592188f844 100644 --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -368,9 +368,10 @@ class NetworkedNNTP_SSLTests(NetworkedNNTPTests): # Disabled as the connection will already be encrypted. test_starttls = None - ssl_context = ssl._create_unverified_context() - ssl_context.set_ciphers("DEFAULT") - ssl_context.maximum_version = ssl.TLSVersion.TLSv1_2 + if ssl is not None: + ssl_context = ssl._create_unverified_context() + ssl_context.set_ciphers("DEFAULT") + ssl_context.maximum_version = ssl.TLSVersion.TLSv1_2 # # Non-networked tests using a local server (or something mocking it). From webhook-mailer at python.org Sat May 1 16:34:38 2021 From: webhook-mailer at python.org (ethanfurman) Date: Sat, 01 May 2021 20:34:38 -0000 Subject: [Python-checkins] bpo-43989: Add signal format specifier for unix_events (GH-25769) Message-ID: https://github.com/python/cpython/commit/55e5c680dde39c934bf162965820787272ce95f9 commit: 55e5c680dde39c934bf162965820787272ce95f9 branch: master author: Roberto Hueso committer: ethanfurman date: 2021-05-01T13:34:29-07:00 summary: bpo-43989: Add signal format specifier for unix_events (GH-25769) Add format specifier for IntEnum references to avoid 3.12 deprecation warning. files: M Lib/asyncio/unix_events.py diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index e4f445e95026b5..a55b3a375fa22d 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -126,7 +126,7 @@ def add_signal_handler(self, sig, callback, *args): logger.info('set_wakeup_fd(-1) failed: %s', nexc) if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig} cannot be caught') + raise RuntimeError(f'sig {sig:d} cannot be caught') else: raise @@ -160,7 +160,7 @@ def remove_signal_handler(self, sig): signal.signal(sig, handler) except OSError as exc: if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig} cannot be caught') + raise RuntimeError(f'sig {sig:d} cannot be caught') else: raise From webhook-mailer at python.org Sat May 1 16:42:43 2021 From: webhook-mailer at python.org (tiran) Date: Sat, 01 May 2021 20:42:43 -0000 Subject: [Python-checkins] bpo-43916: Rewrite new hashlib tests, fix typo (GH-25791) Message-ID: https://github.com/python/cpython/commit/ddbef71a2c166a5d5dd168e26493973053a953d6 commit: ddbef71a2c166a5d5dd168e26493973053a953d6 branch: master author: Christian Heimes committer: tiran date: 2021-05-01T22:42:36+02:00 summary: bpo-43916: Rewrite new hashlib tests, fix typo (GH-25791) * bpo-43916: Rewrite new hashlib tests, fix typo * Flag test as cpython only files: M Lib/test/test_hashlib.py diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index c7c128e75568e..a515d3a346933 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -901,36 +901,18 @@ 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) + @support.cpython_only + def test_disallow_instantiation(self): + for algorithm, constructors in self.constructors_to_test.items(): + if algorithm.startswith(("sha3_", "shake", "blake")): + # _sha3 and _blake types can be instantiated + continue + # all other types have DISALLOW_INSTANTIATION + 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_hash_disallow_instanciation(self): From webhook-mailer at python.org Sat May 1 16:54:04 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 01 May 2021 20:54:04 -0000 Subject: [Python-checkins] Revert "bpo-43989: Temporarily disable warnings in ssltests (GH-25780)" (GH-25793) Message-ID: https://github.com/python/cpython/commit/1ae05fdf2d0a4cf12e355ad74c437cbfa89c9b93 commit: 1ae05fdf2d0a4cf12e355ad74c437cbfa89c9b93 branch: master author: Ethan Furman committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-01T13:53:57-07:00 summary: Revert "bpo-43989: Temporarily disable warnings in ssltests (GH-25780)" (GH-25793) Reverts python/cpython#25780 Automerge-Triggered-By: GH:tiran files: M Lib/test/ssltests.py diff --git a/Lib/test/ssltests.py b/Lib/test/ssltests.py index 292453a813dcd..5073ae12204b1 100644 --- a/Lib/test/ssltests.py +++ b/Lib/test/ssltests.py @@ -16,7 +16,7 @@ def run_regrtests(*extra_args): print(ssl.OPENSSL_VERSION) args = [ sys.executable, - # '-Werror', '-bb', # turn warnings into exceptions + '-Werror', '-bb', # turn warnings into exceptions '-m', 'test', ] if not extra_args: From webhook-mailer at python.org Sat May 1 16:54:43 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 20:54:43 -0000 Subject: [Python-checkins] Fix exceptions mentioned in os.setxattr() docs (GH-25742) Message-ID: https://github.com/python/cpython/commit/779232413a367cd3357482e675a5518de102a90e commit: 779232413a367cd3357482e675a5518de102a90e branch: master author: Shreyash Sharma committer: ericvsmith date: 2021-05-01T16:54:39-04:00 summary: Fix exceptions mentioned in os.setxattr() docs (GH-25742) files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index b4c2ca9d4f660..6f9f3219481c2 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -3478,9 +3478,9 @@ These functions are all available on Linux only. indirectly through the :class:`PathLike` interface). If it is a str, it is encoded with the :term:`filesystem encoding and error handler`. *flags* may be :data:`XATTR_REPLACE` or :data:`XATTR_CREATE`. If :data:`XATTR_REPLACE` is - given and the attribute does not exist, ``EEXISTS`` will be raised. + given and the attribute does not exist, ``ENODATA`` will be raised. If :data:`XATTR_CREATE` is given and the attribute already exists, the - attribute will not be created and ``ENODATA`` will be raised. + attribute will not be created and ``EEXISTS`` will be raised. This function can support :ref:`specifying a file descriptor ` and :ref:`not following symlinks `. From webhook-mailer at python.org Sat May 1 16:56:09 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 20:56:09 -0000 Subject: [Python-checkins] Fix exceptions mentioned in os.setxattr() docs (GH-25742) (GH-25794) Message-ID: https://github.com/python/cpython/commit/10a62bbecc38b1648fc64f17712c9f3f3ed48d9b commit: 10a62bbecc38b1648fc64f17712c9f3f3ed48d9b branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-01T16:56:05-04:00 summary: Fix exceptions mentioned in os.setxattr() docs (GH-25742) (GH-25794) (cherry picked from commit 779232413a367cd3357482e675a5518de102a90e) Co-authored-by: Shreyash Sharma Co-authored-by: Shreyash Sharma files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 0c6f0b86cd74f..1198c4afb8386 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -3250,9 +3250,9 @@ These functions are all available on Linux only. indirectly through the :class:`PathLike` interface). If it is a str, it is encoded with the filesystem encoding. *flags* may be :data:`XATTR_REPLACE` or :data:`XATTR_CREATE`. If :data:`XATTR_REPLACE` is - given and the attribute does not exist, ``EEXISTS`` will be raised. + given and the attribute does not exist, ``ENODATA`` will be raised. If :data:`XATTR_CREATE` is given and the attribute already exists, the - attribute will not be created and ``ENODATA`` will be raised. + attribute will not be created and ``EEXISTS`` will be raised. This function can support :ref:`specifying a file descriptor ` and :ref:`not following symlinks `. From webhook-mailer at python.org Sat May 1 16:56:57 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 20:56:57 -0000 Subject: [Python-checkins] Fix exceptions mentioned in os.setxattr() docs (GH-25742) (GH-25795) Message-ID: https://github.com/python/cpython/commit/ce081fbb41050ba772c0a752da7b4ec25565d7f1 commit: ce081fbb41050ba772c0a752da7b4ec25565d7f1 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-01T16:56:53-04:00 summary: Fix exceptions mentioned in os.setxattr() docs (GH-25742) (GH-25795) (cherry picked from commit 779232413a367cd3357482e675a5518de102a90e) Co-authored-by: Shreyash Sharma Co-authored-by: Shreyash Sharma files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 719ea5b588f49..d0a37a8bbdbf0 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -3237,9 +3237,9 @@ These functions are all available on Linux only. indirectly through the :class:`PathLike` interface). If it is a str, it is encoded with the filesystem encoding. *flags* may be :data:`XATTR_REPLACE` or :data:`XATTR_CREATE`. If :data:`XATTR_REPLACE` is - given and the attribute does not exist, ``EEXISTS`` will be raised. + given and the attribute does not exist, ``ENODATA`` will be raised. If :data:`XATTR_CREATE` is given and the attribute already exists, the - attribute will not be created and ``ENODATA`` will be raised. + attribute will not be created and ``EEXISTS`` will be raised. This function can support :ref:`specifying a file descriptor ` and :ref:`not following symlinks `. From webhook-mailer at python.org Sat May 1 18:02:38 2021 From: webhook-mailer at python.org (brandtbucher) Date: Sat, 01 May 2021 22:02:38 -0000 Subject: [Python-checkins] Fix broken name in build.yml (GH-25759) Message-ID: https://github.com/python/cpython/commit/29282b2825545e2823bde94290a80f7c0fd7068e commit: 29282b2825545e2823bde94290a80f7c0fd7068e branch: master author: Brandt Bucher committer: brandtbucher date: 2021-05-01T15:02:30-07:00 summary: Fix broken name in build.yml (GH-25759) files: M .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c8fe8269e860e1..41200bb957e47c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -170,7 +170,7 @@ jobs: run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" build_ubuntu_ssltests: - name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + name: 'Ubuntu SSL tests with OpenSSL' runs-on: ubuntu-20.04 needs: check_source if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' From webhook-mailer at python.org Sat May 1 19:51:19 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sat, 01 May 2021 23:51:19 -0000 Subject: [Python-checkins] Improve the dataclasses kw_only documentation. (GH-25799) Message-ID: https://github.com/python/cpython/commit/2f59a767bcf5bfd51cfe712b35f8eb9b3ea08e2f commit: 2f59a767bcf5bfd51cfe712b35f8eb9b3ea08e2f branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-01T19:51:12-04:00 summary: Improve the dataclasses kw_only documentation. (GH-25799) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index dbbc5d66c410b..3808eba1941d5 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -169,9 +169,13 @@ Module-level decorators, classes, and functions ``__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. + fields will be marked as keyword-only. If a field is marked as + keyword-only, then the only affect is that the :meth:`__init__` + parameter generated from a keyword-only field must be specified + with a keyword when :meth:`__init__` is called. There is no + effect on any other aspect of dataclasses. See the + :term:`parameter` 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. @@ -195,7 +199,7 @@ Module-level decorators, classes, and functions follows a field with a default value. This is true either when this occurs in a single class, or as a result of class inheritance. -.. function:: field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None) +.. function:: field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING): For common and simple use cases, no other functionality is required. There are, however, some dataclass features that @@ -234,10 +238,6 @@ Module-level decorators, classes, and functions - ``repr``: If true (the default), this field is included in the string returned by the generated :meth:`__repr__` method. - - ``compare``: If true (the default), this field is included in the - generated equality and comparison methods (:meth:`__eq__`, - :meth:`__gt__`, et al.). - - ``hash``: This can be a bool or ``None``. If true, this field is included in the generated :meth:`__hash__` method. If ``None`` (the default), use the value of ``compare``: this would normally be @@ -251,6 +251,10 @@ Module-level decorators, classes, and functions fields that contribute to the type's hash value. Even if a field is excluded from the hash, it will still be used for comparisons. + - ``compare``: If true (the default), this field is included in the + generated equality and comparison methods (:meth:`__eq__`, + :meth:`__gt__`, et al.). + - ``metadata``: This can be a mapping or None. None is treated as an empty dict. This value is wrapped in :func:`~types.MappingProxyType` to make it read-only, and exposed @@ -259,6 +263,10 @@ Module-level decorators, classes, and functions Multiple third-parties can each have their own key, to use as a namespace in the metadata. + - ``kw_only``: If true, this field will be marked as keyword-only. + This is used when the generated :meth:`__init__` method's + parameters are computed. + If the default value of a field is specified by a call to :func:`field()`, then the class attribute for this field will be replaced by the specified ``default`` value. If no ``default`` is @@ -532,15 +540,18 @@ The generated :meth:`__init__` method for ``C`` will look like:: 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:: +After the parameters needed for :meth:`__init__` are computed, any +keyword-only parameters are moved to come after regular +(non-keyword-only) fields. In this example, ``Base.y``, ``Base.w``, +and ``D.t`` are keyword-only fields, and ``Base.x`` and ``D.z`` are +regular fields:: @dataclass class Base: x: Any = 15.0 _: KW_ONLY y: int = 0 + w: int = 1 @dataclass class D(Base): @@ -549,9 +560,13 @@ keyword-only fields are put after regular fields. In this example, 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): + def __init__(self, x: Any = 15.0, z: int = 10, *, y: int = 0, w: int = 1, t: int = 0): + +Note that the parameters have been re-ordered from how they appear in +the list of fields: parameters derived from regular fields are +followed by parameters derived from keyword-only fields. -The relative ordering of keyword-only arguments is not changed from +The relative ordering of keyword-only parameters is not changed from the order they are in computed field :meth:`__init__` list. From webhook-mailer at python.org Sat May 1 21:46:09 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sun, 02 May 2021 01:46:09 -0000 Subject: [Python-checkins] Minor tweaks to dataclasses keyword-only fields documentation. (GH-25801) Message-ID: https://github.com/python/cpython/commit/318ca1764ca02692e19e5ea05078281b93c8106a commit: 318ca1764ca02692e19e5ea05078281b93c8106a branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-01T21:46:05-04:00 summary: Minor tweaks to dataclasses keyword-only fields documentation. (GH-25801) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 3808eba1941d5..87091ef819d89 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -537,11 +537,11 @@ 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__ --------------------------------------------------- +Re-ordering of keyword-only parameters in :meth:`__init__` +---------------------------------------------------------- After the parameters needed for :meth:`__init__` are computed, any -keyword-only parameters are moved to come after regular +keyword-only parameters are moved to come after all regular (non-keyword-only) fields. In this example, ``Base.y``, ``Base.w``, and ``D.t`` are keyword-only fields, and ``Base.x`` and ``D.z`` are regular fields:: @@ -566,8 +566,8 @@ Note that the parameters have been re-ordered from how they appear in the list of fields: parameters derived from regular fields are followed by parameters derived from keyword-only fields. -The relative ordering of keyword-only parameters is not changed from -the order they are in computed field :meth:`__init__` list. +The relative ordering of keyword-only parameters is maintained in the +re-ordered :meth:`__init__` parameter list. Default factory functions From webhook-mailer at python.org Sat May 1 22:31:13 2021 From: webhook-mailer at python.org (brandtbucher) Date: Sun, 02 May 2021 02:31:13 -0000 Subject: [Python-checkins] Fix broken name in build.yml (GH-25759) (GH-25797) Message-ID: https://github.com/python/cpython/commit/d8ec61f91b1ead0b7212a4e5fe59d4612ff0856c commit: d8ec61f91b1ead0b7212a4e5fe59d4612ff0856c branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: brandtbucher date: 2021-05-01T19:31:06-07:00 summary: Fix broken name in build.yml (GH-25759) (GH-25797) (cherry picked from commit 29282b2825545e2823bde94290a80f7c0fd7068e) files: M .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 90d0317fbfad0d..79d7efa7684bea 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -177,7 +177,7 @@ jobs: run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" build_ubuntu_ssltests: - name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + name: 'Ubuntu SSL tests with OpenSSL' runs-on: ubuntu-20.04 needs: check_source if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' From webhook-mailer at python.org Sat May 1 22:57:04 2021 From: webhook-mailer at python.org (brandtbucher) Date: Sun, 02 May 2021 02:57:04 -0000 Subject: [Python-checkins] Fix broken name in build.yml (GH-25759) (GH-25802) Message-ID: https://github.com/python/cpython/commit/ee0df3dee4fb965354150126a9a7f8efbcb40e27 commit: ee0df3dee4fb965354150126a9a7f8efbcb40e27 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: brandtbucher date: 2021-05-01T19:56:56-07:00 summary: Fix broken name in build.yml (GH-25759) (GH-25802) (cherry picked from commit 29282b2825545e2823bde94290a80f7c0fd7068e) files: M .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 84516136c076d9..a42338edd59f50 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -184,7 +184,7 @@ jobs: run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu" build_ubuntu_ssltests: - name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}' + name: 'Ubuntu SSL tests with OpenSSL' runs-on: ubuntu-20.04 needs: check_source if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true' From webhook-mailer at python.org Sun May 2 00:19:36 2021 From: webhook-mailer at python.org (larryhastings) Date: Sun, 02 May 2021 04:19:36 -0000 Subject: [Python-checkins] bpo-43987: Add "Annotations Best Practices" HOWTO doc. (#25746) Message-ID: https://github.com/python/cpython/commit/49b26fa517165f991c35a4afcbef1fcb26836bec commit: 49b26fa517165f991c35a4afcbef1fcb26836bec branch: master author: larryhastings committer: larryhastings date: 2021-05-01T21:19:24-07:00 summary: bpo-43987: Add "Annotations Best Practices" HOWTO doc. (#25746) Add "Annotations Best Practices" HOWTO doc. files: A Doc/howto/annotations.rst A Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst M Doc/glossary.rst M Doc/howto/index.rst M Doc/library/inspect.rst M Doc/reference/datamodel.rst M Doc/whatsnew/3.10.rst diff --git a/Doc/glossary.rst b/Doc/glossary.rst index 0661c8283290ce..29c68ed72c6d70 100644 --- a/Doc/glossary.rst +++ b/Doc/glossary.rst @@ -57,6 +57,8 @@ Glossary See :term:`variable annotation`, :term:`function annotation`, :pep:`484` and :pep:`526`, which describe this functionality. + Also see :ref:`annotations-howto` + for best practices on working with annotations. argument A value passed to a :term:`function` (or :term:`method`) when calling the @@ -455,6 +457,8 @@ Glossary See :term:`variable annotation` and :pep:`484`, which describe this functionality. + Also see :ref:`annotations-howto` + for best practices on working with annotations. __future__ A pseudo-module which programmers can use to enable new language features @@ -1211,6 +1215,8 @@ Glossary See :term:`function annotation`, :pep:`484` and :pep:`526`, which describe this functionality. + Also see :ref:`annotations-howto` + for best practices on working with annotations. virtual environment A cooperatively isolated runtime environment that allows Python users diff --git a/Doc/howto/annotations.rst b/Doc/howto/annotations.rst new file mode 100644 index 00000000000000..3e61103e99c9a6 --- /dev/null +++ b/Doc/howto/annotations.rst @@ -0,0 +1,226 @@ +.. _annotations-howto: + +************************** +Annotations Best Practices +************************** + +:author: Larry Hastings + +.. topic:: Abstract + + This document is designed to encapsulate the best practices + for working with annotations dicts. If you write Python code + that examines ``__annotations__`` on Python objects, we + encourage you to follow the guidelines described below. + + The document is organized into four sections: + best practices for accessing the annotations of an object + in Python versions 3.10 and newer, + best practices for accessing the annotations of an object + in Python versions 3.9 and older, + other best practices + for ``__annotations__`` that apply to any Python version, + and + quirks of ``__annotations__``. + + Note that this document is specifically about working with + ``__annotations__``, not uses *for* annotations. + If you're looking for information on how to use "type hints" + in your code, please see the :mod:`typing` module. + + +Accessing The Annotations Dict Of An Object In Python 3.10 And Newer +==================================================================== + + Python 3.10 adds a new function to the standard library: + :func:`inspect.get_annotations`. In Python versions 3.10 + and newer, calling this function is the best practice for + accessing the annotations dict of any object that supports + annotations. This function can also "un-stringize" + stringized annotations for you. + + If for some reason :func:`inspect.get_annotations` isn't + viable for your use case, you may access the + ``__annotations__`` data member manually. Best practice + for this changed in Python 3.10 as well: as of Python 3.10, + ``o.__annotations__`` is guaranteed to *always* work + on Python functions, classes, and modules. If you're + certain the object you're examining is one of these three + *specific* objects, you may simply use ``o.__annotations__`` + to get at the object's annotations dict. + + However, other types of callables--for example, + callables created by :func:`functools.partial`--may + not have an ``__annotations__`` attribute defined. When + accessing the ``__annotations__`` of a possibly unknown + object, best practice in Python versions 3.10 and + newer is to call :func:`getattr` with three arguments, + for example ``getattr(o, '__annotations__', None)``. + + +Accessing The Annotations Dict Of An Object In Python 3.9 And Older +=================================================================== + + In Python 3.9 and older, accessing the annotations dict + of an object is much more complicated than in newer versions. + The problem is a design flaw in these older versions of Python, + specifically to do with class annotations. + + Best practice for accessing the annotations dict of other + objects--functions, other callables, and modules--is the same + as best practice for 3.10, assuming you aren't calling + :func:`inspect.get_annotations`: you should use three-argument + :func:`getattr` to access the object's ``__annotations__`` + attribute. + + Unfortunately, this isn't best practice for classes. The problem + is that, since ``__annotations__`` is optional on classes, and + because classes can inherit attributes from their base classes, + accessing the ``__annotations__`` attribute of a class may + inadvertently return the annotations dict of a *base class.* + As an example:: + + class Base: + a: int = 3 + b: str = 'abc' + + class Derived(Base): + pass + + print(Derived.__annotations__) + + This will print the annotations dict from ``Base``, not + ``Derived``. + + Your code will have to have a separate code path if the object + you're examining is a class (``isinstance(o, type)``). + In that case, best practice relies on an implementation detail + of Python 3.9 and before: if a class has annotations defined, + they are stored in the class's ``__dict__`` dictionary. Since + the class may or may not have annotations defined, best practice + is to call the ``get`` method on the class dict. + + To put it all together, here is some sample code that safely + accesses the ``__annotations__`` attribute on an arbitrary + object in Python 3.9 and before:: + + if isinstance(o, type): + ann = o.__dict__.get('__annotations__', None) + else: + ann = getattr(o, '__annotations__', None) + + After running this code, ``ann`` should be either a + dictionary or ``None``. You're encouraged to double-check + the type of ``ann`` using :func:`isinstance` before further + examination. + + Note that some exotic or malformed type objects may not have + a ``__dict__`` attribute, so for extra safety you may also wish + to use :func:`getattr` to access ``__dict__``. + + +Manually Un-Stringizing Stringized Annotations +============================================== + + In situations where some annotations may be "stringized", + and you wish to evaluate those strings to produce the + Python values they represent, it really is best to + call :func:`inspect.get_annotations` to do this work + for you. + + If you're using Python 3.9 or older, or if for some reason + you can't use :func:`inspect.get_annotations`, you'll need + to duplicate its logic. You're encouraged to examine the + implementation of :func:`inspect.get_annotations` in the + current Python version and follow a similar approach. + + In a nutshell, if you wish to evaluate a stringized annotation + on an arbitrary object ``o``: + + * If ``o`` is a module, use ``o.__dict__`` as the + ``globals`` when calling :func:`eval`. + * If ``o`` is a class, use ``sys.modules[o.__module__].__dict__`` + as the ``globals``, and ``dict(vars(o))`` as the ``locals``, + when calling :func:`eval`. + * If ``o`` is a wrapped callable using :func:`functools.update_wrapper`, + :func:`functools.wraps`, or :func:`functools.partial`, iteratively + unwrap it by accessing either ``o.__wrapped__`` or ``o.func`` as + appropriate, until you have found the root unwrapped function. + * If ``o`` is a callable (but not a class), use + ``o.__globals__`` as the globals when calling :func:`eval`. + + However, not all string values used as annotations can + be successfully turned into Python values by :func:`eval`. + String values could theoretically contain any valid string, + and in practice there are valid use cases for type hints that + require annotating with string values that specifically + *can't* be evaluated. For example: + + * :pep:`604` union types using `|`, before support for this + was added to Python 3.10. + * Definitions that aren't needed at runtime, only imported + when :const:`typing.TYPE_CHECKING` is true. + + If :func:`eval` attempts to evaluate such values, it will + fail and raise an exception. So, when designing a library + API that works with annotations, it's recommended to only + attempt to evaluate string values when explicitly requested + to by the caller. + + +Best Practices For ``__annotations__`` In Any Python Version +============================================================ + + * You should avoid assigning to the ``__annotations__`` member + of objects directly. Let Python manage setting ``__annotations__``. + + * If you do assign directly to the ``__annotations__`` member + of an object, you should always set it to a ``dict`` object. + + * If you directly access the ``__annotations__`` member + of an object, you should ensure that it's a + dictionary before attempting to examine its contents. + + * You should avoid modifying ``__annotations__`` dicts. + + * You should avoid deleting the ``__annotations__`` attribute + of an object. + + +``__annotations__`` Quirks +========================== + + In all versions of Python 3, function + objects lazy-create an annotations dict if no annotations + are defined on that object. You can delete the ``__annotations__`` + attribute using ``del fn.__annotations__``, but if you then + access ``fn.__annotations__`` the object will create a new empty dict + that it will store and return as its annotations. Deleting the + annotations on a function before it has lazily created its annotations + dict will throw an ``AttributeError``; using ``del fn.__annotations__`` + twice in a row is guaranteed to always throw an ``AttributeError``. + + Everything in the above paragraph also applies to class and module + objects in Python 3.10 and newer. + + In all versions of Python 3, you can set ``__annotations__`` + on a function object to ``None``. However, subsequently + accessing the annotations on that object using ``fn.__annotations__`` + will lazy-create an empty dictionary as per the first paragraph of + this section. This is *not* true of modules and classes, in any Python + version; those objects permit setting ``__annotations__`` to any + Python value, and will retain whatever value is set. + + If Python stringizes your annotations for you + (using ``from __future__ import annotations``), and you + specify a string as an annotation, the string will + itself be quoted. In effect the annotation is quoted + *twice.* For example:: + + from __future__ import annotations + def foo(a: "str"): pass + + print(foo.__annotations__) + + This prints ``{'a': "'str'"}``. This shouldn't really be considered + a "quirk"; it's mentioned here simply because it might be surprising. diff --git a/Doc/howto/index.rst b/Doc/howto/index.rst index e0dacd224d82ef..eae8f143ee206f 100644 --- a/Doc/howto/index.rst +++ b/Doc/howto/index.rst @@ -30,4 +30,5 @@ Currently, the HOWTOs are: ipaddress.rst clinic.rst instrumentation.rst + annotations.rst diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 56c2f76708d43b..b9e8be1234e259 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -1149,6 +1149,9 @@ Classes and functions with the result of calling :func:`eval()` on those values: * If eval_str is true, :func:`eval()` is called on values of type ``str``. + (Note that ``get_annotations`` doesn't catch exceptions; if :func:`eval()` + raises an exception, it will unwind the stack past the ``get_annotations`` + call.) * 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 @@ -1164,6 +1167,10 @@ Classes and functions although if ``obj`` is a wrapped function (using ``functools.update_wrapper()``) it is first unwrapped. + Calling ``get_annotations`` is best practice for accessing the + annotations dict of any object. See :ref:`annotations-howto` for + more information on annotations best practices. + .. versionadded:: 3.10 diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 3a812eb21471a0..eefdc3d5100b56 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -553,7 +553,10 @@ Callable types | | the dict are the parameter | | | | names, and ``'return'`` for | | | | the return annotation, if | | - | | provided. | | + | | provided. For more | | + | | information on working with | | + | | this attribute, see | | + | | :ref:`annotations-howto`. | | +-------------------------+-------------------------------+-----------+ | :attr:`__kwdefaults__` | A dict containing defaults | Writable | | | for keyword-only parameters. | | @@ -748,16 +751,29 @@ Modules single: __annotations__ (module attribute) pair: module; namespace - Predefined (writable) attributes: :attr:`__name__` is the module's name; - :attr:`__doc__` is the module's documentation string, or ``None`` if - unavailable; :attr:`__annotations__` (optional) is a dictionary containing - :term:`variable annotations ` collected during module - body execution; :attr:`__file__` is the pathname of the file from which the - module was loaded, if it was loaded from a file. The :attr:`__file__` - attribute may be missing for certain types of modules, such as C modules - that are statically linked into the interpreter; for extension modules - loaded dynamically from a shared library, it is the pathname of the shared - library file. + Predefined (writable) attributes: + + :attr:`__name__` + The module's name. + + :attr:`__doc__` + The module's documentation string, or ``None`` if + unavailable. + + :attr:`__file__` + The pathname of the file from which the + module was loaded, if it was loaded from a file. + The :attr:`__file__` + attribute may be missing for certain types of modules, such as C modules + that are statically linked into the interpreter. For extension modules + loaded dynamically from a shared library, it's the pathname of the shared + library file. + + :attr:`__annotations__` + A dictionary containing + :term:`variable annotations ` collected during + module body execution. For best practices on working + with :attr:`__annotations__`, please see :ref:`annotations-howto`. .. index:: single: __dict__ (module attribute) @@ -821,14 +837,30 @@ Custom classes single: __doc__ (class attribute) single: __annotations__ (class attribute) - Special attributes: :attr:`~definition.__name__` is the class name; :attr:`__module__` is - the module name in which the class was defined; :attr:`~object.__dict__` is the - dictionary containing the class's namespace; :attr:`~class.__bases__` is a - tuple containing the base classes, in the order of their occurrence in the - base class list; :attr:`__doc__` is the class's documentation string, - or ``None`` if undefined; :attr:`__annotations__` (optional) is a dictionary - containing :term:`variable annotations ` collected during - class body execution. + Special attributes: + + :attr:`~definition.__name__` + The class name. + + :attr:`__module__` + The name of the module in which the class was defined. + + :attr:`~object.__dict__` + The dictionary containing the class's namespace. + + :attr:`~class.__bases__` + A tuple containing the base classes, in the order of + their occurrence in the base class list. + + :attr:`__doc__` + The class's documentation string, or ``None`` if undefined. + + :attr:`__annotations__` + A dictionary containing + :term:`variable annotations ` + collected during class body execution. For best practices on + working with :attr:`__annotations__`, please see + :ref:`annotations-howto`. Class instances .. index:: diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index a59e2e511154b2..679522bdfe71e8 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -807,7 +807,9 @@ Other Language Changes * Class and module objects now lazy-create empty annotations dicts on demand. The annotations dicts are stored in the object?s ``__dict__`` for - backwards compatibility. + backwards compatibility. This improves the best practices for working + with ``__annotations__``; for more information, please see + :ref:`annotations-howto`. (Contributed by Larry Hastings in :issue:`43901`.) New Modules @@ -996,7 +998,9 @@ defined on an object. It works around the quirks of accessing the annotations on various types of objects, and makes very few assumptions about the object it examines. :func:`inspect.get_annotations` can also correctly un-stringize stringized annotations. :func:`inspect.get_annotations` is now considered -best practice for accessing the annotations dict defined on any Python object. +best practice for accessing the annotations dict defined on any Python object; +for more information on best practices for working with annotations, please see +:ref:`annotations-howto`. Relatedly, :func:`inspect.signature`, :func:`inspect.Signature.from_callable`, and ``inspect.Signature.from_function`` now call :func:`inspect.get_annotations` to retrieve annotations. This means diff --git a/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst b/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst new file mode 100644 index 00000000000000..158259e3ab378e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst @@ -0,0 +1 @@ +Add "Annotations Best Practices" document as a new HOWTO. From webhook-mailer at python.org Sun May 2 01:01:19 2021 From: webhook-mailer at python.org (methane) Date: Sun, 02 May 2021 05:01:19 -0000 Subject: [Python-checkins] bpo-43733: netrc try to use UTF-8 before using locale encoding. (GH-25781) Message-ID: https://github.com/python/cpython/commit/fd0bc7e7f4f2c7de98a1ebc7ad1ef65b8f8f7ad6 commit: fd0bc7e7f4f2c7de98a1ebc7ad1ef65b8f8f7ad6 branch: master author: Inada Naoki committer: methane date: 2021-05-02T14:01:02+09:00 summary: bpo-43733: netrc try to use UTF-8 before using locale encoding. (GH-25781) files: A Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst M Doc/library/netrc.rst M Lib/netrc.py diff --git a/Doc/library/netrc.rst b/Doc/library/netrc.rst index 3d29ac49b9191..4bf7de67c1d03 100644 --- a/Doc/library/netrc.rst +++ b/Doc/library/netrc.rst @@ -38,6 +38,10 @@ the Unix :program:`ftp` program and other FTP clients. :func:`os.path.expanduser` is used to find the location of the :file:`.netrc` file when *file* is not passed as argument. + .. versionchanged:: 3.10 + :class:`netrc` try UTF-8 encoding before using locale specific + encoding. + .. exception:: NetrcParseError diff --git a/Lib/netrc.py b/Lib/netrc.py index f0ae48cfed9e6..734d94c8a6285 100644 --- a/Lib/netrc.py +++ b/Lib/netrc.py @@ -26,8 +26,12 @@ def __init__(self, file=None): file = os.path.join(os.path.expanduser("~"), ".netrc") self.hosts = {} self.macros = {} - with open(file) as fp: - self._parse(file, fp, default_netrc) + try: + with open(file, encoding="utf-8") as fp: + self._parse(file, fp, default_netrc) + except UnicodeDecodeError: + with open(file, encoding="locale") as fp: + self._parse(file, fp, default_netrc) def _parse(self, file, fp, default_netrc): lexer = shlex.shlex(fp) diff --git a/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst b/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst new file mode 100644 index 0000000000000..5ecd928b11834 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst @@ -0,0 +1,2 @@ +Change :class:`netrc.netrc` to use UTF-8 encoding before using locale +encoding. From webhook-mailer at python.org Sun May 2 03:47:49 2021 From: webhook-mailer at python.org (tiran) Date: Sun, 02 May 2021 07:47:49 -0000 Subject: [Python-checkins] bpo-43908: Mark ssl, hash, and hmac types as immutable (GH-25792) Message-ID: https://github.com/python/cpython/commit/91554e4c5ca3c762998296522f854a7166ba84f0 commit: 91554e4c5ca3c762998296522f854a7166ba84f0 branch: master author: Christian Heimes committer: tiran date: 2021-05-02T09:47:45+02:00 summary: bpo-43908: Mark ssl, hash, and hmac types as immutable (GH-25792) Signed-off-by: Christian Heimes files: M Lib/test/test_hashlib.py M Lib/test/test_hmac.py M Lib/test/test_ssl.py M Modules/_blake2/blake2b_impl.c M Modules/_blake2/blake2s_impl.c M Modules/_hashopenssl.c M Modules/_sha3/sha3module.c M Modules/_ssl.c M Modules/_ssl/cert.c 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 a515d3a3469330..ad2ed69e24b2c4 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -926,6 +926,15 @@ def test_hash_disallow_instanciation(self): ): HASHXOF() + def test_readonly_types(self): + for algorithm, constructors in self.constructors_to_test.items(): + # all other types have DISALLOW_INSTANTIATION + for constructor in constructors: + hash_type = type(constructor()) + with self.subTest(hash_type=hash_type): + with self.assertRaisesRegex(TypeError, "immutable type"): + hash_type.value = False + class KDFTests(unittest.TestCase): diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index 22d74e9a1138a1..964acd0361e342 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -444,6 +444,9 @@ def test_internal_types(self): ): C_HMAC() + with self.assertRaisesRegex(TypeError, "immutable type"): + C_HMAC.value = None + @unittest.skipUnless(sha256_module is not None, 'need _sha256') def test_with_sha256_module(self): h = hmac.HMAC(b"key", b"hash this!", digestmod=sha256_module.sha256) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index f2b26c4b1405ef..acb64f15fa0d39 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -345,6 +345,25 @@ def test_constants(self): ssl.OP_NO_TLSv1_2 self.assertEqual(ssl.PROTOCOL_TLS, ssl.PROTOCOL_SSLv23) + def test_ssl_types(self): + ssl_types = [ + _ssl._SSLContext, + _ssl._SSLSocket, + _ssl.MemoryBIO, + _ssl.Certificate, + _ssl.SSLSession, + _ssl.SSLError, + ] + for ssl_type in ssl_types: + with self.subTest(ssl_type=ssl_type): + with self.assertRaisesRegex(TypeError, "immutable type"): + ssl_type.value = None + with self.assertRaisesRegex( + TypeError, + "cannot create '_ssl.Certificate' instances" + ): + _ssl.Certificate() + def test_private_init(self): with self.assertRaisesRegex(TypeError, "public constructor"): with socket.socket() as s: diff --git a/Modules/_blake2/blake2b_impl.c b/Modules/_blake2/blake2b_impl.c index 5d108ed008a8a1..8b0d60d02ac7c8 100644 --- a/Modules/_blake2/blake2b_impl.c +++ b/Modules/_blake2/blake2b_impl.c @@ -409,6 +409,6 @@ static PyType_Slot blake2b_type_slots[] = { PyType_Spec blake2b_type_spec = { .name = "_blake2.blake2b", .basicsize = sizeof(BLAKE2bObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, .slots = blake2b_type_slots }; diff --git a/Modules/_blake2/blake2s_impl.c b/Modules/_blake2/blake2s_impl.c index 85c2d4edad7eee..7ab3917aa1a655 100644 --- a/Modules/_blake2/blake2s_impl.c +++ b/Modules/_blake2/blake2s_impl.c @@ -408,6 +408,6 @@ static PyType_Slot blake2s_type_slots[] = { PyType_Spec blake2s_type_spec = { .name = "_blake2.blake2s", .basicsize = sizeof(BLAKE2sObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, .slots = blake2s_type_slots }; diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index de9bdd4f3062d5..b2c67759e95ea3 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -588,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_DISALLOW_INSTANTIATION, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, EVPtype_slots }; @@ -737,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_DISALLOW_INSTANTIATION, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, EVPXOFtype_slots }; @@ -1729,7 +1729,7 @@ static PyType_Slot HMACtype_slots[] = { PyType_Spec HMACtype_spec = { "_hashlib.HMAC", /* name */ sizeof(HMACobject), /* basicsize */ - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = HMACtype_slots, }; diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index 27f69385cc3eb0..aba7f6d4b45c22 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -525,7 +525,7 @@ static PyGetSetDef SHA3_getseters[] = { static PyType_Spec type_spec_obj = { \ .name = "_sha3." type_name, \ .basicsize = sizeof(SHA3object), \ - .flags = Py_TPFLAGS_DEFAULT, \ + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, \ .slots = type_slots \ } diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 91639277a83027..5f03214ea3eedc 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -437,7 +437,7 @@ static PyType_Spec sslerror_type_spec = { "ssl.SSLError", sizeof(PyOSErrorObject), 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_IMMUTABLETYPE, sslerror_type_slots }; @@ -2906,7 +2906,7 @@ static PyType_Spec PySSLSocket_spec = { "_ssl._SSLSocket", sizeof(PySSLSocket), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, PySSLSocket_slots, }; @@ -4644,7 +4644,7 @@ static PyType_Spec PySSLContext_spec = { "_ssl._SSLContext", sizeof(PySSLContext), 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE, PySSLContext_slots, }; @@ -4850,7 +4850,7 @@ static PyType_Spec PySSLMemoryBIO_spec = { "_ssl.MemoryBIO", sizeof(PySSLMemoryBIO), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE, PySSLMemoryBIO_slots, }; @@ -5025,7 +5025,7 @@ static PyType_Spec PySSLSession_spec = { "_ssl.SSLSession", sizeof(PySSLSession), 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE, PySSLSession_slots, }; diff --git a/Modules/_ssl/cert.c b/Modules/_ssl/cert.c index d2c26800881155..bda66dc4d94ae6 100644 --- a/Modules/_ssl/cert.c +++ b/Modules/_ssl/cert.c @@ -240,6 +240,6 @@ static PyType_Spec PySSLCertificate_spec = { "_ssl.Certificate", sizeof(PySSLCertificate), 0, - Py_TPFLAGS_DEFAULT, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, PySSLCertificate_slots, }; diff --git a/Modules/md5module.c b/Modules/md5module.c index 2ae94a456fdb35..9067c27a1181ea 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 | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = md5_type_slots }; diff --git a/Modules/sha1module.c b/Modules/sha1module.c index 9ac46c58a7f348..1d4bde2d3b67bb 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 | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = sha1_type_slots }; diff --git a/Modules/sha256module.c b/Modules/sha256module.c index ccb1862a99f198..1edb9dc0500298 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 | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = sha256_types_slots }; static PyType_Spec sha256_type_spec = { .name = "_sha256.sha256", .basicsize = sizeof(SHAobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = sha256_types_slots }; diff --git a/Modules/sha512module.c b/Modules/sha512module.c index 5e8572caf55184..2bae0ce78774c1 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 | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .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 | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE, .slots = sha512_sha512_type_slots }; From webhook-mailer at python.org Sun May 2 04:48:55 2021 From: webhook-mailer at python.org (ned-deily) Date: Sun, 02 May 2021 08:48:55 -0000 Subject: [Python-checkins] bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25804) Message-ID: https://github.com/python/cpython/commit/0cb33da1cc9cebb9b2d67d446feb1cfd36fe7f55 commit: 0cb33da1cc9cebb9b2d67d446feb1cfd36fe7f55 branch: master author: Ned Deily committer: ned-deily date: 2021-05-02T04:48:29-04:00 summary: bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25804) This allows reliably forcing macOS universal2 framework builds to run under Rosetta 2 Intel-64 emulation on Apple Silicon Macs if needed for testing or when universal2 wheels are not yet available. files: A Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst M Mac/Makefile.in M Mac/README.rst M Makefile.pre.in M configure M configure.ac diff --git a/Mac/Makefile.in b/Mac/Makefile.in index 0b32673323a0dc..f9691288414538 100644 --- a/Mac/Makefile.in +++ b/Mac/Makefile.in @@ -20,6 +20,7 @@ FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@ PYTHONFRAMEWORK=@PYTHONFRAMEWORK@ PYTHONFRAMEWORKIDENTIFIER=@PYTHONFRAMEWORKIDENTIFIER@ LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ CC=@CC@ MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ export MACOSX_DEPLOYMENT_TARGET @@ -92,6 +93,16 @@ installunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python3-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ @@ -142,6 +153,16 @@ altinstallunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python$(VERSION)-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ diff --git a/Mac/README.rst b/Mac/README.rst index 29093e9ec193ae..35bbfded7f175f 100644 --- a/Mac/README.rst +++ b/Mac/README.rst @@ -162,6 +162,9 @@ following combinations of SDKs and universal-archs flavors are available: The makefile for a framework build will also install ``python3.x-32`` binaries when the universal architecture includes at least one 32-bit architecture (that is, for all flavors but ``64-bit`` and ``intel-64``). +It will also install ``python3.x-intel64`` binaries in the ``universal2`` +case to allow easy execution with the Rosetta 2 Intel emulator on Apple +Silicon Macs. Running a specific architecture ............................... @@ -181,6 +184,9 @@ subprocesses also run in 32-bit-mode if the main interpreter does, use a ``python3.x-32`` binary and use the value of ``sys.executable`` as the ``subprocess`` ``Popen`` executable value. +Likewise, use ``python3.x-intel64`` to force execution in ``x86_64`` mode +with ``universal2`` binaries. + Building and using a framework-based Python on macOS ==================================================== diff --git a/Makefile.pre.in b/Makefile.pre.in index 72ccbcf7c2a091..0836655e15adb4 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -189,6 +189,9 @@ STRIPFLAG=-s # Flags to lipo to produce a 32-bit-only universal executable LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +# Flags to lipo to produce an intel-64-only universal executable +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ + # Options to enable prebinding (for fast startup prior to Mac OS X 10.3) OTHER_LIBTOOL_OPT=@OTHER_LIBTOOL_OPT@ @@ -1344,6 +1347,12 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ -output $(DESTDIR)$(BINDIR)/python$(VERSION)-32$(EXE) \ $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)python$(VERSION)-intel64$(EXE); \ + lipo $(LIPO_INTEL64_FLAGS) \ + -output $(DESTDIR)$(BINDIR)/python$(VERSION)-intel64$(EXE) \ + $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ + fi bininstall: altbininstall if test ! -d $(DESTDIR)$(LIBPC); then \ @@ -1379,6 +1388,10 @@ bininstall: altbininstall rm -f $(DESTDIR)$(BINDIR)/python3-32$(EXE); \ (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-32$(EXE) python3-32$(EXE)) \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)/python3-intel64$(EXE); \ + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-intel64$(EXE) python3-intel64$(EXE)) \ + fi # Install the versioned manual page altmaninstall: diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst new file mode 100644 index 00000000000000..f9f11c8ae6a793 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst @@ -0,0 +1,4 @@ +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. diff --git a/configure b/configure index 4dc0eabf24c03e..86591e2ed2cf82 100755 --- a/configure +++ b/configure @@ -752,6 +752,7 @@ PYTHONFRAMEWORKPREFIX PYTHONFRAMEWORKDIR PYTHONFRAMEWORKIDENTIFIER PYTHONFRAMEWORK +LIPO_INTEL64_FLAGS LIPO_32BIT_FLAGS ARCH_RUN_32BIT UNIVERSALSDK @@ -1519,11 +1520,12 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-universal-archs=ARCH - specify the kind of universal binary that should be - created. this option is only valid when + specify the kind of macOS universal binary that + should be created. This option is only valid when --enable-universalsdk is set; options are: - ("universal2", "32-bit", "64-bit", "3-way", "intel", - "intel-32", "intel-64", or "all") see Mac/README.rst + ("universal2", "intel-64", "intel-32", "intel", + "32-bit", "64-bit", "3-way", or "all") see + Mac/README.rst --with-framework-name=FRAMEWORK specify the name for the python framework on macOS only valid when --enable-framework is set. see @@ -3139,6 +3141,7 @@ then fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 $as_echo_n "checking for --with-universal-archs... " >&6; } @@ -7522,6 +7525,7 @@ $as_echo_n "checking which compiler should be used... " >&6; } $as_echo "$CC" >&6; } fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -7543,8 +7547,9 @@ $as_echo "$CC" >&6; } universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" diff --git a/configure.ac b/configure.ac index 221996a1de52f0..0ea9ecf6d6a498 100644 --- a/configure.ac +++ b/configure.ac @@ -220,12 +220,14 @@ then fi AC_SUBST(LIPO_32BIT_FLAGS) +AC_SUBST(LIPO_INTEL64_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, AS_HELP_STRING([--with-universal-archs=ARCH], - [specify the kind of universal binary that should be created. this option is - only valid when --enable-universalsdk is set; options are: - ("universal2", "32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all") + [specify the kind of macOS universal binary that should be created. + This option is only valid when --enable-universalsdk is set; options are: + ("universal2", "intel-64", "intel-32", "intel", "32-bit", + "64-bit", "3-way", or "all") see Mac/README.rst]), [ UNIVERSAL_ARCHS="$withval" @@ -1874,6 +1876,7 @@ yes) AC_MSG_RESULT($CC) fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -1895,8 +1898,9 @@ yes) universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" From webhook-mailer at python.org Sun May 2 05:10:25 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 02 May 2021 09:10:25 -0000 Subject: [Python-checkins] [3.9] bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25804) (GH-25807) Message-ID: https://github.com/python/cpython/commit/de0e3f8c16c13221dbca66b9496a302fd5749c37 commit: de0e3f8c16c13221dbca66b9496a302fd5749c37 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-05-02T02:10:21-07:00 summary: [3.9] bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25804) (GH-25807) This allows reliably forcing macOS universal2 framework builds to run under Rosetta 2 Intel-64 emulation on Apple Silicon Macs if needed for testing or when universal2 wheels are not yet available. (cherry picked from commit 0cb33da1cc9cebb9b2d67d446feb1cfd36fe7f55) Co-authored-by: Ned Deily Automerge-Triggered-By: GH:ned-deily files: A Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst M Mac/Makefile.in M Mac/README.rst M Makefile.pre.in M configure M configure.ac diff --git a/Mac/Makefile.in b/Mac/Makefile.in index 0b32673323a0dc..f9691288414538 100644 --- a/Mac/Makefile.in +++ b/Mac/Makefile.in @@ -20,6 +20,7 @@ FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@ PYTHONFRAMEWORK=@PYTHONFRAMEWORK@ PYTHONFRAMEWORKIDENTIFIER=@PYTHONFRAMEWORKIDENTIFIER@ LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ CC=@CC@ MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ export MACOSX_DEPLOYMENT_TARGET @@ -92,6 +93,16 @@ installunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python3-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ @@ -142,6 +153,16 @@ altinstallunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python$(VERSION)-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ diff --git a/Mac/README.rst b/Mac/README.rst index f3638aa0019aaf..aa019dfe32e6f6 100644 --- a/Mac/README.rst +++ b/Mac/README.rst @@ -162,6 +162,9 @@ following combinations of SDKs and universal-archs flavors are available: The makefile for a framework build will also install ``python3.x-32`` binaries when the universal architecture includes at least one 32-bit architecture (that is, for all flavors but ``64-bit`` and ``intel-64``). +It will also install ``python3.x-intel64`` binaries in the ``universal2`` +case to allow easy execution with the Rosetta 2 Intel emulator on Apple +Silicon Macs. Running a specific architecture ............................... @@ -181,6 +184,9 @@ subprocesses also run in 32-bit-mode if the main interpreter does, use a ``python3.x-32`` binary and use the value of ``sys.executable`` as the ``subprocess`` ``Popen`` executable value. +Likewise, use ``python3.x-intel64`` to force execution in ``x86_64`` mode +with ``universal2`` binaries. + Building and using a framework-based Python on macOS ==================================================== diff --git a/Makefile.pre.in b/Makefile.pre.in index d088eb5768fc8a..0c3981c1323d24 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -187,6 +187,9 @@ STRIPFLAG=-s # Flags to lipo to produce a 32-bit-only universal executable LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +# Flags to lipo to produce an intel-64-only universal executable +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ + # Options to enable prebinding (for fast startup prior to Mac OS X 10.3) OTHER_LIBTOOL_OPT=@OTHER_LIBTOOL_OPT@ @@ -1334,6 +1337,12 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ -output $(DESTDIR)$(BINDIR)/python$(VERSION)-32$(EXE) \ $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)python$(VERSION)-intel64$(EXE); \ + lipo $(LIPO_INTEL64_FLAGS) \ + -output $(DESTDIR)$(BINDIR)/python$(VERSION)-intel64$(EXE) \ + $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ + fi bininstall: altbininstall if test ! -d $(DESTDIR)$(LIBPC); then \ @@ -1369,6 +1378,10 @@ bininstall: altbininstall rm -f $(DESTDIR)$(BINDIR)/python3-32$(EXE); \ (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-32$(EXE) python3-32$(EXE)) \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)/python3-intel64$(EXE); \ + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-intel64$(EXE) python3-intel64$(EXE)) \ + fi # Install the versioned manual page altmaninstall: diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst new file mode 100644 index 00000000000000..f9f11c8ae6a793 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst @@ -0,0 +1,4 @@ +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. diff --git a/configure b/configure index c7a7291feab9a8..8dcdbf19890053 100755 --- a/configure +++ b/configure @@ -747,6 +747,7 @@ PYTHONFRAMEWORKPREFIX PYTHONFRAMEWORKDIR PYTHONFRAMEWORKIDENTIFIER PYTHONFRAMEWORK +LIPO_INTEL64_FLAGS LIPO_32BIT_FLAGS ARCH_RUN_32BIT UNIVERSALSDK @@ -1507,11 +1508,12 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-universal-archs=ARCH - specify the kind of universal binary that should be - created. this option is only valid when + specify the kind of macOS universal binary that + should be created. This option is only valid when --enable-universalsdk is set; options are: - ("universal2", "32-bit", "64-bit", "3-way", "intel", - "intel-32", "intel-64", or "all") see Mac/README.rst + ("universal2", "intel-64", "intel-32", "intel", + "32-bit", "64-bit", "3-way", or "all") see + Mac/README.rst --with-framework-name=FRAMEWORK specify the name for the python framework on macOS only valid when --enable-framework is set. see @@ -3111,6 +3113,7 @@ then fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 $as_echo_n "checking for --with-universal-archs... " >&6; } @@ -7463,6 +7466,7 @@ $as_echo_n "checking which compiler should be used... " >&6; } $as_echo "$CC" >&6; } fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -7484,8 +7488,9 @@ $as_echo "$CC" >&6; } universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" diff --git a/configure.ac b/configure.ac index 45e0af4493f05e..b1e4c6ce19de8f 100644 --- a/configure.ac +++ b/configure.ac @@ -220,12 +220,14 @@ then fi AC_SUBST(LIPO_32BIT_FLAGS) +AC_SUBST(LIPO_INTEL64_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, AS_HELP_STRING([--with-universal-archs=ARCH], - [specify the kind of universal binary that should be created. this option is - only valid when --enable-universalsdk is set; options are: - ("universal2", "32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all") + [specify the kind of macOS universal binary that should be created. + This option is only valid when --enable-universalsdk is set; options are: + ("universal2", "intel-64", "intel-32", "intel", "32-bit", + "64-bit", "3-way", or "all") see Mac/README.rst]), [ UNIVERSAL_ARCHS="$withval" @@ -1877,6 +1879,7 @@ yes) AC_MSG_RESULT($CC) fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -1898,8 +1901,9 @@ yes) universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" From webhook-mailer at python.org Sun May 2 05:19:06 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 09:19:06 -0000 Subject: [Python-checkins] [3.8] bpo-41100: Support macOS 11 Big Sur and Apple Silicon Macs (#25806) Message-ID: https://github.com/python/cpython/commit/b29d0a5a7811418c0a1082ca188fd4850185e290 commit: b29d0a5a7811418c0a1082ca188fd4850185e290 branch: 3.8 author: Ned Deily committer: ambv date: 2021-05-02T11:18:58+02:00 summary: [3.8] bpo-41100: Support macOS 11 Big Sur and Apple Silicon Macs (#25806) * bpo-41100: Support macOS 11 and Apple Silicon on Python 3.8 This is a partial backport of bpo-41100 changes `e8b1c038b14b5fc8120aab62c9bf5fb840274cb6` and `96d906b144e6e6aa96c5ffebecbcc5d38034bbda` for Python 3.8. We introduce the ability to build Python from source for `arm64` on macOS, but we do not make a promise of support. This allows us to omit support for Universal2 binaries as well as weak-linking of symbols from the macOS SDK based on the deployment target, which are larger changes much more difficult to merge. This also includes a backport of subsequent bpo-42688 change `7e729978fa08a360cbf936dc215ba7dd25a06a08` to fix build errors with external `libffi`. * bpo-41116: Ensure system supplied libraries are found on macOS 11 (GH-23301) (GH-23455) On macOS system provided libraries are in a shared library cache and not at their usual location. This PR teaches distutils to search in the SDK, even if there was no "-sysroot" argument in the compiler flags. (cherry picked from commit 404a719b5127602c1a948f8e189ab61cd3f147d8) * bpo-42504: fix for MACOSX_DEPLOYMENT_TARGET=11 (GH-23556) macOS releases numbering has changed as of macOS 11 Big Sur. Previously, major releases were of the form 10.x, 10.x+1, 10.x+2, etc; as of Big Sur, they are now x, x+1, etc, so, for example, 10.15, 10.15.1, ..., 10.15.7, 11, 11.0.1, 11.1, ..., 12, 12.1, etc. Allow Python to build with single-digit deployment target values. Patch provided by FX Coudert. (cherry picked from commit 5291639e611dc3f55a34666036f2c3424648ba50) * bpo-42504: Ensure that get_config_var('MACOSX_DEPLOYMENT_TARGET') is a string (GH-24341) (GH-24410) * bpo-42504: Ensure that get_config_var('MACOSX_DEPLOYMENT_TARGET') is a string (cherry picked from commit 49926cf2bcc8b44d9b8f148d81979ada191dd9d5) Co-authored-by: Ronald Oussoren Co-authored-by: FX Coudert Co-authored-by: Max B?langer files: A Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst M Doc/whatsnew/3.8.rst M Lib/_osx_support.py M Lib/ctypes/macholib/dyld.py M Lib/ctypes/test/test_macholib.py M Lib/distutils/tests/test_build_ext.py M Lib/distutils/unixccompiler.py M Lib/sysconfig.py M Lib/test/test_bytes.py M Lib/test/test_platform.py M Lib/test/test_unicode.py M Mac/BuildScript/build-installer.py M Mac/BuildScript/resources/ReadMe.rtf M Mac/README.rst M Mac/Tools/pythonw.c M Misc/ACKS M Modules/_ctypes/callbacks.c M Modules/_ctypes/callproc.c M Modules/_ctypes/ctypes.h M Modules/_ctypes/malloc_closure.c M Modules/_decimal/libmpdec/mpdecimal.h M Modules/getpath.c M configure M configure.ac M pyconfig.h.in M setup.py diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index d4a9ee707f5a70..6c30ac183b67fd 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -2273,3 +2273,25 @@ IPv4 address sent from the remote server when setting up a passive data channel. We reuse the ftp server IP address instead. For unusual code requiring the old behavior, set a ``trust_server_pasv_ipv4_address`` attribute on your FTP instance to ``True``. (See :issue:`43285`) + +Notable changes in Python 3.8.10 +================================ + +macOS 11.0 (Big Sur) and Apple Silicon Mac support +-------------------------------------------------- + +As of 3.8.10, Python now supports building and running on macOS 11 +(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture). +A new universal build variant, ``universal2``, is now available to natively +support both ``ARM64`` and ``Intel 64`` in one set of executables. +Note that support for "weaklinking", building binaries targeted for newer +versions of macOS that will also run correctly on older versions by +testing at runtime for missing features, is not included in this backport +from Python 3.9; to support a range of macOS versions, continue to target +for and build on the oldest version in the range. + +(Originally contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`, +with fixes by FX Coudert and Eli Rykoff, and backported to 3.8 by Maxime B?langer +and Ned Deily) + + diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index e9efce7d7ed5bd..9b127c24915a55 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -52,7 +52,7 @@ def _find_executable(executable, path=None): return executable -def _read_output(commandstring): +def _read_output(commandstring, capture_stderr=False): """Output from successful command execution or None""" # Similar to os.popen(commandstring, "r").read(), # but without actually using os.popen because that @@ -67,7 +67,10 @@ def _read_output(commandstring): os.getpid(),), "w+b") with contextlib.closing(fp) as fp: - cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name) + if capture_stderr: + cmd = "%s >'%s' 2>&1" % (commandstring, fp.name) + else: + cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name) return fp.read().decode('utf-8').strip() if not os.system(cmd) else None @@ -110,6 +113,26 @@ def _get_system_version(): return _SYSTEM_VERSION +_SYSTEM_VERSION_TUPLE = None +def _get_system_version_tuple(): + """ + Return the macOS system version as a tuple + + The return value is safe to use to compare + two version numbers. + """ + global _SYSTEM_VERSION_TUPLE + if _SYSTEM_VERSION_TUPLE is None: + osx_version = _get_system_version() + if osx_version: + try: + _SYSTEM_VERSION_TUPLE = tuple(int(i) for i in osx_version.split('.')) + except ValueError: + _SYSTEM_VERSION_TUPLE = () + + return _SYSTEM_VERSION_TUPLE + + def _remove_original_values(_config_vars): """Remove original unmodified values for testing""" # This is needed for higher-level cross-platform tests of get_platform. @@ -125,6 +148,33 @@ def _save_modified_value(_config_vars, cv, newvalue): _config_vars[_INITPRE + cv] = oldvalue _config_vars[cv] = newvalue + +_cache_default_sysroot = None +def _default_sysroot(cc): + """ Returns the root of the default SDK for this system, or '/' """ + global _cache_default_sysroot + + if _cache_default_sysroot is not None: + return _cache_default_sysroot + + contents = _read_output('%s -c -E -v - "): + in_incdirs = True + elif line.startswith("End of search list"): + in_incdirs = False + elif in_incdirs: + line = line.strip() + if line == '/usr/include': + _cache_default_sysroot = '/' + elif line.endswith(".sdk/usr/include"): + _cache_default_sysroot = line[:-12] + if _cache_default_sysroot is None: + _cache_default_sysroot = '/' + + return _cache_default_sysroot + def _supports_universal_builds(): """Returns True if universal builds are supported on this system""" # As an approximation, we assume that if we are running on 10.4 or above, @@ -132,14 +182,18 @@ def _supports_universal_builds(): # builds, in particular -isysroot and -arch arguments to the compiler. This # is in support of allowing 10.4 universal builds to run on 10.3.x systems. - osx_version = _get_system_version() - if osx_version: - try: - osx_version = tuple(int(i) for i in osx_version.split('.')) - except ValueError: - osx_version = '' + osx_version = _get_system_version_tuple() return bool(osx_version >= (10, 4)) if osx_version else False +def _supports_arm64_builds(): + """Returns True if arm64 builds are supported on this system""" + # There are two sets of systems supporting macOS/arm64 builds: + # 1. macOS 11 and later, unconditionally + # 2. macOS 10.15 with Xcode 12.2 or later + # For now the second category is ignored. + osx_version = _get_system_version_tuple() + return osx_version >= (11, 0) if osx_version else False + def _find_appropriate_compiler(_config_vars): """Find appropriate C compiler for extension module builds""" @@ -331,6 +385,12 @@ def compiler_fixup(compiler_so, cc_args): except ValueError: break + elif not _supports_arm64_builds(): + # Look for "-arch arm64" and drop that + for idx in reversed(range(len(compiler_so))): + if compiler_so[idx] == '-arch' and compiler_so[idx+1] == "arm64": + del compiler_so[idx:idx+2] + if 'ARCHFLAGS' in os.environ and not stripArch: # User specified different -arch flags in the environ, # see also distutils.sysconfig @@ -481,6 +541,8 @@ def get_platform_osx(_config_vars, osname, release, machine): if len(archs) == 1: machine = archs[0] + elif archs == ('arm64', 'x86_64'): + machine = 'universal2' elif archs == ('i386', 'ppc'): machine = 'fat' elif archs == ('i386', 'x86_64'): diff --git a/Lib/ctypes/macholib/dyld.py b/Lib/ctypes/macholib/dyld.py index 9d86b058765a3e..1c3f8fd38b0665 100644 --- a/Lib/ctypes/macholib/dyld.py +++ b/Lib/ctypes/macholib/dyld.py @@ -6,6 +6,11 @@ from ctypes.macholib.framework import framework_info from ctypes.macholib.dylib import dylib_info from itertools import * +try: + from _ctypes import _dyld_shared_cache_contains_path +except ImportError: + def _dyld_shared_cache_contains_path(*args): + raise NotImplementedError __all__ = [ 'dyld_find', 'framework_find', @@ -122,8 +127,15 @@ def dyld_find(name, executable_path=None, env=None): dyld_executable_path_search(name, executable_path), dyld_default_search(name, env), ), env): + if os.path.isfile(path): return path + try: + if _dyld_shared_cache_contains_path(path): + return path + except NotImplementedError: + pass + raise ValueError("dylib %s could not be found" % (name,)) def framework_find(fn, executable_path=None, env=None): diff --git a/Lib/ctypes/test/test_macholib.py b/Lib/ctypes/test/test_macholib.py index 6b3526951acfab..a1bac26a7df058 100644 --- a/Lib/ctypes/test/test_macholib.py +++ b/Lib/ctypes/test/test_macholib.py @@ -45,19 +45,22 @@ def find_lib(name): class MachOTest(unittest.TestCase): @unittest.skipUnless(sys.platform == "darwin", 'OSX-specific test') def test_find(self): - - self.assertEqual(find_lib('pthread'), - '/usr/lib/libSystem.B.dylib') + # On Mac OS 11, system dylibs are only present in the shared cache, + # so symlinks like libpthread.dylib -> libSystem.B.dylib will not + # be resolved by dyld_find + self.assertIn(find_lib('pthread'), + ('/usr/lib/libSystem.B.dylib', '/usr/lib/libpthread.dylib')) result = find_lib('z') # Issue #21093: dyld default search path includes $HOME/lib and # /usr/local/lib before /usr/lib, which caused test failures if # a local copy of libz exists in one of them. Now ignore the head # of the path. - self.assertRegex(result, r".*/lib/libz\..*.*\.dylib") + self.assertRegex(result, r".*/lib/libz.*\.dylib") - self.assertEqual(find_lib('IOKit'), - '/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit') + self.assertIn(find_lib('IOKit'), + ('/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit', + '/System/Library/Frameworks/IOKit.framework/IOKit')) if __name__ == "__main__": unittest.main() diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 5e47e0773a9649..808c0dc2874cd5 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -492,12 +492,16 @@ def _try_compile_deployment_target(self, operator, target): # format the target value as defined in the Apple # Availability Macros. We can't use the macro names since # at least one value we test with will not exist yet. - if target[1] < 10: + if target[:2] < (10, 10): # for 10.1 through 10.9.x -> "10n0" target = '%02d%01d0' % target else: # for 10.10 and beyond -> "10nn00" - target = '%02d%02d00' % target + if len(target) >= 2: + target = '%02d%02d00' % target + else: + # 11 and later can have no minor version (11 instead of 11.0) + target = '%02d0000' % target deptarget_ext = Extension( 'deptarget', [deptarget_c], diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py index 4d7a6de740ab3a..f0792de74a1a48 100644 --- a/Lib/distutils/unixccompiler.py +++ b/Lib/distutils/unixccompiler.py @@ -290,7 +290,7 @@ def find_library_file(self, dirs, lib, debug=0): cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s*(\S+)', cflags) if m is None: - sysroot = '/' + sysroot = _osx_support._default_sysroot(sysconfig.get_config_var('CC')) else: sysroot = m.group(1) diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index 9caf158019a2ee..3f702d7ea5a86a 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -18,6 +18,11 @@ 'parse_config_h', ] +# Keys for get_config_var() that are never converted to Python integers. +_ALWAYS_STR = { + 'MACOSX_DEPLOYMENT_TARGET', +} + _INSTALL_SCHEMES = { 'posix_prefix': { 'stdlib': '{installed_base}/lib/python{py_version_short}', @@ -242,6 +247,9 @@ def _parse_makefile(filename, vars=None): notdone[n] = v else: try: + if n in _ALWAYS_STR: + raise ValueError + v = int(v) except ValueError: # insert literal `$' @@ -300,6 +308,8 @@ def _parse_makefile(filename, vars=None): notdone[name] = value else: try: + if name in _ALWAYS_STR: + raise ValueError value = int(value) except ValueError: done[name] = value.strip() @@ -461,6 +471,8 @@ def parse_config_h(fp, vars=None): if m: n, v = m.group(1, 2) try: + if n in _ALWAYS_STR: + raise ValueError v = int(v) except ValueError: pass diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index c2ec1201e8d6bc..e288c7eb71698c 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -963,6 +963,7 @@ def test_from_format(self): c_char_p) PyBytes_FromFormat = pythonapi.PyBytes_FromFormat + PyBytes_FromFormat.argtypes = (c_char_p,) PyBytes_FromFormat.restype = py_object # basic tests diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 3084663a8fadd5..4739e84c53819d 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -209,7 +209,10 @@ def test_mac_ver(self): # On Snow Leopard, sw_vers reports 10.6.0 as 10.6 if len_diff > 0: expect_list.extend(['0'] * len_diff) - self.assertEqual(result_list, expect_list) + # For compatibility with older binaries, macOS 11.x may report + # itself as '10.16' rather than '11.x.y'. + if result_list != ['10', '16']: + self.assertEqual(result_list, expect_list) # res[1] claims to contain # (version, dev_stage, non_release_version) @@ -217,7 +220,7 @@ def test_mac_ver(self): self.assertEqual(res[1], ('', '', '')) if sys.byteorder == 'little': - self.assertIn(res[2], ('i386', 'x86_64')) + self.assertIn(res[2], ('i386', 'x86_64', 'arm64')) else: self.assertEqual(res[2], 'PowerPC') diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 1d6aabdbbcc940..d97180d298ac20 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2454,11 +2454,13 @@ class CAPITest(unittest.TestCase): def test_from_format(self): support.import_module('ctypes') from ctypes import ( + c_char_p, pythonapi, py_object, sizeof, c_int, c_long, c_longlong, c_ssize_t, c_uint, c_ulong, c_ulonglong, c_size_t, c_void_p) name = "PyUnicode_FromFormat" _PyUnicode_FromFormat = getattr(pythonapi, name) + _PyUnicode_FromFormat.argtypes = (c_char_p,) _PyUnicode_FromFormat.restype = py_object def PyUnicode_FromFormat(format, *args): diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 8e1fdd8778aaed..b07def17476acd 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -116,7 +116,8 @@ def getFullVersion(): DEPSRC = os.path.join(WORKDIR, 'third-party') DEPSRC = os.path.expanduser('~/Universal/other-sources') -universal_opts_map = { '32-bit': ('i386', 'ppc',), +universal_opts_map = { 'universal2': ('arm64', 'x86_64'), + '32-bit': ('i386', 'ppc',), '64-bit': ('x86_64', 'ppc64',), 'intel': ('i386', 'x86_64'), 'intel-32': ('i386',), @@ -124,6 +125,7 @@ def getFullVersion(): '3-way': ('ppc', 'i386', 'x86_64'), 'all': ('i386', 'ppc', 'x86_64', 'ppc64',) } default_target_map = { + 'universal2': '10.9', '64-bit': '10.5', '3-way': '10.5', 'intel': '10.5', @@ -151,6 +153,9 @@ def getFullVersion(): def getDeptargetTuple(): return tuple([int(n) for n in DEPTARGET.split('.')[0:2]]) +def getBuildTuple(): + return tuple([int(n) for n in platform.mac_ver()[0].split('.')[0:2]]) + def getTargetCompilers(): target_cc_map = { '10.4': ('gcc-4.0', 'g++-4.0'), @@ -190,6 +195,34 @@ def getTargetCompilers(): def internalTk(): return getDeptargetTuple() >= (10, 6) +# Do we use 8.6.8 when building our own copy +# of Tcl/Tk or a modern version. +# We use the old version when buildin on +# old versions of macOS due to build issues. +def useOldTk(): + return getBuildTuple() < (10, 15) + + +def tweak_tcl_build(basedir, archList): + with open("Makefile", "r") as fp: + contents = fp.readlines() + + # For reasons I don't understand the tcl configure script + # decides that some stdlib symbols aren't present, before + # deciding that strtod is broken. + new_contents = [] + for line in contents: + if line.startswith("COMPAT_OBJS"): + # note: the space before strtod.o is intentional, + # the detection of a broken strtod results in + # "fixstrod.o" on this line. + for nm in ("strstr.o", "strtoul.o", " strtod.o"): + line = line.replace(nm, "") + new_contents.append(line) + + with open("Makefile", "w") as fp: + fp.writelines(new_contents) + # List of names of third party software built with this installer. # The names will be inserted into the rtf version of the License. THIRD_PARTY_LIBS = [] @@ -219,11 +252,26 @@ def library_recipes(): ]) if internalTk(): + if useOldTk(): + tcl_tk_ver='8.6.8' + tcl_checksum='81656d3367af032e0ae6157eff134f89' + + tk_checksum='5e0faecba458ee1386078fb228d008ba' + tk_patches = ['tk868_on_10_8_10_9.patch'] + + else: + tcl_tk_ver='8.6.11' + tcl_checksum='8a4c004f48984a03a7747e9ba06e4da4' + + tk_checksum='c7ee71a2d05bba78dfffd76528dc17c6' + tk_patches = [ ] + + result.extend([ dict( - name="Tcl 8.6.8", - url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tcl8.6.8-src.tar.gz", - checksum='81656d3367af032e0ae6157eff134f89', + name="Tcl %s"%(tcl_tk_ver,), + url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tcl%s-src.tar.gz"%(tcl_tk_ver,), + checksum=tcl_checksum, buildDir="unix", configure_pre=[ '--enable-shared', @@ -231,18 +279,17 @@ def library_recipes(): '--libdir=/Library/Frameworks/Python.framework/Versions/%s/lib'%(getVersion(),), ], useLDFlags=False, + buildrecipe=tweak_tcl_build, install='make TCL_LIBRARY=%(TCL_LIBRARY)s && make install TCL_LIBRARY=%(TCL_LIBRARY)s DESTDIR=%(DESTDIR)s'%{ "DESTDIR": shellQuote(os.path.join(WORKDIR, 'libraries')), "TCL_LIBRARY": shellQuote('/Library/Frameworks/Python.framework/Versions/%s/lib/tcl8.6'%(getVersion())), }, ), dict( - name="Tk 8.6.8", - url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tk8.6.8-src.tar.gz", - checksum='5e0faecba458ee1386078fb228d008ba', - patches=[ - "tk868_on_10_8_10_9.patch", - ], + name="Tk %s"%(tcl_tk_ver,), + url="ftp://ftp.tcl.tk/pub/tcl//tcl8_6/tk%s-src.tar.gz"%(tcl_tk_ver,), + checksum=tk_checksum, + patches=tk_patches, buildDir="unix", configure_pre=[ '--enable-aqua', @@ -537,8 +584,8 @@ def checkEnvironment(): Check that we're running on a supported system. """ - if sys.version_info[0:2] < (2, 5): - fatal("This script must be run with Python 2.5 (or later)") + if sys.version_info[0:2] < (2, 7): + fatal("This script must be run with Python 2.7 (or later)") if platform.system() != 'Darwin': fatal("This script should be run on a macOS 10.5 (or later) system") @@ -606,9 +653,6 @@ def checkEnvironment(): base_path = base_path + ':' + OLD_DEVELOPER_TOOLS os.environ['PATH'] = base_path print("Setting default PATH: %s"%(os.environ['PATH'])) - # Ensure we have access to sphinx-build. - # You may have to create a link in /usr/bin for it. - runCommand('sphinx-build --version') def parseOptions(args=None): """ @@ -801,6 +845,7 @@ def build_openssl_arch(archbase, arch): arch_opts = { "i386": ["darwin-i386-cc"], "x86_64": ["darwin64-x86_64-cc", "enable-ec_nistp_64_gcc_128"], + "arm64": ["darwin64-arm64-cc"], "ppc": ["darwin-ppc-cc"], "ppc64": ["darwin64-ppc-cc"], } @@ -1566,8 +1611,39 @@ def buildDMG(): if os.path.exists(outdir): shutil.rmtree(outdir) + # We used to use the deployment target as the last characters of the + # 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. + # 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(),DEPTARGET)) + 'python-%s-%s%s'%(getFullVersion(),os_name,build_system_version)) if INCLUDE_TIMESTAMP: imagepath = imagepath + '-%04d-%02d-%02d'%(time.localtime()[:3]) imagepath = imagepath + '.dmg' diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf index b070506abd448e..cc083042c3973a 100644 --- a/Mac/BuildScript/resources/ReadMe.rtf +++ b/Mac/BuildScript/resources/ReadMe.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2513 +{\rtf1\ansi\ansicpg1252\cocoartf2580 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fmodern\fcharset0 CourierNewPSMT; \f3\fswiss\fcharset0 Helvetica-Oblique;} {\colortbl;\red255\green255\blue255;} @@ -10,16 +10,12 @@ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0 -\f1\b \cf0 \ul \ulc0 macOS 11 Big Sur not fully supported\ +\f1\b \cf0 \ul \ulc0 macOS 11 (Big Sur) and Apple Silicon Mac support [new in 3.8.10]\ \f0\b0 \ulnone \ -Python 3.8.7 is not yet fully supported on macOS 11 Big Sur. It will install on macOS 11 Big Sur and will run on Apple Silicon Macs using Rosetta 2 translation. But a few features do not work correctly, most noticeably those involving searching for system libraries such as -\f2 ctypes.util.find_library() -\f0 and in -\f2 Distutils -\f0 . Python 3.9.1 or later provides full support for Big Sur and Apple Silicon Macs, including building natively on Apple Silicon Macs and support for +As of Python 3.8.10, Python is now supported on macOS 11 Big Sur. The binaries included in this installer install on macOS releases from macOS 10.9 through macOS 11 Big Sur and will run on Apple Silicon Macs using Rosetta 2 translation. Starting with Python 3.9.1, we provide a new \f2 universal2 -\f0 binaries\ +\f0 installer variant which includes binaries that run natively on both Apple Silicon Macs and Intel-based Macs. \ \ \f1\b \ul Certificate verification and OpenSSL\ diff --git a/Mac/README.rst b/Mac/README.rst index ec7d873df277d7..f63a424ad10d89 100644 --- a/Mac/README.rst +++ b/Mac/README.rst @@ -120,6 +120,8 @@ support ppc (Xcode 4 on 10.6 and later systems). The flavor can be specified using the configure option ``--with-universal-archs=VALUE``. The following values are available: + * ``universal2``: ``arm64``, ``x86_64`` + * ``intel``: ``i386``, ``x86_64`` * ``intel-32``: ``i386`` @@ -155,6 +157,8 @@ following combinations of SDKs and universal-archs flavors are available: * 10.15 and later SDKs support ``intel-64`` only + * 11.0 and later SDKs support ``universal2`` + The makefile for a framework build will also install ``python3.x-32`` binaries when the universal architecture includes at least one 32-bit architecture (that is, for all flavors but ``64-bit`` and ``intel-64``). diff --git a/Mac/Tools/pythonw.c b/Mac/Tools/pythonw.c index c8bd3ba8d68c15..78813e818e7dac 100644 --- a/Mac/Tools/pythonw.c +++ b/Mac/Tools/pythonw.c @@ -95,9 +95,6 @@ setup_spawnattr(posix_spawnattr_t* spawnattr) size_t count; cpu_type_t cpu_types[1]; short flags = 0; -#ifdef __LP64__ - int ch; -#endif if ((errno = posix_spawnattr_init(spawnattr)) != 0) { err(2, "posix_spawnattr_int"); @@ -119,10 +116,16 @@ setup_spawnattr(posix_spawnattr_t* spawnattr) #elif defined(__ppc__) cpu_types[0] = CPU_TYPE_POWERPC; + #elif defined(__i386__) cpu_types[0] = CPU_TYPE_X86; + +#elif defined(__arm64__) + cpu_types[0] = CPU_TYPE_ARM64; + #else # error "Unknown CPU" + #endif if (posix_spawnattr_setbinpref_np(spawnattr, count, @@ -220,7 +223,8 @@ main(int argc, char **argv) { /* We're weak-linking to posix-spawnv to ensure that * an executable build on 10.5 can work on 10.4. */ - if (posix_spawn != NULL) { + + if (&posix_spawn != NULL) { posix_spawnattr_t spawnattr = NULL; setup_spawnattr(&spawnattr); diff --git a/Misc/ACKS b/Misc/ACKS index b5e5788bfc0f4d..197616d7378f9a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -133,6 +133,7 @@ Micha? Bednarski Ian Beer Stefan Behnel Reimer Behrends +Maxime B?langer Ben Bell Thomas Bellman Alexander ?????? Belopolsky @@ -344,6 +345,7 @@ Mircea Cosbuc David Costanzo Scott Cotton Greg Couch +FX Coudert David Cournapeau Julien Courteau Steve Cousins @@ -377,6 +379,7 @@ Lars Damerow Evan Dandrea Eric Daniel Scott David Daniels +Lawrence D'Anna Ben Darnell Kushal Das Jonathan Dasteel @@ -1457,6 +1460,7 @@ Mark Russell Rusty Russell Nick Russo James Rutherford +Eli Rykoff Chris Ryland Bernt R?skar Brenna Constantina S. diff --git a/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst b/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst new file mode 100644 index 00000000000000..e087df98f75bff --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst @@ -0,0 +1,9 @@ +As of 3.8.10, Python now supports building and running on macOS 11 +(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture). +A new universal build variant, ``universal2``, is also available to natively +support both ``ARM64`` and ``Intel 64`` in one set of executables. +This backport from Python 3.9 does not include support for "weaklinking"; +to support a range of macOS versions, continue to target +for and build on the oldest version in the range; for 3.8.x, the +``universal2`` variant is only useful on macOS 11 or later. + diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 2a364d6c80e15a..b826ee3c0a49f7 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -1,6 +1,8 @@ #include "Python.h" #include "frameobject.h" +#include + #include #ifdef MS_WIN32 #include @@ -18,7 +20,7 @@ CThunkObject_dealloc(PyObject *myself) Py_XDECREF(self->callable); Py_XDECREF(self->restype); if (self->pcl_write) - ffi_closure_free(self->pcl_write); + Py_ffi_closure_free(self->pcl_write); PyObject_GC_Del(self); } @@ -361,8 +363,7 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable, assert(CThunk_CheckExact((PyObject *)p)); - p->pcl_write = ffi_closure_alloc(sizeof(ffi_closure), - &p->pcl_exec); + p->pcl_write = Py_ffi_closure_alloc(sizeof(ffi_closure), &p->pcl_exec); if (p->pcl_write == NULL) { PyErr_NoMemory(); goto error; @@ -408,13 +409,35 @@ CThunkObject *_ctypes_alloc_callback(PyObject *callable, "ffi_prep_cif failed with %d", result); goto error; } -#if defined(X86_DARWIN) || defined(POWERPC_DARWIN) - result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p); +#if HAVE_FFI_PREP_CLOSURE_LOC +# if USING_APPLE_OS_LIBFFI +# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *) +# else +# define HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME 1 +# endif + if (HAVE_FFI_PREP_CLOSURE_LOC_RUNTIME) { + result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn, + p, + p->pcl_exec); + } else +#endif + { +#if USING_APPLE_OS_LIBFFI && defined(__arm64__) + PyErr_Format(PyExc_NotImplementedError, "ffi_prep_closure_loc() is missing"); + goto error; #else - result = ffi_prep_closure_loc(p->pcl_write, &p->cif, closure_fcn, - p, - p->pcl_exec); +#ifdef MACOSX + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" #endif + result = ffi_prep_closure(p->pcl_write, &p->cif, closure_fcn, p); + +#ifdef MACOSX + #pragma clang diagnostic pop +#endif + +#endif + } if (result != FFI_OK) { PyErr_Format(PyExc_RuntimeError, "ffi_prep_closure failed with %d", result); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index de75918d49f370..e326cd84f8c49e 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -57,6 +57,8 @@ #include "Python.h" #include "structmember.h" +#include + #ifdef MS_WIN32 #include #include @@ -64,6 +66,10 @@ #include "ctypes_dlfcn.h" #endif +#ifdef __APPLE__ +#include +#endif + #ifdef MS_WIN32 #include #endif @@ -800,7 +806,8 @@ static int _call_function_pointer(int flags, ffi_type **atypes, ffi_type *restype, void *resmem, - int argcount) + int argcount, + int argtypecount) { PyThreadState *_save = NULL; /* For Py_BLOCK_THREADS and Py_UNBLOCK_THREADS */ PyObject *error_object = NULL; @@ -823,14 +830,70 @@ static int _call_function_pointer(int flags, if ((flags & FUNCFLAG_CDECL) == 0) cc = FFI_STDCALL; #endif - if (FFI_OK != ffi_prep_cif(&cif, - cc, - argcount, - restype, - atypes)) { - PyErr_SetString(PyExc_RuntimeError, - "ffi_prep_cif failed"); - return -1; + +# if USING_APPLE_OS_LIBFFI +# define HAVE_FFI_PREP_CIF_VAR_RUNTIME __builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *) +# elif HAVE_FFI_PREP_CIF_VAR +# define HAVE_FFI_PREP_CIF_VAR_RUNTIME true +# else +# define HAVE_FFI_PREP_CIF_VAR_RUNTIME false +# endif + + /* Even on Apple-arm64 the calling convention for variadic functions conincides + * with the standard calling convention in the case that the function called + * only with its fixed arguments. Thus, we do not need a special flag to be + * set on variadic functions. We treat a function as variadic if it is called + * with a nonzero number of variadic arguments */ + bool is_variadic = (argtypecount != 0 && argcount > argtypecount); + (void) is_variadic; + +#if defined(__APPLE__) && defined(__arm64__) + if (is_variadic) { + if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) { + } else { + PyErr_SetString(PyExc_NotImplementedError, "ffi_prep_cif_var() is missing"); + return -1; + } + } +#endif + +#if HAVE_FFI_PREP_CIF_VAR + if (is_variadic) { + if (HAVE_FFI_PREP_CIF_VAR_RUNTIME) { + if (FFI_OK != ffi_prep_cif_var(&cif, + cc, + argtypecount, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif_var failed"); + return -1; + } + } else { + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } + } + } else +#endif + + { + if (FFI_OK != ffi_prep_cif(&cif, + cc, + argcount, + restype, + atypes)) { + PyErr_SetString(PyExc_RuntimeError, + "ffi_prep_cif failed"); + return -1; + } } if (flags & (FUNCFLAG_USE_ERRNO | FUNCFLAG_USE_LASTERROR)) { @@ -1200,9 +1263,8 @@ PyObject *_ctypes_callproc(PPROC pProc, if (-1 == _call_function_pointer(flags, pProc, avalues, atypes, rtype, resbuf, - Py_SAFE_DOWNCAST(argcount, - Py_ssize_t, - int))) + Py_SAFE_DOWNCAST(argcount, Py_ssize_t, int), + Py_SAFE_DOWNCAST(argtype_count, Py_ssize_t, int))) goto cleanup; #ifdef WORDS_BIGENDIAN @@ -1386,6 +1448,42 @@ copy_com_pointer(PyObject *self, PyObject *args) } #else +#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH +static PyObject *py_dyld_shared_cache_contains_path(PyObject *self, PyObject *args) +{ + PyObject *name, *name2; + char *name_str; + + if (__builtin_available(macOS 11.0, iOS 14.0, tvOS 14.0, watchOS 7.0, *)) { + int r; + + if (!PyArg_ParseTuple(args, "O", &name)) + return NULL; + + if (name == Py_None) + Py_RETURN_FALSE; + + if (PyUnicode_FSConverter(name, &name2) == 0) + return NULL; + name_str = PyBytes_AS_STRING(name2); + + r = _dyld_shared_cache_contains_path(name_str); + Py_DECREF(name2); + + if (r) { + Py_RETURN_TRUE; + } else { + Py_RETURN_FALSE; + } + + } else { + PyErr_SetString(PyExc_NotImplementedError, "_dyld_shared_cache_contains_path symbol is missing"); + return NULL; + } + + } +#endif + static PyObject *py_dl_open(PyObject *self, PyObject *args) { PyObject *name, *name2; @@ -1876,6 +1974,8 @@ buffer_info(PyObject *self, PyObject *arg) return Py_BuildValue("siN", dict->format, dict->ndim, shape); } + + PyMethodDef _ctypes_module_methods[] = { {"get_errno", get_errno, METH_NOARGS}, {"set_errno", set_errno, METH_VARARGS}, @@ -1897,6 +1997,9 @@ PyMethodDef _ctypes_module_methods[] = { "dlopen(name, flag={RTLD_GLOBAL|RTLD_LOCAL}) open a shared library"}, {"dlclose", py_dl_close, METH_VARARGS, "dlclose a library"}, {"dlsym", py_dl_sym, METH_VARARGS, "find symbol in shared library"}, +#endif +#ifdef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH + {"_dyld_shared_cache_contains_path", py_dyld_shared_cache_contains_path, METH_VARARGS, "check if path is in the shared cache"}, #endif {"alignment", align_func, METH_O, alignment_doc}, {"sizeof", sizeof_func, METH_O, sizeof_doc}, diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index e58f85233cb71e..0bed85e318261f 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -366,6 +366,14 @@ PyObject *_ctypes_get_errobj(int **pspace); extern PyObject *ComError; #endif +#if USING_MALLOC_CLOSURE_DOT_C +void Py_ffi_closure_free(void *p); +void *Py_ffi_closure_alloc(size_t size, void** codeloc); +#else +#define Py_ffi_closure_free ffi_closure_free +#define Py_ffi_closure_alloc ffi_closure_alloc +#endif + /* Local Variables: compile-command: "python setup.py -q build install --home ~" diff --git a/Modules/_ctypes/malloc_closure.c b/Modules/_ctypes/malloc_closure.c index f9cdb336958c6f..788bae6a96c7f4 100644 --- a/Modules/_ctypes/malloc_closure.c +++ b/Modules/_ctypes/malloc_closure.c @@ -89,16 +89,35 @@ static void more_core(void) /******************************************************************/ /* put the item back into the free list */ -void ffi_closure_free(void *p) +void Py_ffi_closure_free(void *p) { +#if HAVE_FFI_CLOSURE_ALLOC +#if USING_APPLE_OS_LIBFFI + if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { +#endif + ffi_closure_free(p); + return; +#if USING_APPLE_OS_LIBFFI + } +#endif +#endif ITEM *item = (ITEM *)p; item->next = free_list; free_list = item; } /* return one item from the free list, allocating more if needed */ -void *ffi_closure_alloc(size_t ignored, void** codeloc) +void *Py_ffi_closure_alloc(size_t size, void** codeloc) { +#if HAVE_FFI_CLOSURE_ALLOC +#if USING_APPLE_OS_LIBFFI + if (__builtin_available(macos 10.15, ios 13, watchos 6, tvos 13, *)) { +#endif + return ffi_closure_alloc(size, codeloc); +#if USING_APPLE_OS_LIBFFI + } +#endif +#endif ITEM *item; if (!free_list) more_core(); diff --git a/Modules/_decimal/libmpdec/mpdecimal.h b/Modules/_decimal/libmpdec/mpdecimal.h index a67dd9bc126c27..3e9c8185c35a70 100644 --- a/Modules/_decimal/libmpdec/mpdecimal.h +++ b/Modules/_decimal/libmpdec/mpdecimal.h @@ -135,6 +135,9 @@ const char *mpd_version(void); #elif defined(__x86_64__) #define CONFIG_64 #define ASM + #elif defined(__arm64__) + #define CONFIG_64 + #define ANSI #else #error "unknown architecture for universal build." #endif diff --git a/Modules/getpath.c b/Modules/getpath.c index b727f66953b460..63815c5fed831b 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -777,11 +777,7 @@ calculate_program_full_path(PyCalculatePath *calculate, _PyPathConfig *pathconfi #ifdef __APPLE__ char execpath[MAXPATHLEN + 1]; -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 uint32_t nsexeclength = Py_ARRAY_LENGTH(execpath) - 1; -#else - unsigned long nsexeclength = Py_ARRAY_LENGTH(execpath) - 1; -#endif #endif /* If there is no slash in the argv0 path, then we have to diff --git a/configure b/configure index c737256c15278b..d1a61d86ee5ce4 100755 --- a/configure +++ b/configure @@ -1492,7 +1492,7 @@ Optional Packages: --with-universal-archs=ARCH select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", - or "all") + "universal2", or "all") --with-framework-name=FRAMEWORK specify an alternate name of the framework built with --enable-framework @@ -6905,7 +6905,7 @@ fi -# The -arch flags for universal builds on OSX +# The -arch flags for universal builds on macOS UNIVERSAL_ARCH_FLAGS= @@ -7391,6 +7391,11 @@ $as_echo "$CC" >&6; } LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" ;; + universal2) + UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" @@ -7412,7 +7417,7 @@ $as_echo "$CC" >&6; } ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" ;; *) - as_fn_error $? "proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way" "$LINENO" 5 + as_fn_error $? "proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way" "$LINENO" 5 ;; esac @@ -9266,7 +9271,7 @@ fi MACOSX_DEFAULT_ARCH="ppc" ;; *) - as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 + as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5 ;; esac else @@ -9276,9 +9281,12 @@ fi ;; ppc) MACOSX_DEFAULT_ARCH="ppc64" + ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" ;; *) - as_fn_error $? "Unexpected output of 'arch' on OSX" "$LINENO" 5 + as_fn_error $? "Unexpected output of 'arch' on macOS" "$LINENO" 5 ;; esac @@ -11835,6 +11843,31 @@ 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.$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 *x=_dyld_shared_cache_contains_path + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#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; } + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext diff --git a/configure.ac b/configure.ac index 040ddfc791edb0..0182ecc48e0977 100644 --- a/configure.ac +++ b/configure.ac @@ -219,7 +219,7 @@ fi AC_SUBST(LIPO_32BIT_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, - AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")]), + AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", "universal2", or "all")]), [ UNIVERSAL_ARCHS="$withval" ], @@ -1569,7 +1569,7 @@ AC_SUBST(BASECFLAGS) AC_SUBST(CFLAGS_NODIST) AC_SUBST(LDFLAGS_NODIST) -# The -arch flags for universal builds on OSX +# The -arch flags for universal builds on macOS UNIVERSAL_ARCH_FLAGS= AC_SUBST(UNIVERSAL_ARCH_FLAGS) @@ -1850,6 +1850,11 @@ yes) LIPO_32BIT_FLAGS="-extract ppc7400 -extract i386" ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" ;; + universal2) + UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" + LIPO_32BIT_FLAGS="" + ARCH_RUN_32BIT="true" + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" @@ -1871,7 +1876,7 @@ yes) ARCH_RUN_32BIT="/usr/bin/arch -i386 -ppc" ;; *) - AC_MSG_ERROR([proper usage is --with-universal-arch=32-bit|64-bit|all|intel|3-way]) + AC_MSG_ERROR([proper usage is --with-universal-arch=universal2|32-bit|64-bit|all|intel|3-way]) ;; esac @@ -2445,7 +2450,7 @@ case $ac_sys_system/$ac_sys_release in MACOSX_DEFAULT_ARCH="ppc" ;; *) - AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) + AC_MSG_ERROR([Unexpected output of 'arch' on macOS]) ;; esac else @@ -2455,9 +2460,12 @@ case $ac_sys_system/$ac_sys_release in ;; ppc) MACOSX_DEFAULT_ARCH="ppc64" + ;; + arm64) + MACOSX_DEFAULT_ARCH="arm64" ;; *) - AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) + AC_MSG_ERROR([Unexpected output of 'arch' on macOS]) ;; esac @@ -3680,6 +3688,12 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for _dyld_shared_cache_contains_path) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[void *x=_dyld_shared_cache_contains_path]])], + [AC_DEFINE(HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH, 1, Define if you have the '_dyld_shared_cache_contains_path' function.) + AC_MSG_RESULT(yes)], + [AC_MSG_RESULT(no) +]) AC_MSG_CHECKING(for memfd_create) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ diff --git a/pyconfig.h.in b/pyconfig.h.in index 4263a712c3278f..41cfe07902794b 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -772,6 +772,9 @@ /* Define if you have the 'prlimit' functions. */ #undef HAVE_PRLIMIT +/* Define if you have the '_dyld_shared_cache_contains_path' function. */ +#undef HAVE_DYLD_SHARED_CACHE_CONTAINS_PATH + /* Define to 1 if you have the header file. */ #undef HAVE_PROCESS_H diff --git a/setup.py b/setup.py index 3c76f14b25c540..0a2a435c609045 100644 --- a/setup.py +++ b/setup.py @@ -9,6 +9,7 @@ import sys import sysconfig from glob import glob, escape +import _osx_support from distutils import log from distutils.command.build_ext import build_ext @@ -150,31 +151,8 @@ def macosx_sdk_root(): if m is not None: MACOS_SDK_ROOT = m.group(1) else: - MACOS_SDK_ROOT = '/' - cc = sysconfig.get_config_var('CC') - tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid() - try: - os.unlink(tmpfile) - except: - pass - ret = os.system('%s -E -v - %s 1>/dev/null' % (cc, tmpfile)) - in_incdirs = False - try: - if ret >> 8 == 0: - with open(tmpfile) as fp: - for line in fp.readlines(): - if line.startswith("#include <...>"): - in_incdirs = True - elif line.startswith("End of search list"): - in_incdirs = False - elif in_incdirs: - line = line.strip() - if line == '/usr/include': - MACOS_SDK_ROOT = '/' - elif line.endswith(".sdk/usr/include"): - MACOS_SDK_ROOT = line[:-12] - finally: - os.unlink(tmpfile) + MACOS_SDK_ROOT = _osx_support._default_sysroot( + sysconfig.get_config_var('CC')) return MACOS_SDK_ROOT @@ -188,6 +166,13 @@ def is_macosx_sdk_path(path): or path.startswith('/Library/') ) +def grep_headers_for(function, headers): + for header in headers: + with open(header, 'r', errors='surrogateescape') as f: + if function in f.read(): + return True + return False + def find_file(filename, std_dirs, paths): """Searches for the directory where a given file is located, and returns a possibly-empty list of additional directories, or None @@ -1956,43 +1941,17 @@ def detect_tkinter(self): library_dirs=added_lib_dirs)) return True - def configure_ctypes_darwin(self, ext): - # Darwin (OS X) uses preconfigured files, in - # the Modules/_ctypes/libffi_osx directory. - ffi_srcdir = os.path.abspath(os.path.join(self.srcdir, 'Modules', - '_ctypes', 'libffi_osx')) - sources = [os.path.join(ffi_srcdir, p) - for p in ['ffi.c', - 'x86/darwin64.S', - 'x86/x86-darwin.S', - 'x86/x86-ffi_darwin.c', - 'x86/x86-ffi64.c', - 'powerpc/ppc-darwin.S', - 'powerpc/ppc-darwin_closure.S', - 'powerpc/ppc-ffi_darwin.c', - 'powerpc/ppc64-darwin_closure.S', - ]] - - # Add .S (preprocessed assembly) to C compiler source extensions. - self.compiler.src_extensions.append('.S') - - include_dirs = [os.path.join(ffi_srcdir, 'include'), - os.path.join(ffi_srcdir, 'powerpc')] - ext.include_dirs.extend(include_dirs) - ext.sources.extend(sources) - return True - def configure_ctypes(self, ext): - if not self.use_system_libffi: - if MACOS: - return self.configure_ctypes_darwin(ext) - print('INFO: Could not locate ffi libs and/or headers') - return False return True def detect_ctypes(self): # Thomas Heller's _ctypes module - self.use_system_libffi = False + + if (not sysconfig.get_config_var("LIBFFI_INCLUDEDIR") and MACOS): + self.use_system_libffi = True + else: + self.use_system_libffi = '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS") + include_dirs = [] extra_compile_args = [] extra_link_args = [] @@ -2005,11 +1964,9 @@ def detect_ctypes(self): if MACOS: sources.append('_ctypes/malloc_closure.c') - sources.append('_ctypes/darwin/dlfcn_simple.c') + extra_compile_args.append('-DUSING_MALLOC_CLOSURE_DOT_C=1') extra_compile_args.append('-DMACOSX') include_dirs.append('_ctypes/darwin') - # XXX Is this still needed? - # extra_link_args.extend(['-read_only_relocs', 'warning']) elif HOST_PLATFORM == 'sunos5': # XXX This shouldn't be necessary; it appears that some @@ -2039,31 +1996,48 @@ def detect_ctypes(self): sources=['_ctypes/_ctypes_test.c'], libraries=['m'])) + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None + ffi_inc_dirs = self.inc_dirs.copy() if MACOS: - if '--with-system-ffi' not in sysconfig.get_config_var("CONFIG_ARGS"): - return - # OS X 10.5 comes with libffi.dylib; the include files are - # in /usr/include/ffi - ffi_inc_dirs.append('/usr/include/ffi') - - ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")] - if not ffi_inc or ffi_inc[0] == '': - ffi_inc = find_file('ffi.h', [], ffi_inc_dirs) - if ffi_inc is not None: - ffi_h = ffi_inc[0] + '/ffi.h' + ffi_in_sdk = os.path.join(macosx_sdk_root(), "usr/include/ffi") + + if not ffi_inc: + if os.path.exists(ffi_in_sdk): + ext.extra_compile_args.append("-DUSING_APPLE_OS_LIBFFI=1") + ffi_inc = ffi_in_sdk + ffi_lib = 'ffi' + else: + # OS X 10.5 comes with libffi.dylib; the include files are + # in /usr/include/ffi + ffi_inc_dirs.append('/usr/include/ffi') + + if not ffi_inc: + found = find_file('ffi.h', [], ffi_inc_dirs) + if found: + ffi_inc = found[0] + if ffi_inc: + ffi_h = ffi_inc + '/ffi.h' if not os.path.exists(ffi_h): ffi_inc = None print('Header file {} does not exist'.format(ffi_h)) - ffi_lib = None - if ffi_inc is not None: + if ffi_lib is None and ffi_inc: for lib_name in ('ffi', 'ffi_pic'): if (self.compiler.find_library_file(self.lib_dirs, lib_name)): ffi_lib = lib_name break if ffi_inc and ffi_lib: - ext.include_dirs.extend(ffi_inc) + ffi_headers = glob(os.path.join(ffi_inc, '*.h')) + if grep_headers_for('ffi_prep_cif_var', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CIF_VAR=1") + if grep_headers_for('ffi_prep_closure_loc', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_PREP_CLOSURE_LOC=1") + if grep_headers_for('ffi_closure_alloc', ffi_headers): + ext.extra_compile_args.append("-DHAVE_FFI_CLOSURE_ALLOC=1") + + ext.include_dirs.append(ffi_inc) ext.libraries.append(ffi_lib) self.use_system_libffi = True From webhook-mailer at python.org Sun May 2 05:19:14 2021 From: webhook-mailer at python.org (ned-deily) Date: Sun, 02 May 2021 09:19:14 -0000 Subject: [Python-checkins] bpo-41100: Update Misc/ACKS (GH-25808) Message-ID: https://github.com/python/cpython/commit/518f8b5dd50b73499282a1ef02b197af106ad118 commit: 518f8b5dd50b73499282a1ef02b197af106ad118 branch: master author: Ned Deily committer: ned-deily date: 2021-05-02T05:19:07-04:00 summary: bpo-41100: Update Misc/ACKS (GH-25808) files: M Misc/ACKS diff --git a/Misc/ACKS b/Misc/ACKS index 99d39b5f38fd7..fb84c00622c31 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -140,6 +140,7 @@ Bas van Beek Ian Beer Stefan Behnel Reimer Behrends +Maxime B?langer Ben Bell Thomas Bellman John Belmonte @@ -362,6 +363,7 @@ Mircea Cosbuc David Costanzo Scott Cotton Greg Couch +FX Coudert David Cournapeau Julien Courteau Steve Cousins @@ -396,6 +398,7 @@ Lars Damerow Evan Dandrea Eric Daniel Scott David Daniels +Lawrence D'Anna Ben Darnell Kushal Das Jonathan Dasteel @@ -1510,6 +1513,7 @@ Mark Russell Rusty Russell Nick Russo James Rutherford +Eli Rykoff Chris Ryland Bernt R?skar Brenna Constantina S. From webhook-mailer at python.org Sun May 2 05:25:49 2021 From: webhook-mailer at python.org (ned-deily) Date: Sun, 02 May 2021 09:25:49 -0000 Subject: [Python-checkins] bpo-41100: Update Misc/ACKS (GH-25808) (GH-25809) Message-ID: https://github.com/python/cpython/commit/bb3ec9ceae7032457f6e7fb72b39aee95976051c commit: bb3ec9ceae7032457f6e7fb72b39aee95976051c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-02T05:25:38-04:00 summary: bpo-41100: Update Misc/ACKS (GH-25808) (GH-25809) (cherry picked from commit 518f8b5dd50b73499282a1ef02b197af106ad118) Co-authored-by: Ned Deily files: M Misc/ACKS diff --git a/Misc/ACKS b/Misc/ACKS index 9d0dffe57652a..5e34ccb81d75c 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -138,6 +138,7 @@ Micha? Bednarski Ian Beer Stefan Behnel Reimer Behrends +Maxime B?langer Ben Bell Thomas Bellman Alexander ?????? Belopolsky @@ -355,6 +356,7 @@ Mircea Cosbuc David Costanzo Scott Cotton Greg Couch +FX Coudert David Cournapeau Julien Courteau Steve Cousins @@ -388,6 +390,7 @@ Lars Damerow Evan Dandrea Eric Daniel Scott David Daniels +Lawrence D'Anna Ben Darnell Kushal Das Jonathan Dasteel @@ -1488,6 +1491,7 @@ Mark Russell Rusty Russell Nick Russo James Rutherford +Eli Rykoff Chris Ryland Bernt R?skar Brenna Constantina S. From webhook-mailer at python.org Sun May 2 06:40:25 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 10:40:25 -0000 Subject: [Python-checkins] bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (#8721) Message-ID: https://github.com/python/cpython/commit/73766b0341674f3920f4ea86a6f8288b801960f9 commit: 73766b0341674f3920f4ea86a6f8288b801960f9 branch: master author: Zackery Spytz committer: ambv date: 2021-05-02T12:40:01+02:00 summary: bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (#8721) Embedded nulls would cause a ValueError to be raised. Thanks go to Eryk Sun for their analysis. Co-authored-by: ?ukasz Langa files: A Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst M Lib/ctypes/test/test_unicode.py M Modules/_ctypes/cfield.c diff --git a/Lib/ctypes/test/test_unicode.py b/Lib/ctypes/test/test_unicode.py index c200af7b650661..60c75424b767fa 100644 --- a/Lib/ctypes/test/test_unicode.py +++ b/Lib/ctypes/test/test_unicode.py @@ -26,6 +26,14 @@ def test_buffers(self): self.assertEqual(buf[::2], 'a\xe4\xfc') self.assertEqual(buf[6:5:-1], "") + def test_embedded_null(self): + class TestStruct(ctypes.Structure): + _fields_ = [("unicode", ctypes.c_wchar_p)] + t = TestStruct() + # This would raise a ValueError: + t.unicode = "foo\0bar\0\0" + + func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p class StringTestCase(UnicodeTestCase): diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst new file mode 100644 index 00000000000000..e6a60fe8da140b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst @@ -0,0 +1,3 @@ +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index d96a1b0651baad..8d0710fbabcca3 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1341,6 +1341,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) { PyObject *keep; wchar_t *buffer; + Py_ssize_t bsize; if (value == Py_None) { *(wchar_t **)ptr = NULL; @@ -1364,7 +1365,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) /* We must create a wchar_t* buffer from the unicode object, and keep it alive */ - buffer = PyUnicode_AsWideCharString(value, NULL); + buffer = PyUnicode_AsWideCharString(value, &bsize); if (!buffer) return NULL; keep = PyCapsule_New(buffer, CTYPES_CFIELD_CAPSULE_NAME_PYMEM, pymem_destructor); From webhook-mailer at python.org Sun May 2 06:55:08 2021 From: webhook-mailer at python.org (ned-deily) Date: Sun, 02 May 2021 10:55:08 -0000 Subject: [Python-checkins] bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25810) Message-ID: https://github.com/python/cpython/commit/78e55888ab379cc61c0b5db67f0b881e526628d2 commit: 78e55888ab379cc61c0b5db67f0b881e526628d2 branch: 3.8 author: Ned Deily committer: ned-deily date: 2021-05-02T06:55:04-04:00 summary: bpo-44009: Provide "python3.x-intel64" for Apple Silicon Macs (GH-25810) This allows reliably forcing macOS universal2 framework builds to run under Rosetta 2 Intel-64 emulation on Apple Silicon Macs if needed for testing or when universal2 wheels are not yet available. (cherry picked from commit 0cb33da1cc9cebb9b2d67d446feb1cfd36fe7f55) Co-authored-by: Ned Deily Automerge-Triggered-By: GH:ned-deily Co-authored-by: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> files: A Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst M Mac/Makefile.in M Mac/README.rst M Makefile.pre.in M configure M configure.ac diff --git a/Mac/Makefile.in b/Mac/Makefile.in index 0b32673323a0d..f969128841453 100644 --- a/Mac/Makefile.in +++ b/Mac/Makefile.in @@ -20,6 +20,7 @@ FRAMEWORKUNIXTOOLSPREFIX=@FRAMEWORKUNIXTOOLSPREFIX@ PYTHONFRAMEWORK=@PYTHONFRAMEWORK@ PYTHONFRAMEWORKIDENTIFIER=@PYTHONFRAMEWORKIDENTIFIER@ LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ CC=@CC@ MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ export MACOSX_DEPLOYMENT_TARGET @@ -92,6 +93,16 @@ installunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python3-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ @@ -142,6 +153,16 @@ altinstallunixtools: $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ done ;\ fi + -if test "x$(LIPO_INTEL64_FLAGS)" != "x"; then \ + cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ + for fn in \ + python$(VERSION)-intel64 \ + ; \ + do \ + rm -f $${fn} ;\ + $(LN) -s $(BINDIR)/$${fn} $${fn} ;\ + done ;\ + fi -if test "x$(ENSUREPIP)" != "xno" ; then \ cd "$(DESTDIR)$(FRAMEWORKUNIXTOOLSPREFIX)/bin" && \ for fn in \ diff --git a/Mac/README.rst b/Mac/README.rst index f63a424ad10d8..d455a0a24e535 100644 --- a/Mac/README.rst +++ b/Mac/README.rst @@ -162,6 +162,9 @@ following combinations of SDKs and universal-archs flavors are available: The makefile for a framework build will also install ``python3.x-32`` binaries when the universal architecture includes at least one 32-bit architecture (that is, for all flavors but ``64-bit`` and ``intel-64``). +It will also install ``python3.x-intel64`` binaries in the ``universal2`` +case to allow easy execution with the Rosetta 2 Intel emulator on Apple +Silicon Macs. Running a specific architecture ............................... @@ -181,6 +184,9 @@ subprocesses also run in 32-bit-mode if the main interpreter does, use a ``python3.x-32`` binary and use the value of ``sys.executable`` as the ``subprocess`` ``Popen`` executable value. +Likewise, use ``python3.x-intel64`` to force execution in ``x86_64`` mode +with ``universal2`` binaries. + Building and using a framework-based Python on macOS ==================================================== diff --git a/Makefile.pre.in b/Makefile.pre.in index c328d35beb81d..7e381283fee88 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -182,6 +182,9 @@ STRIPFLAG=-s # Flags to lipo to produce a 32-bit-only universal executable LIPO_32BIT_FLAGS=@LIPO_32BIT_FLAGS@ +# Flags to lipo to produce an intel-64-only universal executable +LIPO_INTEL64_FLAGS=@LIPO_INTEL64_FLAGS@ + # Options to enable prebinding (for fast startup prior to Mac OS X 10.3) OTHER_LIBTOOL_OPT=@OTHER_LIBTOOL_OPT@ @@ -1267,6 +1270,12 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ -output $(DESTDIR)$(BINDIR)/python$(VERSION)-32$(EXE) \ $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)python$(VERSION)-intel64$(EXE); \ + lipo $(LIPO_INTEL64_FLAGS) \ + -output $(DESTDIR)$(BINDIR)/python$(VERSION)-intel64$(EXE) \ + $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \ + fi bininstall: altbininstall if test ! -d $(DESTDIR)$(LIBPC); then \ @@ -1302,6 +1311,10 @@ bininstall: altbininstall rm -f $(DESTDIR)$(BINDIR)/python3-32$(EXE); \ (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-32$(EXE) python3-32$(EXE)) \ fi + if test "x$(LIPO_INTEL64_FLAGS)" != "x" ; then \ + rm -f $(DESTDIR)$(BINDIR)/python3-intel64$(EXE); \ + (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-intel64$(EXE) python3-intel64$(EXE)) \ + fi # Install the versioned manual page altmaninstall: diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst new file mode 100644 index 0000000000000..f9f11c8ae6a79 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst @@ -0,0 +1,4 @@ +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. diff --git a/configure b/configure index d1a61d86ee5ce..936f3d4596f53 100755 --- a/configure +++ b/configure @@ -742,6 +742,7 @@ PYTHONFRAMEWORKPREFIX PYTHONFRAMEWORKDIR PYTHONFRAMEWORKIDENTIFIER PYTHONFRAMEWORK +LIPO_INTEL64_FLAGS LIPO_32BIT_FLAGS ARCH_RUN_32BIT UNIVERSALSDK @@ -1490,9 +1491,12 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-universal-archs=ARCH - select architectures for universal build ("32-bit", - "64-bit", "3-way", "intel", "intel-32", "intel-64", - "universal2", or "all") + specify the kind of macOS universal binary that + should be created. This option is only valid when + --enable-universalsdk is set; options are: + ("universal2", "intel-64", "intel-32", "intel", + "32-bit", "64-bit", "3-way", or "all") see + Mac/README.rst --with-framework-name=FRAMEWORK specify an alternate name of the framework built with --enable-framework @@ -3073,6 +3077,7 @@ then fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-universal-archs" >&5 $as_echo_n "checking for --with-universal-archs... " >&6; } @@ -7373,6 +7378,7 @@ $as_echo_n "checking which compiler should be used... " >&6; } $as_echo "$CC" >&6; } fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -7394,8 +7400,9 @@ $as_echo "$CC" >&6; } universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" diff --git a/configure.ac b/configure.ac index 0182ecc48e097..e02cc2c65622f 100644 --- a/configure.ac +++ b/configure.ac @@ -217,9 +217,15 @@ then fi AC_SUBST(LIPO_32BIT_FLAGS) +AC_SUBST(LIPO_INTEL64_FLAGS) AC_MSG_CHECKING(for --with-universal-archs) AC_ARG_WITH(universal-archs, - AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", "universal2", or "all")]), + AS_HELP_STRING([--with-universal-archs=ARCH], + [specify the kind of macOS universal binary that should be created. + This option is only valid when --enable-universalsdk is set; options are: + ("universal2", "intel-64", "intel-32", "intel", "32-bit", + "64-bit", "3-way", or "all") + see Mac/README.rst]), [ UNIVERSAL_ARCHS="$withval" ], @@ -1832,6 +1838,7 @@ yes) AC_MSG_RESULT($CC) fi + LIPO_INTEL64_FLAGS="" if test "${enable_universalsdk}" then case "$UNIVERSAL_ARCHS" in @@ -1853,8 +1860,9 @@ yes) universal2) UNIVERSAL_ARCH_FLAGS="-arch arm64 -arch x86_64" LIPO_32BIT_FLAGS="" + LIPO_INTEL64_FLAGS="-extract x86_64" ARCH_RUN_32BIT="true" - ;; + ;; intel) UNIVERSAL_ARCH_FLAGS="-arch i386 -arch x86_64" LIPO_32BIT_FLAGS="-extract i386" From webhook-mailer at python.org Sun May 2 07:03:14 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 11:03:14 -0000 Subject: [Python-checkins] bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (GH-8721) (#25812) Message-ID: https://github.com/python/cpython/commit/cf6a79644c227159b8b5a44055650266d578b9f6 commit: cf6a79644c227159b8b5a44055650266d578b9f6 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-02T13:03:10+02:00 summary: bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (GH-8721) (#25812) Embedded nulls would cause a ValueError to be raised. Thanks go to Eryk Sun for their analysis. Co-authored-by: ?ukasz Langa (cherry picked from commit 73766b0341674f3920f4ea86a6f8288b801960f9) Co-authored-by: Zackery Spytz files: A Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst M Lib/ctypes/test/test_unicode.py M Modules/_ctypes/cfield.c diff --git a/Lib/ctypes/test/test_unicode.py b/Lib/ctypes/test/test_unicode.py index c200af7b650661..60c75424b767fa 100644 --- a/Lib/ctypes/test/test_unicode.py +++ b/Lib/ctypes/test/test_unicode.py @@ -26,6 +26,14 @@ def test_buffers(self): self.assertEqual(buf[::2], 'a\xe4\xfc') self.assertEqual(buf[6:5:-1], "") + def test_embedded_null(self): + class TestStruct(ctypes.Structure): + _fields_ = [("unicode", ctypes.c_wchar_p)] + t = TestStruct() + # This would raise a ValueError: + t.unicode = "foo\0bar\0\0" + + func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p class StringTestCase(UnicodeTestCase): diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst new file mode 100644 index 00000000000000..e6a60fe8da140b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst @@ -0,0 +1,3 @@ +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 2261a59e439f61..7ebd4ba76afb72 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1354,6 +1354,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) { PyObject *keep; wchar_t *buffer; + Py_ssize_t bsize; if (value == Py_None) { *(wchar_t **)ptr = NULL; @@ -1377,7 +1378,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) /* We must create a wchar_t* buffer from the unicode object, and keep it alive */ - buffer = PyUnicode_AsWideCharString(value, NULL); + buffer = PyUnicode_AsWideCharString(value, &bsize); if (!buffer) return NULL; keep = PyCapsule_New(buffer, CTYPES_CFIELD_CAPSULE_NAME_PYMEM, pymem_destructor); From webhook-mailer at python.org Sun May 2 07:03:27 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 11:03:27 -0000 Subject: [Python-checkins] bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (GH-8721) (#25811) Message-ID: https://github.com/python/cpython/commit/db3ce79469ce9f8168ea4ac3e186be8e3fe44105 commit: db3ce79469ce9f8168ea4ac3e186be8e3fe44105 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-02T13:03:23+02:00 summary: bpo-32745: Fix a regression in the handling of ctypes' c_wchar_p type (GH-8721) (#25811) Embedded nulls would cause a ValueError to be raised. Thanks go to Eryk Sun for their analysis. Co-authored-by: ?ukasz Langa (cherry picked from commit 73766b0341674f3920f4ea86a6f8288b801960f9) Co-authored-by: Zackery Spytz files: A Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst M Lib/ctypes/test/test_unicode.py M Modules/_ctypes/cfield.c diff --git a/Lib/ctypes/test/test_unicode.py b/Lib/ctypes/test/test_unicode.py index c200af7b650661..60c75424b767fa 100644 --- a/Lib/ctypes/test/test_unicode.py +++ b/Lib/ctypes/test/test_unicode.py @@ -26,6 +26,14 @@ def test_buffers(self): self.assertEqual(buf[::2], 'a\xe4\xfc') self.assertEqual(buf[6:5:-1], "") + def test_embedded_null(self): + class TestStruct(ctypes.Structure): + _fields_ = [("unicode", ctypes.c_wchar_p)] + t = TestStruct() + # This would raise a ValueError: + t.unicode = "foo\0bar\0\0" + + func = ctypes.CDLL(_ctypes_test.__file__)._testfunc_p_p class StringTestCase(UnicodeTestCase): diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst new file mode 100644 index 00000000000000..e6a60fe8da140b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst @@ -0,0 +1,3 @@ +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 1a36356ec76a61..0b12a448693b53 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1360,6 +1360,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) { PyObject *keep; wchar_t *buffer; + Py_ssize_t bsize; if (value == Py_None) { *(wchar_t **)ptr = NULL; @@ -1383,7 +1384,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size) /* We must create a wchar_t* buffer from the unicode object, and keep it alive */ - buffer = PyUnicode_AsWideCharString(value, NULL); + buffer = PyUnicode_AsWideCharString(value, &bsize); if (!buffer) return NULL; keep = PyCapsule_New(buffer, CTYPES_CFIELD_CAPSULE_NAME_PYMEM, pymem_destructor); From webhook-mailer at python.org Sun May 2 08:00:52 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 12:00:52 -0000 Subject: [Python-checkins] bpo-36384: Leading zeros in IPv4 addresses are no longer tolerated (GH-25099) Message-ID: https://github.com/python/cpython/commit/60ce8f0be6354ad565393ab449d8de5d713f35bc commit: 60ce8f0be6354ad565393ab449d8de5d713f35bc branch: master author: Christian Heimes committer: ambv date: 2021-05-02T14:00:35+02:00 summary: bpo-36384: Leading zeros in IPv4 addresses are no longer tolerated (GH-25099) Reverts commit e653d4d8e820a7a004ad399530af0135b45db27a and makes parsing even more strict. Like socket.inet_pton() any leading zero is now treated as invalid input. Signed-off-by: Christian Heimes Co-authored-by: ?ukasz Langa files: A Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst M Doc/library/ipaddress.rst M Doc/tools/susp-ignored.csv M Doc/whatsnew/3.9.rst M Lib/ipaddress.py M Lib/test/test_ipaddress.py diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index d6d1f1e362137b..1c2263b128a8fe 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -104,8 +104,7 @@ write code that handles both IP versions correctly. Address objects are 1. A string in decimal-dot notation, consisting of four decimal integers in the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each integer represents an octet (byte) in the address. Leading zeroes are - tolerated only for values less than 8 (as there is no ambiguity - between the decimal and octal interpretations of such strings). + not tolerated to prevent confusion with octal notation. 2. An integer that fits into 32 bits. 3. An integer packed into a :class:`bytes` object of length 4 (most significant octet first). @@ -117,6 +116,22 @@ write code that handles both IP versions correctly. Address objects are >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1') + .. versionchanged:: 3.8 + + Leading zeros are tolerated, even in ambiguous cases that look like + octal notation. + + .. versionchanged:: 3.10 + + Leading zeros are no longer tolerated and are treated as an error. + IPv4 address strings are now parsed as strict as glibc + :func:`~socket.inet_pton`. + + .. versionchanged:: 3.9.5 + + The above change was also included in Python 3.9 starting with + version 3.9.5. + .. attribute:: version The appropriate version number: ``4`` for IPv4, ``6`` for IPv6. diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 5a2d85d262b2e7..d56a2b9fd0bfb9 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -149,8 +149,8 @@ library/ipaddress,,:db8,>>> ipaddress.IPv6Address('2001:db8::1000') library/ipaddress,,::,>>> ipaddress.IPv6Address('2001:db8::1000') library/ipaddress,,:db8,'2001:db8::1000' library/ipaddress,,::,'2001:db8::1000' -library/ipaddress,231,:db8,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" -library/ipaddress,231,::,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" +library/ipaddress,,:db8,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" +library/ipaddress,,::,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" library/ipaddress,,::,IPv6Address('ff02::5678%1') library/ipaddress,,::,fe80::1234 library/ipaddress,,:db8,">>> ipaddress.ip_address(""2001:db8::1"").reverse_pointer" diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 9a7f2cd3843c9d..772fb5a3fe7458 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -537,6 +537,10 @@ Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`. If present, scope zone ID is available through the :attr:`~ipaddress.IPv6Address.scope_id` attribute. (Contributed by Oleksandr Pavliuk in :issue:`34788`.) +Starting with Python 3.9.5 the :mod:`ipaddress` module no longer +accepts any leading zeros in IPv4 address strings. +(Contributed by Christian Heimes in :issue:`36384`). + math ---- @@ -1114,6 +1118,14 @@ Changes in the Python API compatible classes that don't inherit from those mentioned types. (Contributed by Roger Aiudi in :issue:`34775`). +* Starting with Python 3.9.5 the :mod:`ipaddress` module no longer + accepts any leading zeros in IPv4 address strings. Leading zeros are + ambiguous and interpreted as octal notation by some libraries. For example + the legacy function :func:`socket.inet_aton` treats leading zeros as octal + notatation. glibc implementation of modern :func:`~socket.inet_pton` does + not accept any leading zeros. + (Contributed by Christian Heimes in :issue:`36384`). + * :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 diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index 160b16dbc162fc..af7aedfa6e51a1 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1223,6 +1223,11 @@ def _parse_octet(cls, octet_str): if len(octet_str) > 3: msg = "At most 3 characters permitted in %r" raise ValueError(msg % octet_str) + # Handle leading zeros as strict as glibc's inet_pton() + # See security bug bpo-36384 + if octet_str != '0' and octet_str[0] == '0': + msg = "Leading zeros are not permitted in %r" + raise ValueError(msg % octet_str) # Convert to integer (we know digits are legal) octet_int = int(octet_str, 10) if octet_int > 255: diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 3c070080a6aaeb..cdd9880c3c17fa 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -96,10 +96,23 @@ def pickle_test(self, addr): class CommonTestMixin_v4(CommonTestMixin): def test_leading_zeros(self): - self.assertInstancesEqual("000.000.000.000", "0.0.0.0") - self.assertInstancesEqual("192.168.000.001", "192.168.0.1") - self.assertInstancesEqual("016.016.016.016", "16.16.16.16") - self.assertInstancesEqual("001.000.008.016", "1.0.8.16") + # bpo-36384: no leading zeros to avoid ambiguity with octal notation + msg = "Leading zeros are not permitted in '\d+'" + addresses = [ + "000.000.000.000", + "192.168.000.001", + "016.016.016.016", + "192.168.000.001", + "001.000.008.016", + "01.2.3.40", + "1.02.3.40", + "1.2.03.40", + "1.2.3.040", + ] + for address in addresses: + with self.subTest(address=address): + with self.assertAddressError(msg): + self.factory(address) def test_int(self): self.assertInstancesEqual(0, "0.0.0.0") diff --git a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst new file mode 100644 index 00000000000000..f956cde948ec57 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst @@ -0,0 +1,6 @@ +:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address +strings. Leading zeros are ambiguous and interpreted as octal notation by +some libraries. For example the legacy function :func:`socket.inet_aton` +treats leading zeros as octal notatation. glibc implementation of modern +:func:`~socket.inet_pton` does not accept any leading zeros. For a while +the :mod:`ipaddress` module used to accept ambiguous leading zeros. From webhook-mailer at python.org Sun May 2 09:49:10 2021 From: webhook-mailer at python.org (ambv) Date: Sun, 02 May 2021 13:49:10 -0000 Subject: [Python-checkins] bpo-36384: Leading zeros in IPv4 addresses are no longer tolerated (GH-25099) (GH-25815) Message-ID: https://github.com/python/cpython/commit/5374fbc31446364bf5f12e5ab88c5493c35eaf04 commit: 5374fbc31446364bf5f12e5ab88c5493c35eaf04 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-02T15:49:03+02:00 summary: bpo-36384: Leading zeros in IPv4 addresses are no longer tolerated (GH-25099) (GH-25815) Reverts commit e653d4d8e820a7a004ad399530af0135b45db27a and makes parsing even more strict. Like socket.inet_pton() any leading zero is now treated as invalid input. Signed-off-by: Christian Heimes Co-authored-by: ?ukasz Langa (cherry picked from commit 60ce8f0be6354ad565393ab449d8de5d713f35bc) files: A Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst M Doc/library/ipaddress.rst M Doc/tools/susp-ignored.csv M Doc/whatsnew/3.9.rst M Lib/ipaddress.py M Lib/test/test_ipaddress.py diff --git a/Doc/library/ipaddress.rst b/Doc/library/ipaddress.rst index d6d1f1e362137b..1c2263b128a8fe 100644 --- a/Doc/library/ipaddress.rst +++ b/Doc/library/ipaddress.rst @@ -104,8 +104,7 @@ write code that handles both IP versions correctly. Address objects are 1. A string in decimal-dot notation, consisting of four decimal integers in the inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each integer represents an octet (byte) in the address. Leading zeroes are - tolerated only for values less than 8 (as there is no ambiguity - between the decimal and octal interpretations of such strings). + not tolerated to prevent confusion with octal notation. 2. An integer that fits into 32 bits. 3. An integer packed into a :class:`bytes` object of length 4 (most significant octet first). @@ -117,6 +116,22 @@ write code that handles both IP versions correctly. Address objects are >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1') + .. versionchanged:: 3.8 + + Leading zeros are tolerated, even in ambiguous cases that look like + octal notation. + + .. versionchanged:: 3.10 + + Leading zeros are no longer tolerated and are treated as an error. + IPv4 address strings are now parsed as strict as glibc + :func:`~socket.inet_pton`. + + .. versionchanged:: 3.9.5 + + The above change was also included in Python 3.9 starting with + version 3.9.5. + .. attribute:: version The appropriate version number: ``4`` for IPv4, ``6`` for IPv6. diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 19b84c6c050219..95277c44129cc9 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -151,8 +151,8 @@ library/ipaddress,,:db8,>>> ipaddress.IPv6Address('2001:db8::1000') library/ipaddress,,::,>>> ipaddress.IPv6Address('2001:db8::1000') library/ipaddress,,:db8,'2001:db8::1000' library/ipaddress,,::,'2001:db8::1000' -library/ipaddress,231,:db8,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" -library/ipaddress,231,::,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" +library/ipaddress,,:db8,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" +library/ipaddress,,::,">>> f'{ipaddress.IPv6Address(""2001:db8::1000""):s}'" library/ipaddress,,::,IPv6Address('ff02::5678%1') library/ipaddress,,::,fe80::1234 library/ipaddress,,:db8,">>> ipaddress.ip_address(""2001:db8::1"").reverse_pointer" diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 6ef0d2a5eff361..cb492e458c6daa 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -537,6 +537,10 @@ Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`. If present, scope zone ID is available through the :attr:`~ipaddress.IPv6Address.scope_id` attribute. (Contributed by Oleksandr Pavliuk in :issue:`34788`.) +Starting with Python 3.9.5 the :mod:`ipaddress` module no longer +accepts any leading zeros in IPv4 address strings. +(Contributed by Christian Heimes in :issue:`36384`). + math ---- @@ -1114,6 +1118,14 @@ Changes in the Python API compatible classes that don't inherit from those mentioned types. (Contributed by Roger Aiudi in :issue:`34775`). +* Starting with Python 3.9.5 the :mod:`ipaddress` module no longer + accepts any leading zeros in IPv4 address strings. Leading zeros are + ambiguous and interpreted as octal notation by some libraries. For example + the legacy function :func:`socket.inet_aton` treats leading zeros as octal + notatation. glibc implementation of modern :func:`~socket.inet_pton` does + not accept any leading zeros. + (Contributed by Christian Heimes in :issue:`36384`). + * :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 diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index bc662c415b2a49..6cb92ed5520066 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -1223,6 +1223,11 @@ def _parse_octet(cls, octet_str): if len(octet_str) > 3: msg = "At most 3 characters permitted in %r" raise ValueError(msg % octet_str) + # Handle leading zeros as strict as glibc's inet_pton() + # See security bug bpo-36384 + if octet_str != '0' and octet_str[0] == '0': + msg = "Leading zeros are not permitted in %r" + raise ValueError(msg % octet_str) # Convert to integer (we know digits are legal) octet_int = int(octet_str, 10) if octet_int > 255: diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 3c070080a6aaeb..cdd9880c3c17fa 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -96,10 +96,23 @@ def pickle_test(self, addr): class CommonTestMixin_v4(CommonTestMixin): def test_leading_zeros(self): - self.assertInstancesEqual("000.000.000.000", "0.0.0.0") - self.assertInstancesEqual("192.168.000.001", "192.168.0.1") - self.assertInstancesEqual("016.016.016.016", "16.16.16.16") - self.assertInstancesEqual("001.000.008.016", "1.0.8.16") + # bpo-36384: no leading zeros to avoid ambiguity with octal notation + msg = "Leading zeros are not permitted in '\d+'" + addresses = [ + "000.000.000.000", + "192.168.000.001", + "016.016.016.016", + "192.168.000.001", + "001.000.008.016", + "01.2.3.40", + "1.02.3.40", + "1.2.03.40", + "1.2.3.040", + ] + for address in addresses: + with self.subTest(address=address): + with self.assertAddressError(msg): + self.factory(address) def test_int(self): self.assertInstancesEqual(0, "0.0.0.0") diff --git a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst new file mode 100644 index 00000000000000..f956cde948ec57 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst @@ -0,0 +1,6 @@ +:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address +strings. Leading zeros are ambiguous and interpreted as octal notation by +some libraries. For example the legacy function :func:`socket.inet_aton` +treats leading zeros as octal notatation. glibc implementation of modern +:func:`~socket.inet_pton` does not accept any leading zeros. For a while +the :mod:`ipaddress` module used to accept ambiguous leading zeros. From webhook-mailer at python.org Sun May 2 10:38:22 2021 From: webhook-mailer at python.org (tiran) Date: Sun, 02 May 2021 14:38:22 -0000 Subject: [Python-checkins] bpo-38820: Add ssl, hashlib, and hmac changes to whatsnew 3.10 (GH-25817) Message-ID: https://github.com/python/cpython/commit/d8389e3e50864447a74605d7ede3d14246bc633a commit: d8389e3e50864447a74605d7ede3d14246bc633a branch: master author: Christian Heimes committer: tiran date: 2021-05-02T16:38:02+02:00 summary: bpo-38820: Add ssl, hashlib, and hmac changes to whatsnew 3.10 (GH-25817) Signed-off-by: Christian Heimes files: M Doc/library/ssl.rst M Doc/whatsnew/3.10.rst diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index 4d43fa0b79284..afa3d87f5767a 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -1358,6 +1358,10 @@ SSL sockets also have the following additional methods and attributes: .. versionadded:: 3.3 + .. deprecated:: 3.10 + + NPN has been superseded by ALPN + .. method:: SSLSocket.unwrap() Performs the SSL shutdown handshake, which removes the TLS layer from the @@ -1714,6 +1718,10 @@ to speed up repeated connections from the same clients. .. versionadded:: 3.3 + .. deprecated:: 3.10 + + NPN has been superseded by ALPN + .. attribute:: SSLContext.sni_callback Register a callback function that will be called after the TLS Client Hello diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 679522bdfe71e..223ab65cfc311 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -974,6 +974,26 @@ Added the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and :func:`~glob.iglob` which allow to specify the root directory for searching. (Contributed by Serhiy Storchaka in :issue:`38144`.) +hashlib +------- + +The hashlib module requires OpenSSL 1.1.1 or newer. +(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) + +The hashlib module has preliminary support for OpenSSL 3.0.0. +(Contributed by Christian Heimes in :issue:`38820` and other issues.) + +The pure-Python fallback of :func:`~hashlib.pbkdf2_hmac` is deprecated. In +the future PBKDF2-HMAC will only be available when Python has been built with +OpenSSL support. +(Contributed by Christian Heimes in :issue:`43880`.) + +hmac +---- + +The hmac module now uses OpenSSL's HMAC implementation internally. +(Contributed by Christian Heimes in :issue:`40645`.) + importlib.metadata ------------------ @@ -1109,6 +1129,30 @@ Added option to create MPTCP sockets with ``IPPROTO_MPTCP`` ssl --- +The ssl module requires OpenSSL 1.1.1 or newer. +(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) + +The ssl module has preliminary support for OpenSSL 3.0.0 and new option +:data:`~ssl.OP_IGNORE_UNEXPECTED_EOF`. +(Contributed by Christian Heimes in :issue:`38820`, :issue:`43794`, +:issue:`43788`, :issue:`43791`, :issue:`43799`, :issue:`43920`, +:issue:`43789`, and :issue:`43811`.) + +Deprecated function and use of deprecated constants now result in +a :exc:`DeprecationWarning`. The following features have been deprecated +since Python 3.6, Python 3.7, or OpenSSL 1.1.0: +:data:`~ssl.OP_NO_SSLv2`, :data:`~ssl.OP_NO_SSLv3`, :data:`~ssl.OP_NO_TLSv1`, +:data:`~ssl.OP_NO_TLSv1_1`, :data:`~ssl.OP_NO_TLSv1_2`, +:data:`~ssl.OP_NO_TLSv1_3`, :data:`~ssl.PROTOCOL_SSLv2`, +:data:`~ssl.PROTOCOL_SSLv3`, :data:`~ssl.PROTOCOL_SSLv23`, +:data:`~ssl.PROTOCOL_TLSv1`, :data:`~ssl.PROTOCOL_TLSv1_1`, +:data:`~ssl.PROTOCOL_TLSv1_2`, :data:`~ssl.PROTOCOL_TLS`, +:func:`~ssl.wrap_socket`, :func:`~ssl.match_hostname`, +:func:`~ssl.RAND_pseudo_bytes`, :func:`~ssl.RAND_egd`, +:meth:`ssl.SSLSocket.selected_npn_protocol`, +:meth:`ssl.SSLContext.set_npn_protocols`. +(Contributed by Christian Heimes in :issue:`43880`.) + The ssl module now has more secure default settings. Ciphers without forward secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of security. @@ -1116,9 +1160,20 @@ weak RSA, DH, and ECC keys with less than 112 bits of security. Settings are based on Hynek Schlawack's research. (Contributed by Christian Heimes in :issue:`43998`.) +The deprecated protocols SSL 3.0, TLS 1.0, and TLS 1.1 are no longer +officially supported. Python does not block them actively. However +OpenSSL build options, distro configurations, vendor patches, and cipher +suites may prevent a successful handshake. + Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. (Contributed by Zackery Spytz in :issue:`31870`.) +The ssl module uses heap-types and multi-phase initialization. +(Contributed by Christian Heimes in :issue:`42333`.) + +A new verify flag :data:`~ssl.VERIFY_X509_PARTIAL_CHAIN` has been added. +(Contributed by l0x in :issue:`40849`.) + sqlite3 ------- From webhook-mailer at python.org Sun May 2 11:43:59 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 02 May 2021 15:43:59 -0000 Subject: [Python-checkins] bpo-43997: Add versionadded directives for to match_args, kw_only, and slots in dataclasses.dataclasses documentation (GH-25803) Message-ID: https://github.com/python/cpython/commit/a5eabc9a39c617475adb7eaee62de7566a995442 commit: a5eabc9a39c617475adb7eaee62de7566a995442 branch: master author: Shreyan Avigyan committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-02T08:43:50-07:00 summary: bpo-43997: Add versionadded directives for to match_args, kw_only, and slots in dataclasses.dataclasses documentation (GH-25803) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 87091ef819d89..a27d09d0725de 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -168,6 +168,8 @@ Module-level decorators, classes, and functions ``__match_args__`` is already defined in the class, then ``__match_args__`` will not be generated. + .. versionadded:: 3.10 + - ``kw_only``: If true (the default value is ``False``), then all fields will be marked as keyword-only. If a field is marked as keyword-only, then the only affect is that the :meth:`__init__` @@ -177,11 +179,15 @@ Module-level decorators, classes, and functions :term:`parameter` glossary entry for details. Also see the ``dataclasses.KW_ONLY`` section. + .. versionadded:: 3.10 + - ``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. + .. versionadded:: 3.10 + ``field``\s may optionally specify a default value, using normal Python syntax:: @@ -267,6 +273,8 @@ Module-level decorators, classes, and functions This is used when the generated :meth:`__init__` method's parameters are computed. + .. versionadded:: 3.10 + If the default value of a field is specified by a call to :func:`field()`, then the class attribute for this field will be replaced by the specified ``default`` value. If no ``default`` is From webhook-mailer at python.org Sun May 2 13:29:23 2021 From: webhook-mailer at python.org (rhettinger) Date: Sun, 02 May 2021 17:29:23 -0000 Subject: [Python-checkins] bpo-43990: Fix the footnote ordering in the operator precedence docs (GH-25805) Message-ID: https://github.com/python/cpython/commit/7d2b83e9f092a2ea1f715fe028f7c48324bee756 commit: 7d2b83e9f092a2ea1f715fe028f7c48324bee756 branch: master author: Zackery Spytz committer: rhettinger date: 2021-05-02T10:29:15-07:00 summary: bpo-43990: Fix the footnote ordering in the operator precedence docs (GH-25805) Footnotes 5 and 6 were in the wrong order. files: M Doc/reference/expressions.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 5b153762bf447..5ad640ad35d61 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1920,8 +1920,8 @@ precedence and have a left-to-right chaining feature as described in the the :keyword:`is` operator, like those involving comparisons between instance methods, or constants. Check their documentation for more info. -.. [#] The ``%`` operator is also used for string formatting; the same - precedence applies. - .. [#] The power operator ``**`` binds less tightly than an arithmetic or bitwise unary operator on its right, that is, ``2**-1`` is ``0.5``. + +.. [#] The ``%`` operator is also used for string formatting; the same + precedence applies. From webhook-mailer at python.org Sun May 2 16:02:21 2021 From: webhook-mailer at python.org (brandtbucher) Date: Sun, 02 May 2021 20:02:21 -0000 Subject: [Python-checkins] bpo-43754: Eliminate bindings for partial pattern matches (GH-25229) Message-ID: https://github.com/python/cpython/commit/0ad1e0384c8afc5259a6d03363491d89500a5d03 commit: 0ad1e0384c8afc5259a6d03363491d89500a5d03 branch: master author: Brandt Bucher committer: brandtbucher date: 2021-05-02T13:02:10-07:00 summary: bpo-43754: Eliminate bindings for partial pattern matches (GH-25229) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst M Doc/library/dis.rst M Include/opcode.h M Lib/importlib/_bootstrap_external.py M Lib/opcode.py M Lib/test/test_patma.py 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 875ab8b61117ee..0491a9d4a072bf 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -1256,6 +1256,15 @@ All of the following opcodes use their arguments. .. versionadded:: 3.10 + +.. opcode:: ROT_N (count) + + Lift the top *count* stack items one position up, and move TOS down to + position *count*. + + .. versionadded:: 3.10 + + .. opcode:: HAVE_ARGUMENT This is not really an opcode. It identifies the dividing line between diff --git a/Include/opcode.h b/Include/opcode.h index 4f52c5f23e271b..52039754bd88ea 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -81,6 +81,7 @@ extern "C" { #define DELETE_ATTR 96 #define STORE_GLOBAL 97 #define DELETE_GLOBAL 98 +#define ROT_N 99 #define LOAD_CONST 100 #define LOAD_NAME 101 #define BUILD_TUPLE 102 diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 2b2818715e9e6a..9a73c7b43a08cf 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -351,6 +351,7 @@ def _write_atomic(path, data, mode=0o666): # 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. +# Python 3.10b1 3439 (Add ROT_N) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -360,7 +361,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 = (3438).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3439).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/opcode.py b/Lib/opcode.py index 196e6f8a27eed4..37e88e92df70ec 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -139,7 +139,7 @@ def jabs_op(name, op): name_op('DELETE_ATTR', 96) # "" name_op('STORE_GLOBAL', 97) # "" name_op('DELETE_GLOBAL', 98) # "" - +def_op('ROT_N', 99) def_op('LOAD_CONST', 100) # Index in const list hasconst.append(100) name_op('LOAD_NAME', 101) # Index in name list diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index 1f80fb48f43e3c..8a273be7250bb1 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -2905,6 +2905,79 @@ def test_patma_288(self): pass """) + def test_patma_289(self): + x = {"y": 1} + match x: + case {"y": (0 as y) | (1 as y)}: + z = 0 + self.assertEqual(x, {"y": 1}) + self.assertEqual(y, 1) + self.assertEqual(z, 0) + + @no_perf + def test_patma_290(self): + self.assert_syntax_error(""" + match ...: + case [a, [b] | [c] | [d]]: + pass + """) + + @no_perf + def test_patma_291(self): + # Hunting for leaks using -R doesn't catch leaks in the compiler itself, + # just the code under test. This test ensures that if there are leaks in + # the pattern compiler, those runs will fail: + with open(__file__) as file: + compile(file.read(), __file__, "exec") + + def test_patma_292(self): + def f(x): + match x: + case ((a, b, c, d, e, f, g, h, i, 9) | + (h, g, i, a, b, d, e, c, f, 10) | + (g, b, a, c, d, -5, e, h, i, f) | + (-1, d, f, b, g, e, i, a, h, c)): + w = 0 + out = locals() + del out["x"] + return out + alts = [ + dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0), + dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0), + dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0), + dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0), + dict(), + ] + self.assertEqual(f(range(10)), alts[0]) + self.assertEqual(f(range(1, 11)), alts[1]) + self.assertEqual(f(range(0, -10, -1)), alts[2]) + self.assertEqual(f(range(-1, -11, -1)), alts[3]) + self.assertEqual(f(range(10, 20)), alts[4]) + + def test_patma_293(self): + def f(x): + match x: + case [y, (a, b, c, d, e, f, g, h, i, 9) | + (h, g, i, a, b, d, e, c, f, 10) | + (g, b, a, c, d, -5, e, h, i, f) | + (-1, d, f, b, g, e, i, a, h, c), z]: + w = 0 + out = locals() + del out["x"] + return out + alts = [ + dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0, y=False, z=True), + dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0, y=False, z=True), + dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0, y=False, z=True), + dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0, y=False, z=True), + dict(), + ] + self.assertEqual(f((False, range(10), True)), alts[0]) + self.assertEqual(f((False, range(1, 11), True)), alts[1]) + self.assertEqual(f((False, range(0, -10, -1), True)), alts[2]) + self.assertEqual(f((False, range(-1, -11, -1), True)), alts[3]) + self.assertEqual(f((False, range(10, 20), True)), alts[4]) + class PerfPatma(TestPatma): @@ -2936,7 +3009,8 @@ def setUpClass(): """ -sudo ./python -m pyperf system tune && \ - ./python -m pyperf timeit --rigorous --setup "from test.test_patma import PerfPatma; p = PerfPatma()" "p.run_perf()"; \ -sudo ./python -m pyperf system reset +# From inside venv pointing to this Python, with pyperf installed: +sudo $(which python) -m pyperf system tune && \ + $(which python) -m pyperf timeit --rigorous --setup "from test.test_patma import PerfPatma; p = PerfPatma()" "p.run_perf()"; \ +sudo $(which python) -m pyperf system reset """ diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst new file mode 100644 index 00000000000000..54556fa299814c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst @@ -0,0 +1,2 @@ +When performing structural pattern matching (:pep:`634`), captured names are +now left unbound until the *entire* pattern has matched successfully. diff --git a/Python/ceval.c b/Python/ceval.c index 866c57afdbf9d0..25548e34db246b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -4399,6 +4399,14 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } + case TARGET(ROT_N): { + PyObject *top = TOP(); + memmove(&PEEK(oparg - 1), &PEEK(oparg), + sizeof(PyObject*) * (oparg - 1)); + PEEK(oparg) = top; + DISPATCH(); + } + case TARGET(EXTENDED_ARG): { int oldoparg = oparg; NEXTOPARG(); diff --git a/Python/compile.c b/Python/compile.c index 4411edb6678438..7cc75ada472c7c 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -230,8 +230,28 @@ struct compiler { }; typedef struct { + // A list of strings corresponding to name captures. It is used to track: + // - Repeated name assignments in the same pattern. + // - Different name assignments in alternatives. + // - The order of name assignments in alternatives. PyObject *stores; + // If 0, any name captures against our subject will raise. int allow_irrefutable; + // An array of blocks to jump to on failure. Jumping to fail_pop[i] will pop + // i items off of the stack. The end result looks like this (with each block + // falling through to the next): + // fail_pop[4]: POP_TOP + // fail_pop[3]: POP_TOP + // fail_pop[2]: POP_TOP + // fail_pop[1]: POP_TOP + // fail_pop[0]: NOP + basicblock **fail_pop; + // The current length of fail_pop. + Py_ssize_t fail_pop_size; + // The number of items on top of the stack that need to *stay* on top of the + // stack. Variable captures go beneath these. All of them will be popped on + // failure. + Py_ssize_t on_top; } pattern_context; static int compiler_enter_scope(struct compiler *, identifier, int, void *, int); @@ -1188,6 +1208,8 @@ stack_effect(int opcode, int oparg, int jump) return 1; case MATCH_KEYS: return 2; + case ROT_N: + return 0; default: return PY_INVALID_STACK_EFFECT; } @@ -5594,11 +5616,15 @@ compiler_slice(struct compiler *c, expr_ty s) // PEP 634: Structural Pattern Matching -// To keep things simple, all compiler_pattern_* routines follow the convention -// of replacing TOS (the subject for the given pattern) with either True (match) -// or False (no match). We do this even for irrefutable patterns; the idea is -// 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. +// To keep things simple, all compiler_pattern_* and pattern_helper_* routines +// follow the convention of consuming TOS (the subject for the given pattern) +// and calling jump_to_fail_pop on failure (no match). + +// When calling into these routines, it's important that pc->on_top be kept +// updated to reflect the current number of items that we are using on the top +// of the stack: they will be popped on failure, and any name captures will be +// stored *underneath* them on success. This lets us defer all names stores +// until the *entire* pattern matches. #define WILDCARD_CHECK(N) \ ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name) @@ -5610,6 +5636,72 @@ compiler_slice(struct compiler *c, expr_ty s) #define MATCH_VALUE_EXPR(N) \ ((N)->kind == Constant_kind || (N)->kind == Attribute_kind) +// Allocate or resize pc->fail_pop to allow for n items to be popped on failure. +static int +ensure_fail_pop(struct compiler *c, pattern_context *pc, Py_ssize_t n) +{ + Py_ssize_t size = n + 1; + if (size <= pc->fail_pop_size) { + return 1; + } + Py_ssize_t needed = sizeof(basicblock*) * size; + basicblock **resized = PyObject_Realloc(pc->fail_pop, needed); + if (resized == NULL) { + PyErr_NoMemory(); + return 0; + } + pc->fail_pop = resized; + while (pc->fail_pop_size < size) { + basicblock *new_block; + RETURN_IF_FALSE(new_block = compiler_new_block(c)); + pc->fail_pop[pc->fail_pop_size++] = new_block; + } + return 1; +} + +// Use op to jump to the correct fail_pop block. +static int +jump_to_fail_pop(struct compiler *c, pattern_context *pc, int op) +{ + // Pop any items on the top of the stack, plus any objects we were going to + // capture on success: + Py_ssize_t pops = pc->on_top + PyList_GET_SIZE(pc->stores); + RETURN_IF_FALSE(ensure_fail_pop(c, pc, pops)); + ADDOP_JUMP(c, op, pc->fail_pop[pops]); + NEXT_BLOCK(c); + return 1; +} + +// Build all of the fail_pop blocks and reset fail_pop. +static int +emit_and_reset_fail_pop(struct compiler *c, pattern_context *pc) +{ + if (!pc->fail_pop_size) { + assert(pc->fail_pop == NULL); + NEXT_BLOCK(c); + return 1; + } + while (--pc->fail_pop_size) { + compiler_use_next_block(c, pc->fail_pop[pc->fail_pop_size]); + if (!compiler_addop(c, POP_TOP)) { + pc->fail_pop_size = 0; + PyObject_Free(pc->fail_pop); + pc->fail_pop = NULL; + return 0; + } + } + compiler_use_next_block(c, pc->fail_pop[0]); + PyObject_Free(pc->fail_pop); + pc->fail_pop = NULL; + return 1; +} + +static int +compiler_error_duplicate_store(struct compiler *c, identifier n) +{ + return compiler_error(c, "multiple assignments to name %R in pattern", n); +} + static int pattern_helper_store_name(struct compiler *c, identifier n, pattern_context *pc) { @@ -5621,22 +5713,16 @@ pattern_helper_store_name(struct compiler *c, identifier n, pattern_context *pc) return 0; } // Can't assign to the same name twice: - if (pc->stores == NULL) { - RETURN_IF_FALSE(pc->stores = PySet_New(NULL)); + int duplicate = PySequence_Contains(pc->stores, n); + if (duplicate < 0) { + return 0; } - else { - int duplicate = PySet_Contains(pc->stores, n); - if (duplicate < 0) { - return 0; - } - if (duplicate) { - const char *e = "multiple assignments to name %R in pattern"; - return compiler_error(c, e, n); - } + if (duplicate) { + return compiler_error_duplicate_store(c, n); } - RETURN_IF_FALSE(!PySet_Add(pc->stores, n)); - RETURN_IF_FALSE(compiler_nameop(c, n, Store)); - return 1; + // Rotate this object underneath any items we need to preserve: + ADDOP_I(c, ROT_N, pc->on_top + PyList_GET_SIZE(pc->stores) + 1); + return !PyList_Append(pc->stores, n); } @@ -5672,65 +5758,17 @@ pattern_helper_sequence_unpack(struct compiler *c, asdl_pattern_seq *patterns, Py_ssize_t star, pattern_context *pc) { 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(patterns); - fails = (basicblock **)PyObject_Malloc(sizeof(basicblock*) * size); - if (fails == NULL) { - PyErr_NoMemory(); - return 0; - } - // NOTE: Can't use our nice returning macros anymore: they'll leak memory! - // goto error on error. - for (Py_ssize_t i = 0; i < size; i++) { - fails[i] = compiler_new_block(c); - if (fails[i] == NULL) { - goto error; - } - } + // We've now got a bunch of new subjects on the stack. They need to remain + // there after each subpattern match: + pc->on_top += size; for (Py_ssize_t i = 0; i < size; i++) { + // One less item to keep track of each time we loop through: + pc->on_top--; 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) - { - goto error; - } - } - // Success! - basicblock *end = compiler_new_block(c); - if (end == NULL || - !compiler_addop_load_const(c, Py_True) || - !compiler_addop_j(c, JUMP_FORWARD, end)) - { - goto error; - } - // This is where we handle failed sub-patterns. For a sequence pattern like - // [a, b, c, d], this will look like: - // fails[0]: POP_TOP - // fails[1]: POP_TOP - // fails[2]: POP_TOP - // fails[3]: LOAD_CONST False - for (Py_ssize_t i = 0; i < size - 1; i++) { - compiler_use_next_block(c, fails[i]); - if (!compiler_addop(c, POP_TOP)) { - goto error; - } - } - compiler_use_next_block(c, fails[size - 1]); - if (!compiler_addop_load_const(c, Py_False)) { - goto error; + RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); } - compiler_use_next_block(c, end); - PyObject_Free(fails); return 1; -error: - PyObject_Free(fails); - return 0; } // Like pattern_helper_sequence_unpack, but uses BINARY_SUBSCR instead of @@ -5740,9 +5778,8 @@ static int 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)); + // We need to keep the subject around for extracting elements: + pc->on_top++; Py_ssize_t size = asdl_seq_LEN(patterns); for (Py_ssize_t i = 0; i < size; i++) { pattern_ty pattern = asdl_seq_GET(patterns, i); @@ -5766,16 +5803,10 @@ pattern_helper_sequence_subscr(struct compiler *c, asdl_pattern_seq *patterns, } ADDOP(c, BINARY_SUBSCR); RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); } + // Pop the subject, we're done with it: + pc->on_top--; ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); - ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, fail_pop_1); - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } @@ -5804,26 +5835,15 @@ compiler_pattern_as(struct compiler *c, pattern_ty p, pattern_context *pc) const char *e = "wildcard makes remaining patterns unreachable"; return compiler_error(c, e); } - RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.MatchAs.name, pc)); - ADDOP_LOAD_CONST(c, Py_True); - return 1; + return pattern_helper_store_name(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)); // Need to make a copy for (possibly) storing later: + pc->on_top++; ADDOP(c, DUP_TOP); RETURN_IF_FALSE(compiler_pattern(c, p->v.MatchAs.pattern, pc)); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); + // Success! Store it: + pc->on_top--; RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.MatchAs.name, pc)); - ADDOP_LOAD_CONST(c, Py_True); - ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, fail_pop_1); - // Need to pop that unused copy from before: - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } @@ -5832,7 +5852,6 @@ compiler_pattern_star(struct compiler *c, pattern_ty p, pattern_context *pc) { assert(p->kind == MatchStar_kind); RETURN_IF_FALSE(pattern_helper_store_name(c, p->v.MatchStar.name, pc)); - ADDOP_LOAD_CONST(c, Py_True); return 1; } @@ -5884,9 +5903,6 @@ compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) RETURN_IF_FALSE(!validate_kwd_attrs(c, kwd_attrs, kwd_patterns)); c->u->u_col_offset = p->col_offset; // validate_kwd_attrs moves this } - 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.MatchClass.cls); PyObject *attr_names; RETURN_IF_FALSE(attr_names = PyTuple_New(nattrs)); @@ -5898,9 +5914,9 @@ compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) } 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. + // TOS is now a tuple of (nargs + nattrs) attributes. Preserve it: + pc->on_top++; + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); for (i = 0; i < nargs + nattrs; i++) { pattern_ty pattern; if (i < nargs) { @@ -5919,17 +5935,10 @@ compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(i)); ADDOP(c, BINARY_SUBSCR); RETURN_IF_FALSE(compiler_pattern_subpattern(c, pattern, pc)); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); } // Success! Pop the tuple of attributes: + pc->on_top--; ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); - ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, fail_pop_1); - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } @@ -5937,10 +5946,6 @@ static int 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.MatchMapping.keys; asdl_pattern_seq *patterns = p->v.MatchMapping.patterns; Py_ssize_t size = asdl_seq_LEN(keys); @@ -5953,18 +5958,14 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) } // We have a double-star target if "rest" is set PyObject *star_target = p->v.MatchMapping.rest; + // We need to keep the subject on top during the mapping and length checks: + pc->on_top++; ADDOP(c, MATCH_MAPPING); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); if (!size && !star_target) { - // If the pattern is just "{}", we're done! - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); - ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, fail_pop_1); + // If the pattern is just "{}", we're done! Pop the subject: + pc->on_top--; ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } if (size) { @@ -5972,8 +5973,7 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) ADDOP(c, GET_LEN); 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); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); } if (INT_MAX < size - 1) { return compiler_error(c, "too many sub-patterns in mapping pattern"); @@ -5996,9 +5996,10 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) } 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 + // There's now a tuple of keys and a tuple of values on top of the subject: + pc->on_top += 2; + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); + // So far so good. Use that tuple of values on the stack to match // sub-patterns against: for (Py_ssize_t i = 0; i < size; i++) { pattern_ty pattern = asdl_seq_GET(patterns, i); @@ -6009,10 +6010,10 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(i)); ADDOP(c, BINARY_SUBSCR); 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. + // If we get this far, it's a match! We're done with the tuple of values, + // and whatever happens next should consume the tuple of keys underneath it: + pc->on_top -= 2; ADDOP(c, POP_TOP); if (star_target) { // If we have a starred name, bind a dict of remaining items to it: @@ -6024,19 +6025,8 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) ADDOP(c, POP_TOP); } // Pop the subject: + pc->on_top--; ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); - ADDOP_JUMP(c, JUMP_FORWARD, end); - // The top two items are a tuple of values or None, followed by a tuple of - // keys. Pop them both: - compiler_use_next_block(c, fail_pop_3); - ADDOP(c, POP_TOP); - ADDOP(c, POP_TOP); - compiler_use_next_block(c, fail_pop_1); - // Pop the subject: - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } @@ -6044,69 +6034,148 @@ static int 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 - // others bind the same names (they should), then this becomes pc->stores. - PyObject *control = NULL; - basicblock *end, *pass_pop_1; + basicblock *end; RETURN_IF_FALSE(end = compiler_new_block(c)); - RETURN_IF_FALSE(pass_pop_1 = compiler_new_block(c)); Py_ssize_t size = asdl_seq_LEN(p->v.MatchOr.patterns); assert(size > 1); // We're going to be messing with pc. Keep the original info handy: - PyObject *stores_init = pc->stores; - int allow_irrefutable = pc->allow_irrefutable; + pattern_context old_pc = *pc; + Py_INCREF(pc->stores); + // control is the list of names bound by the first alternative. It is used + // for checking different name bindings in alternatives, and for correcting + // the order in which extracted elements are placed on the stack. + PyObject *control = NULL; + // NOTE: We can't use returning macros anymore! goto error on error. for (Py_ssize_t i = 0; i < size; i++) { - // NOTE: Can't use our nice returning macros in here: they'll leak sets! 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; - pc->allow_irrefutable = allow_irrefutable && is_last; SET_LOC(c, alt); - if (pc->stores == NULL || - // Only copy the subject if we're *not* on the last alternative: - (!is_last && !compiler_addop(c, DUP_TOP)) || - !compiler_pattern(c, alt, pc) || - // Only jump if we're *not* on the last alternative: - (!is_last && !compiler_addop_j(c, POP_JUMP_IF_TRUE, pass_pop_1)) || - !compiler_next_block(c)) - { - goto fail; + PyObject *pc_stores = PyList_New(0); + if (pc_stores == NULL) { + goto error; + } + Py_SETREF(pc->stores, pc_stores); + // An irrefutable sub-pattern must be last, if it is allowed at all: + pc->allow_irrefutable = (i == size - 1) && old_pc.allow_irrefutable; + pc->fail_pop = NULL; + pc->fail_pop_size = 0; + pc->on_top = 0; + if (!compiler_addop(c, DUP_TOP) || !compiler_pattern(c, alt, pc)) { + goto error; } + // Success! + Py_ssize_t nstores = PyList_GET_SIZE(pc->stores); if (!i) { - // If this is the first alternative, save its stores as a "control" - // for the others (they can't bind a different set of names): + // This is the first alternative, so save its stores as a "control" + // for the others (they can't bind a different set of names, and + // might need to be reordered): + assert(control == NULL); control = pc->stores; - continue; - } - if (PySet_GET_SIZE(pc->stores) || PySet_GET_SIZE(control)) { - // Otherwise, check to see if we differ from the control set: - PyObject *diff = PyNumber_InPlaceXor(pc->stores, control); - if (diff == NULL) { - goto fail; - } - if (PySet_GET_SIZE(diff)) { - // The names differ! Raise. - Py_DECREF(diff); - compiler_error(c, "alternative patterns bind different names"); - goto fail; + Py_INCREF(control); + } + else if (nstores != PyList_GET_SIZE(control)) { + goto diff; + } + else if (nstores) { + // There were captures. Check to see if we differ from control: + Py_ssize_t icontrol = nstores; + while (icontrol--) { + PyObject *name = PyList_GET_ITEM(control, icontrol); + Py_ssize_t istores = PySequence_Index(pc->stores, name); + if (istores < 0) { + PyErr_Clear(); + goto diff; + } + if (icontrol != istores) { + // Reorder the names on the stack to match the order of the + // names in control. There's probably a better way of doing + // this; the current solution is potentially very + // inefficient when each alternative subpattern binds lots + // of names in different orders. It's fine for reasonable + // cases, though. + assert(istores < icontrol); + Py_ssize_t rotations = istores + 1; + // Perfom the same rotation on pc->stores: + PyObject *rotated = PyList_GetSlice(pc->stores, 0, + rotations); + if (rotated == NULL || + PyList_SetSlice(pc->stores, 0, rotations, NULL) || + PyList_SetSlice(pc->stores, icontrol - istores, + icontrol - istores, rotated)) + { + Py_XDECREF(rotated); + goto error; + } + Py_DECREF(rotated); + // That just did: + // rotated = pc_stores[:rotations] + // del pc_stores[:rotations] + // pc_stores[icontrol-istores:icontrol-istores] = rotated + // Do the same thing to the stack, using several ROT_Ns: + while (rotations--) { + if (!compiler_addop_i(c, ROT_N, icontrol + 1)) { + goto error; + } + } + } } - Py_DECREF(diff); } - Py_DECREF(pc->stores); + assert(control); + if (!compiler_addop_j(c, JUMP_FORWARD, end) || + !compiler_next_block(c) || + !emit_and_reset_fail_pop(c, pc)) + { + goto error; + } + } + Py_DECREF(pc->stores); + *pc = old_pc; + Py_INCREF(pc->stores); + // Need to NULL this for the PyObject_Free call in the error block. + old_pc.fail_pop = NULL; + // No match. Pop the remaining copy of the subject and fail: + if (!compiler_addop(c, POP_TOP) || !jump_to_fail_pop(c, pc, JUMP_FORWARD)) { + goto error; } - Py_XDECREF(stores_init); - // Update pc->stores and restore pc->allow_irrefutable: - pc->stores = control; - pc->allow_irrefutable = allow_irrefutable; - ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, pass_pop_1); - ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); compiler_use_next_block(c, end); + Py_ssize_t nstores = PyList_GET_SIZE(control); + // There's a bunch of stuff on the stack between any where the new stores + // are and where they need to be: + // - The other stores. + // - A copy of the subject. + // - Anything else that may be on top of the stack. + // - Any previous stores we've already stashed away on the stack. + int nrots = nstores + 1 + pc->on_top + PyList_GET_SIZE(pc->stores); + for (Py_ssize_t i = 0; i < nstores; i++) { + // Rotate this capture to its proper place on the stack: + if (!compiler_addop_i(c, ROT_N, nrots)) { + goto error; + } + // Update the list of previous stores with this new name, checking for + // duplicates: + PyObject *name = PyList_GET_ITEM(control, i); + int dupe = PySequence_Contains(pc->stores, name); + if (dupe < 0) { + goto error; + } + if (dupe) { + compiler_error_duplicate_store(c, name); + goto error; + } + if (PyList_Append(pc->stores, name)) { + goto error; + } + } + Py_DECREF(old_pc.stores); + Py_DECREF(control); + // NOTE: Returning macros are safe again. + // Pop the copy of the subject: + ADDOP(c, POP_TOP); return 1; -fail: - Py_XDECREF(stores_init); +diff: + compiler_error(c, "alternative patterns bind different names"); +error: + PyObject_Free(old_pc.fail_pop); + Py_DECREF(old_pc.stores); Py_XDECREF(control); return 0; } @@ -6136,32 +6205,29 @@ compiler_pattern_sequence(struct compiler *c, pattern_ty p, pattern_context *pc) } only_wildcard &= WILDCARD_CHECK(pattern); } - basicblock *end, *fail_pop_1; - RETURN_IF_FALSE(end = compiler_new_block(c)); - RETURN_IF_FALSE(fail_pop_1 = compiler_new_block(c)); + // We need to keep the subject on top during the sequence and length checks: + pc->on_top++; ADDOP(c, MATCH_SEQUENCE); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); if (star < 0) { // No star: len(subject) == size ADDOP(c, GET_LEN); ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(size)); ADDOP_COMPARE(c, Eq); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); } else if (size > 1) { // Star: len(subject) >= size - 1 ADDOP(c, GET_LEN); ADDOP_LOAD_CONST_NEW(c, PyLong_FromSsize_t(size - 1)); ADDOP_COMPARE(c, GtE); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, fail_pop_1); - NEXT_BLOCK(c); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); } + // Whatever comes next should consume the subject: + pc->on_top--; if (only_wildcard) { // Patterns like: [] / [_] / [_, _] / [*_] / [_, *_] / [_, _, *_] / etc. ADDOP(c, POP_TOP); - ADDOP_LOAD_CONST(c, Py_True); } else if (star_wildcard) { RETURN_IF_FALSE(pattern_helper_sequence_subscr(c, patterns, star, pc)); @@ -6169,11 +6235,6 @@ compiler_pattern_sequence(struct compiler *c, pattern_ty p, pattern_context *pc) else { 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); - ADDOP(c, POP_TOP) - ADDOP_LOAD_CONST(c, Py_False); - compiler_use_next_block(c, end); return 1; } @@ -6188,6 +6249,7 @@ compiler_pattern_value(struct compiler *c, pattern_ty p, pattern_context *pc) } VISIT(c, expr, value); ADDOP_COMPARE(c, Eq); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); return 1; } @@ -6197,6 +6259,7 @@ 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); ADDOP_COMPARE(c, Is); + RETURN_IF_FALSE(jump_to_fail_pop(c, pc, POP_JUMP_IF_FALSE)); return 1; } @@ -6229,39 +6292,48 @@ compiler_pattern(struct compiler *c, pattern_ty p, pattern_context *pc) } static int -compiler_match(struct compiler *c, stmt_ty s) +compiler_match_inner(struct compiler *c, stmt_ty s, pattern_context *pc) { VISIT(c, expr, s->v.Match.subject); - basicblock *next, *end; + basicblock *end; RETURN_IF_FALSE(end = compiler_new_block(c)); Py_ssize_t cases = asdl_seq_LEN(s->v.Match.cases); assert(cases > 0); - pattern_context pc; - // We use pc.stores to track: - // - Repeated name assignments in the same pattern. - // - Different name assignments in alternatives. - // It's a set of names, but we don't create it until it's needed: - pc.stores = NULL; match_case_ty m = asdl_seq_GET(s->v.Match.cases, cases - 1); int has_default = WILDCARD_CHECK(m->pattern) && 1 < cases; for (Py_ssize_t i = 0; i < cases - has_default; i++) { m = asdl_seq_GET(s->v.Match.cases, i); SET_LOC(c, m->pattern); - RETURN_IF_FALSE(next = compiler_new_block(c)); - // If pc.allow_irrefutable is 0, any name captures against our subject - // will raise. Irrefutable cases must be either guarded, last, or both: - pc.allow_irrefutable = m->guard != NULL || i == cases - 1; // Only copy the subject if we're *not* on the last case: if (i != cases - has_default - 1) { ADDOP(c, DUP_TOP); } - int result = compiler_pattern(c, m->pattern, &pc); - Py_CLEAR(pc.stores); - RETURN_IF_FALSE(result); - ADDOP_JUMP(c, POP_JUMP_IF_FALSE, next); - NEXT_BLOCK(c); + RETURN_IF_FALSE(pc->stores = PyList_New(0)); + // Irrefutable cases must be either guarded, last, or both: + pc->allow_irrefutable = m->guard != NULL || i == cases - 1; + pc->fail_pop = NULL; + pc->fail_pop_size = 0; + pc->on_top = 0; + // NOTE: Can't use returning macros here (they'll leak pc->stores)! + if (!compiler_pattern(c, m->pattern, pc)) { + Py_DECREF(pc->stores); + return 0; + } + assert(!pc->on_top); + // It's a match! Store all of the captured names (they're on the stack). + Py_ssize_t nstores = PyList_GET_SIZE(pc->stores); + for (Py_ssize_t n = 0; n < nstores; n++) { + PyObject *name = PyList_GET_ITEM(pc->stores, n); + if (!compiler_nameop(c, name, Store)) { + Py_DECREF(pc->stores); + return 0; + } + } + Py_DECREF(pc->stores); + // NOTE: Returning macros are safe again. if (m->guard) { - RETURN_IF_FALSE(compiler_jump_if(c, m->guard, next, 0)); + RETURN_IF_FALSE(ensure_fail_pop(c, pc, 0)); + RETURN_IF_FALSE(compiler_jump_if(c, m->guard, pc->fail_pop[0], 0)); } // Success! Pop the subject off, we're done with it: if (i != cases - has_default - 1) { @@ -6269,7 +6341,7 @@ compiler_match(struct compiler *c, stmt_ty s) } VISIT_SEQ(c, stmt, m->body); ADDOP_JUMP(c, JUMP_FORWARD, end); - compiler_use_next_block(c, next); + RETURN_IF_FALSE(emit_and_reset_fail_pop(c, pc)); } if (has_default) { if (cases == 1) { @@ -6289,6 +6361,16 @@ compiler_match(struct compiler *c, stmt_ty s) return 1; } +static int +compiler_match(struct compiler *c, stmt_ty s) +{ + pattern_context pc; + pc.fail_pop = NULL; + int result = compiler_match_inner(c, s, &pc); + PyObject_Free(pc.fail_pop); + return result; +} + #undef WILDCARD_CHECK #undef WILDCARD_STAR_CHECK @@ -7031,6 +7113,38 @@ fold_tuple_on_constants(struct compiler *c, } +// Eliminate n * ROT_N(n). +static void +fold_rotations(struct instr *inst, int n) +{ + for (int i = 0; i < n; i++) { + int rot; + switch (inst[i].i_opcode) { + case ROT_N: + rot = inst[i].i_oparg; + break; + case ROT_FOUR: + rot = 4; + break; + case ROT_THREE: + rot = 3; + break; + case ROT_TWO: + rot = 2; + break; + default: + return; + } + if (rot != n) { + return; + } + } + for (int i = 0; i < n; i++) { + inst[i].i_opcode = NOP; + } +} + + static int eliminate_jump_to_jump(basicblock *bb, int opcode) { assert (bb->b_iused > 0); @@ -7273,6 +7387,27 @@ optimize_basic_block(struct compiler *c, basicblock *bb, PyObject *consts) bb->b_exit = 1; } } + break; + case ROT_N: + switch (oparg) { + case 0: + case 1: + inst->i_opcode = NOP; + continue; + case 2: + inst->i_opcode = ROT_TWO; + break; + case 3: + inst->i_opcode = ROT_THREE; + break; + case 4: + inst->i_opcode = ROT_FOUR; + break; + } + if (i >= oparg - 1) { + fold_rotations(inst - oparg + 1, oparg); + } + break; } } return 0; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 6b9bd0df8135d7..8f4eeb0e53483a 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -357,7 +357,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,115,36,0,0,0,16,5,6,1,22,1,4,255, 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, + 0,105,111,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, @@ -471,7 +471,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,111,109,95,115,111,117,114,99,101,124,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, @@ -552,7 +552,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 111,109,95,99,97,99,104,101,195,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, @@ -587,7 +587,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,115,111,117,114,99,101,102,105,108,101,235,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, @@ -600,7 +600,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,103,101,116,95,99,97,99,104,101,100,254,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, @@ -615,7 +615,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 111,100,101,10,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, @@ -652,7 +652,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 97,109,101,95,119,114,97,112,112,101,114,30,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, @@ -670,7 +670,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,42,2, + 0,0,114,8,0,0,0,218,5,95,119,114,97,112,43,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, @@ -678,7 +678,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 109,101,22,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, @@ -713,7 +713,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 105,109,53,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, @@ -780,7 +780,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 97,115,115,105,102,121,95,112,121,99,73,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, @@ -835,7 +835,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 116,105,109,101,115,116,97,109,112,95,112,121,99,106,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, @@ -882,7 +882,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 121,99,134,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, @@ -906,7 +906,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 158,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, @@ -924,7 +924,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 112,121,99,171,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, @@ -942,7 +942,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,180,2,0,0,115,14,0,0,0, + 97,115,104,95,112,121,99,181,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, @@ -970,7 +970,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 192,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, @@ -1035,7 +1035,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 209,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, @@ -1074,7 +1074,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,37,3,0,0,115,10,0,0,0,2,2,16,1,12,1, + 121,38,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, @@ -1101,7 +1101,7 @@ 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,30,0,0,0,6, + 103,105,115,116,114,121,45,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, @@ -1124,7 +1124,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,99,60,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, @@ -1152,7 +1152,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 100,117,108,101,76,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, @@ -1165,7 +1165,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,214,0,0,0,26,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, @@ -1201,7 +1201,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,0,0,114,206,0,0,0,98,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, @@ -1211,7 +1211,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,105, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,106, 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, @@ -1232,7 +1232,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,109,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, @@ -1243,14 +1243,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 11,108,111,97,100,95,109,111,100,117,108,101,117,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,114,235,0,0,0,93,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, @@ -1275,7 +1275,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 109,101,125,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, @@ -1309,7 +1309,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 116,97,116,115,133,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, @@ -1333,7 +1333,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 99,111,100,101,147,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, @@ -1350,7 +1350,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 157,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, @@ -1370,7 +1370,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,164,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, @@ -1392,7 +1392,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,173,3,0, + 111,117,114,99,101,95,116,111,95,99,111,100,101,174,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, @@ -1468,7 +1468,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,182, 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, @@ -1486,7 +1486,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,249,0,0,0,123,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, @@ -1513,7 +1513,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,8,0,0,0,114,236,0,0,0,16,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, @@ -1523,7 +1523,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 22,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, @@ -1531,7 +1531,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,218,8,95,95,104,97,115,104,95,95,26,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, @@ -1546,7 +1546,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 29,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, @@ -1556,7 +1556,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 203,0,0,0,41,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, @@ -1577,7 +1577,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,45,4,0,0,115, + 0,114,8,0,0,0,114,255,0,0,0,46,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, @@ -1590,7 +1590,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,101,97,100,101,114,55,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, @@ -1599,7 +1599,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 8,0,0,0,114,11,1,0,0,11,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, @@ -1622,7 +1622,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 252,0,0,0,65,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, @@ -1632,7 +1632,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,69,4,0,0,115, + 0,114,8,0,0,0,114,254,0,0,0,70,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, @@ -1668,7 +1668,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,75,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, @@ -1677,7 +1677,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,0,0,114,8,0,0,0,114,34,1,0,0,61,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, @@ -1699,7 +1699,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,7,0,0,0,114,8,0,0,0,114,241,0,0,0,110, 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, @@ -1710,13 +1710,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,1,1,0,0,126,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, + 8,0,0,0,114,41,1,0,0,106,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, @@ -1737,20 +1737,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,8,0,0,0,114,236,0,0,0,139,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,0,0,114,16,1,0,0,143,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, + 7,0,0,0,114,8,0,0,0,114,22,1,0,0,147,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, @@ -1767,7 +1767,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,7,0,0,0,114,8,0,0,0,114,239,0,0,0,150, 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, @@ -1785,7 +1785,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,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, + 0,114,245,0,0,0,158,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, @@ -1803,14 +1803,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,166,4,0,0,115,6,0,0,0,6, + 0,114,9,0,0,0,167,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,0,0,114,206,0,0,0,164,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, @@ -1821,7 +1821,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 8,0,0,0,114,241,0,0,0,170,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, @@ -1831,14 +1831,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,114,1,1,0,0,174,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, + 178,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, @@ -1846,7 +1846,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,0,0,114,8,0,0,0,114,30,1,0,0,131,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, @@ -1889,7 +1889,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,236,0,0,0,191,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, @@ -1907,7 +1907,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 115,197,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, @@ -1920,7 +1920,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,207,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, @@ -1936,7 +1936,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 97,116,101,211,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, @@ -1945,7 +1945,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,95,95,224,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, @@ -1953,7 +1953,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,226,4,0,0,114,61,1,0,0, + 116,105,116,101,109,95,95,227,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, @@ -1962,14 +1962,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,229,4,0,0,115,2,0,0,0,14,1,122,26,95,78, + 95,230,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, + 101,110,95,95,233,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, @@ -1978,7 +1978,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,95,236,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, @@ -1986,7 +1986,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,95,239,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, @@ -1994,7 +1994,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 242,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, @@ -2002,7 +2002,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 8,0,0,0,114,47,1,0,0,184,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, @@ -2019,7 +2019,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 114,236,0,0,0,248,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, @@ -2043,21 +2043,21 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,95,114,101,112,114,251,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, + 114,206,0,0,0,6,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, + 0,9,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, @@ -2066,20 +2066,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 241,0,0,0,12,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, + 8,0,0,0,114,239,0,0,0,15,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, + 0,0,114,245,0,0,0,18,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, @@ -2097,7 +2097,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 248,0,0,0,21,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, @@ -2108,7 +2108,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,0,0,114,33,1,0,0,33,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, @@ -2117,7 +2117,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,246,4,0,0,115,22,0,0, + 0,0,0,114,73,1,0,0,247,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, @@ -2154,7 +2154,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,78,1,0,0,44,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, @@ -2174,7 +2174,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 107,115,54,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, @@ -2206,7 +2206,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,67,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, @@ -2236,7 +2236,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 103,97,99,121,95,103,101,116,95,115,112,101,99,89,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, @@ -2268,7 +2268,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 218,9,95,103,101,116,95,115,112,101,99,110,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, @@ -2295,7 +2295,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,114,8,0,0,0,114,226,0,0,0,142,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, @@ -2323,7 +2323,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 166,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, @@ -2355,7 +2355,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, - 181,5,0,0,115,4,0,0,0,12,10,16,1,122,29,80, + 182,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, @@ -2364,7 +2364,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,77,1,0,0,40,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, @@ -2411,7 +2411,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 9,0,0,0,211,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, @@ -2425,7 +2425,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 205,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, @@ -2435,7 +2435,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 1,0,0,221,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, @@ -2466,7 +2466,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 161,0,0,0,227,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, @@ -2477,7 +2477,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 91,1,0,0,242,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, @@ -2533,7 +2533,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 8,0,0,0,114,226,0,0,0,247,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, @@ -2565,7 +2565,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 7,0,0,0,114,8,0,0,0,114,13,0,0,0,71,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, @@ -2582,7 +2582,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,41, + 114,7,0,0,0,114,8,0,0,0,114,102,1,0,0,42, 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, @@ -2621,7 +2621,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,70,105,108,101,70,105,110,100,101,114,83,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, @@ -2629,14 +2629,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 111,111,107,73,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, + 7,0,0,0,114,8,0,0,0,114,68,1,0,0,91,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, @@ -2645,7 +2645,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 0,0,114,94,1,0,0,196,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, @@ -2668,7 +2668,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 95,102,105,120,95,117,112,95,109,111,100,117,108,101,97,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, @@ -2689,7 +2689,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 120,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, @@ -2697,7 +2697,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 117,108,101,131,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, @@ -2712,7 +2712,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 8,0,0,0,218,8,95,105,110,115,116,97,108,108,136,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, @@ -2757,7 +2757,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,29,12,1,4,2,4,1,6, + 8,10,5,10,22,0,127,16,30,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/Python/opcode_targets.h b/Python/opcode_targets.h index e20a89862ef303..951f8f8a5569f7 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -98,7 +98,7 @@ static void *opcode_targets[256] = { &&TARGET_DELETE_ATTR, &&TARGET_STORE_GLOBAL, &&TARGET_DELETE_GLOBAL, - &&_unknown_opcode, + &&TARGET_ROT_N, &&TARGET_LOAD_CONST, &&TARGET_LOAD_NAME, &&TARGET_BUILD_TUPLE, From webhook-mailer at python.org Sun May 2 16:14:34 2021 From: webhook-mailer at python.org (rhettinger) Date: Sun, 02 May 2021 20:14:34 -0000 Subject: [Python-checkins] bpo-43990: Fix the footnote ordering in the operator precedence docs (GH-25805) (GH-25819) Message-ID: https://github.com/python/cpython/commit/e60b1e150d708c40fa3c51d012d9bf471f04bc70 commit: e60b1e150d708c40fa3c51d012d9bf471f04bc70 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-02T13:14:30-07:00 summary: bpo-43990: Fix the footnote ordering in the operator precedence docs (GH-25805) (GH-25819) files: M Doc/reference/expressions.rst diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 3bb3834ce09dea..8fead33efb911d 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1908,8 +1908,8 @@ precedence and have a left-to-right chaining feature as described in the the :keyword:`is` operator, like those involving comparisons between instance methods, or constants. Check their documentation for more info. -.. [#] The ``%`` operator is also used for string formatting; the same - precedence applies. - .. [#] The power operator ``**`` binds less tightly than an arithmetic or bitwise unary operator on its right, that is, ``2**-1`` is ``0.5``. + +.. [#] The ``%`` operator is also used for string formatting; the same + precedence applies. From webhook-mailer at python.org Sun May 2 17:03:48 2021 From: webhook-mailer at python.org (jaraco) Date: Sun, 02 May 2021 21:03:48 -0000 Subject: [Python-checkins] bpo-43926: Cleaner metadata with PEP 566 JSON support. (GH-25565) Message-ID: https://github.com/python/cpython/commit/37e0c7850de902179b28f1378fbbc38a5ed3628c commit: 37e0c7850de902179b28f1378fbbc38a5ed3628c branch: master author: Jason R. Coombs committer: jaraco date: 2021-05-02T17:03:40-04:00 summary: bpo-43926: Cleaner metadata with PEP 566 JSON support. (GH-25565) * bpo-43926: Cleaner metadata with PEP 566 JSON support. * Add blurb * Add versionchanged and versionadded declarations for changes to metadata. * Use descriptor for PEP 566 files: A Lib/importlib/metadata/__init__.py A Lib/importlib/metadata/_adapters.py A Lib/importlib/metadata/_collections.py A Lib/importlib/metadata/_functools.py A Lib/importlib/metadata/_itertools.py A Lib/importlib/metadata/_meta.py A Lib/importlib/metadata/_text.py A Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst D Lib/importlib/_collections.py D Lib/importlib/_functools.py D Lib/importlib/_itertools.py D Lib/importlib/metadata.py M Doc/library/importlib.metadata.rst M Lib/test/test_importlib/fixtures.py M Lib/test/test_importlib/test_main.py M Lib/test/test_importlib/test_metadata_api.py diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 40e48d1beec0c7..9bedee5af28f69 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -170,6 +170,19 @@ the values are returned unparsed from the distribution metadata:: >>> wheel_metadata['Requires-Python'] # doctest: +SKIP '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' +``PackageMetadata`` also presents a ``json`` attribute that returns +all the metadata in a JSON-compatible form per :PEP:`566`:: + + >>> wheel_metadata.json['requires_python'] + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' + +.. versionchanged:: 3.10 + The ``Description`` is now included in the metadata when presented + through the payload. Line continuation characters have been removed. + +.. versionadded:: 3.10 + The ``json`` attribute was added. + .. _version: diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata/__init__.py similarity index 97% rename from Lib/importlib/metadata.py rename to Lib/importlib/metadata/__init__.py index 7a427eb3b2870a..142162196fa9b3 100644 --- a/Lib/importlib/metadata.py +++ b/Lib/importlib/metadata/__init__.py @@ -14,6 +14,7 @@ import posixpath import collections +from . import _adapters, _meta from ._collections import FreezableDefaultDict, Pair from ._functools import method_cache from ._itertools import unique_everseen @@ -22,7 +23,7 @@ from importlib import import_module from importlib.abc import MetaPathFinder from itertools import starmap -from typing import Any, List, Mapping, Optional, Protocol, TypeVar, Union +from typing import List, Mapping, Optional, Union __all__ = [ @@ -385,25 +386,6 @@ def __repr__(self): return ''.format(self.mode, self.value) -_T = TypeVar("_T") - - -class PackageMetadata(Protocol): - def __len__(self) -> int: - ... # pragma: no cover - - def __contains__(self, item: str) -> bool: - ... # pragma: no cover - - def __getitem__(self, key: str) -> str: - ... # pragma: no cover - - def get_all(self, name: str, failobj: _T = ...) -> Union[List[Any], _T]: - """ - Return all values associated with a possibly multi-valued key. - """ - - class Distribution: """A Python distribution package.""" @@ -488,7 +470,7 @@ def _local(cls, root='.'): return PathDistribution(zipfile.Path(meta.build_as_zip(builder))) @property - def metadata(self) -> PackageMetadata: + def metadata(self) -> _meta.PackageMetadata: """Return the parsed metadata for this Distribution. The returned object will have keys that name the various bits of @@ -502,7 +484,7 @@ def metadata(self) -> PackageMetadata: # (which points to the egg-info file) attribute unchanged. or self.read_text('') ) - return email.message_from_string(text) + return _adapters.Message(email.message_from_string(text)) @property def name(self): @@ -829,7 +811,7 @@ def distributions(**kwargs): return Distribution.discover(**kwargs) -def metadata(distribution_name) -> PackageMetadata: +def metadata(distribution_name) -> _meta.PackageMetadata: """Get the metadata for the named package. :param distribution_name: The name of the distribution package to query. diff --git a/Lib/importlib/metadata/_adapters.py b/Lib/importlib/metadata/_adapters.py new file mode 100644 index 00000000000000..ab086180fc35fc --- /dev/null +++ b/Lib/importlib/metadata/_adapters.py @@ -0,0 +1,67 @@ +import re +import textwrap +import email.message + +from ._text import FoldedCase + + +class Message(email.message.Message): + multiple_use_keys = set( + map( + FoldedCase, + [ + 'Classifier', + 'Obsoletes-Dist', + 'Platform', + 'Project-URL', + 'Provides-Dist', + 'Provides-Extra', + 'Requires-Dist', + 'Requires-External', + 'Supported-Platform', + ], + ) + ) + """ + Keys that may be indicated multiple times per PEP 566. + """ + + def __new__(cls, orig: email.message.Message): + res = super().__new__(cls) + vars(res).update(vars(orig)) + return res + + def __init__(self, *args, **kwargs): + self._headers = self._repair_headers() + + # suppress spurious error from mypy + def __iter__(self): + return super().__iter__() + + def _repair_headers(self): + def redent(value): + "Correct for RFC822 indentation" + if not value or '\n' not in value: + return value + return textwrap.dedent(' ' * 8 + value) + + headers = [(key, redent(value)) for key, value in vars(self)['_headers']] + if self._payload: + headers.append(('Description', self.get_payload())) + return headers + + @property + def json(self): + """ + Convert PackageMetadata to a JSON-compatible format + per PEP 0566. + """ + + def transform(key): + value = self.get_all(key) if key in self.multiple_use_keys else self[key] + if key == 'Keywords': + value = re.split(r'\s+', value) + tk = key.lower().replace('-', '_') + return tk, value + + return dict(map(transform, map(FoldedCase, self))) diff --git a/Lib/importlib/_collections.py b/Lib/importlib/metadata/_collections.py similarity index 100% rename from Lib/importlib/_collections.py rename to Lib/importlib/metadata/_collections.py diff --git a/Lib/importlib/_functools.py b/Lib/importlib/metadata/_functools.py similarity index 100% rename from Lib/importlib/_functools.py rename to Lib/importlib/metadata/_functools.py diff --git a/Lib/importlib/_itertools.py b/Lib/importlib/metadata/_itertools.py similarity index 100% rename from Lib/importlib/_itertools.py rename to Lib/importlib/metadata/_itertools.py diff --git a/Lib/importlib/metadata/_meta.py b/Lib/importlib/metadata/_meta.py new file mode 100644 index 00000000000000..04d9a0235368ed --- /dev/null +++ b/Lib/importlib/metadata/_meta.py @@ -0,0 +1,29 @@ +from typing import Any, Dict, Iterator, List, Protocol, TypeVar, Union + + +_T = TypeVar("_T") + + +class PackageMetadata(Protocol): + def __len__(self) -> int: + ... # pragma: no cover + + def __contains__(self, item: str) -> bool: + ... # pragma: no cover + + def __getitem__(self, key: str) -> str: + ... # pragma: no cover + + def __iter__(self) -> Iterator[str]: + ... # pragma: no cover + + def get_all(self, name: str, failobj: _T = ...) -> Union[List[Any], _T]: + """ + Return all values associated with a possibly multi-valued key. + """ + + @property + def json(self) -> Dict[str, Union[str, List[str]]]: + """ + A JSON-compatible form of the metadata. + """ diff --git a/Lib/importlib/metadata/_text.py b/Lib/importlib/metadata/_text.py new file mode 100644 index 00000000000000..766979d93c1694 --- /dev/null +++ b/Lib/importlib/metadata/_text.py @@ -0,0 +1,99 @@ +import re + +from ._functools import method_cache + + +# from jaraco.text 3.5 +class FoldedCase(str): + """ + A case insensitive string class; behaves just like str + except compares equal when the only variation is case. + + >>> s = FoldedCase('hello world') + + >>> s == 'Hello World' + True + + >>> 'Hello World' == s + True + + >>> s != 'Hello World' + False + + >>> s.index('O') + 4 + + >>> s.split('O') + ['hell', ' w', 'rld'] + + >>> sorted(map(FoldedCase, ['GAMMA', 'alpha', 'Beta'])) + ['alpha', 'Beta', 'GAMMA'] + + Sequence membership is straightforward. + + >>> "Hello World" in [s] + True + >>> s in ["Hello World"] + True + + You may test for set inclusion, but candidate and elements + must both be folded. + + >>> FoldedCase("Hello World") in {s} + True + >>> s in {FoldedCase("Hello World")} + True + + String inclusion works as long as the FoldedCase object + is on the right. + + >>> "hello" in FoldedCase("Hello World") + True + + But not if the FoldedCase object is on the left: + + >>> FoldedCase('hello') in 'Hello World' + False + + In that case, use in_: + + >>> FoldedCase('hello').in_('Hello World') + True + + >>> FoldedCase('hello') > FoldedCase('Hello') + False + """ + + def __lt__(self, other): + return self.lower() < other.lower() + + def __gt__(self, other): + return self.lower() > other.lower() + + def __eq__(self, other): + return self.lower() == other.lower() + + def __ne__(self, other): + return self.lower() != other.lower() + + def __hash__(self): + return hash(self.lower()) + + def __contains__(self, other): + return super(FoldedCase, self).lower().__contains__(other.lower()) + + def in_(self, other): + "Does self appear in other?" + return self in FoldedCase(other) + + # cache lower since it's likely to be called frequently. + @method_cache + def lower(self): + return super(FoldedCase, self).lower() + + def index(self, sub): + return self.lower().index(sub.lower()) + + def split(self, splitter=' ', maxsplit=0): + pattern = re.compile(re.escape(splitter), re.I) + return pattern.split(self, maxsplit) diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 1ae70c70f10a55..12ed07d33744a5 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -1,5 +1,6 @@ import os import sys +import copy import shutil import pathlib import tempfile @@ -108,6 +109,16 @@ def setUp(self): super(DistInfoPkg, self).setUp() build_files(DistInfoPkg.files, self.site_dir) + def make_uppercase(self): + """ + Rewrite metadata with everything uppercase. + """ + shutil.rmtree(self.site_dir / "distinfo_pkg-1.0.0.dist-info") + files = copy.deepcopy(DistInfoPkg.files) + info = files["distinfo_pkg-1.0.0.dist-info"] + info["METADATA"] = info["METADATA"].upper() + build_files(files, self.site_dir) + class DistInfoPkgWithDot(OnSysPath, SiteDir): files: FilesDef = { diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 08069c9a5de77d..52cb63712a5cb0 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -125,7 +125,7 @@ def pkg_with_non_ascii_description(site_dir): metadata_dir.mkdir() metadata = metadata_dir / 'METADATA' with metadata.open('w', encoding='utf-8') as fp: - fp.write('Description: p?r?tend\n') + fp.write('Description: p?r?tend') return 'portend' @staticmethod @@ -145,7 +145,7 @@ def pkg_with_non_ascii_description_egg_info(site_dir): p?r?tend """ - ).lstrip() + ).strip() ) return 'portend' @@ -157,7 +157,7 @@ def test_metadata_loads(self): def test_metadata_loads_egg_info(self): pkg_name = self.pkg_with_non_ascii_description_egg_info(self.site_dir) meta = metadata(pkg_name) - assert meta.get_payload() == 'p?r?tend\n' + assert meta['Description'] == 'p?r?tend' class DiscoveryTests(fixtures.EggInfoPkg, fixtures.DistInfoPkg, unittest.TestCase): diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 657c16603f668a..825edc10f121a2 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -231,6 +231,29 @@ def test_more_complex_deps_requires_text(self): assert deps == expected + def test_as_json(self): + md = metadata('distinfo-pkg').json + assert 'name' in md + assert md['keywords'] == ['sample', 'package'] + desc = md['description'] + assert desc.startswith('Once upon a time\nThere was') + assert len(md['requires_dist']) == 2 + + def test_as_json_egg_info(self): + md = metadata('egginfo-pkg').json + assert 'name' in md + assert md['keywords'] == ['sample', 'package'] + desc = md['description'] + assert desc.startswith('Once upon a time\nThere was') + assert len(md['classifier']) == 2 + + def test_as_json_odd_case(self): + self.make_uppercase() + md = metadata('distinfo-pkg').json + assert 'name' in md + assert len(md['requires_dist']) == 2 + assert md['keywords'] == ['SAMPLE', 'PACKAGE'] + class LegacyDots(fixtures.DistInfoPkgWithDotLegacy, unittest.TestCase): def test_name_normalization(self): diff --git a/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst b/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst new file mode 100644 index 00000000000000..45f29a84cd599f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst @@ -0,0 +1,4 @@ +In ``importlib.metadata``, provide a uniform interface to ``Description``, +allow for any field to be encoded with multiline values, remove continuation +lines from multiline values, and add a ``.json`` property for easy access to +the PEP 566 JSON-compatible form. Sync with ``importlib_metadata 4.0``. From webhook-mailer at python.org Sun May 2 17:25:26 2021 From: webhook-mailer at python.org (zooba) Date: Sun, 02 May 2021 21:25:26 -0000 Subject: [Python-checkins] bpo-43434: Move sqlite3.connect audit events to sqlite3.Connection.__init__ (GH-25818) Message-ID: https://github.com/python/cpython/commit/c96cc089f60d2bf7e003c27413c3239ee9de2990 commit: c96cc089f60d2bf7e003c27413c3239ee9de2990 branch: master author: Erlend Egeberg Aasland committer: zooba date: 2021-05-02T22:25:17+01:00 summary: bpo-43434: Move sqlite3.connect audit events to sqlite3.Connection.__init__ (GH-25818) files: A Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.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/Lib/test/audit-tests.py b/Lib/test/audit-tests.py index ed42451b8f08af..7a7de637c38823 100644 --- a/Lib/test/audit-tests.py +++ b/Lib/test/audit-tests.py @@ -367,13 +367,14 @@ def hook(event, *args): print(event, *args) sys.addaudithook(hook) - cx = sqlite3.connect(":memory:") + cx1 = sqlite3.connect(":memory:") + cx2 = sqlite3.Connection(":memory:") # Configured without --enable-loadable-sqlite-extensions if hasattr(sqlite3.Connection, "enable_load_extension"): - cx.enable_load_extension(False) + cx1.enable_load_extension(False) try: - cx.load_extension("test") + cx1.load_extension("test") except sqlite3.OperationalError: pass else: diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py index 4ba62c408526d3..25ff34bb11298a 100644 --- a/Lib/test/test_audit.py +++ b/Lib/test/test_audit.py @@ -158,7 +158,7 @@ def test_sqlite3(self): if support.verbose: print(*events, sep='\n') actual = [ev[0] for ev in events] - expected = ["sqlite3.connect", "sqlite3.connect/handle"] + expected = ["sqlite3.connect", "sqlite3.connect/handle"] * 2 if hasattr(sqlite3.Connection, "enable_load_extension"): expected += [ diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst new file mode 100644 index 00000000000000..b5a3f8d7587498 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst @@ -0,0 +1,4 @@ +Creating :class:`sqlite3.Connection` objects now also produces +``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events +`. Previously these events were only produced by +:func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 5f8e41b6169a76..fb5411243c6798 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -86,6 +86,10 @@ pysqlite_connection_init(pysqlite_Connection *self, PyObject *args, return -1; } + if (PySys_Audit("sqlite3.connect", "O", database_obj) < 0) { + return -1; + } + database = PyBytes_AsString(database_obj); self->initialized = 1; @@ -179,6 +183,10 @@ pysqlite_connection_init(pysqlite_Connection *self, PyObject *args, self->ProgrammingError = pysqlite_ProgrammingError; self->NotSupportedError = pysqlite_NotSupportedError; + if (PySys_Audit("sqlite3.connect/handle", "O", self) < 0) { + return -1; + } + return 0; } diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 2f323fcd00141f..324994641b4a4a 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -91,20 +91,11 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* factory = (PyObject*)pysqlite_ConnectionType; } - if (PySys_Audit("sqlite3.connect", "O", database) < 0) { - return NULL; - } - 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 Sun May 2 17:34:23 2021 From: webhook-mailer at python.org (asvetlov) Date: Sun, 02 May 2021 21:34:23 -0000 Subject: [Python-checkins] bpo-44011: New asyncio ssl implementation (#17975) Message-ID: https://github.com/python/cpython/commit/5fb06edbbb769561e245d0fe13002bab50e2ae60 commit: 5fb06edbbb769561e245d0fe13002bab50e2ae60 branch: master author: Andrew Svetlov committer: asvetlov date: 2021-05-03T00:34:15+03:00 summary: bpo-44011: New asyncio ssl implementation (#17975) files: A Lib/test/test_asyncio/test_ssl.py A Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst M Lib/asyncio/base_events.py M Lib/asyncio/constants.py M Lib/asyncio/events.py M Lib/asyncio/proactor_events.py M Lib/asyncio/selector_events.py M Lib/asyncio/sslproto.py M Lib/asyncio/unix_events.py M Lib/test/test_asyncio/test_base_events.py M Lib/test/test_asyncio/test_selector_events.py M Lib/test/test_asyncio/test_sslproto.py diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index f789635e0f893a..e54ee309e42e6f 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -273,7 +273,7 @@ async def restore(self): class Server(events.AbstractServer): def __init__(self, loop, sockets, protocol_factory, ssl_context, backlog, - ssl_handshake_timeout): + ssl_handshake_timeout, ssl_shutdown_timeout=None): self._loop = loop self._sockets = sockets self._active_count = 0 @@ -282,6 +282,7 @@ def __init__(self, loop, sockets, protocol_factory, ssl_context, backlog, self._backlog = backlog self._ssl_context = ssl_context self._ssl_handshake_timeout = ssl_handshake_timeout + self._ssl_shutdown_timeout = ssl_shutdown_timeout self._serving = False self._serving_forever_fut = None @@ -313,7 +314,8 @@ def _start_serving(self): sock.listen(self._backlog) self._loop._start_serving( self._protocol_factory, sock, self._ssl_context, - self, self._backlog, self._ssl_handshake_timeout) + self, self._backlog, self._ssl_handshake_timeout, + self._ssl_shutdown_timeout) def get_loop(self): return self._loop @@ -467,6 +469,7 @@ def _make_ssl_transport( *, server_side=False, server_hostname=None, extra=None, server=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, call_connection_made=True): """Create SSL transport.""" raise NotImplementedError @@ -969,6 +972,7 @@ async def create_connection( proto=0, flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, happy_eyeballs_delay=None, interleave=None): """Connect to a TCP server. @@ -1004,6 +1008,10 @@ async def create_connection( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') + if ssl_shutdown_timeout is not None and not ssl: + raise ValueError( + 'ssl_shutdown_timeout is only meaningful with ssl') + if happy_eyeballs_delay is not None and interleave is None: # If using happy eyeballs, default to interleave addresses by family interleave = 1 @@ -1079,7 +1087,8 @@ async def create_connection( transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) if self._debug: # Get the socket from the transport because SSL transport closes # the old socket and creates a new SSL socket @@ -1091,7 +1100,8 @@ async def create_connection( async def _create_connection_transport( self, sock, protocol_factory, ssl, server_hostname, server_side=False, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): sock.setblocking(False) @@ -1102,7 +1112,8 @@ async def _create_connection_transport( transport = self._make_ssl_transport( sock, protocol, sslcontext, waiter, server_side=server_side, server_hostname=server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) else: transport = self._make_socket_transport(sock, protocol, waiter) @@ -1193,7 +1204,8 @@ async def _sendfile_fallback(self, transp, file, offset, count): async def start_tls(self, transport, protocol, sslcontext, *, server_side=False, server_hostname=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): """Upgrade transport to TLS. Return a new transport that *protocol* should start using @@ -1216,6 +1228,7 @@ async def start_tls(self, transport, protocol, sslcontext, *, self, protocol, sslcontext, waiter, server_side, server_hostname, ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout, call_connection_made=False) # Pause early so that "ssl_protocol.data_received()" doesn't @@ -1414,6 +1427,7 @@ async def create_server( reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, start_serving=True): """Create a TCP server. @@ -1437,6 +1451,10 @@ async def create_server( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') + if ssl_shutdown_timeout is not None and ssl is None: + raise ValueError( + 'ssl_shutdown_timeout is only meaningful with ssl') + if host is not None or port is not None: if sock is not None: raise ValueError( @@ -1509,7 +1527,8 @@ async def create_server( sock.setblocking(False) server = Server(self, sockets, protocol_factory, - ssl, backlog, ssl_handshake_timeout) + ssl, backlog, ssl_handshake_timeout, + ssl_shutdown_timeout) if start_serving: server._start_serving() # Skip one loop iteration so that all 'loop.add_reader' @@ -1523,7 +1542,8 @@ async def create_server( async def connect_accepted_socket( self, protocol_factory, sock, *, ssl=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): if sock.type != socket.SOCK_STREAM: raise ValueError(f'A Stream Socket was expected, got {sock!r}') @@ -1531,9 +1551,14 @@ async def connect_accepted_socket( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') + if ssl_shutdown_timeout is not None and not ssl: + raise ValueError( + 'ssl_shutdown_timeout is only meaningful with ssl') + transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, '', server_side=True, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) if self._debug: # Get the socket from the transport because SSL transport closes # the old socket and creates a new SSL socket diff --git a/Lib/asyncio/constants.py b/Lib/asyncio/constants.py index 33feed60e55b00..f171ead28fecd3 100644 --- a/Lib/asyncio/constants.py +++ b/Lib/asyncio/constants.py @@ -15,10 +15,17 @@ # The default timeout matches that of Nginx. SSL_HANDSHAKE_TIMEOUT = 60.0 +# Number of seconds to wait for SSL shutdown to complete +# The default timeout mimics lingering_time +SSL_SHUTDOWN_TIMEOUT = 30.0 + # Used in sendfile fallback code. We use fallback for platforms # that don't support sendfile, or for TLS connections. SENDFILE_FALLBACK_READBUFFER_SIZE = 1024 * 256 +FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB +FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB + # The enum should be here to break circular dependencies between # base_events and sslproto class _SendfileMode(enum.Enum): diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index b966ad26bf467b..d5254fa5e7e73e 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -304,6 +304,7 @@ async def create_connection( flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, happy_eyeballs_delay=None, interleave=None): raise NotImplementedError @@ -313,6 +314,7 @@ async def create_server( flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, start_serving=True): """A coroutine which creates a TCP server bound to host and port. @@ -353,6 +355,10 @@ async def create_server( will wait for completion of the SSL handshake before aborting the connection. Default is 60s. + ssl_shutdown_timeout is the time in seconds that an SSL server + will wait for completion of the SSL shutdown procedure + before aborting the connection. Default is 30s. + start_serving set to True (default) causes the created server to start accepting connections immediately. When set to False, the user should await Server.start_serving() or Server.serve_forever() @@ -371,7 +377,8 @@ async def sendfile(self, transport, file, offset=0, count=None, async def start_tls(self, transport, protocol, sslcontext, *, server_side=False, server_hostname=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): """Upgrade a transport to TLS. Return a new transport that *protocol* should start using @@ -383,13 +390,15 @@ async def create_unix_connection( self, protocol_factory, path=None, *, ssl=None, sock=None, server_hostname=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): raise NotImplementedError async def create_unix_server( self, protocol_factory, path=None, *, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, start_serving=True): """A coroutine which creates a UNIX Domain Socket server. @@ -411,6 +420,9 @@ async def create_unix_server( ssl_handshake_timeout is the time in seconds that an SSL server will wait for the SSL handshake to complete (defaults to 60s). + ssl_shutdown_timeout is the time in seconds that an SSL server + will wait for the SSL shutdown to finish (defaults to 30s). + start_serving set to True (default) causes the created server to start accepting connections immediately. When set to False, the user should await Server.start_serving() or Server.serve_forever() @@ -421,7 +433,8 @@ async def create_unix_server( async def connect_accepted_socket( self, protocol_factory, sock, *, ssl=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): """Handle an accepted connection. This is used by servers that accept connections outside of diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py index 45c11ee4b487ec..10852afe2b4138 100644 --- a/Lib/asyncio/proactor_events.py +++ b/Lib/asyncio/proactor_events.py @@ -642,11 +642,13 @@ def _make_ssl_transport( self, rawsock, protocol, sslcontext, waiter=None, *, server_side=False, server_hostname=None, extra=None, server=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): ssl_protocol = sslproto.SSLProtocol( self, protocol, sslcontext, waiter, server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) _ProactorSocketTransport(self, rawsock, ssl_protocol, extra=extra, server=server) return ssl_protocol._app_transport @@ -812,7 +814,8 @@ def _write_to_self(self): def _start_serving(self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): def loop(f=None): try: @@ -826,7 +829,8 @@ def loop(f=None): self._make_ssl_transport( conn, protocol, sslcontext, server_side=True, extra={'peername': addr}, server=server, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) else: self._make_socket_transport( conn, protocol, diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 59cb6b1babec54..63ab15f30fb5d7 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -70,11 +70,15 @@ def _make_ssl_transport( self, rawsock, protocol, sslcontext, waiter=None, *, server_side=False, server_hostname=None, extra=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, + ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT, + ): ssl_protocol = sslproto.SSLProtocol( - self, protocol, sslcontext, waiter, - server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout) + self, protocol, sslcontext, waiter, + server_side, server_hostname, + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout + ) _SelectorSocketTransport(self, rawsock, ssl_protocol, extra=extra, server=server) return ssl_protocol._app_transport @@ -146,15 +150,17 @@ def _write_to_self(self): def _start_serving(self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, + ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): self._add_reader(sock.fileno(), self._accept_connection, protocol_factory, sock, sslcontext, server, backlog, - ssl_handshake_timeout) + ssl_handshake_timeout, ssl_shutdown_timeout) def _accept_connection( self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, + ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): # This method is only called once for each event loop tick where the # listening socket has triggered an EVENT_READ. There may be multiple # connections waiting for an .accept() so it is called in a loop. @@ -185,20 +191,22 @@ def _accept_connection( self.call_later(constants.ACCEPT_RETRY_DELAY, self._start_serving, protocol_factory, sock, sslcontext, server, - backlog, ssl_handshake_timeout) + backlog, ssl_handshake_timeout, + ssl_shutdown_timeout) else: raise # The event loop will catch, log and ignore it. else: extra = {'peername': addr} accept = self._accept_connection2( protocol_factory, conn, extra, sslcontext, server, - ssl_handshake_timeout) + ssl_handshake_timeout, ssl_shutdown_timeout) self.create_task(accept) async def _accept_connection2( self, protocol_factory, conn, extra, sslcontext=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, + ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): protocol = None transport = None try: @@ -208,7 +216,8 @@ async def _accept_connection2( transport = self._make_ssl_transport( conn, protocol, sslcontext, waiter=waiter, server_side=True, extra=extra, server=server, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) else: transport = self._make_socket_transport( conn, protocol, waiter=waiter, extra=extra, diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index cad25b26539f5a..e71875ba9f0093 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -1,4 +1,5 @@ import collections +import enum import warnings try: import ssl @@ -6,10 +7,37 @@ ssl = None from . import constants +from . import exceptions from . import protocols from . import transports from .log import logger +SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError) + + +class SSLProtocolState(enum.Enum): + UNWRAPPED = "UNWRAPPED" + DO_HANDSHAKE = "DO_HANDSHAKE" + WRAPPED = "WRAPPED" + FLUSHING = "FLUSHING" + SHUTDOWN = "SHUTDOWN" + + +class AppProtocolState(enum.Enum): + # This tracks the state of app protocol (https://git.io/fj59P): + # + # INIT -cm-> CON_MADE [-dr*->] [-er-> EOF?] -cl-> CON_LOST + # + # * cm: connection_made() + # * dr: data_received() + # * er: eof_received() + # * cl: connection_lost() + + STATE_INIT = "STATE_INIT" + STATE_CON_MADE = "STATE_CON_MADE" + STATE_EOF = "STATE_EOF" + STATE_CON_LOST = "STATE_CON_LOST" + def _create_transport_context(server_side, server_hostname): if server_side: @@ -25,269 +53,35 @@ def _create_transport_context(server_side, server_hostname): return sslcontext -# States of an _SSLPipe. -_UNWRAPPED = "UNWRAPPED" -_DO_HANDSHAKE = "DO_HANDSHAKE" -_WRAPPED = "WRAPPED" -_SHUTDOWN = "SHUTDOWN" - - -class _SSLPipe(object): - """An SSL "Pipe". - - An SSL pipe allows you to communicate with an SSL/TLS protocol instance - through memory buffers. It can be used to implement a security layer for an - existing connection where you don't have access to the connection's file - descriptor, or for some reason you don't want to use it. - - An SSL pipe can be in "wrapped" and "unwrapped" mode. In unwrapped mode, - data is passed through untransformed. In wrapped mode, application level - data is encrypted to SSL record level data and vice versa. The SSL record - level is the lowest level in the SSL protocol suite and is what travels - as-is over the wire. - - An SslPipe initially is in "unwrapped" mode. To start SSL, call - do_handshake(). To shutdown SSL again, call unwrap(). - """ - - max_size = 256 * 1024 # Buffer size passed to read() - - def __init__(self, context, server_side, server_hostname=None): - """ - The *context* argument specifies the ssl.SSLContext to use. - - The *server_side* argument indicates whether this is a server side or - client side transport. - - The optional *server_hostname* argument can be used to specify the - hostname you are connecting to. You may only specify this parameter if - the _ssl module supports Server Name Indication (SNI). - """ - self._context = context - self._server_side = server_side - self._server_hostname = server_hostname - self._state = _UNWRAPPED - self._incoming = ssl.MemoryBIO() - self._outgoing = ssl.MemoryBIO() - self._sslobj = None - self._need_ssldata = False - self._handshake_cb = None - self._shutdown_cb = None - - @property - def context(self): - """The SSL context passed to the constructor.""" - return self._context - - @property - def ssl_object(self): - """The internal ssl.SSLObject instance. - - Return None if the pipe is not wrapped. - """ - return self._sslobj - - @property - def need_ssldata(self): - """Whether more record level data is needed to complete a handshake - that is currently in progress.""" - return self._need_ssldata - - @property - def wrapped(self): - """ - Whether a security layer is currently in effect. - - Return False during handshake. - """ - return self._state == _WRAPPED - - def do_handshake(self, callback=None): - """Start the SSL handshake. - - Return a list of ssldata. A ssldata element is a list of buffers - - The optional *callback* argument can be used to install a callback that - will be called when the handshake is complete. The callback will be - called with None if successful, else an exception instance. - """ - if self._state != _UNWRAPPED: - raise RuntimeError('handshake in progress or completed') - self._sslobj = self._context.wrap_bio( - self._incoming, self._outgoing, - server_side=self._server_side, - server_hostname=self._server_hostname) - self._state = _DO_HANDSHAKE - self._handshake_cb = callback - ssldata, appdata = self.feed_ssldata(b'', only_handshake=True) - assert len(appdata) == 0 - return ssldata - - def shutdown(self, callback=None): - """Start the SSL shutdown sequence. - - Return a list of ssldata. A ssldata element is a list of buffers - - The optional *callback* argument can be used to install a callback that - will be called when the shutdown is complete. The callback will be - called without arguments. - """ - if self._state == _UNWRAPPED: - raise RuntimeError('no security layer present') - if self._state == _SHUTDOWN: - raise RuntimeError('shutdown in progress') - assert self._state in (_WRAPPED, _DO_HANDSHAKE) - self._state = _SHUTDOWN - self._shutdown_cb = callback - ssldata, appdata = self.feed_ssldata(b'') - assert appdata == [] or appdata == [b''] - return ssldata - - def feed_eof(self): - """Send a potentially "ragged" EOF. - - This method will raise an SSL_ERROR_EOF exception if the EOF is - unexpected. - """ - self._incoming.write_eof() - ssldata, appdata = self.feed_ssldata(b'') - assert appdata == [] or appdata == [b''] - - def feed_ssldata(self, data, only_handshake=False): - """Feed SSL record level data into the pipe. - - The data must be a bytes instance. It is OK to send an empty bytes - instance. This can be used to get ssldata for a handshake initiated by - this endpoint. - - Return a (ssldata, appdata) tuple. The ssldata element is a list of - buffers containing SSL data that needs to be sent to the remote SSL. - - The appdata element is a list of buffers containing plaintext data that - needs to be forwarded to the application. The appdata list may contain - an empty buffer indicating an SSL "close_notify" alert. This alert must - be acknowledged by calling shutdown(). - """ - if self._state == _UNWRAPPED: - # If unwrapped, pass plaintext data straight through. - if data: - appdata = [data] - else: - appdata = [] - return ([], appdata) - - self._need_ssldata = False - if data: - self._incoming.write(data) - - ssldata = [] - appdata = [] - try: - if self._state == _DO_HANDSHAKE: - # Call do_handshake() until it doesn't raise anymore. - self._sslobj.do_handshake() - self._state = _WRAPPED - if self._handshake_cb: - self._handshake_cb(None) - if only_handshake: - return (ssldata, appdata) - # Handshake done: execute the wrapped block - - if self._state == _WRAPPED: - # Main state: read data from SSL until close_notify - while True: - chunk = self._sslobj.read(self.max_size) - appdata.append(chunk) - if not chunk: # close_notify - break +def add_flowcontrol_defaults(high, low, kb): + if high is None: + if low is None: + hi = kb * 1024 + else: + lo = low + hi = 4 * lo + else: + hi = high + if low is None: + lo = hi // 4 + else: + lo = low - elif self._state == _SHUTDOWN: - # Call shutdown() until it doesn't raise anymore. - self._sslobj.unwrap() - self._sslobj = None - self._state = _UNWRAPPED - if self._shutdown_cb: - self._shutdown_cb() - - elif self._state == _UNWRAPPED: - # Drain possible plaintext data after close_notify. - appdata.append(self._incoming.read()) - except (ssl.SSLError, ssl.CertificateError) as exc: - exc_errno = getattr(exc, 'errno', None) - if exc_errno not in ( - ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE, - ssl.SSL_ERROR_SYSCALL): - if self._state == _DO_HANDSHAKE and self._handshake_cb: - self._handshake_cb(exc) - raise - self._need_ssldata = (exc_errno == ssl.SSL_ERROR_WANT_READ) - - # Check for record level data that needs to be sent back. - # Happens for the initial handshake and renegotiations. - if self._outgoing.pending: - ssldata.append(self._outgoing.read()) - return (ssldata, appdata) - - def feed_appdata(self, data, offset=0): - """Feed plaintext data into the pipe. - - Return an (ssldata, offset) tuple. The ssldata element is a list of - buffers containing record level data that needs to be sent to the - remote SSL instance. The offset is the number of plaintext bytes that - were processed, which may be less than the length of data. - - NOTE: In case of short writes, this call MUST be retried with the SAME - buffer passed into the *data* argument (i.e. the id() must be the - same). This is an OpenSSL requirement. A further particularity is that - a short write will always have offset == 0, because the _ssl module - does not enable partial writes. And even though the offset is zero, - there will still be encrypted data in ssldata. - """ - assert 0 <= offset <= len(data) - if self._state == _UNWRAPPED: - # pass through data in unwrapped mode - if offset < len(data): - ssldata = [data[offset:]] - else: - ssldata = [] - return (ssldata, len(data)) + if not hi >= lo >= 0: + raise ValueError('high (%r) must be >= low (%r) must be >= 0' % + (hi, lo)) - ssldata = [] - view = memoryview(data) - while True: - self._need_ssldata = False - try: - if offset < len(view): - offset += self._sslobj.write(view[offset:]) - except ssl.SSLError as exc: - # It is not allowed to call write() after unwrap() until the - # close_notify is acknowledged. We return the condition to the - # caller as a short write. - exc_errno = getattr(exc, 'errno', None) - if exc.reason == 'PROTOCOL_IS_SHUTDOWN': - exc_errno = exc.errno = ssl.SSL_ERROR_WANT_READ - if exc_errno not in (ssl.SSL_ERROR_WANT_READ, - ssl.SSL_ERROR_WANT_WRITE, - ssl.SSL_ERROR_SYSCALL): - raise - self._need_ssldata = (exc_errno == ssl.SSL_ERROR_WANT_READ) - - # See if there's any record level data back for us. - if self._outgoing.pending: - ssldata.append(self._outgoing.read()) - if offset == len(view) or self._need_ssldata: - break - return (ssldata, offset) + return hi, lo class _SSLProtocolTransport(transports._FlowControlMixin, transports.Transport): + _start_tls_compatible = True _sendfile_compatible = constants._SendfileMode.FALLBACK def __init__(self, loop, ssl_protocol): self._loop = loop - # SSLProtocol instance self._ssl_protocol = ssl_protocol self._closed = False @@ -315,16 +109,15 @@ def close(self): self._closed = True self._ssl_protocol._start_shutdown() - def __del__(self, _warn=warnings.warn): + def __del__(self, _warnings=warnings): if not self._closed: - _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) - self.close() + self._closed = True + _warnings.warn( + "unclosed transport ", ResourceWarning) def is_reading(self): - tr = self._ssl_protocol._transport - if tr is None: - raise RuntimeError('SSL transport has not been initialized yet') - return tr.is_reading() + return not self._ssl_protocol._app_reading_paused def pause_reading(self): """Pause the receiving end. @@ -332,7 +125,7 @@ def pause_reading(self): No data will be passed to the protocol's data_received() method until resume_reading() is called. """ - self._ssl_protocol._transport.pause_reading() + self._ssl_protocol._pause_reading() def resume_reading(self): """Resume the receiving end. @@ -340,7 +133,7 @@ def resume_reading(self): Data received will once again be passed to the protocol's data_received() method. """ - self._ssl_protocol._transport.resume_reading() + self._ssl_protocol._resume_reading() def set_write_buffer_limits(self, high=None, low=None): """Set the high- and low-water limits for write flow control. @@ -361,16 +154,51 @@ def set_write_buffer_limits(self, high=None, low=None): reduces opportunities for doing I/O and computation concurrently. """ - self._ssl_protocol._transport.set_write_buffer_limits(high, low) + self._ssl_protocol._set_write_buffer_limits(high, low) + self._ssl_protocol._control_app_writing() + + def get_write_buffer_limits(self): + return (self._ssl_protocol._outgoing_low_water, + self._ssl_protocol._outgoing_high_water) def get_write_buffer_size(self): - """Return the current size of the write buffer.""" - return self._ssl_protocol._transport.get_write_buffer_size() + """Return the current size of the write buffers.""" + return self._ssl_protocol._get_write_buffer_size() + + def set_read_buffer_limits(self, high=None, low=None): + """Set the high- and low-water limits for read flow control. + + These two values control when to call the upstream transport's + pause_reading() and resume_reading() methods. If specified, + the low-water limit must be less than or equal to the + high-water limit. Neither value can be negative. + + The defaults are implementation-specific. If only the + high-water limit is given, the low-water limit defaults to an + implementation-specific value less than or equal to the + high-water limit. Setting high to zero forces low to zero as + well, and causes pause_reading() to be called whenever the + buffer becomes non-empty. Setting low to zero causes + resume_reading() to be called only once the buffer is empty. + Use of zero for either limit is generally sub-optimal as it + reduces opportunities for doing I/O and computation + concurrently. + """ + self._ssl_protocol._set_read_buffer_limits(high, low) + self._ssl_protocol._control_ssl_reading() + + def get_read_buffer_limits(self): + return (self._ssl_protocol._incoming_low_water, + self._ssl_protocol._incoming_high_water) + + def get_read_buffer_size(self): + """Return the current size of the read buffer.""" + return self._ssl_protocol._get_read_buffer_size() @property def _protocol_paused(self): # Required for sendfile fallback pause_writing/resume_writing logic - return self._ssl_protocol._transport._protocol_paused + return self._ssl_protocol._app_writing_paused def write(self, data): """Write some data bytes to the transport. @@ -383,7 +211,22 @@ def write(self, data): f"got {type(data).__name__}") if not data: return - self._ssl_protocol._write_appdata(data) + self._ssl_protocol._write_appdata((data,)) + + def writelines(self, list_of_data): + """Write a list (or any iterable) of data bytes to the transport. + + The default implementation concatenates the arguments and + calls write() on the result. + """ + self._ssl_protocol._write_appdata(list_of_data) + + def write_eof(self): + """Close the write end after flushing buffered data. + + This raises :exc:`NotImplementedError` right now. + """ + raise NotImplementedError def can_write_eof(self): """Return True if this transport supports write_eof(), False if not.""" @@ -396,23 +239,36 @@ def abort(self): The protocol's connection_lost() method will (eventually) be called with None as its argument. """ + self._closed = True self._ssl_protocol._abort() + + def _force_close(self, exc): self._closed = True + self._ssl_protocol._abort(exc) + def _test__append_write_backlog(self, data): + # for test only + self._ssl_protocol._write_backlog.append(data) + self._ssl_protocol._write_buffer_size += len(data) -class SSLProtocol(protocols.Protocol): - """SSL protocol. - Implementation of SSL on top of a socket using incoming and outgoing - buffers which are ssl.MemoryBIO objects. - """ +class SSLProtocol(protocols.BufferedProtocol): + max_size = 256 * 1024 # Buffer size passed to read() + + _handshake_start_time = None + _handshake_timeout_handle = None + _shutdown_timeout_handle = None def __init__(self, loop, app_protocol, sslcontext, waiter, server_side=False, server_hostname=None, call_connection_made=True, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): if ssl is None: - raise RuntimeError('stdlib ssl module not available') + raise RuntimeError("stdlib ssl module not available") + + self._ssl_buffer = bytearray(self.max_size) + self._ssl_buffer_view = memoryview(self._ssl_buffer) if ssl_handshake_timeout is None: ssl_handshake_timeout = constants.SSL_HANDSHAKE_TIMEOUT @@ -420,6 +276,12 @@ def __init__(self, loop, app_protocol, sslcontext, waiter, raise ValueError( f"ssl_handshake_timeout should be a positive number, " f"got {ssl_handshake_timeout}") + if ssl_shutdown_timeout is None: + ssl_shutdown_timeout = constants.SSL_SHUTDOWN_TIMEOUT + elif ssl_shutdown_timeout <= 0: + raise ValueError( + f"ssl_shutdown_timeout should be a positive number, " + f"got {ssl_shutdown_timeout}") if not sslcontext: sslcontext = _create_transport_context( @@ -442,21 +304,54 @@ def __init__(self, loop, app_protocol, sslcontext, waiter, self._waiter = waiter self._loop = loop self._set_app_protocol(app_protocol) - self._app_transport = _SSLProtocolTransport(self._loop, self) - # _SSLPipe instance (None until the connection is made) - self._sslpipe = None - self._session_established = False - self._in_handshake = False - self._in_shutdown = False + self._app_transport = None + self._app_transport_created = False # transport, ex: SelectorSocketTransport self._transport = None - self._call_connection_made = call_connection_made self._ssl_handshake_timeout = ssl_handshake_timeout + self._ssl_shutdown_timeout = ssl_shutdown_timeout + # SSL and state machine + self._incoming = ssl.MemoryBIO() + self._outgoing = ssl.MemoryBIO() + self._state = SSLProtocolState.UNWRAPPED + self._conn_lost = 0 # Set when connection_lost called + if call_connection_made: + self._app_state = AppProtocolState.STATE_INIT + else: + self._app_state = AppProtocolState.STATE_CON_MADE + self._sslobj = self._sslcontext.wrap_bio( + self._incoming, self._outgoing, + server_side=self._server_side, + server_hostname=self._server_hostname) + + # Flow Control + + self._ssl_writing_paused = False + + self._app_reading_paused = False + + self._ssl_reading_paused = False + self._incoming_high_water = 0 + self._incoming_low_water = 0 + self._set_read_buffer_limits() + self._eof_received = False + + self._app_writing_paused = False + self._outgoing_high_water = 0 + self._outgoing_low_water = 0 + self._set_write_buffer_limits() + self._get_app_transport() def _set_app_protocol(self, app_protocol): self._app_protocol = app_protocol - self._app_protocol_is_buffer = \ - isinstance(app_protocol, protocols.BufferedProtocol) + # Make fast hasattr check first + if (hasattr(app_protocol, 'get_buffer') and + isinstance(app_protocol, protocols.BufferedProtocol)): + self._app_protocol_get_buffer = app_protocol.get_buffer + self._app_protocol_buffer_updated = app_protocol.buffer_updated + self._app_protocol_is_buffer = True + else: + self._app_protocol_is_buffer = False def _wakeup_waiter(self, exc=None): if self._waiter is None: @@ -468,15 +363,20 @@ def _wakeup_waiter(self, exc=None): self._waiter.set_result(None) self._waiter = None + def _get_app_transport(self): + if self._app_transport is None: + if self._app_transport_created: + raise RuntimeError('Creating _SSLProtocolTransport twice') + self._app_transport = _SSLProtocolTransport(self._loop, self) + self._app_transport_created = True + return self._app_transport + def connection_made(self, transport): """Called when the low-level connection is made. Start the SSL handshake. """ self._transport = transport - self._sslpipe = _SSLPipe(self._sslcontext, - self._server_side, - self._server_hostname) self._start_handshake() def connection_lost(self, exc): @@ -486,72 +386,58 @@ def connection_lost(self, exc): meaning a regular EOF is received or the connection was aborted or closed). """ - if self._session_established: - self._session_established = False - self._loop.call_soon(self._app_protocol.connection_lost, exc) - else: - # Most likely an exception occurred while in SSL handshake. - # Just mark the app transport as closed so that its __del__ - # doesn't complain. - if self._app_transport is not None: - self._app_transport._closed = True + self._write_backlog.clear() + self._outgoing.read() + self._conn_lost += 1 + + # Just mark the app transport as closed so that its __dealloc__ + # doesn't complain. + if self._app_transport is not None: + self._app_transport._closed = True + + if self._state != SSLProtocolState.DO_HANDSHAKE: + if ( + self._app_state == AppProtocolState.STATE_CON_MADE or + self._app_state == AppProtocolState.STATE_EOF + ): + self._app_state = AppProtocolState.STATE_CON_LOST + self._loop.call_soon(self._app_protocol.connection_lost, exc) + self._set_state(SSLProtocolState.UNWRAPPED) self._transport = None self._app_transport = None - if getattr(self, '_handshake_timeout_handle', None): - self._handshake_timeout_handle.cancel() - self._wakeup_waiter(exc) self._app_protocol = None - self._sslpipe = None + self._wakeup_waiter(exc) - def pause_writing(self): - """Called when the low-level transport's buffer goes over - the high-water mark. - """ - self._app_protocol.pause_writing() + if self._shutdown_timeout_handle: + self._shutdown_timeout_handle.cancel() + self._shutdown_timeout_handle = None + if self._handshake_timeout_handle: + self._handshake_timeout_handle.cancel() + self._handshake_timeout_handle = None - def resume_writing(self): - """Called when the low-level transport's buffer drains below - the low-water mark. - """ - self._app_protocol.resume_writing() + def get_buffer(self, n): + want = n + if want <= 0 or want > self.max_size: + want = self.max_size + if len(self._ssl_buffer) < want: + self._ssl_buffer = bytearray(want) + self._ssl_buffer_view = memoryview(self._ssl_buffer) + return self._ssl_buffer_view - def data_received(self, data): - """Called when some SSL data is received. + def buffer_updated(self, nbytes): + self._incoming.write(self._ssl_buffer_view[:nbytes]) - The argument is a bytes object. - """ - if self._sslpipe is None: - # transport closing, sslpipe is destroyed - return + if self._state == SSLProtocolState.DO_HANDSHAKE: + self._do_handshake() - try: - ssldata, appdata = self._sslpipe.feed_ssldata(data) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as e: - self._fatal_error(e, 'SSL error in data received') - return + elif self._state == SSLProtocolState.WRAPPED: + self._do_read() - for chunk in ssldata: - self._transport.write(chunk) + elif self._state == SSLProtocolState.FLUSHING: + self._do_flush() - for chunk in appdata: - if chunk: - try: - if self._app_protocol_is_buffer: - protocols._feed_data_to_buffered_proto( - self._app_protocol, chunk) - else: - self._app_protocol.data_received(chunk) - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as ex: - self._fatal_error( - ex, 'application protocol failed to receive SSL data') - return - else: - self._start_shutdown() - break + elif self._state == SSLProtocolState.SHUTDOWN: + self._do_shutdown() def eof_received(self): """Called when the other end of the low-level stream @@ -561,19 +447,32 @@ def eof_received(self): will close itself. If it returns a true value, closing the transport is up to the protocol. """ + self._eof_received = True try: if self._loop.get_debug(): logger.debug("%r received EOF", self) - self._wakeup_waiter(ConnectionResetError) + if self._state == SSLProtocolState.DO_HANDSHAKE: + self._on_handshake_complete(ConnectionResetError) - if not self._in_handshake: - keep_open = self._app_protocol.eof_received() - if keep_open: - logger.warning('returning true from eof_received() ' - 'has no effect when using ssl') - finally: + elif self._state == SSLProtocolState.WRAPPED: + self._set_state(SSLProtocolState.FLUSHING) + if self._app_reading_paused: + return True + else: + self._do_flush() + + elif self._state == SSLProtocolState.FLUSHING: + self._do_write() + self._set_state(SSLProtocolState.SHUTDOWN) + self._do_shutdown() + + elif self._state == SSLProtocolState.SHUTDOWN: + self._do_shutdown() + + except Exception: self._transport.close() + raise def _get_extra_info(self, name, default=None): if name in self._extra: @@ -583,19 +482,45 @@ def _get_extra_info(self, name, default=None): else: return default - def _start_shutdown(self): - if self._in_shutdown: - return - if self._in_handshake: - self._abort() + def _set_state(self, new_state): + allowed = False + + if new_state == SSLProtocolState.UNWRAPPED: + allowed = True + + elif ( + self._state == SSLProtocolState.UNWRAPPED and + new_state == SSLProtocolState.DO_HANDSHAKE + ): + allowed = True + + elif ( + self._state == SSLProtocolState.DO_HANDSHAKE and + new_state == SSLProtocolState.WRAPPED + ): + allowed = True + + elif ( + self._state == SSLProtocolState.WRAPPED and + new_state == SSLProtocolState.FLUSHING + ): + allowed = True + + elif ( + self._state == SSLProtocolState.FLUSHING and + new_state == SSLProtocolState.SHUTDOWN + ): + allowed = True + + if allowed: + self._state = new_state + else: - self._in_shutdown = True - self._write_appdata(b'') + raise RuntimeError( + 'cannot switch state from {} to {}'.format( + self._state, new_state)) - def _write_appdata(self, data): - self._write_backlog.append((data, 0)) - self._write_buffer_size += len(data) - self._process_write_backlog() + # Handshake flow def _start_handshake(self): if self._loop.get_debug(): @@ -603,17 +528,18 @@ def _start_handshake(self): self._handshake_start_time = self._loop.time() else: self._handshake_start_time = None - self._in_handshake = True - # (b'', 1) is a special value in _process_write_backlog() to do - # the SSL handshake - self._write_backlog.append((b'', 1)) + + self._set_state(SSLProtocolState.DO_HANDSHAKE) + + # start handshake timeout count down self._handshake_timeout_handle = \ self._loop.call_later(self._ssl_handshake_timeout, - self._check_handshake_timeout) - self._process_write_backlog() + lambda: self._check_handshake_timeout()) + + self._do_handshake() def _check_handshake_timeout(self): - if self._in_handshake is True: + if self._state == SSLProtocolState.DO_HANDSHAKE: msg = ( f"SSL handshake is taking longer than " f"{self._ssl_handshake_timeout} seconds: " @@ -621,24 +547,37 @@ def _check_handshake_timeout(self): ) self._fatal_error(ConnectionAbortedError(msg)) + def _do_handshake(self): + try: + self._sslobj.do_handshake() + except SSLAgainErrors: + self._process_outgoing() + except ssl.SSLError as exc: + self._on_handshake_complete(exc) + else: + self._on_handshake_complete(None) + def _on_handshake_complete(self, handshake_exc): - self._in_handshake = False - self._handshake_timeout_handle.cancel() + if self._handshake_timeout_handle is not None: + self._handshake_timeout_handle.cancel() + self._handshake_timeout_handle = None - sslobj = self._sslpipe.ssl_object + sslobj = self._sslobj try: - if handshake_exc is not None: + if handshake_exc is None: + self._set_state(SSLProtocolState.WRAPPED) + else: raise handshake_exc peercert = sslobj.getpeercert() - except (SystemExit, KeyboardInterrupt): - raise - except BaseException as exc: + except Exception as exc: + self._set_state(SSLProtocolState.UNWRAPPED) if isinstance(exc, ssl.CertificateError): msg = 'SSL handshake failed on verifying the certificate' else: msg = 'SSL handshake failed' self._fatal_error(exc, msg) + self._wakeup_waiter(exc) return if self._loop.get_debug(): @@ -649,85 +588,330 @@ def _on_handshake_complete(self, handshake_exc): self._extra.update(peercert=peercert, cipher=sslobj.cipher(), compression=sslobj.compression(), - ssl_object=sslobj, - ) - if self._call_connection_made: - self._app_protocol.connection_made(self._app_transport) + ssl_object=sslobj) + if self._app_state == AppProtocolState.STATE_INIT: + self._app_state = AppProtocolState.STATE_CON_MADE + self._app_protocol.connection_made(self._get_app_transport()) self._wakeup_waiter() - self._session_established = True - # In case transport.write() was already called. Don't call - # immediately _process_write_backlog(), but schedule it: - # _on_handshake_complete() can be called indirectly from - # _process_write_backlog(), and _process_write_backlog() is not - # reentrant. - self._loop.call_soon(self._process_write_backlog) - - def _process_write_backlog(self): - # Try to make progress on the write backlog. - if self._transport is None or self._sslpipe is None: + self._do_read() + + # Shutdown flow + + def _start_shutdown(self): + if ( + self._state in ( + SSLProtocolState.FLUSHING, + SSLProtocolState.SHUTDOWN, + SSLProtocolState.UNWRAPPED + ) + ): + return + if self._app_transport is not None: + self._app_transport._closed = True + if self._state == SSLProtocolState.DO_HANDSHAKE: + self._abort() + else: + self._set_state(SSLProtocolState.FLUSHING) + self._shutdown_timeout_handle = self._loop.call_later( + self._ssl_shutdown_timeout, + lambda: self._check_shutdown_timeout() + ) + self._do_flush() + + def _check_shutdown_timeout(self): + if ( + self._state in ( + SSLProtocolState.FLUSHING, + SSLProtocolState.SHUTDOWN + ) + ): + self._transport._force_close( + exceptions.TimeoutError('SSL shutdown timed out')) + + def _do_flush(self): + self._do_read() + self._set_state(SSLProtocolState.SHUTDOWN) + self._do_shutdown() + + def _do_shutdown(self): + try: + if not self._eof_received: + self._sslobj.unwrap() + except SSLAgainErrors: + self._process_outgoing() + except ssl.SSLError as exc: + self._on_shutdown_complete(exc) + else: + self._process_outgoing() + self._call_eof_received() + self._on_shutdown_complete(None) + + def _on_shutdown_complete(self, shutdown_exc): + if self._shutdown_timeout_handle is not None: + self._shutdown_timeout_handle.cancel() + self._shutdown_timeout_handle = None + + if shutdown_exc: + self._fatal_error(shutdown_exc) + else: + self._loop.call_soon(self._transport.close) + + def _abort(self): + self._set_state(SSLProtocolState.UNWRAPPED) + if self._transport is not None: + self._transport.abort() + + # Outgoing flow + + def _write_appdata(self, list_of_data): + if ( + self._state in ( + SSLProtocolState.FLUSHING, + SSLProtocolState.SHUTDOWN, + SSLProtocolState.UNWRAPPED + ) + ): + if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: + logger.warning('SSL connection is closed') + self._conn_lost += 1 return + for data in list_of_data: + self._write_backlog.append(data) + self._write_buffer_size += len(data) + try: - for i in range(len(self._write_backlog)): - data, offset = self._write_backlog[0] - if data: - ssldata, offset = self._sslpipe.feed_appdata(data, offset) - elif offset: - ssldata = self._sslpipe.do_handshake( - self._on_handshake_complete) - offset = 1 + if self._state == SSLProtocolState.WRAPPED: + self._do_write() + + except Exception as ex: + self._fatal_error(ex, 'Fatal error on SSL protocol') + + def _do_write(self): + try: + while self._write_backlog: + data = self._write_backlog[0] + count = self._sslobj.write(data) + data_len = len(data) + if count < data_len: + self._write_backlog[0] = data[count:] + self._write_buffer_size -= count else: - ssldata = self._sslpipe.shutdown(self._finalize) - offset = 1 - - for chunk in ssldata: - self._transport.write(chunk) - - if offset < len(data): - self._write_backlog[0] = (data, offset) - # A short write means that a write is blocked on a read - # We need to enable reading if it is paused! - assert self._sslpipe.need_ssldata - if self._transport._paused: - self._transport.resume_reading() - break + del self._write_backlog[0] + self._write_buffer_size -= data_len + except SSLAgainErrors: + pass + self._process_outgoing() + + def _process_outgoing(self): + if not self._ssl_writing_paused: + data = self._outgoing.read() + if len(data): + self._transport.write(data) + self._control_app_writing() + + # Incoming flow + + def _do_read(self): + if ( + self._state not in ( + SSLProtocolState.WRAPPED, + SSLProtocolState.FLUSHING, + ) + ): + return + try: + if not self._app_reading_paused: + if self._app_protocol_is_buffer: + self._do_read__buffered() + else: + self._do_read__copied() + if self._write_backlog: + self._do_write() + else: + self._process_outgoing() + self._control_ssl_reading() + except Exception as ex: + self._fatal_error(ex, 'Fatal error on SSL protocol') + + def _do_read__buffered(self): + offset = 0 + count = 1 + + buf = self._app_protocol_get_buffer(self._get_read_buffer_size()) + wants = len(buf) - # An entire chunk from the backlog was processed. We can - # delete it and reduce the outstanding buffer size. - del self._write_backlog[0] - self._write_buffer_size -= len(data) - except (SystemExit, KeyboardInterrupt): + try: + count = self._sslobj.read(wants, buf) + + if count > 0: + offset = count + while offset < wants: + count = self._sslobj.read(wants - offset, buf[offset:]) + if count > 0: + offset += count + else: + break + else: + self._loop.call_soon(lambda: self._do_read()) + except SSLAgainErrors: + pass + if offset > 0: + self._app_protocol_buffer_updated(offset) + if not count: + # close_notify + self._call_eof_received() + self._start_shutdown() + + def _do_read__copied(self): + chunk = b'1' + zero = True + one = False + + try: + while True: + chunk = self._sslobj.read(self.max_size) + if not chunk: + break + if zero: + zero = False + one = True + first = chunk + elif one: + one = False + data = [first, chunk] + else: + data.append(chunk) + except SSLAgainErrors: + pass + if one: + self._app_protocol.data_received(first) + elif not zero: + self._app_protocol.data_received(b''.join(data)) + if not chunk: + # close_notify + self._call_eof_received() + self._start_shutdown() + + def _call_eof_received(self): + try: + if self._app_state == AppProtocolState.STATE_CON_MADE: + self._app_state = AppProtocolState.STATE_EOF + keep_open = self._app_protocol.eof_received() + if keep_open: + logger.warning('returning true from eof_received() ' + 'has no effect when using ssl') + except (KeyboardInterrupt, SystemExit): raise - except BaseException as exc: - if self._in_handshake: - # Exceptions will be re-raised in _on_handshake_complete. - self._on_handshake_complete(exc) - else: - self._fatal_error(exc, 'Fatal error on SSL transport') + except BaseException as ex: + self._fatal_error(ex, 'Error calling eof_received()') + + # Flow control for writes from APP socket + + def _control_app_writing(self): + size = self._get_write_buffer_size() + if size >= self._outgoing_high_water and not self._app_writing_paused: + self._app_writing_paused = True + try: + self._app_protocol.pause_writing() + except (KeyboardInterrupt, SystemExit): + raise + except BaseException as exc: + self._loop.call_exception_handler({ + 'message': 'protocol.pause_writing() failed', + 'exception': exc, + 'transport': self._app_transport, + 'protocol': self, + }) + elif size <= self._outgoing_low_water and self._app_writing_paused: + self._app_writing_paused = False + try: + self._app_protocol.resume_writing() + except (KeyboardInterrupt, SystemExit): + raise + except BaseException as exc: + self._loop.call_exception_handler({ + 'message': 'protocol.resume_writing() failed', + 'exception': exc, + 'transport': self._app_transport, + 'protocol': self, + }) + + def _get_write_buffer_size(self): + return self._outgoing.pending + self._write_buffer_size + + def _set_write_buffer_limits(self, high=None, low=None): + high, low = add_flowcontrol_defaults( + high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_WRITE) + self._outgoing_high_water = high + self._outgoing_low_water = low + + # Flow control for reads to APP socket + + def _pause_reading(self): + self._app_reading_paused = True + + def _resume_reading(self): + if self._app_reading_paused: + self._app_reading_paused = False + + def resume(): + if self._state == SSLProtocolState.WRAPPED: + self._do_read() + elif self._state == SSLProtocolState.FLUSHING: + self._do_flush() + elif self._state == SSLProtocolState.SHUTDOWN: + self._do_shutdown() + self._loop.call_soon(resume) + + # Flow control for reads from SSL socket + + def _control_ssl_reading(self): + size = self._get_read_buffer_size() + if size >= self._incoming_high_water and not self._ssl_reading_paused: + self._ssl_reading_paused = True + self._transport.pause_reading() + elif size <= self._incoming_low_water and self._ssl_reading_paused: + self._ssl_reading_paused = False + self._transport.resume_reading() + + def _set_read_buffer_limits(self, high=None, low=None): + high, low = add_flowcontrol_defaults( + high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_READ) + self._incoming_high_water = high + self._incoming_low_water = low + + def _get_read_buffer_size(self): + return self._incoming.pending + + # Flow control for writes to SSL socket + + def pause_writing(self): + """Called when the low-level transport's buffer goes over + the high-water mark. + """ + assert not self._ssl_writing_paused + self._ssl_writing_paused = True + + def resume_writing(self): + """Called when the low-level transport's buffer drains below + the low-water mark. + """ + assert self._ssl_writing_paused + self._ssl_writing_paused = False + self._process_outgoing() def _fatal_error(self, exc, message='Fatal error on transport'): + if self._transport: + self._transport._force_close(exc) + if isinstance(exc, OSError): if self._loop.get_debug(): logger.debug("%r: %s", self, message, exc_info=True) - else: + elif not isinstance(exc, exceptions.CancelledError): self._loop.call_exception_handler({ 'message': message, 'exception': exc, 'transport': self._transport, 'protocol': self, }) - if self._transport: - self._transport._force_close(exc) - - def _finalize(self): - self._sslpipe = None - - if self._transport is not None: - self._transport.close() - - def _abort(self): - try: - if self._transport is not None: - self._transport.abort() - finally: - self._finalize() diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index a55b3a375fa22d..181e1885152fab 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -229,7 +229,8 @@ async def create_unix_connection( self, protocol_factory, path=None, *, ssl=None, sock=None, server_hostname=None, - ssl_handshake_timeout=None): + ssl_handshake_timeout=None, + ssl_shutdown_timeout=None): assert server_hostname is None or isinstance(server_hostname, str) if ssl: if server_hostname is None: @@ -241,6 +242,9 @@ async def create_unix_connection( if ssl_handshake_timeout is not None: raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') + if ssl_shutdown_timeout is not None: + raise ValueError( + 'ssl_shutdown_timeout is only meaningful with ssl') if path is not None: if sock is not None: @@ -267,13 +271,15 @@ async def create_unix_connection( transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout) + ssl_handshake_timeout=ssl_handshake_timeout, + ssl_shutdown_timeout=ssl_shutdown_timeout) return transport, protocol async def create_unix_server( self, protocol_factory, path=None, *, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None, + ssl_shutdown_timeout=None, start_serving=True): if isinstance(ssl, bool): raise TypeError('ssl argument must be an SSLContext or None') @@ -282,6 +288,10 @@ async def create_unix_server( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') + if ssl_shutdown_timeout is not None and not ssl: + raise ValueError( + 'ssl_shutdown_timeout is only meaningful with ssl') + if path is not None: if sock is not None: raise ValueError( @@ -328,7 +338,8 @@ async def create_unix_server( sock.setblocking(False) server = base_events.Server(self, [sock], protocol_factory, - ssl, backlog, ssl_handshake_timeout) + ssl, backlog, ssl_handshake_timeout, + ssl_shutdown_timeout) if start_serving: server._start_serving() # Skip one loop iteration so that all 'loop.add_reader' diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index 5691d4250aca9e..be5ea1e3c738da 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -1437,44 +1437,51 @@ def mock_make_ssl_transport(sock, protocol, sslcontext, waiter, self.loop._make_ssl_transport.side_effect = mock_make_ssl_transport ANY = mock.ANY handshake_timeout = object() + shutdown_timeout = object() # First try the default server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='python.org', - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) # Next try an explicit server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, server_hostname='perl.com', - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='perl.com', - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) # Finally try an explicit empty server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, server_hostname='', - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='', - ssl_handshake_timeout=handshake_timeout) + ssl_handshake_timeout=handshake_timeout, + ssl_shutdown_timeout=shutdown_timeout) def test_create_connection_no_ssl_server_hostname_errors(self): # When not using ssl, server_hostname must be None. @@ -1881,7 +1888,7 @@ def test_accept_connection_exception(self, m_log): constants.ACCEPT_RETRY_DELAY, # self.loop._start_serving mock.ANY, - MyProto, sock, None, None, mock.ANY, mock.ANY) + MyProto, sock, None, None, mock.ANY, mock.ANY, mock.ANY) def test_call_coroutine(self): with self.assertWarns(DeprecationWarning): diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py index 1613c753c26ee5..349e4f2dca0634 100644 --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -70,44 +70,6 @@ def test_make_socket_transport(self): close_transport(transport) - @unittest.skipIf(ssl is None, 'No ssl module') - def test_make_ssl_transport(self): - m = mock.Mock() - self.loop._add_reader = mock.Mock() - self.loop._add_reader._is_coroutine = False - self.loop._add_writer = mock.Mock() - self.loop._remove_reader = mock.Mock() - self.loop._remove_writer = mock.Mock() - waiter = self.loop.create_future() - with test_utils.disable_logger(): - transport = self.loop._make_ssl_transport( - m, asyncio.Protocol(), m, waiter) - - with self.assertRaisesRegex(RuntimeError, - r'SSL transport.*not.*initialized'): - transport.is_reading() - - # execute the handshake while the logger is disabled - # to ignore SSL handshake failure - test_utils.run_briefly(self.loop) - - self.assertTrue(transport.is_reading()) - transport.pause_reading() - transport.pause_reading() - self.assertFalse(transport.is_reading()) - transport.resume_reading() - transport.resume_reading() - self.assertTrue(transport.is_reading()) - - # Sanity check - class_name = transport.__class__.__name__ - self.assertIn("ssl", class_name.lower()) - self.assertIn("transport", class_name.lower()) - - transport.close() - # execute pending callbacks to close the socket transport - test_utils.run_briefly(self.loop) - @mock.patch('asyncio.selector_events.ssl', None) @mock.patch('asyncio.sslproto.ssl', None) def test_make_ssl_transport_without_ssl_error(self): diff --git a/Lib/test/test_asyncio/test_ssl.py b/Lib/test/test_asyncio/test_ssl.py new file mode 100644 index 00000000000000..38235c63e01e93 --- /dev/null +++ b/Lib/test/test_asyncio/test_ssl.py @@ -0,0 +1,1718 @@ +import asyncio +import asyncio.sslproto +import contextlib +import gc +import logging +import os +import select +import socket +import ssl +import tempfile +import threading +import time +import weakref + +from test import support +from test.test_asyncio import utils as test_utils + + +def tearDownModule(): + asyncio.set_event_loop_policy(None) + + +class MyBaseProto(asyncio.Protocol): + connected = None + done = None + + def __init__(self, loop=None): + self.transport = None + self.state = 'INITIAL' + self.nbytes = 0 + if loop is not None: + self.connected = asyncio.Future(loop=loop) + self.done = asyncio.Future(loop=loop) + + def connection_made(self, transport): + self.transport = transport + assert self.state == 'INITIAL', self.state + self.state = 'CONNECTED' + if self.connected: + self.connected.set_result(None) + + def data_received(self, data): + assert self.state == 'CONNECTED', self.state + self.nbytes += len(data) + + def eof_received(self): + assert self.state == 'CONNECTED', self.state + self.state = 'EOF' + + def connection_lost(self, exc): + assert self.state in ('CONNECTED', 'EOF'), self.state + self.state = 'CLOSED' + if self.done: + self.done.set_result(None) + + +class TestSSL(test_utils.TestCase): + + PAYLOAD_SIZE = 1024 * 100 + TIMEOUT = 60 + + def setUp(self): + super().setUp() + self.loop = asyncio.new_event_loop() + self.set_event_loop(self.loop) + self.addCleanup(self.loop.close) + + def tearDown(self): + # just in case if we have transport close callbacks + if not self.loop.is_closed(): + test_utils.run_briefly(self.loop) + + self.doCleanups() + support.gc_collect() + super().tearDown() + + def tcp_server(self, server_prog, *, + family=socket.AF_INET, + addr=None, + timeout=5, + backlog=1, + max_clients=10): + + if addr is None: + if family == getattr(socket, "AF_UNIX", None): + with tempfile.NamedTemporaryFile() as tmp: + addr = tmp.name + else: + addr = ('127.0.0.1', 0) + + sock = socket.socket(family, socket.SOCK_STREAM) + + if timeout is None: + raise RuntimeError('timeout is required') + if timeout <= 0: + raise RuntimeError('only blocking sockets are supported') + sock.settimeout(timeout) + + try: + sock.bind(addr) + sock.listen(backlog) + except OSError as ex: + sock.close() + raise ex + + return TestThreadedServer( + self, sock, server_prog, timeout, max_clients) + + def tcp_client(self, client_prog, + family=socket.AF_INET, + timeout=10): + + sock = socket.socket(family, socket.SOCK_STREAM) + + if timeout is None: + raise RuntimeError('timeout is required') + if timeout <= 0: + raise RuntimeError('only blocking sockets are supported') + sock.settimeout(timeout) + + return TestThreadedClient( + self, sock, client_prog, timeout) + + def unix_server(self, *args, **kwargs): + return self.tcp_server(*args, family=socket.AF_UNIX, **kwargs) + + def unix_client(self, *args, **kwargs): + return self.tcp_client(*args, family=socket.AF_UNIX, **kwargs) + + def _create_server_ssl_context(self, certfile, keyfile=None): + sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + sslcontext.options |= ssl.OP_NO_SSLv2 + sslcontext.load_cert_chain(certfile, keyfile) + return sslcontext + + def _create_client_ssl_context(self, *, disable_verify=True): + sslcontext = ssl.create_default_context() + sslcontext.check_hostname = False + if disable_verify: + sslcontext.verify_mode = ssl.CERT_NONE + return sslcontext + + @contextlib.contextmanager + def _silence_eof_received_warning(self): + # TODO This warning has to be fixed in asyncio. + logger = logging.getLogger('asyncio') + filter = logging.Filter('has no effect when using ssl') + logger.addFilter(filter) + try: + yield + finally: + logger.removeFilter(filter) + + def _abort_socket_test(self, ex): + try: + self.loop.stop() + finally: + self.fail(ex) + + def new_loop(self): + return asyncio.new_event_loop() + + def new_policy(self): + return asyncio.DefaultEventLoopPolicy() + + async def wait_closed(self, obj): + if not isinstance(obj, asyncio.StreamWriter): + return + try: + await obj.wait_closed() + except (BrokenPipeError, ConnectionError): + pass + + def test_create_server_ssl_1(self): + CNT = 0 # number of clients that were successful + TOTAL_CNT = 25 # total number of clients that test will create + TIMEOUT = 10.0 # timeout for this test + + A_DATA = b'A' * 1024 * 1024 + B_DATA = b'B' * 1024 * 1024 + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY + ) + client_sslctx = self._create_client_ssl_context() + + clients = [] + + async def handle_client(reader, writer): + nonlocal CNT + + data = await reader.readexactly(len(A_DATA)) + self.assertEqual(data, A_DATA) + writer.write(b'OK') + + data = await reader.readexactly(len(B_DATA)) + self.assertEqual(data, B_DATA) + writer.writelines([b'SP', bytearray(b'A'), memoryview(b'M')]) + + await writer.drain() + writer.close() + + CNT += 1 + + async def test_client(addr): + fut = asyncio.Future() + + def prog(sock): + try: + sock.starttls(client_sslctx) + sock.connect(addr) + sock.send(A_DATA) + + data = sock.recv_all(2) + self.assertEqual(data, b'OK') + + sock.send(B_DATA) + data = sock.recv_all(4) + self.assertEqual(data, b'SPAM') + + sock.close() + + except Exception as ex: + self.loop.call_soon_threadsafe(fut.set_exception, ex) + else: + self.loop.call_soon_threadsafe(fut.set_result, None) + + client = self.tcp_client(prog) + client.start() + clients.append(client) + + await fut + + async def start_server(): + extras = {} + extras = dict(ssl_handshake_timeout=10.0) + + srv = await asyncio.start_server( + handle_client, + '127.0.0.1', 0, + family=socket.AF_INET, + ssl=sslctx, + **extras) + + try: + srv_socks = srv.sockets + self.assertTrue(srv_socks) + + addr = srv_socks[0].getsockname() + + tasks = [] + for _ in range(TOTAL_CNT): + tasks.append(test_client(addr)) + + await asyncio.wait_for(asyncio.gather(*tasks), TIMEOUT) + + finally: + self.loop.call_soon(srv.close) + await srv.wait_closed() + + with self._silence_eof_received_warning(): + self.loop.run_until_complete(start_server()) + + self.assertEqual(CNT, TOTAL_CNT) + + for client in clients: + client.stop() + + def test_create_connection_ssl_1(self): + self.loop.set_exception_handler(None) + + CNT = 0 + TOTAL_CNT = 25 + + A_DATA = b'A' * 1024 * 1024 + B_DATA = b'B' * 1024 * 1024 + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, + test_utils.ONLYKEY + ) + client_sslctx = self._create_client_ssl_context() + + def server(sock): + sock.starttls( + sslctx, + server_side=True) + + data = sock.recv_all(len(A_DATA)) + self.assertEqual(data, A_DATA) + sock.send(b'OK') + + data = sock.recv_all(len(B_DATA)) + self.assertEqual(data, B_DATA) + sock.send(b'SPAM') + + sock.close() + + async def client(addr): + extras = {} + extras = dict(ssl_handshake_timeout=10.0) + + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='', + **extras) + + writer.write(A_DATA) + self.assertEqual(await reader.readexactly(2), b'OK') + + writer.write(B_DATA) + self.assertEqual(await reader.readexactly(4), b'SPAM') + + nonlocal CNT + CNT += 1 + + writer.close() + await self.wait_closed(writer) + + async def client_sock(addr): + sock = socket.socket() + sock.connect(addr) + reader, writer = await asyncio.open_connection( + sock=sock, + ssl=client_sslctx, + server_hostname='') + + writer.write(A_DATA) + self.assertEqual(await reader.readexactly(2), b'OK') + + writer.write(B_DATA) + self.assertEqual(await reader.readexactly(4), b'SPAM') + + nonlocal CNT + CNT += 1 + + writer.close() + await self.wait_closed(writer) + sock.close() + + def run(coro): + nonlocal CNT + CNT = 0 + + async def _gather(*tasks): + # trampoline + return await asyncio.gather(*tasks) + + with self.tcp_server(server, + max_clients=TOTAL_CNT, + backlog=TOTAL_CNT) as srv: + tasks = [] + for _ in range(TOTAL_CNT): + tasks.append(coro(srv.addr)) + + self.loop.run_until_complete(_gather(*tasks)) + + self.assertEqual(CNT, TOTAL_CNT) + + with self._silence_eof_received_warning(): + run(client) + + with self._silence_eof_received_warning(): + run(client_sock) + + def test_create_connection_ssl_slow_handshake(self): + client_sslctx = self._create_client_ssl_context() + + # silence error logger + self.loop.set_exception_handler(lambda *args: None) + + def server(sock): + try: + sock.recv_all(1024 * 1024) + except ConnectionAbortedError: + pass + finally: + sock.close() + + async def client(addr): + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='', + ssl_handshake_timeout=1.0) + writer.close() + await self.wait_closed(writer) + + with self.tcp_server(server, + max_clients=1, + backlog=1) as srv: + + with self.assertRaisesRegex( + ConnectionAbortedError, + r'SSL handshake.*is taking longer'): + + self.loop.run_until_complete(client(srv.addr)) + + def test_create_connection_ssl_failed_certificate(self): + # silence error logger + self.loop.set_exception_handler(lambda *args: None) + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, + test_utils.ONLYKEY + ) + client_sslctx = self._create_client_ssl_context(disable_verify=False) + + def server(sock): + try: + sock.starttls( + sslctx, + server_side=True) + sock.connect() + except (ssl.SSLError, OSError): + pass + finally: + sock.close() + + async def client(addr): + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='', + ssl_handshake_timeout=1.0) + writer.close() + await self.wait_closed(writer) + + with self.tcp_server(server, + max_clients=1, + backlog=1) as srv: + + with self.assertRaises(ssl.SSLCertVerificationError): + self.loop.run_until_complete(client(srv.addr)) + + def test_ssl_handshake_timeout(self): + # bpo-29970: Check that a connection is aborted if handshake is not + # completed in timeout period, instead of remaining open indefinitely + client_sslctx = test_utils.simple_client_sslcontext() + + # silence error logger + messages = [] + self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx)) + + server_side_aborted = False + + def server(sock): + nonlocal server_side_aborted + try: + sock.recv_all(1024 * 1024) + except ConnectionAbortedError: + server_side_aborted = True + finally: + sock.close() + + async def client(addr): + await asyncio.wait_for( + self.loop.create_connection( + asyncio.Protocol, + *addr, + ssl=client_sslctx, + server_hostname='', + ssl_handshake_timeout=10.0), + 0.5) + + with self.tcp_server(server, + max_clients=1, + backlog=1) as srv: + + with self.assertRaises(asyncio.TimeoutError): + self.loop.run_until_complete(client(srv.addr)) + + self.assertTrue(server_side_aborted) + + # Python issue #23197: cancelling a handshake must not raise an + # exception or log an error, even if the handshake failed + self.assertEqual(messages, []) + + def test_ssl_handshake_connection_lost(self): + # #246: make sure that no connection_lost() is called before + # connection_made() is called first + + client_sslctx = test_utils.simple_client_sslcontext() + + # silence error logger + self.loop.set_exception_handler(lambda loop, ctx: None) + + connection_made_called = False + connection_lost_called = False + + def server(sock): + sock.recv(1024) + # break the connection during handshake + sock.close() + + class ClientProto(asyncio.Protocol): + def connection_made(self, transport): + nonlocal connection_made_called + connection_made_called = True + + def connection_lost(self, exc): + nonlocal connection_lost_called + connection_lost_called = True + + async def client(addr): + await self.loop.create_connection( + ClientProto, + *addr, + ssl=client_sslctx, + server_hostname=''), + + with self.tcp_server(server, + max_clients=1, + backlog=1) as srv: + + with self.assertRaises(ConnectionResetError): + self.loop.run_until_complete(client(srv.addr)) + + if connection_lost_called: + if connection_made_called: + self.fail("unexpected call to connection_lost()") + else: + self.fail("unexpected call to connection_lost() without" + "calling connection_made()") + elif connection_made_called: + self.fail("unexpected call to connection_made()") + + def test_ssl_connect_accepted_socket(self): + proto = ssl.PROTOCOL_TLS_SERVER + server_context = ssl.SSLContext(proto) + server_context.load_cert_chain(test_utils.ONLYCERT, test_utils.ONLYKEY) + if hasattr(server_context, 'check_hostname'): + server_context.check_hostname = False + server_context.verify_mode = ssl.CERT_NONE + + client_context = ssl.SSLContext(proto) + if hasattr(server_context, 'check_hostname'): + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + def test_connect_accepted_socket(self, server_ssl=None, client_ssl=None): + loop = self.loop + + class MyProto(MyBaseProto): + + def connection_lost(self, exc): + super().connection_lost(exc) + loop.call_soon(loop.stop) + + def data_received(self, data): + super().data_received(data) + self.transport.write(expected_response) + + lsock = socket.socket(socket.AF_INET) + lsock.bind(('127.0.0.1', 0)) + lsock.listen(1) + addr = lsock.getsockname() + + message = b'test data' + response = None + expected_response = b'roger' + + def client(): + nonlocal response + try: + csock = socket.socket(socket.AF_INET) + if client_ssl is not None: + csock = client_ssl.wrap_socket(csock) + csock.connect(addr) + csock.sendall(message) + response = csock.recv(99) + csock.close() + except Exception as exc: + print( + "Failure in client thread in test_connect_accepted_socket", + exc) + + thread = threading.Thread(target=client, daemon=True) + thread.start() + + conn, _ = lsock.accept() + proto = MyProto(loop=loop) + proto.loop = loop + + extras = {} + if server_ssl: + extras = dict(ssl_handshake_timeout=10.0) + + f = loop.create_task( + loop.connect_accepted_socket( + (lambda: proto), conn, ssl=server_ssl, + **extras)) + loop.run_forever() + conn.close() + lsock.close() + + thread.join(1) + self.assertFalse(thread.is_alive()) + self.assertEqual(proto.state, 'CLOSED') + self.assertEqual(proto.nbytes, len(message)) + self.assertEqual(response, expected_response) + tr, _ = f.result() + + if server_ssl: + self.assertIn('SSL', tr.__class__.__name__) + + tr.close() + # let it close + self.loop.run_until_complete(asyncio.sleep(0.1)) + + def test_start_tls_client_corrupted_ssl(self): + self.loop.set_exception_handler(lambda loop, ctx: None) + + sslctx = test_utils.simple_server_sslcontext() + client_sslctx = test_utils.simple_client_sslcontext() + + def server(sock): + orig_sock = sock.dup() + try: + sock.starttls( + sslctx, + server_side=True) + sock.sendall(b'A\n') + sock.recv_all(1) + orig_sock.send(b'please corrupt the SSL connection') + except ssl.SSLError: + pass + finally: + sock.close() + orig_sock.close() + + async def client(addr): + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='') + + self.assertEqual(await reader.readline(), b'A\n') + writer.write(b'B') + with self.assertRaises(ssl.SSLError): + await reader.readline() + writer.close() + try: + await self.wait_closed(writer) + except ssl.SSLError: + pass + return 'OK' + + with self.tcp_server(server, + max_clients=1, + backlog=1) as srv: + + res = self.loop.run_until_complete(client(srv.addr)) + + self.assertEqual(res, 'OK') + + def test_start_tls_client_reg_proto_1(self): + HELLO_MSG = b'1' * self.PAYLOAD_SIZE + + server_context = test_utils.simple_server_sslcontext() + client_context = test_utils.simple_client_sslcontext() + + def serve(sock): + sock.settimeout(self.TIMEOUT) + + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.starttls(server_context, server_side=True) + + sock.sendall(b'O') + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.unwrap() + sock.close() + + class ClientProto(asyncio.Protocol): + def __init__(self, on_data, on_eof): + self.on_data = on_data + self.on_eof = on_eof + self.con_made_cnt = 0 + + def connection_made(proto, tr): + proto.con_made_cnt += 1 + # Ensure connection_made gets called only once. + self.assertEqual(proto.con_made_cnt, 1) + + def data_received(self, data): + self.on_data.set_result(data) + + def eof_received(self): + self.on_eof.set_result(True) + + async def client(addr): + await asyncio.sleep(0.5) + + on_data = self.loop.create_future() + on_eof = self.loop.create_future() + + tr, proto = await self.loop.create_connection( + lambda: ClientProto(on_data, on_eof), *addr) + + tr.write(HELLO_MSG) + new_tr = await self.loop.start_tls(tr, proto, client_context) + + self.assertEqual(await on_data, b'O') + new_tr.write(HELLO_MSG) + await on_eof + + new_tr.close() + + with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: + self.loop.run_until_complete( + asyncio.wait_for(client(srv.addr), timeout=10)) + + def test_create_connection_memory_leak(self): + HELLO_MSG = b'1' * self.PAYLOAD_SIZE + + server_context = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY) + client_context = self._create_client_ssl_context() + + def serve(sock): + sock.settimeout(self.TIMEOUT) + + sock.starttls(server_context, server_side=True) + + sock.sendall(b'O') + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.unwrap() + sock.close() + + class ClientProto(asyncio.Protocol): + def __init__(self, on_data, on_eof): + self.on_data = on_data + self.on_eof = on_eof + self.con_made_cnt = 0 + + def connection_made(proto, tr): + # XXX: We assume user stores the transport in protocol + proto.tr = tr + proto.con_made_cnt += 1 + # Ensure connection_made gets called only once. + self.assertEqual(proto.con_made_cnt, 1) + + def data_received(self, data): + self.on_data.set_result(data) + + def eof_received(self): + self.on_eof.set_result(True) + + async def client(addr): + await asyncio.sleep(0.5) + + on_data = self.loop.create_future() + on_eof = self.loop.create_future() + + tr, proto = await self.loop.create_connection( + lambda: ClientProto(on_data, on_eof), *addr, + ssl=client_context) + + self.assertEqual(await on_data, b'O') + tr.write(HELLO_MSG) + await on_eof + + tr.close() + + with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: + self.loop.run_until_complete( + asyncio.wait_for(client(srv.addr), timeout=10)) + + # No garbage is left for SSL client from loop.create_connection, even + # if user stores the SSLTransport in corresponding protocol instance + client_context = weakref.ref(client_context) + self.assertIsNone(client_context()) + + def test_start_tls_client_buf_proto_1(self): + HELLO_MSG = b'1' * self.PAYLOAD_SIZE + + server_context = test_utils.simple_server_sslcontext() + client_context = test_utils.simple_client_sslcontext() + + client_con_made_calls = 0 + + def serve(sock): + sock.settimeout(self.TIMEOUT) + + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.starttls(server_context, server_side=True) + + sock.sendall(b'O') + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.sendall(b'2') + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.unwrap() + sock.close() + + class ClientProtoFirst(asyncio.BufferedProtocol): + def __init__(self, on_data): + self.on_data = on_data + self.buf = bytearray(1) + + def connection_made(self, tr): + nonlocal client_con_made_calls + client_con_made_calls += 1 + + def get_buffer(self, sizehint): + return self.buf + + def buffer_updated(self, nsize): + assert nsize == 1 + self.on_data.set_result(bytes(self.buf[:nsize])) + + def eof_received(self): + pass + + class ClientProtoSecond(asyncio.Protocol): + def __init__(self, on_data, on_eof): + self.on_data = on_data + self.on_eof = on_eof + self.con_made_cnt = 0 + + def connection_made(self, tr): + nonlocal client_con_made_calls + client_con_made_calls += 1 + + def data_received(self, data): + self.on_data.set_result(data) + + def eof_received(self): + self.on_eof.set_result(True) + + async def client(addr): + await asyncio.sleep(0.5) + + on_data1 = self.loop.create_future() + on_data2 = self.loop.create_future() + on_eof = self.loop.create_future() + + tr, proto = await self.loop.create_connection( + lambda: ClientProtoFirst(on_data1), *addr) + + tr.write(HELLO_MSG) + new_tr = await self.loop.start_tls(tr, proto, client_context) + + self.assertEqual(await on_data1, b'O') + new_tr.write(HELLO_MSG) + + new_tr.set_protocol(ClientProtoSecond(on_data2, on_eof)) + self.assertEqual(await on_data2, b'2') + new_tr.write(HELLO_MSG) + await on_eof + + new_tr.close() + + # connection_made() should be called only once -- when + # we establish connection for the first time. Start TLS + # doesn't call connection_made() on application protocols. + self.assertEqual(client_con_made_calls, 1) + + with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: + self.loop.run_until_complete( + asyncio.wait_for(client(srv.addr), + timeout=self.TIMEOUT)) + + def test_start_tls_slow_client_cancel(self): + HELLO_MSG = b'1' * self.PAYLOAD_SIZE + + client_context = test_utils.simple_client_sslcontext() + server_waits_on_handshake = self.loop.create_future() + + def serve(sock): + sock.settimeout(self.TIMEOUT) + + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + try: + self.loop.call_soon_threadsafe( + server_waits_on_handshake.set_result, None) + data = sock.recv_all(1024 * 1024) + except ConnectionAbortedError: + pass + finally: + sock.close() + + class ClientProto(asyncio.Protocol): + def __init__(self, on_data, on_eof): + self.on_data = on_data + self.on_eof = on_eof + self.con_made_cnt = 0 + + def connection_made(proto, tr): + proto.con_made_cnt += 1 + # Ensure connection_made gets called only once. + self.assertEqual(proto.con_made_cnt, 1) + + def data_received(self, data): + self.on_data.set_result(data) + + def eof_received(self): + self.on_eof.set_result(True) + + async def client(addr): + await asyncio.sleep(0.5) + + on_data = self.loop.create_future() + on_eof = self.loop.create_future() + + tr, proto = await self.loop.create_connection( + lambda: ClientProto(on_data, on_eof), *addr) + + tr.write(HELLO_MSG) + + await server_waits_on_handshake + + with self.assertRaises(asyncio.TimeoutError): + await asyncio.wait_for( + self.loop.start_tls(tr, proto, client_context), + 0.5) + + with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: + self.loop.run_until_complete( + asyncio.wait_for(client(srv.addr), timeout=10)) + + def test_start_tls_server_1(self): + HELLO_MSG = b'1' * self.PAYLOAD_SIZE + + server_context = test_utils.simple_server_sslcontext() + client_context = test_utils.simple_client_sslcontext() + + def client(sock, addr): + sock.settimeout(self.TIMEOUT) + + sock.connect(addr) + data = sock.recv_all(len(HELLO_MSG)) + self.assertEqual(len(data), len(HELLO_MSG)) + + sock.starttls(client_context) + sock.sendall(HELLO_MSG) + + sock.unwrap() + sock.close() + + class ServerProto(asyncio.Protocol): + def __init__(self, on_con, on_eof, on_con_lost): + self.on_con = on_con + self.on_eof = on_eof + self.on_con_lost = on_con_lost + self.data = b'' + + def connection_made(self, tr): + self.on_con.set_result(tr) + + def data_received(self, data): + self.data += data + + def eof_received(self): + self.on_eof.set_result(1) + + def connection_lost(self, exc): + if exc is None: + self.on_con_lost.set_result(None) + else: + self.on_con_lost.set_exception(exc) + + async def main(proto, on_con, on_eof, on_con_lost): + tr = await on_con + tr.write(HELLO_MSG) + + self.assertEqual(proto.data, b'') + + new_tr = await self.loop.start_tls( + tr, proto, server_context, + server_side=True, + ssl_handshake_timeout=self.TIMEOUT) + + await on_eof + await on_con_lost + self.assertEqual(proto.data, HELLO_MSG) + new_tr.close() + + async def run_main(): + on_con = self.loop.create_future() + on_eof = self.loop.create_future() + on_con_lost = self.loop.create_future() + proto = ServerProto(on_con, on_eof, on_con_lost) + + server = await self.loop.create_server( + lambda: proto, '127.0.0.1', 0) + addr = server.sockets[0].getsockname() + + with self.tcp_client(lambda sock: client(sock, addr), + timeout=self.TIMEOUT): + await asyncio.wait_for( + main(proto, on_con, on_eof, on_con_lost), + timeout=self.TIMEOUT) + + server.close() + await server.wait_closed() + + self.loop.run_until_complete(run_main()) + + def test_create_server_ssl_over_ssl(self): + CNT = 0 # number of clients that were successful + TOTAL_CNT = 25 # total number of clients that test will create + TIMEOUT = 10.0 # timeout for this test + + A_DATA = b'A' * 1024 * 1024 + B_DATA = b'B' * 1024 * 1024 + + sslctx_1 = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY) + client_sslctx_1 = self._create_client_ssl_context() + sslctx_2 = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY) + client_sslctx_2 = self._create_client_ssl_context() + + clients = [] + + async def handle_client(reader, writer): + nonlocal CNT + + data = await reader.readexactly(len(A_DATA)) + self.assertEqual(data, A_DATA) + writer.write(b'OK') + + data = await reader.readexactly(len(B_DATA)) + self.assertEqual(data, B_DATA) + writer.writelines([b'SP', bytearray(b'A'), memoryview(b'M')]) + + await writer.drain() + writer.close() + + CNT += 1 + + class ServerProtocol(asyncio.StreamReaderProtocol): + def connection_made(self, transport): + super_ = super() + transport.pause_reading() + fut = self._loop.create_task(self._loop.start_tls( + transport, self, sslctx_2, server_side=True)) + + def cb(_): + try: + tr = fut.result() + except Exception as ex: + super_.connection_lost(ex) + else: + super_.connection_made(tr) + fut.add_done_callback(cb) + + def server_protocol_factory(): + reader = asyncio.StreamReader() + protocol = ServerProtocol(reader, handle_client) + return protocol + + async def test_client(addr): + fut = asyncio.Future() + + def prog(sock): + try: + sock.connect(addr) + sock.starttls(client_sslctx_1) + + # because wrap_socket() doesn't work correctly on + # SSLSocket, we have to do the 2nd level SSL manually + incoming = ssl.MemoryBIO() + outgoing = ssl.MemoryBIO() + sslobj = client_sslctx_2.wrap_bio(incoming, outgoing) + + def do(func, *args): + while True: + try: + rv = func(*args) + break + except ssl.SSLWantReadError: + if outgoing.pending: + sock.send(outgoing.read()) + incoming.write(sock.recv(65536)) + if outgoing.pending: + sock.send(outgoing.read()) + return rv + + do(sslobj.do_handshake) + + do(sslobj.write, A_DATA) + data = do(sslobj.read, 2) + self.assertEqual(data, b'OK') + + do(sslobj.write, B_DATA) + data = b'' + while True: + chunk = do(sslobj.read, 4) + if not chunk: + break + data += chunk + self.assertEqual(data, b'SPAM') + + do(sslobj.unwrap) + sock.close() + + except Exception as ex: + self.loop.call_soon_threadsafe(fut.set_exception, ex) + sock.close() + else: + self.loop.call_soon_threadsafe(fut.set_result, None) + + client = self.tcp_client(prog) + client.start() + clients.append(client) + + await fut + + async def start_server(): + extras = {} + + srv = await self.loop.create_server( + server_protocol_factory, + '127.0.0.1', 0, + family=socket.AF_INET, + ssl=sslctx_1, + **extras) + + try: + srv_socks = srv.sockets + self.assertTrue(srv_socks) + + addr = srv_socks[0].getsockname() + + tasks = [] + for _ in range(TOTAL_CNT): + tasks.append(test_client(addr)) + + await asyncio.wait_for(asyncio.gather(*tasks), TIMEOUT) + + finally: + self.loop.call_soon(srv.close) + await srv.wait_closed() + + with self._silence_eof_received_warning(): + self.loop.run_until_complete(start_server()) + + self.assertEqual(CNT, TOTAL_CNT) + + for client in clients: + client.stop() + + def test_shutdown_cleanly(self): + CNT = 0 + TOTAL_CNT = 25 + + A_DATA = b'A' * 1024 * 1024 + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY) + client_sslctx = self._create_client_ssl_context() + + def server(sock): + sock.starttls( + sslctx, + server_side=True) + + data = sock.recv_all(len(A_DATA)) + self.assertEqual(data, A_DATA) + sock.send(b'OK') + + sock.unwrap() + + sock.close() + + async def client(addr): + extras = {} + extras = dict(ssl_handshake_timeout=10.0) + + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='', + **extras) + + writer.write(A_DATA) + self.assertEqual(await reader.readexactly(2), b'OK') + + self.assertEqual(await reader.read(), b'') + + nonlocal CNT + CNT += 1 + + writer.close() + await self.wait_closed(writer) + + def run(coro): + nonlocal CNT + CNT = 0 + + async def _gather(*tasks): + return await asyncio.gather(*tasks) + + with self.tcp_server(server, + max_clients=TOTAL_CNT, + backlog=TOTAL_CNT) as srv: + tasks = [] + for _ in range(TOTAL_CNT): + tasks.append(coro(srv.addr)) + + self.loop.run_until_complete( + _gather(*tasks)) + + self.assertEqual(CNT, TOTAL_CNT) + + with self._silence_eof_received_warning(): + run(client) + + def test_flush_before_shutdown(self): + CHUNK = 1024 * 128 + SIZE = 32 + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, test_utils.ONLYKEY) + client_sslctx = self._create_client_ssl_context() + if hasattr(ssl, 'OP_NO_TLSv1_3'): + client_sslctx.options |= ssl.OP_NO_TLSv1_3 + + future = None + + def server(sock): + sock.starttls(sslctx, server_side=True) + self.assertEqual(sock.recv_all(4), b'ping') + sock.send(b'pong') + time.sleep(0.5) # hopefully stuck the TCP buffer + data = sock.recv_all(CHUNK * SIZE) + self.assertEqual(len(data), CHUNK * SIZE) + sock.close() + + def run(meth): + def wrapper(sock): + try: + meth(sock) + except Exception as ex: + self.loop.call_soon_threadsafe(future.set_exception, ex) + else: + self.loop.call_soon_threadsafe(future.set_result, None) + return wrapper + + async def client(addr): + nonlocal future + future = self.loop.create_future() + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='') + sslprotocol = writer.transport._ssl_protocol + writer.write(b'ping') + data = await reader.readexactly(4) + self.assertEqual(data, b'pong') + + sslprotocol.pause_writing() + for _ in range(SIZE): + writer.write(b'x' * CHUNK) + + writer.close() + sslprotocol.resume_writing() + + await self.wait_closed(writer) + try: + data = await reader.read() + self.assertEqual(data, b'') + except ConnectionResetError: + pass + await future + + with self.tcp_server(run(server)) as srv: + self.loop.run_until_complete(client(srv.addr)) + + def test_remote_shutdown_receives_trailing_data(self): + CHUNK = 1024 * 128 + SIZE = 32 + + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, + test_utils.ONLYKEY + ) + client_sslctx = self._create_client_ssl_context() + future = None + + def server(sock): + incoming = ssl.MemoryBIO() + outgoing = ssl.MemoryBIO() + sslobj = sslctx.wrap_bio(incoming, outgoing, server_side=True) + + while True: + try: + sslobj.do_handshake() + except ssl.SSLWantReadError: + if outgoing.pending: + sock.send(outgoing.read()) + incoming.write(sock.recv(16384)) + else: + if outgoing.pending: + sock.send(outgoing.read()) + break + + while True: + try: + data = sslobj.read(4) + except ssl.SSLWantReadError: + incoming.write(sock.recv(16384)) + else: + break + + self.assertEqual(data, b'ping') + sslobj.write(b'pong') + sock.send(outgoing.read()) + + time.sleep(0.2) # wait for the peer to fill its backlog + + # send close_notify but don't wait for response + with self.assertRaises(ssl.SSLWantReadError): + sslobj.unwrap() + sock.send(outgoing.read()) + + # should receive all data + data_len = 0 + while True: + try: + chunk = len(sslobj.read(16384)) + data_len += chunk + except ssl.SSLWantReadError: + incoming.write(sock.recv(16384)) + except ssl.SSLZeroReturnError: + break + + self.assertEqual(data_len, CHUNK * SIZE) + + # verify that close_notify is received + sslobj.unwrap() + + sock.close() + + def eof_server(sock): + sock.starttls(sslctx, server_side=True) + self.assertEqual(sock.recv_all(4), b'ping') + sock.send(b'pong') + + time.sleep(0.2) # wait for the peer to fill its backlog + + # send EOF + sock.shutdown(socket.SHUT_WR) + + # should receive all data + data = sock.recv_all(CHUNK * SIZE) + self.assertEqual(len(data), CHUNK * SIZE) + + sock.close() + + async def client(addr): + nonlocal future + future = self.loop.create_future() + + reader, writer = await asyncio.open_connection( + *addr, + ssl=client_sslctx, + server_hostname='') + writer.write(b'ping') + data = await reader.readexactly(4) + self.assertEqual(data, b'pong') + + # fill write backlog in a hacky way - renegotiation won't help + for _ in range(SIZE): + writer.transport._test__append_write_backlog(b'x' * CHUNK) + + try: + data = await reader.read() + self.assertEqual(data, b'') + except (BrokenPipeError, ConnectionResetError): + pass + + await future + + writer.close() + await self.wait_closed(writer) + + def run(meth): + def wrapper(sock): + try: + meth(sock) + except Exception as ex: + self.loop.call_soon_threadsafe(future.set_exception, ex) + else: + self.loop.call_soon_threadsafe(future.set_result, None) + return wrapper + + with self.tcp_server(run(server)) as srv: + self.loop.run_until_complete(client(srv.addr)) + + with self.tcp_server(run(eof_server)) as srv: + self.loop.run_until_complete(client(srv.addr)) + + def test_connect_timeout_warning(self): + s = socket.socket(socket.AF_INET) + s.bind(('127.0.0.1', 0)) + addr = s.getsockname() + + async def test(): + try: + await asyncio.wait_for( + self.loop.create_connection(asyncio.Protocol, + *addr, ssl=True), + 0.1) + except (ConnectionRefusedError, asyncio.TimeoutError): + pass + else: + self.fail('TimeoutError is not raised') + + with s: + try: + with self.assertWarns(ResourceWarning) as cm: + self.loop.run_until_complete(test()) + gc.collect() + gc.collect() + gc.collect() + except AssertionError as e: + self.assertEqual(str(e), 'ResourceWarning not triggered') + else: + self.fail('Unexpected ResourceWarning: {}'.format(cm.warning)) + + def test_handshake_timeout_handler_leak(self): + s = socket.socket(socket.AF_INET) + s.bind(('127.0.0.1', 0)) + s.listen(1) + addr = s.getsockname() + + async def test(ctx): + try: + await asyncio.wait_for( + self.loop.create_connection(asyncio.Protocol, *addr, + ssl=ctx), + 0.1) + except (ConnectionRefusedError, asyncio.TimeoutError): + pass + else: + self.fail('TimeoutError is not raised') + + with s: + ctx = ssl.create_default_context() + self.loop.run_until_complete(test(ctx)) + ctx = weakref.ref(ctx) + + # SSLProtocol should be DECREF to 0 + self.assertIsNone(ctx()) + + def test_shutdown_timeout_handler_leak(self): + loop = self.loop + + def server(sock): + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, + test_utils.ONLYKEY + ) + sock = sslctx.wrap_socket(sock, server_side=True) + sock.recv(32) + sock.close() + + class Protocol(asyncio.Protocol): + def __init__(self): + self.fut = asyncio.Future(loop=loop) + + def connection_lost(self, exc): + self.fut.set_result(None) + + async def client(addr, ctx): + tr, pr = await loop.create_connection(Protocol, *addr, ssl=ctx) + tr.close() + await pr.fut + + with self.tcp_server(server) as srv: + ctx = self._create_client_ssl_context() + loop.run_until_complete(client(srv.addr, ctx)) + ctx = weakref.ref(ctx) + + # asyncio has no shutdown timeout, but it ends up with a circular + # reference loop - not ideal (introduces gc glitches), but at least + # not leaking + gc.collect() + gc.collect() + gc.collect() + + # SSLProtocol should be DECREF to 0 + self.assertIsNone(ctx()) + + def test_shutdown_timeout_handler_not_set(self): + loop = self.loop + eof = asyncio.Event() + extra = None + + def server(sock): + sslctx = self._create_server_ssl_context( + test_utils.ONLYCERT, + test_utils.ONLYKEY + ) + sock = sslctx.wrap_socket(sock, server_side=True) + sock.send(b'hello') + assert sock.recv(1024) == b'world' + sock.send(b'extra bytes') + # sending EOF here + sock.shutdown(socket.SHUT_WR) + loop.call_soon_threadsafe(eof.set) + # make sure we have enough time to reproduce the issue + assert sock.recv(1024) == b'' + sock.close() + + class Protocol(asyncio.Protocol): + def __init__(self): + self.fut = asyncio.Future(loop=loop) + self.transport = None + + def connection_made(self, transport): + self.transport = transport + + def data_received(self, data): + if data == b'hello': + self.transport.write(b'world') + # pause reading would make incoming data stay in the sslobj + self.transport.pause_reading() + else: + nonlocal extra + extra = data + + def connection_lost(self, exc): + if exc is None: + self.fut.set_result(None) + else: + self.fut.set_exception(exc) + + async def client(addr): + ctx = self._create_client_ssl_context() + tr, pr = await loop.create_connection(Protocol, *addr, ssl=ctx) + await eof.wait() + tr.resume_reading() + await pr.fut + tr.close() + assert extra == b'extra bytes' + + with self.tcp_server(server) as srv: + loop.run_until_complete(client(srv.addr)) + + +############################################################################### +# Socket Testing Utilities +############################################################################### + + +class TestSocketWrapper: + + def __init__(self, sock): + self.__sock = sock + + def recv_all(self, n): + buf = b'' + while len(buf) < n: + data = self.recv(n - len(buf)) + if data == b'': + raise ConnectionAbortedError + buf += data + return buf + + def starttls(self, ssl_context, *, + server_side=False, + server_hostname=None, + do_handshake_on_connect=True): + + assert isinstance(ssl_context, ssl.SSLContext) + + ssl_sock = ssl_context.wrap_socket( + self.__sock, server_side=server_side, + server_hostname=server_hostname, + do_handshake_on_connect=do_handshake_on_connect) + + if server_side: + ssl_sock.do_handshake() + + self.__sock.close() + self.__sock = ssl_sock + + def __getattr__(self, name): + return getattr(self.__sock, name) + + def __repr__(self): + return '<{} {!r}>'.format(type(self).__name__, self.__sock) + + +class SocketThread(threading.Thread): + + def stop(self): + self._active = False + self.join() + + def __enter__(self): + self.start() + return self + + def __exit__(self, *exc): + self.stop() + + +class TestThreadedClient(SocketThread): + + def __init__(self, test, sock, prog, timeout): + threading.Thread.__init__(self, None, None, 'test-client') + self.daemon = True + + self._timeout = timeout + self._sock = sock + self._active = True + self._prog = prog + self._test = test + + def run(self): + try: + self._prog(TestSocketWrapper(self._sock)) + except (KeyboardInterrupt, SystemExit): + raise + except BaseException as ex: + self._test._abort_socket_test(ex) + + +class TestThreadedServer(SocketThread): + + def __init__(self, test, sock, prog, timeout, max_clients): + threading.Thread.__init__(self, None, None, 'test-server') + self.daemon = True + + self._clients = 0 + self._finished_clients = 0 + self._max_clients = max_clients + self._timeout = timeout + self._sock = sock + self._active = True + + self._prog = prog + + self._s1, self._s2 = socket.socketpair() + self._s1.setblocking(False) + + self._test = test + + def stop(self): + try: + if self._s2 and self._s2.fileno() != -1: + try: + self._s2.send(b'stop') + except OSError: + pass + finally: + super().stop() + + def run(self): + try: + with self._sock: + self._sock.setblocking(0) + self._run() + finally: + self._s1.close() + self._s2.close() + + def _run(self): + while self._active: + if self._clients >= self._max_clients: + return + + r, w, x = select.select( + [self._sock, self._s1], [], [], self._timeout) + + if self._s1 in r: + return + + if self._sock in r: + try: + conn, addr = self._sock.accept() + except BlockingIOError: + continue + except socket.timeout: + if not self._active: + return + else: + raise + else: + self._clients += 1 + conn.settimeout(self._timeout) + try: + with conn: + self._handle_client(conn) + except (KeyboardInterrupt, SystemExit): + raise + except BaseException as ex: + self._active = False + try: + raise + finally: + self._test._abort_socket_test(ex) + + def _handle_client(self, sock): + self._prog(TestSocketWrapper(sock)) + + @property + def addr(self): + return self._sock.getsockname() diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py index e87863eb712373..79a81bd8c39b69 100644 --- a/Lib/test/test_asyncio/test_sslproto.py +++ b/Lib/test/test_asyncio/test_sslproto.py @@ -15,7 +15,6 @@ from asyncio import log from asyncio import protocols from asyncio import sslproto -from test import support from test.test_asyncio import utils as test_utils from test.test_asyncio import functional as func_tests @@ -44,16 +43,13 @@ def ssl_protocol(self, *, waiter=None, proto=None): def connection_made(self, ssl_proto, *, do_handshake=None): transport = mock.Mock() - sslpipe = mock.Mock() - sslpipe.shutdown.return_value = b'' - if do_handshake: - sslpipe.do_handshake.side_effect = do_handshake - else: - def mock_handshake(callback): - return [] - sslpipe.do_handshake.side_effect = mock_handshake - with mock.patch('asyncio.sslproto._SSLPipe', return_value=sslpipe): - ssl_proto.connection_made(transport) + sslobj = mock.Mock() + # emulate reading decompressed data + sslobj.read.side_effect = ssl.SSLWantReadError + if do_handshake is not None: + sslobj.do_handshake = do_handshake + ssl_proto._sslobj = sslobj + ssl_proto.connection_made(transport) return transport def test_handshake_timeout_zero(self): @@ -75,7 +71,10 @@ def test_handshake_timeout_negative(self): def test_eof_received_waiter(self): waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - self.connection_made(ssl_proto) + self.connection_made( + ssl_proto, + do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) + ) ssl_proto.eof_received() test_utils.run_briefly(self.loop) self.assertIsInstance(waiter.exception(), ConnectionResetError) @@ -100,7 +99,10 @@ def test_connection_lost(self): # yield from waiter hang if lost_connection was called. waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - self.connection_made(ssl_proto) + self.connection_made( + ssl_proto, + do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) + ) ssl_proto.connection_lost(ConnectionAbortedError) test_utils.run_briefly(self.loop) self.assertIsInstance(waiter.exception(), ConnectionAbortedError) @@ -110,7 +112,10 @@ def test_close_during_handshake(self): waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - transport = self.connection_made(ssl_proto) + transport = self.connection_made( + ssl_proto, + do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) + ) test_utils.run_briefly(self.loop) ssl_proto._app_transport.close() @@ -143,7 +148,7 @@ def test_data_received_after_closing(self): transp.close() # should not raise - self.assertIsNone(ssl_proto.data_received(b'data')) + self.assertIsNone(ssl_proto.buffer_updated(5)) def test_write_after_closing(self): ssl_proto = self.ssl_protocol() diff --git a/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst b/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst new file mode 100644 index 00000000000000..e2b5a9e395ef1c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst @@ -0,0 +1,2 @@ +Reimplement SSL/TLS support in asyncio, borrow the impelementation from +uvloop library. From webhook-mailer at python.org Sun May 2 18:11:01 2021 From: webhook-mailer at python.org (zooba) Date: Sun, 02 May 2021 22:11:01 -0000 Subject: [Python-checkins] bpo-43434: Clean up sqlite3.connect() after GH-25818 (GH-25823) Message-ID: https://github.com/python/cpython/commit/cbb7b9ed4a6069a2cb2e2f809926c2cfa332a493 commit: cbb7b9ed4a6069a2cb2e2f809926c2cfa332a493 branch: master author: Erlend Egeberg Aasland committer: zooba date: 2021-05-02T23:10:51+01:00 summary: bpo-43434: Clean up sqlite3.connect() after GH-25818 (GH-25823) files: M Modules/_sqlite/module.c diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 324994641b4a4..a5e5525481f75 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -77,8 +77,6 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* int uri = 0; double timeout = 5.0; - PyObject* result; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|diOiOip", kwlist, &database, &timeout, &detect_types, &isolation_level, &check_same_thread, @@ -91,12 +89,7 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* factory = (PyObject*)pysqlite_ConnectionType; } - result = PyObject_Call(factory, args, kwargs); - if (result == NULL) { - return NULL; - } - - return result; + return PyObject_Call(factory, args, kwargs); } PyDoc_STRVAR(module_connect_doc, From webhook-mailer at python.org Sun May 2 18:35:07 2021 From: webhook-mailer at python.org (brandtbucher) Date: Sun, 02 May 2021 22:35:07 -0000 Subject: [Python-checkins] bpo-43977: Document the new pattern matching type flags (GH-25734) Message-ID: https://github.com/python/cpython/commit/9387fac100db359cbb6ec2a76f8a5eba8f9d7b65 commit: 9387fac100db359cbb6ec2a76f8a5eba8f9d7b65 branch: master author: Brandt Bucher committer: brandtbucher date: 2021-05-02T15:35:00-07:00 summary: bpo-43977: Document the new pattern matching type flags (GH-25734) files: A Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst M Doc/c-api/typeobj.rst diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index 5e731bd5a6cbd..82f2ab5345116 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -1219,6 +1219,50 @@ and :c:type:`PyType_Type` effectively act as defaults.) .. versionadded:: 3.10 + .. data:: Py_TPFLAGS_MAPPING + + This bit indicates that instances of the class may match mapping patterns + when used as the subject of a :keyword:`match` block. It is automatically + set when registering or subclassing :class:`collections.abc.Mapping`, and + unset when registering :class:`collections.abc.Sequence`. + + .. note:: + + :const:`Py_TPFLAGS_MAPPING` and :const:`Py_TPFLAGS_SEQUENCE` are + mutually exclusive; it is an error enable both flags simultaneously. + + **Inheritance:** + + This flag is inherited by types that do not already set + :const:`Py_TPFLAGS_SEQUENCE`. + + .. seealso:: :pep:`634` -- Structural Pattern Matching: Specification + + .. versionadded:: 3.10 + + + .. data:: Py_TPFLAGS_SEQUENCE + + This bit indicates that instances of the class may match sequence patterns + when used as the subject of a :keyword:`match` block. It is automatically + set when registering or subclassing :class:`collections.abc.Sequence`, and + unset when registering :class:`collections.abc.Mapping`. + + .. note:: + + :const:`Py_TPFLAGS_MAPPING` and :const:`Py_TPFLAGS_SEQUENCE` are + mutually exclusive; it is an error enable both flags simultaneously. + + **Inheritance:** + + This flag is inherited by types that do not already set + :const:`Py_TPFLAGS_MAPPING`. + + .. seealso:: :pep:`634` -- Structural Pattern Matching: Specification + + .. versionadded:: 3.10 + + .. c:member:: const char* PyTypeObject.tp_doc An optional pointer to a NUL-terminated C string giving the docstring for this diff --git a/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst b/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst new file mode 100644 index 0000000000000..20b5fd7ab86fa --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst @@ -0,0 +1,2 @@ +Document the new :const:`Py_TPFLAGS_MAPPING` and +:const:`Py_TPFLAGS_SEQUENCE` type flags. From webhook-mailer at python.org Sun May 2 18:43:10 2021 From: webhook-mailer at python.org (zooba) Date: Sun, 02 May 2021 22:43:10 -0000 Subject: [Python-checkins] bpo-43434: Move sqlite3.connect audit event to sqlite3.Connection.__init__ (GH-25818) Message-ID: https://github.com/python/cpython/commit/ad73d1657ca3591b1dd1d15bb80ce83ca7fc3223 commit: ad73d1657ca3591b1dd1d15bb80ce83ca7fc3223 branch: 3.9 author: Erlend Egeberg Aasland committer: zooba date: 2021-05-02T23:43:06+01:00 summary: bpo-43434: Move sqlite3.connect audit event to sqlite3.Connection.__init__ (GH-25818) files: A Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst M Modules/_sqlite/connection.c M Modules/_sqlite/module.c diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst new file mode 100644 index 00000000000000..28b7fc53853405 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst @@ -0,0 +1,4 @@ +Creating a :class:`sqlite3.Connection` object now also produces +a ``sqlite3.connect`` :ref:`auditing event `. +Previously this event was only produced by :func:`sqlite3.connect` +calls. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index d20339ca3f7dfd..df4e9466b4bc51 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -96,6 +96,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject return -1; } + if (PySys_Audit("sqlite3.connect", "O", database_obj) < 0) { + return -1; + } + database = PyBytes_AsString(database_obj); self->initialized = 1; diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 71d951ee887e47..44811835d42fca 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -71,8 +71,6 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* int uri = 0; double timeout = 5.0; - PyObject* result; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|diOiOip", kwlist, &database, &timeout, &detect_types, &isolation_level, &check_same_thread, @@ -85,13 +83,7 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* factory = (PyObject*)&pysqlite_ConnectionType; } - if (PySys_Audit("sqlite3.connect", "O", database) < 0) { - return NULL; - } - - result = PyObject_Call(factory, args, kwargs); - - return result; + return PyObject_Call(factory, args, kwargs); } PyDoc_STRVAR(module_connect_doc, From webhook-mailer at python.org Sun May 2 18:55:37 2021 From: webhook-mailer at python.org (zooba) Date: Sun, 02 May 2021 22:55:37 -0000 Subject: [Python-checkins] bpo-43434: Move sqlite3.connect audit events to sqlite3.Connection.__init__ (GH-25818) Message-ID: https://github.com/python/cpython/commit/10665ac37313560fe87460cf4a5c26677049bf62 commit: 10665ac37313560fe87460cf4a5c26677049bf62 branch: 3.8 author: Erlend Egeberg Aasland committer: zooba date: 2021-05-02T23:55:33+01:00 summary: bpo-43434: Move sqlite3.connect audit events to sqlite3.Connection.__init__ (GH-25818) (cherry picked from commit c96cc089f60d2bf7e003c27413c3239ee9de2990) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst M Modules/_sqlite/connection.c M Modules/_sqlite/module.c diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst new file mode 100644 index 00000000000000..28b7fc53853405 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst @@ -0,0 +1,4 @@ +Creating a :class:`sqlite3.Connection` object now also produces +a ``sqlite3.connect`` :ref:`auditing event `. +Previously this event was only produced by :func:`sqlite3.connect` +calls. Patch by Erlend E. Aasland. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index b6188a36733ef3..d1d5f9fd07cd7e 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -98,6 +98,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject return -1; } + if (PySys_Audit("sqlite3.connect", "O", database_obj) < 0) { + return -1; + } + database = PyBytes_AsString(database_obj); self->initialized = 1; diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 9fe0dc952f0b82..d3ce2839eecc3c 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -71,8 +71,6 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* int uri = 0; double timeout = 5.0; - PyObject* result; - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|diOiOip", kwlist, &database, &timeout, &detect_types, &isolation_level, &check_same_thread, @@ -85,13 +83,7 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* factory = (PyObject*)&pysqlite_ConnectionType; } - if (PySys_Audit("sqlite3.connect", "O", database) < 0) { - return NULL; - } - - result = PyObject_Call(factory, args, kwargs); - - return result; + return PyObject_Call(factory, args, kwargs); } PyDoc_STRVAR(module_connect_doc, From webhook-mailer at python.org Sun May 2 19:38:32 2021 From: webhook-mailer at python.org (markshannon) Date: Sun, 02 May 2021 23:38:32 -0000 Subject: [Python-checkins] bpo-43977: Make sure that tp_flags for pattern matching are inherited correctly. (GH-25813) Message-ID: https://github.com/python/cpython/commit/33ec88ac81f23668293d101b83367b086c795e5e commit: 33ec88ac81f23668293d101b83367b086c795e5e branch: master author: Mark Shannon committer: markshannon date: 2021-05-03T00:38:22+01:00 summary: bpo-43977: Make sure that tp_flags for pattern matching are inherited correctly. (GH-25813) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst M Lib/test/test_collections.py M Lib/test/test_patma.py M Modules/_abc.c M Objects/typeobject.c diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 98690d231e606..2ba1a19ead9d8 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -1967,6 +1967,12 @@ def insert(self, index, value): self.assertEqual(len(mss), len(mss2)) self.assertEqual(list(mss), list(mss2)) + def test_illegal_patma_flags(self): + with self.assertRaises(TypeError): + class Both(Collection): + __abc_tpflags__ = (Sequence.__flags__ | Mapping.__flags__) + + ################################################################################ ### Counter diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index 8a273be7250bb..084d0879f1764 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -2979,6 +2979,47 @@ def f(x): self.assertEqual(f((False, range(10, 20), True)), alts[4]) +class TestInheritance(unittest.TestCase): + + def test_multiple_inheritance(self): + class C: + pass + class S1(collections.UserList, collections.abc.Mapping): + pass + class S2(C, collections.UserList, collections.abc.Mapping): + pass + class S3(list, C, collections.abc.Mapping): + pass + class S4(collections.UserList, dict, C): + pass + class M1(collections.UserDict, collections.abc.Sequence): + pass + class M2(C, collections.UserDict, collections.abc.Sequence): + pass + class M3(collections.UserDict, C, list): + pass + class M4(dict, collections.abc.Sequence, C): + pass + def f(x): + match x: + case []: + return "seq" + case {}: + return "map" + def g(x): + match x: + case {}: + return "map" + case []: + return "seq" + for Seq in (S1, S2, S3, S4): + self.assertEqual(f(Seq()), "seq") + self.assertEqual(g(Seq()), "seq") + for Map in (M1, M2, M3, M4): + self.assertEqual(f(Map()), "map") + self.assertEqual(g(Map()), "map") + + class PerfPatma(TestPatma): def assertEqual(*_, **__): diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst new file mode 100644 index 0000000000000..95aacaf5fa2c3 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst @@ -0,0 +1 @@ +Prevent classes being both a sequence and a mapping when pattern matching. diff --git a/Modules/_abc.c b/Modules/_abc.c index 39261dd3cd579..7720d4051fe9e 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -467,6 +467,10 @@ _abc__abc_init(PyObject *module, PyObject *self) if (val == -1 && PyErr_Occurred()) { return NULL; } + if ((val & COLLECTION_FLAGS) == COLLECTION_FLAGS) { + PyErr_SetString(PyExc_TypeError, "__abc_tpflags__ cannot be both Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING"); + return NULL; + } ((PyTypeObject *)self)->tp_flags |= (val & COLLECTION_FLAGS); } if (_PyDict_DelItemId(cls->tp_dict, &PyId___abc_tpflags__) < 0) { @@ -527,9 +531,12 @@ _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)) + /* Set Py_TPFLAGS_SEQUENCE or Py_TPFLAGS_MAPPING flag */ + if (PyType_Check(self) && + !PyType_HasFeature((PyTypeObject *)subclass, Py_TPFLAGS_IMMUTABLETYPE) && + ((PyTypeObject *)self)->tp_flags & COLLECTION_FLAGS) { + ((PyTypeObject *)subclass)->tp_flags &= ~COLLECTION_FLAGS; ((PyTypeObject *)subclass)->tp_flags |= (((PyTypeObject *)self)->tp_flags & COLLECTION_FLAGS); } Py_INCREF(subclass); diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 621bb0ca93022..e511cf9ebfc7e 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -5713,12 +5713,6 @@ inherit_special(PyTypeObject *type, PyTypeObject *base) 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 @@ -5936,6 +5930,7 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base) static int add_operators(PyTypeObject *); static int add_tp_new_wrapper(PyTypeObject *type); +#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING) static int type_ready_checks(PyTypeObject *type) @@ -5962,6 +5957,10 @@ type_ready_checks(PyTypeObject *type) _PyObject_ASSERT((PyObject *)type, type->tp_as_async->am_send != NULL); } + /* Consistency checks for pattern matching + * Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING are mutually exclusive */ + _PyObject_ASSERT((PyObject *)type, (type->tp_flags & COLLECTION_FLAGS) != COLLECTION_FLAGS); + if (type->tp_name == NULL) { PyErr_Format(PyExc_SystemError, "Type does not define the tp_name field."); @@ -6156,6 +6155,12 @@ type_ready_inherit_as_structs(PyTypeObject *type, PyTypeObject *base) } } +static void +inherit_patma_flags(PyTypeObject *type, PyTypeObject *base) { + if ((type->tp_flags & COLLECTION_FLAGS) == 0) { + type->tp_flags |= base->tp_flags & COLLECTION_FLAGS; + } +} static int type_ready_inherit(PyTypeObject *type) @@ -6175,6 +6180,7 @@ type_ready_inherit(PyTypeObject *type) if (inherit_slots(type, (PyTypeObject *)b) < 0) { return -1; } + inherit_patma_flags(type, (PyTypeObject *)b); } } From webhook-mailer at python.org Sun May 2 20:28:51 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 00:28:51 -0000 Subject: [Python-checkins] bpo-43568: Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 (GH-25827) Message-ID: https://github.com/python/cpython/commit/870317825822c856490a32eee037fec8057690b1 commit: 870317825822c856490a32eee037fec8057690b1 branch: master author: Ned Deily committer: ned-deily date: 2021-05-02T20:28:43-04:00 summary: bpo-43568: Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 (GH-25827) Only complain if the config target is >= 10.3 and the current target is < 10.3. The check was originally added to ensure that incompatible LDSHARED flags are not used, because -undefined dynamic_lookup is used when building for 10.3 and later, and is not supported on older OS versions. Apart from that, there should be no problem in general with using an older target. Authored-by: Joshua Root files: A Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst M Lib/_osx_support.py M Lib/distutils/spawn.py M Lib/test/test_posix.py M configure M configure.ac diff --git a/Lib/_osx_support.py b/Lib/_osx_support.py index 72f4819c29092a..b7145ee069fa32 100644 --- a/Lib/_osx_support.py +++ b/Lib/_osx_support.py @@ -525,10 +525,10 @@ def get_platform_osx(_config_vars, osname, release, machine): try: macrelease = tuple(int(i) for i in macrelease.split('.')[0:2]) except ValueError: - macrelease = (10, 0) + macrelease = (10, 3) else: # assume no universal support - macrelease = (10, 0) + macrelease = (10, 3) if (macrelease >= (10, 4)) and '-arch' in cflags.strip(): # The universal build will build fat binaries, but not on diff --git a/Lib/distutils/spawn.py b/Lib/distutils/spawn.py index 0d1bd0391e6f11..31df3f7faca552 100644 --- a/Lib/distutils/spawn.py +++ b/Lib/distutils/spawn.py @@ -59,13 +59,17 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0): if _cfg_target: _cfg_target_split = [int(x) for x in _cfg_target.split('.')] if _cfg_target: - # ensure that the deployment target of build process is not less - # than that used when the interpreter was built. This ensures - # extension modules are built with correct compatibility values + # Ensure that the deployment target of the build process is not + # less than 10.3 if the interpreter was built for 10.3 or later. + # This ensures extension modules are built with correct + # compatibility values, specifically LDSHARED which can use + # '-undefined dynamic_lookup' which only works on >= 10.3. cur_target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', _cfg_target) - if _cfg_target_split > [int(x) for x in cur_target.split('.')]: + cur_target_split = [int(x) for x in cur_target.split('.')] + if _cfg_target_split[:2] >= [10, 3] and cur_target_split[:2] < [10, 3]: my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: ' - 'now "%s" but "%s" during configure' + 'now "%s" but "%s" during configure;' + 'must use 10.3 or later' % (cur_target, _cfg_target)) raise DistutilsPlatformError(my_msg) env = dict(os.environ, diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 93611f04515ae9..e4666884ce06a1 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1070,7 +1070,7 @@ def test_getgroups(self): # Issues 16698: OS X ABIs prior to 10.6 have limits on getgroups() if sys.platform == 'darwin': import sysconfig - dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.0' + dt = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') or '10.3' if tuple(int(n) for n in dt.split('.')[0:2]) < (10, 6): raise unittest.SkipTest("getgroups(2) is broken prior to 10.6") diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst new file mode 100644 index 00000000000000..3bc9b0b55bbd35 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst @@ -0,0 +1 @@ +Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 diff --git a/configure b/configure index 86591e2ed2cf82..e3e6dada209391 100755 --- a/configure +++ b/configure @@ -9656,19 +9656,7 @@ then test ${dep_target_minor} -le 2 then # building for OS X 10.0 through 10.2 - LDSHARED='$(CC) -bundle' - LDCXXSHARED='$(CXX) -bundle' - if test "$enable_framework" ; then - # Link against the framework. All externals should be defined. - BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - else - # No framework, use the Python app as bundle-loader - BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' - LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - fi + as_fn_error $? "MACOSX_DEPLOYMENT_TARGET too old ($MACOSX_DEPLOYMENT_TARGET), only 10.3 or later is supported" "$LINENO" 5 else # building for OS X 10.3 and later LDSHARED='$(CC) -bundle -undefined dynamic_lookup' diff --git a/configure.ac b/configure.ac index 0ea9ecf6d6a498..366ab2c84ae070 100644 --- a/configure.ac +++ b/configure.ac @@ -2651,19 +2651,7 @@ then test ${dep_target_minor} -le 2 then # building for OS X 10.0 through 10.2 - LDSHARED='$(CC) -bundle' - LDCXXSHARED='$(CXX) -bundle' - if test "$enable_framework" ; then - # Link against the framework. All externals should be defined. - BLDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDSHARED="$LDSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - LDCXXSHARED="$LDCXXSHARED "'$(PYTHONFRAMEWORKPREFIX)/$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' - else - # No framework, use the Python app as bundle-loader - BLDSHARED="$LDSHARED "'-bundle_loader $(BUILDPYTHON)' - LDSHARED="$LDSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - LDCXXSHARED="$LDCXXSHARED "'-bundle_loader $(BINDIR)/python$(VERSION)$(EXE)' - fi + AC_MSG_ERROR([MACOSX_DEPLOYMENT_TARGET too old ($MACOSX_DEPLOYMENT_TARGET), only 10.3 or later is supported]) else # building for OS X 10.3 and later LDSHARED='$(CC) -bundle -undefined dynamic_lookup' From webhook-mailer at python.org Sun May 2 20:37:43 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 00:37:43 -0000 Subject: [Python-checkins] bpo-43851: Build SQLite with SQLITE_OMIT_AUTOINIT on macOS (GH-25413) Message-ID: https://github.com/python/cpython/commit/555cbbe7c10c29ec4358c66c247b8d7e871a5f7b commit: 555cbbe7c10c29ec4358c66c247b8d7e871a5f7b branch: master author: Erlend Egeberg Aasland committer: ned-deily date: 2021-05-02T20:37:35-04:00 summary: bpo-43851: Build SQLite with SQLITE_OMIT_AUTOINIT on macOS (GH-25413) files: A Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index b07def17476acd..15a45b95a23c4b 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -363,6 +363,7 @@ def library_recipes(): '-DSQLITE_ENABLE_FTS3_PARENTHESIS ' '-DSQLITE_ENABLE_JSON1 ' '-DSQLITE_ENABLE_RTREE ' + '-DSQLITE_OMIT_AUTOINIT ' '-DSQLITE_TCL=0 ' '%s' % ('','-DSQLITE_WITHOUT_ZONEMALLOC ')[LT_10_5]), configure_pre=[ diff --git a/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst b/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst new file mode 100644 index 00000000000000..0febfb02315e84 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst @@ -0,0 +1 @@ +Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by Erlend E. Aasland. From webhook-mailer at python.org Sun May 2 21:20:57 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 03 May 2021 01:20:57 -0000 Subject: [Python-checkins] More work on documenting dataclass keyword-only fields. (GH-25828) Message-ID: https://github.com/python/cpython/commit/821f0c8c39f522f28407bd0e8d4adeadd3e72776 commit: 821f0c8c39f522f28407bd0e8d4adeadd3e72776 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-02T21:20:50-04:00 summary: More work on documenting dataclass keyword-only fields. (GH-25828) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index a27d09d0725de..1a7fed9af8187 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -43,8 +43,8 @@ directly specified in the ``InventoryItem`` definition shown above. .. versionadded:: 3.7 -Module-level decorators, classes, and functions ------------------------------------------------ +Module contents +--------------- .. decorator:: dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False) @@ -177,7 +177,7 @@ Module-level decorators, classes, and functions with a keyword when :meth:`__init__` is called. There is no effect on any other aspect of dataclasses. See the :term:`parameter` glossary entry for details. Also see the - ``dataclasses.KW_ONLY`` section. + :const:`KW_ONLY` section. .. versionadded:: 3.10 @@ -220,10 +220,10 @@ Module-level decorators, classes, and functions c = C() c.mylist += [1, 2, 3] - As shown above, the ``MISSING`` value is a sentinel object used to + As shown above, the :const:`MISSING` value is a sentinel object used to detect if the ``default`` and ``default_factory`` parameters are provided. This sentinel is used because ``None`` is a valid value - for ``default``. No code should directly use the ``MISSING`` + for ``default``. No code should directly use the :const:`MISSING` value. The parameters to :func:`field` are: @@ -433,6 +433,38 @@ Module-level decorators, classes, and functions def is_dataclass_instance(obj): return is_dataclass(obj) and not isinstance(obj, type) +.. data:: MISSING + + A sentinel value signifying a missing default or default_factory. + +.. data:: KW_ONLY + + A sentinel value used a type annotation. Any fields after a + pseudo-field with the type of :const:`KW_ONLY` are marked as + keyword-only fields. Note that a pseudo-field of type + :const:`KW_ONLY` is otherwise completely ignored. This includes the + name of such a field. By convention, a name of `_` is used for a + :const:`KW_ONLY` field. Keyword-only fields signify + :meth:`__init__` parameters that must be specified as keywords when + the class is instantiated. + + In this example, the fields ``y`` and ``z`` will be marked as keyword-only fields:: + + @dataclass + class Point: + x: float + _: KW_ONLY + y: float + z: float + + p = Point(0, y=1.5, z=2.0) + +.. exception:: FrozenInstanceError + + Raised when an implicitly defined :meth:`__setattr__` or + :meth:`__delattr__` is called on a dataclass which was defined with + ``frozen=True``. It is a subclass of :exc:`AttributeError`. + Post-init processing -------------------- @@ -550,9 +582,9 @@ Re-ordering of keyword-only parameters in :meth:`__init__` After the parameters needed for :meth:`__init__` are computed, any keyword-only parameters are moved to come after all regular -(non-keyword-only) fields. In this example, ``Base.y``, ``Base.w``, -and ``D.t`` are keyword-only fields, and ``Base.x`` and ``D.z`` are -regular fields:: +(non-keyword-only) parameters. In this example, ``Base.y``, +``Base.w``, and ``D.t`` are keyword-only fields, and ``Base.x`` and +``D.z`` are regular fields:: @dataclass class Base: @@ -652,11 +684,3 @@ Mutable default values assert D().x is not D().x -Exceptions ----------- - -.. exception:: FrozenInstanceError - - Raised when an implicitly defined :meth:`__setattr__` or - :meth:`__delattr__` is called on a dataclass which was defined with - ``frozen=True``. It is a subclass of :exc:`AttributeError`. From webhook-mailer at python.org Sun May 2 21:29:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 03 May 2021 01:29:11 -0000 Subject: [Python-checkins] bpo-42362: Switch to clang/clang++ as the default compiler in build-installer.py (GH-23298) Message-ID: https://github.com/python/cpython/commit/90d523910a61290597b4599f17363b532f0a4411 commit: 90d523910a61290597b4599f17363b532f0a4411 branch: master author: Ronald Oussoren committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-02T18:29:03-07:00 summary: bpo-42362: Switch to clang/clang++ as the default compiler in build-installer.py (GH-23298) This change is cosmetic only, the "gcc" command in Apple's compiler tools is an alias for "clang" (and using non-system tooling for building the installer is not supported by this script). Automerge-Triggered-By: GH:ned-deily files: M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 15a45b95a23c4b..540b5a0d1b8f93 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -161,8 +161,11 @@ def getTargetCompilers(): '10.4': ('gcc-4.0', 'g++-4.0'), '10.5': ('gcc', 'g++'), '10.6': ('gcc', 'g++'), + '10.7': ('gcc', 'g++'), + '10.8': ('gcc', 'g++'), + '10.9': ('gcc', 'g++'), } - return target_cc_map.get(DEPTARGET, ('gcc', 'g++') ) + return target_cc_map.get(DEPTARGET, ('clang', 'clang++') ) CC, CXX = getTargetCompilers() From webhook-mailer at python.org Sun May 2 22:27:47 2021 From: webhook-mailer at python.org (terryjreedy) Date: Mon, 03 May 2021 02:27:47 -0000 Subject: [Python-checkins] bpo-37903: IDLE: add shell sidebar mouse interactions (GH-25708) Message-ID: https://github.com/python/cpython/commit/b43cc31a270d0dacbc69e35d6c6fbdb5edd7e711 commit: b43cc31a270d0dacbc69e35d6c6fbdb5edd7e711 branch: master author: Tal Einat <532281+taleinat at users.noreply.github.com> committer: terryjreedy date: 2021-05-02T22:27:38-04:00 summary: bpo-37903: IDLE: add shell sidebar mouse interactions (GH-25708) Left click and drag to select lines. With selection, right click for context menu with copy and copy-with-prompts. Also add copy-with-prompts to the text-box context menu. Co-authored-by: Terry Jan Reedy files: A Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst M Doc/whatsnew/3.10.rst M Lib/idlelib/NEWS.txt M Lib/idlelib/autocomplete.py M Lib/idlelib/autocomplete_w.py M Lib/idlelib/editor.py M Lib/idlelib/idle_test/test_autocomplete_w.py M Lib/idlelib/idle_test/test_sidebar.py M Lib/idlelib/pyshell.py M Lib/idlelib/sidebar.py diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 223ab65cfc311..eb452b07f55f6 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -994,6 +994,32 @@ hmac The hmac module now uses OpenSSL's HMAC implementation internally. (Contributed by Christian Heimes in :issue:`40645`.) +IDLE and idlelib +---------------- + +Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). +User hooks were previously ignored. (Patch by Ken Hilton in +:issue:`43008`.) + +This change was backported to a 3.9 maintenance release. + +Add a Shell sidebar. Move the primary prompt ('>>>') to the sidebar. +Add secondary prompts ('...') to the sidebar. Left click and optional +drag selects one or more lines of text, as with the editor +line number sidebar. Right click after selecting text lines displays +a context menu with 'copy with prompts'. This zips together prompts +from the sidebar with lines from the selected text. This option also +appears on the context menu for the text. (Contributed by Tal Einat +in :issue:`37903`.) + +Use spaces instead of tabs to indent interactive code. This makes +interactive code entries 'look right'. Making this feasible was a +major motivation for adding the shell sidebar. Contributed by +Terry Jan Reedy in :issue:`37892`.) + +We expect to backport these shell changes to a future 3.9 maintenance +release. + importlib.metadata ------------------ diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 83afe3ecac908..ed1142653d953 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -4,7 +4,15 @@ Released on 2021-10-04? ========================= -bpo-37892: Change Shell input indents from tabs to spaces. +bpo-37903: Add mouse actions to the shell sidebar. Left click and +optional drag selects one or more lines of text, as with the +editor line number sidebar. Right click after selecting text lines +displays a context menu with 'copy with prompts'. This zips together +prompts from the sidebar with lines from the selected text. This option +also appears on the context menu for the text. + +bpo-37892: Change Shell input indents from tabs to spaces. Shell input +now 'looks right'. Making this feasible motivated the shell sidebar. bpo-37903: Move the Shell input prompt to a side bar. @@ -19,7 +27,8 @@ bpo-23544: Disable Debug=>Stack Viewer when user code is running or Debugger is active, to prevent hang or crash. Patch by Zackery Spytz. bpo-43008: Make IDLE invoke :func:`sys.excepthook` in normal, -2-process mode. Patch by Ken Hilton. +2-process mode. User hooks were previously ignored. +Patch by Ken Hilton. bpo-33065: Fix problem debugging user classes with __repr__ method. @@ -32,7 +41,7 @@ installers built on macOS 11. bpo-42426: Fix reporting offset of the RE error in searchengine. -bpo-42416: Get docstrings for IDLE calltips more often +bpo-42416: Display docstrings in IDLE calltips in more cases, by using inspect.getdoc. bpo-33987: Mostly finish using ttk widgets, mainly for editor, diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py index e1e9e17311eda..bb7ee035c4fef 100644 --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -31,10 +31,11 @@ class AutoComplete: - def __init__(self, editwin=None): + def __init__(self, editwin=None, tags=None): self.editwin = editwin if editwin is not None: # not in subprocess or no-gui test self.text = editwin.text + self.tags = tags self.autocompletewindow = None # id of delayed call, and the index of the text insert when # the delayed call was issued. If _delayed_completion_id is @@ -48,7 +49,7 @@ def reload(cls): "extensions", "AutoComplete", "popupwait", type="int", default=0) def _make_autocomplete_window(self): # Makes mocking easier. - return autocomplete_w.AutoCompleteWindow(self.text) + return autocomplete_w.AutoCompleteWindow(self.text, tags=self.tags) def _remove_autocomplete_window(self, event=None): if self.autocompletewindow: diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py index fe7a6be83d586..d3d1e6982bfb2 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -26,9 +26,11 @@ class AutoCompleteWindow: - def __init__(self, widget): + def __init__(self, widget, tags): # The widget (Text) on which we place the AutoCompleteWindow self.widget = widget + # Tags to mark inserted text with + self.tags = tags # The widgets we create self.autocompletewindow = self.listbox = self.scrollbar = None # The default foreground and background of a selection. Saved because @@ -69,7 +71,8 @@ def _change_start(self, newstart): "%s+%dc" % (self.startindex, len(self.start))) if i < len(newstart): self.widget.insert("%s+%dc" % (self.startindex, i), - newstart[i:]) + newstart[i:], + self.tags) self.start = newstart def _binary_search(self, s): diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index 8b544407da2e0..fcc8a3f08ccfe 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -311,7 +311,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None): # Former extension bindings depends on frame.text being packed # (called from self.ResetColorizer()). - autocomplete = self.AutoComplete(self) + autocomplete = self.AutoComplete(self, self.user_input_insert_tags) text.bind("<>", autocomplete.autocomplete_event) text.bind("<>", autocomplete.try_open_completions_event) diff --git a/Lib/idlelib/idle_test/test_autocomplete_w.py b/Lib/idlelib/idle_test/test_autocomplete_w.py index b1bdc6c7c6e1a..a59a375c90fd8 100644 --- a/Lib/idlelib/idle_test/test_autocomplete_w.py +++ b/Lib/idlelib/idle_test/test_autocomplete_w.py @@ -15,7 +15,7 @@ def setUpClass(cls): cls.root = Tk() cls.root.withdraw() cls.text = Text(cls.root) - cls.acw = acw.AutoCompleteWindow(cls.text) + cls.acw = acw.AutoCompleteWindow(cls.text, tags=None) @classmethod def tearDownClass(cls): diff --git a/Lib/idlelib/idle_test/test_sidebar.py b/Lib/idlelib/idle_test/test_sidebar.py index 0497f6d05139e..43e8137d7079c 100644 --- a/Lib/idlelib/idle_test/test_sidebar.py +++ b/Lib/idlelib/idle_test/test_sidebar.py @@ -270,7 +270,6 @@ 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) @@ -704,6 +703,66 @@ def test_mousewheel(self): yield self.assertIsNotNone(text.dlineinfo(text.index(f'{last_lineno}.0'))) + @run_in_tk_mainloop + def test_copy(self): + sidebar = self.shell.shell_sidebar + text = self.shell.text + + first_line = get_end_linenumber(text) + + self.do_input(dedent('''\ + if True: + print(1) + + ''')) + yield + + text.tag_add('sel', f'{first_line}.0', 'end-1c') + selected_text = text.get('sel.first', 'sel.last') + self.assertTrue(selected_text.startswith('if True:\n')) + self.assertIn('\n1\n', selected_text) + + text.event_generate('<>') + self.addCleanup(text.clipboard_clear) + + copied_text = text.clipboard_get() + self.assertEqual(copied_text, selected_text) + + @run_in_tk_mainloop + def test_copy_with_prompts(self): + sidebar = self.shell.shell_sidebar + text = self.shell.text + + first_line = get_end_linenumber(text) + self.do_input(dedent('''\ + if True: + print(1) + + ''')) + yield + + text.tag_add('sel', f'{first_line}.3', 'end-1c') + selected_text = text.get('sel.first', 'sel.last') + self.assertTrue(selected_text.startswith('True:\n')) + + selected_lines_text = text.get('sel.first linestart', 'sel.last') + selected_lines = selected_lines_text.split('\n') + # Expect a block of input, a single output line, and a new prompt + expected_prompts = \ + ['>>>'] + ['...'] * (len(selected_lines) - 3) + [None, '>>>'] + selected_text_with_prompts = '\n'.join( + line if prompt is None else prompt + ' ' + line + for prompt, line in zip(expected_prompts, + selected_lines, + strict=True) + ) + '\n' + + text.event_generate('<>') + self.addCleanup(text.clipboard_clear) + + copied_text = text.clipboard_get() + self.assertEqual(copied_text, selected_text_with_prompts) + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py index 447e9ec3e4756..4e7440038ac99 100755 --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -33,6 +33,7 @@ raise SystemExit(1) from code import InteractiveInterpreter +import itertools import linecache import os import os.path @@ -865,6 +866,13 @@ class PyShell(OutputWindow): rmenu_specs = OutputWindow.rmenu_specs + [ ("Squeeze", "<>"), ] + _idx = 1 + len(list(itertools.takewhile( + lambda rmenu_item: rmenu_item[0] != "Copy", rmenu_specs) + )) + rmenu_specs.insert(_idx, ("Copy with prompts", + "<>", + "rmenu_check_copy")) + del _idx allow_line_numbers = False user_input_insert_tags = "stdin" @@ -906,6 +914,7 @@ def __init__(self, flist=None): text.bind("<>", self.open_stack_viewer) text.bind("<>", self.toggle_debugger) text.bind("<>", self.toggle_jit_stack_viewer) + text.bind("<>", self.copy_with_prompts_callback) if use_subprocess: text.bind("<>", self.view_restart_mark) text.bind("<>", self.restart_shell) @@ -979,6 +988,42 @@ def replace_event(self, event): def get_standard_extension_names(self): return idleConf.GetExtensions(shell_only=True) + def copy_with_prompts_callback(self, event=None): + """Copy selected lines to the clipboard, with prompts. + + This makes the copied text useful for doc-tests and interactive + shell code examples. + + This always copies entire lines, even if only part of the first + and/or last lines is selected. + """ + text = self.text + + selection_indexes = ( + self.text.index("sel.first linestart"), + self.text.index("sel.last +1line linestart"), + ) + if selection_indexes[0] is None: + # There is no selection, so do nothing. + return + + selected_text = self.text.get(*selection_indexes) + selection_lineno_range = range( + int(float(selection_indexes[0])), + int(float(selection_indexes[1])) + ) + prompts = [ + self.shell_sidebar.line_prompts.get(lineno) + for lineno in selection_lineno_range + ] + selected_text_with_prompts = "\n".join( + line if prompt is None else f"{prompt} {line}" + for prompt, line in zip(prompts, selected_text.splitlines()) + ) + "\n" + + text.clipboard_clear() + text.clipboard_append(selected_text_with_prompts) + reading = False executing = False canceled = False diff --git a/Lib/idlelib/sidebar.py b/Lib/idlelib/sidebar.py index a947961b858d6..018c368f421c6 100644 --- a/Lib/idlelib/sidebar.py +++ b/Lib/idlelib/sidebar.py @@ -9,11 +9,13 @@ from tkinter.font import Font from idlelib.config import idleConf from idlelib.delegator import Delegator +from idlelib import macosx def get_lineno(text, index): """Return the line number of an index in a Tk text widget.""" - return int(float(text.index(index))) + text_index = text.index(index) + return int(float(text_index)) if text_index else None def get_end_linenumber(text): @@ -70,56 +72,52 @@ def __init__(self, editwin): self.parent = editwin.text_frame self.text = editwin.text - _padx, pady = get_widget_padding(self.text) - self.sidebar_text = tk.Text(self.parent, width=1, wrap=tk.NONE, - padx=2, pady=pady, - borderwidth=0, highlightthickness=0) - self.sidebar_text.config(state=tk.DISABLED) - self.text['yscrollcommand'] = self.redirect_yscroll_event + self.is_shown = False + + self.main_widget = self.init_widgets() + + self.bind_events() + self.update_font() self.update_colors() - self.is_shown = False + def init_widgets(self): + """Initialize the sidebar's widgets, returning the main widget.""" + raise NotImplementedError def update_font(self): """Update the sidebar text font, usually after config changes.""" - font = idleConf.GetFont(self.text, 'main', 'EditorWindow') - self._update_font(font) - - def _update_font(self, font): - self.sidebar_text['font'] = font + raise NotImplementedError def update_colors(self): """Update the sidebar text colors, usually after config changes.""" - colors = idleConf.GetHighlight(idleConf.CurrentTheme(), 'normal') - self._update_colors(foreground=colors['foreground'], - background=colors['background']) + raise NotImplementedError - def _update_colors(self, foreground, background): - self.sidebar_text.config( - fg=foreground, bg=background, - selectforeground=foreground, selectbackground=background, - inactiveselectbackground=background, - ) + def grid(self): + """Layout the widget, always using grid layout.""" + raise NotImplementedError def show_sidebar(self): if not self.is_shown: - self.sidebar_text.grid(row=1, column=0, sticky=tk.NSEW) + self.grid() self.is_shown = True def hide_sidebar(self): if self.is_shown: - self.sidebar_text.grid_forget() + self.main_widget.grid_forget() self.is_shown = False + def yscroll_event(self, *args, **kwargs): + """Hook for vertical scrolling for sub-classes to override.""" + raise NotImplementedError + def redirect_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.sidebar_text.yview_moveto(args[0]) - return 'break' + return self.yscroll_event(*args, **kwargs) def redirect_focusin_event(self, event): """Redirect focus-in events to the main editor text widget.""" @@ -138,57 +136,17 @@ def redirect_mousewheel_event(self, event): x=0, y=event.y, delta=event.delta) return 'break' - -class EndLineDelegator(Delegator): - """Generate callbacks with the current end line number. - - The provided callback is called after every insert and delete. - """ - def __init__(self, changed_callback): - Delegator.__init__(self) - self.changed_callback = changed_callback - - def insert(self, index, chars, tags=None): - self.delegate.insert(index, chars, tags) - self.changed_callback(get_end_linenumber(self.delegate)) - - def delete(self, index1, index2=None): - self.delegate.delete(index1, index2) - self.changed_callback(get_end_linenumber(self.delegate)) - - -class LineNumbers(BaseSideBar): - """Line numbers support for editor windows.""" - def __init__(self, editwin): - BaseSideBar.__init__(self, editwin) - self.prev_end = 1 - self._sidebar_width_type = type(self.sidebar_text['width']) - self.sidebar_text.config(state=tk.NORMAL) - self.sidebar_text.insert('insert', '1', 'linenumber') - self.sidebar_text.config(state=tk.DISABLED) - self.sidebar_text.config(takefocus=False, exportselection=False) - self.sidebar_text.tag_config('linenumber', justify=tk.RIGHT) - - self.bind_events() - - end = get_end_linenumber(self.text) - self.update_sidebar_text(end) - - 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. - self.editwin.per.insertfilterafter(filter=end_line_delegator, - after=self.editwin.undo) - def bind_events(self): + self.text['yscrollcommand'] = self.redirect_yscroll_event + # Ensure focus is always redirected to the main editor text widget. - self.sidebar_text.bind('', self.redirect_focusin_event) + self.main_widget.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.sidebar_text.bind('', self.redirect_mousewheel_event) + self.main_widget.bind('', self.redirect_mousewheel_event) # Redirect mouse button events to the main editor text widget, # except for the left mouse button (1). @@ -197,7 +155,7 @@ def bind_events(self): def bind_mouse_event(event_name, target_event_name): handler = functools.partial(self.redirect_mousebutton_event, event_name=target_event_name) - self.sidebar_text.bind(event_name, handler) + self.main_widget.bind(event_name, handler) for button in [2, 3, 4, 5]: for event_name in (f'', @@ -214,83 +172,162 @@ def bind_mouse_event(event_name, target_event_name): bind_mouse_event(event_name, target_event_name=f'') - # This is set by b1_mousedown_handler() and read by - # drag_update_selection_and_insert_mark(), to know where dragging - # began. + # start_line is set upon to allow selecting a range of rows + # by dragging. It is cleared upon . start_line = None - # These are set by b1_motion_handler() and read by selection_handler(). - # last_y is passed this way since the mouse Y-coordinate is not - # available on selection event objects. last_yview is passed this way - # to recognize scrolling while the mouse isn't moving. - last_y = last_yview = None - def b1_mousedown_handler(event): - # select the entire line - lineno = int(float(self.sidebar_text.index(f"@0,{event.y}"))) + # last_y is initially set upon and is continuously updated + # upon , until or the mouse button is released. + # It is used in text_auto_scroll(), which is called repeatedly and + # does have a mouse event available. + last_y = None + + # auto_scrolling_after_id is set whenever text_auto_scroll is + # scheduled via .after(). It is used to stop the auto-scrolling + # upon , as well as to avoid scheduling the function several + # times in parallel. + auto_scrolling_after_id = None + + def drag_update_selection_and_insert_mark(y_coord): + """Helper function for drag and selection event handlers.""" + lineno = get_lineno(self.text, f"@0,{y_coord}") + a, b = sorted([start_line, lineno]) self.text.tag_remove("sel", "1.0", "end") - self.text.tag_add("sel", f"{lineno}.0", f"{lineno+1}.0") - self.text.mark_set("insert", f"{lineno+1}.0") + self.text.tag_add("sel", f"{a}.0", f"{b+1}.0") + self.text.mark_set("insert", + f"{lineno if lineno == a else lineno + 1}.0") - # remember this line in case this is the beginning of dragging + def b1_mousedown_handler(event): nonlocal start_line - start_line = lineno - self.sidebar_text.bind('', b1_mousedown_handler) + nonlocal last_y + start_line = int(float(self.text.index(f"@0,{event.y}"))) + last_y = event.y + + drag_update_selection_and_insert_mark(event.y) + self.main_widget.bind('', b1_mousedown_handler) def b1_mouseup_handler(event): # On mouse up, we're no longer dragging. Set the shared persistent # variables to None to represent this. nonlocal start_line nonlocal last_y - nonlocal last_yview start_line = None last_y = None - last_yview = None - self.sidebar_text.bind('', b1_mouseup_handler) + self.text.event_generate('', x=0, y=event.y) + self.main_widget.bind('', b1_mouseup_handler) - def drag_update_selection_and_insert_mark(y_coord): - """Helper function for drag and selection event handlers.""" - lineno = int(float(self.sidebar_text.index(f"@0,{y_coord}"))) - a, b = sorted([start_line, lineno]) - self.text.tag_remove("sel", "1.0", "end") - self.text.tag_add("sel", f"{a}.0", f"{b+1}.0") - self.text.mark_set("insert", - f"{lineno if lineno == a else lineno + 1}.0") - - # Special handling of dragging with mouse button 1. In "normal" text - # widgets this selects text, but the line numbers text widget has - # selection disabled. Still, dragging triggers some selection-related - # functionality under the hood. Specifically, dragging to above or - # below the text widget triggers scrolling, in a way that bypasses the - # other scrolling synchronization mechanisms.i - def b1_drag_handler(event, *args): + def b1_drag_handler(event): nonlocal last_y - nonlocal last_yview + if last_y is None: # i.e. if not currently dragging + return last_y = event.y - last_yview = self.sidebar_text.yview() - if not 0 <= last_y <= self.sidebar_text.winfo_height(): - self.text.yview_moveto(last_yview[0]) drag_update_selection_and_insert_mark(event.y) - self.sidebar_text.bind('', b1_drag_handler) - - # With mouse-drag scrolling fixed by the above, there is still an edge- - # case we need to handle: When drag-scrolling, scrolling can continue - # while the mouse isn't moving, leading to the above fix not scrolling - # properly. - def selection_handler(event): - if last_yview is None: - # This logic is only needed while dragging. + self.main_widget.bind('', b1_drag_handler) + + def text_auto_scroll(): + """Mimic Text auto-scrolling when dragging outside of it.""" + # See: https://github.com/tcltk/tk/blob/064ff9941b4b80b85916a8afe86a6c21fd388b54/library/text.tcl#L670 + nonlocal auto_scrolling_after_id + y = last_y + if y is None: + self.main_widget.after_cancel(auto_scrolling_after_id) + auto_scrolling_after_id = None return - yview = self.sidebar_text.yview() - if yview != last_yview: - self.text.yview_moveto(yview[0]) - drag_update_selection_and_insert_mark(last_y) - self.sidebar_text.bind('<>', selection_handler) + elif y < 0: + self.text.yview_scroll(-1 + y, 'pixels') + drag_update_selection_and_insert_mark(y) + elif y > self.main_widget.winfo_height(): + self.text.yview_scroll(1 + y - self.main_widget.winfo_height(), + 'pixels') + drag_update_selection_and_insert_mark(y) + auto_scrolling_after_id = \ + self.main_widget.after(50, text_auto_scroll) + + def b1_leave_handler(event): + # Schedule the initial call to text_auto_scroll(), if not already + # scheduled. + nonlocal auto_scrolling_after_id + if auto_scrolling_after_id is None: + nonlocal last_y + last_y = event.y + auto_scrolling_after_id = \ + self.main_widget.after(0, text_auto_scroll) + self.main_widget.bind('', b1_leave_handler) + + def b1_enter_handler(event): + # Cancel the scheduling of text_auto_scroll(), if it exists. + nonlocal auto_scrolling_after_id + if auto_scrolling_after_id is not None: + self.main_widget.after_cancel(auto_scrolling_after_id) + auto_scrolling_after_id = None + self.main_widget.bind('', b1_enter_handler) + + +class EndLineDelegator(Delegator): + """Generate callbacks with the current end line number. + + The provided callback is called after every insert and delete. + """ + def __init__(self, changed_callback): + Delegator.__init__(self) + self.changed_callback = changed_callback + + def insert(self, index, chars, tags=None): + self.delegate.insert(index, chars, tags) + self.changed_callback(get_end_linenumber(self.delegate)) + + def delete(self, index1, index2=None): + self.delegate.delete(index1, index2) + self.changed_callback(get_end_linenumber(self.delegate)) + + +class LineNumbers(BaseSideBar): + """Line numbers support for editor windows.""" + def __init__(self, editwin): + super().__init__(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. + self.editwin.per.insertfilterafter(end_line_delegator, + after=self.editwin.undo) + + def init_widgets(self): + _padx, pady = get_widget_padding(self.text) + self.sidebar_text = tk.Text(self.parent, width=1, wrap=tk.NONE, + padx=2, pady=pady, + borderwidth=0, highlightthickness=0) + self.sidebar_text.config(state=tk.DISABLED) + + self.prev_end = 1 + self._sidebar_width_type = type(self.sidebar_text['width']) + with temp_enable_text_widget(self.sidebar_text): + self.sidebar_text.insert('insert', '1', 'linenumber') + self.sidebar_text.config(takefocus=False, exportselection=False) + self.sidebar_text.tag_config('linenumber', justify=tk.RIGHT) + + end = get_end_linenumber(self.text) + self.update_sidebar_text(end) + + return self.sidebar_text + + def grid(self): + self.sidebar_text.grid(row=1, column=0, sticky=tk.NSEW) + + def update_font(self): + font = idleConf.GetFont(self.text, 'main', 'EditorWindow') + self.sidebar_text['font'] = font def update_colors(self): """Update the sidebar text colors, usually after config changes.""" colors = idleConf.GetHighlight(idleConf.CurrentTheme(), 'linenumber') - self._update_colors(foreground=colors['foreground'], - background=colors['background']) + foreground = colors['foreground'] + background = colors['background'] + self.sidebar_text.config( + fg=foreground, bg=background, + selectforeground=foreground, selectbackground=background, + inactiveselectbackground=background, + ) def update_sidebar_text(self, end): """ @@ -319,6 +356,10 @@ def update_sidebar_text(self, end): self.prev_end = end + def yscroll_event(self, *args, **kwargs): + self.sidebar_text.yview_moveto(args[0]) + return 'break' + class WrappedLineHeightChangeDelegator(Delegator): def __init__(self, callback): @@ -361,22 +402,16 @@ def delete(self, index1, index2=None): self.callback() -class ShellSidebar: +class ShellSidebar(BaseSideBar): """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 = None + self.line_prompts = {} - self.canvas = tk.Canvas(self.parent, width=30, - borderwidth=0, highlightthickness=0, - takefocus=False) - - self.bind_events() + super().__init__(editwin) 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 @@ -385,15 +420,41 @@ def __init__(self, editwin): d = d.delegate self.editwin.per.insertfilterafter(change_delegator, after=d) - self.text['yscrollcommand'] = self.yscroll_event - - self.is_shown = False + self.is_shown = True - self.update_font() - self.update_colors() + def init_widgets(self): + self.canvas = tk.Canvas(self.parent, width=30, + borderwidth=0, highlightthickness=0, + takefocus=False) self.update_sidebar() + self.grid() + return self.canvas + + def bind_events(self): + super().bind_events() + + self.main_widget.bind( + # AquaTk defines <2> as the right button, not <3>. + "" if macosx.isAquaTk() else "", + self.context_menu_event, + ) + + def context_menu_event(self, event): + rmenu = tk.Menu(self.main_widget, tearoff=0) + has_selection = bool(self.text.tag_nextrange('sel', '1.0')) + def mkcmd(eventname): + return lambda: self.text.event_generate(eventname) + rmenu.add_command(label='Copy', + command=mkcmd('<>'), + state='normal' if has_selection else 'disabled') + rmenu.add_command(label='Copy with prompts', + command=mkcmd('<>'), + state='normal' if has_selection else 'disabled') + rmenu.tk_popup(event.x_root, event.y_root) + return "break" + + def grid(self): 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: @@ -403,6 +464,7 @@ def update_sidebar(self): text = self.text text_tagnames = text.tag_names canvas = self.canvas + line_prompts = self.line_prompts = {} canvas.delete(tk.ALL) @@ -423,6 +485,8 @@ def update_sidebar(self): if prompt: canvas.create_text(2, y, anchor=tk.NW, text=prompt, font=self.font, fill=self.colors[0]) + lineno = get_lineno(text, index) + line_prompts[lineno] = prompt index = text.index(f'{index}+1line') def yscroll_event(self, *args, **kwargs): @@ -430,7 +494,6 @@ def yscroll_event(self, *args, **kwargs): The scroll bar is also updated. """ - self.editwin.vbar.set(*args) self.change_callback() return 'break' @@ -440,9 +503,6 @@ def update_font(self): 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() @@ -450,65 +510,12 @@ 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): + foreground = prompt_colors['foreground'] + background = linenumbers_colors['background'] self.colors = (foreground, background) - self.canvas.configure(background=self.colors[1]) + self.canvas.configure(background=background) 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/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst b/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst new file mode 100644 index 0000000000000..28b11e60f0fb3 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst @@ -0,0 +1,4 @@ +Add mouse actions to the shell sidebar. Left click and optional drag +selects one or more lines, as with the editor line number sidebar. Right +click after selecting raises a context menu with 'copy with prompts'. This +zips together prompts from the sidebar with lines from the selected text. From webhook-mailer at python.org Sun May 2 22:59:04 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 02:59:04 -0000 Subject: [Python-checkins] bpo-41129: Fix check for macOS SDK paths when building Python (GH-25785) Message-ID: https://github.com/python/cpython/commit/d52bbde9421987d216c600557ef5bc931d03efcc commit: d52bbde9421987d216c600557ef5bc931d03efcc branch: master author: Ned Batchelder committer: ned-deily date: 2021-05-02T22:58:57-04:00 summary: bpo-41129: Fix check for macOS SDK paths when building Python (GH-25785) Narrow search to match contents of SDKs, namely only files in ``/System/Library``, ``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, anything under ``/System`` was assumed to be in an SDK which causes problems with the new file system layout in 10.15+ where user file systems may appear to be mounted under ``/System``. Paths in ``/Library`` were also incorrectly treated as SDK locations. Co-authored-by: Ned Deily files: A Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst M setup.py diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst new file mode 100644 index 0000000000000..7dd67a527eb00 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst @@ -0,0 +1,7 @@ +Fix check for macOS SDK paths when building Python. Narrow search to match +contents of SDKs, namely only files in ``/System/Library``, +``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, +anything under ``/System`` was assumed to be in an SDK which causes problems +with the new file system layout in 10.15+ where user file systems may appear +to be mounted under ``/System``. Paths in ``/Library`` were also +incorrectly treated as SDK locations. diff --git a/setup.py b/setup.py index ca0ed8363ef35..3857e6887a929 100644 --- a/setup.py +++ b/setup.py @@ -227,11 +227,11 @@ def macosx_sdk_specified(): def is_macosx_sdk_path(path): """ - Returns True if 'path' can be located in an OSX SDK + Returns True if 'path' can be located in a macOS SDK """ return ( (path.startswith('/usr/') and not path.startswith('/usr/local')) - or path.startswith('/System/') - or path.startswith('/Library/') ) + or path.startswith('/System/Library') + or path.startswith('/System/iOSSupport') ) def grep_headers_for(function, headers): From webhook-mailer at python.org Sun May 2 23:19:58 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 03 May 2021 03:19:58 -0000 Subject: [Python-checkins] bpo-25478: Add total() method to collections.Counter (GH-25829) Message-ID: https://github.com/python/cpython/commit/8c598dbb9483bcfcb88fc579ebf27821d8861465 commit: 8c598dbb9483bcfcb88fc579ebf27821d8861465 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-05-02T20:19:51-07:00 summary: bpo-25478: Add total() method to collections.Counter (GH-25829) files: A Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst M Doc/library/collections.rst M Lib/collections/__init__.py M Lib/test/test_collections.py diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index 723c9da7be8d7b..94166ec6c754a7 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -313,6 +313,16 @@ For example:: .. versionadded:: 3.2 + .. method:: total() + + Compute the sum of the counts. + + >>> c = Counter(a=10, b=5, c=0) + >>> c.total() + 15 + + .. versionadded:: 3.10 + The usual dictionary methods are available for :class:`Counter` objects except for two which work differently for counters. @@ -342,7 +352,7 @@ All of those tests treat missing elements as having zero counts so that Common patterns for working with :class:`Counter` objects:: - sum(c.values()) # total of all counts + c.total() # total of all counts c.clear() # reset all counts list(c) # list unique elements set(c) # convert to a set diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 89c73bbf2c10d9..bae0805d6686c5 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -581,6 +581,10 @@ def __missing__(self, key): # Needed so that self[missing_item] does not raise KeyError return 0 + def total(self): + 'Sum of the counts' + return sum(self.values()) + def most_common(self, n=None): '''List the n most common elements and their counts from the most common to the least. If n is None, then list all element counts. diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py index 2ba1a19ead9d83..f98048b34a7a1d 100644 --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -2066,6 +2066,10 @@ def test_init(self): self.assertRaises(TypeError, Counter, (), ()) self.assertRaises(TypeError, Counter.__init__) + def test_total(self): + c = Counter(a=10, b=5, c=0) + self.assertEqual(c.total(), 15) + def test_order_preservation(self): # Input order dictates items() order self.assertEqual(list(Counter('abracadabra').items()), diff --git a/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst b/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst new file mode 100644 index 00000000000000..81d2724726dd06 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst @@ -0,0 +1,2 @@ +Added a *total()* method to collections.Counter() to compute the sum of the +counts. From webhook-mailer at python.org Sun May 2 23:39:09 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 03:39:09 -0000 Subject: [Python-checkins] bpo-41129: Fix check for macOS SDK paths when building Python (GH-25785) (GH-25830) Message-ID: https://github.com/python/cpython/commit/98035ec93ff0d9875f19027015689734d70c14e5 commit: 98035ec93ff0d9875f19027015689734d70c14e5 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-02T23:38:49-04:00 summary: bpo-41129: Fix check for macOS SDK paths when building Python (GH-25785) (GH-25830) Narrow search to match contents of SDKs, namely only files in ``/System/Library``, ``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, anything under ``/System`` was assumed to be in an SDK which causes problems with the new file system layout in 10.15+ where user file systems may appear to be mounted under ``/System``. Paths in ``/Library`` were also incorrectly treated as SDK locations. Co-authored-by: Ned Deily (cherry picked from commit d52bbde9421987d216c600557ef5bc931d03efcc) Co-authored-by: Ned Batchelder files: A Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst M setup.py diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst new file mode 100644 index 0000000000000..7dd67a527eb00 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst @@ -0,0 +1,7 @@ +Fix check for macOS SDK paths when building Python. Narrow search to match +contents of SDKs, namely only files in ``/System/Library``, +``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, +anything under ``/System`` was assumed to be in an SDK which causes problems +with the new file system layout in 10.15+ where user file systems may appear +to be mounted under ``/System``. Paths in ``/Library`` were also +incorrectly treated as SDK locations. diff --git a/setup.py b/setup.py index d8941790b35d0..04eb6b291c770 100644 --- a/setup.py +++ b/setup.py @@ -210,11 +210,11 @@ def macosx_sdk_specified(): def is_macosx_sdk_path(path): """ - Returns True if 'path' can be located in an OSX SDK + Returns True if 'path' can be located in a macOS SDK """ return ( (path.startswith('/usr/') and not path.startswith('/usr/local')) - or path.startswith('/System/') - or path.startswith('/Library/') ) + or path.startswith('/System/Library') + or path.startswith('/System/iOSSupport') ) def grep_headers_for(function, headers): From webhook-mailer at python.org Sun May 2 23:43:59 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 03:43:59 -0000 Subject: [Python-checkins] bpo-42235: [macOS] Use LTO/PGO in build-installer.py with new enough compilers (GH-23079) Message-ID: https://github.com/python/cpython/commit/e08059edef3be07ada3058d68ad2c9cc13b7418e commit: e08059edef3be07ada3058d68ad2c9cc13b7418e branch: master author: Ronald Oussoren committer: ned-deily date: 2021-05-02T23:43:52-04:00 summary: bpo-42235: [macOS] Use LTO/PGO in build-installer.py with new enough compilers (GH-23079) With recent enough compilers we can build binaries with LTO/PGO on macOS. This patch enables this when building on macOS 10.15 or later (Xcode 11 or later). files: A Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 540b5a0d1b8f9..ff62096ec6cd4 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -436,6 +436,14 @@ def library_recipes(): return result +def compilerCanOptimize(): + """ + Return True iff the default Xcode version can use PGO and LTO + """ + # bpo-42235: The version check is pretty conservative, can be + # adjusted after testing + mac_ver = tuple(map(int, platform.mac_ver()[0].split('.'))) + return mac_ver >= (10, 15) # Instructions for building packages inside the .mpkg. def pkg_recipes(): @@ -1176,6 +1184,7 @@ def buildPython(): "%s " "%s " "%s " + "%s " "LDFLAGS='-g -L%s/libraries/usr/local/lib' " "CFLAGS='-g -I%s/libraries/usr/local/include' 2>&1"%( shellQuote(os.path.join(SRCDIR, 'configure')), @@ -1188,6 +1197,7 @@ def buildPython(): shellQuote(WORKDIR)[1:-1],))[internalTk()], (' ', "--with-tcltk-libs='-L%s/libraries/usr/local/lib -ltcl8.6 -ltk8.6'"%( shellQuote(WORKDIR)[1:-1],))[internalTk()], + (' ', "--enable-optimizations --with-lto")[compilerCanOptimize()], shellQuote(WORKDIR)[1:-1], shellQuote(WORKDIR)[1:-1])) diff --git a/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst b/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst new file mode 100644 index 0000000000000..eef4fcdaae3cf --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst @@ -0,0 +1,2 @@ +``Mac/BuildScript/build-installer.py`` will now use "--enable-optimizations" +and ``--with-lto`` when building on macOS 10.15 or later. From webhook-mailer at python.org Mon May 3 00:07:37 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 03 May 2021 04:07:37 -0000 Subject: [Python-checkins] Fix invalid markup (#25833) Message-ID: https://github.com/python/cpython/commit/4ae828f3c0e8548939161ef3b6154e9c3122d812 commit: 4ae828f3c0e8548939161ef3b6154e9c3122d812 branch: master author: Raymond Hettinger committer: rhettinger date: 2021-05-02T21:07:29-07:00 summary: Fix invalid markup (#25833) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 1a7fed9af8187..e3b01d38d812f 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -443,7 +443,7 @@ Module contents pseudo-field with the type of :const:`KW_ONLY` are marked as keyword-only fields. Note that a pseudo-field of type :const:`KW_ONLY` is otherwise completely ignored. This includes the - name of such a field. By convention, a name of `_` is used for a + name of such a field. By convention, a name of ``_`` is used for a :const:`KW_ONLY` field. Keyword-only fields signify :meth:`__init__` parameters that must be specified as keywords when the class is instantiated. @@ -683,4 +683,3 @@ Mutable default values x: list = field(default_factory=list) assert D().x is not D().x - From webhook-mailer at python.org Mon May 3 00:24:02 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 04:24:02 -0000 Subject: [Python-checkins] bpo-42362: use clang name on 10.9 builds as well (GH-25834) Message-ID: https://github.com/python/cpython/commit/c3bfa762214e4fbe25699d75c0412791cefd7094 commit: c3bfa762214e4fbe25699d75c0412791cefd7094 branch: master author: Ned Deily committer: ned-deily date: 2021-05-03T00:23:54-04:00 summary: bpo-42362: use clang name on 10.9 builds as well (GH-25834) files: M Mac/BuildScript/build-installer.py diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index ff62096ec6cd4..60174eb6962ba 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -163,7 +163,6 @@ def getTargetCompilers(): '10.6': ('gcc', 'g++'), '10.7': ('gcc', 'g++'), '10.8': ('gcc', 'g++'), - '10.9': ('gcc', 'g++'), } return target_cc_map.get(DEPTARGET, ('clang', 'clang++') ) From webhook-mailer at python.org Mon May 3 01:02:17 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 05:02:17 -0000 Subject: [Python-checkins] Update macOS installer welcome and readme for 3.10b1 (GH-25835) Message-ID: https://github.com/python/cpython/commit/c59baa02b0c53c4864692caf050c7be4de1c416b commit: c59baa02b0c53c4864692caf050c7be4de1c416b branch: master author: Ned Deily committer: ned-deily date: 2021-05-03T01:02:13-04:00 summary: Update macOS installer welcome and readme for 3.10b1 (GH-25835) files: M Mac/BuildScript/resources/ReadMe.rtf M Mac/BuildScript/resources/Welcome.rtf diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf index c82e4b6303a52b..a6bfeb9f164eab 100644 --- a/Mac/BuildScript/resources/ReadMe.rtf +++ b/Mac/BuildScript/resources/ReadMe.rtf @@ -1,6 +1,6 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2513 +{\rtf1\ansi\ansicpg1252\cocoartf2580 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fswiss\fcharset0 Helvetica-Oblique; -\f3\fmodern\fcharset0 CourierNewPSMT;} +\f3\fmodern\fcharset0 CourierNewPSMT;\f4\fmodern\fcharset0 Courier;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \margl1440\margr1440\vieww13380\viewh14580\viewkind0 @@ -11,7 +11,7 @@ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\partightenfactor0 \f1\b \cf0 NOTE: -\f0\b0 This is an alpha test preview of Python 3.10.0, the next feature release of Python 3. It is not intended for production use.\ +\f0\b0 This is a beta test preview of Python 3.10.0, the next feature release of Python 3. It is not intended for production use.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0 @@ -38,6 +38,16 @@ The bundled \f0 has its own default certificate store for verifying download connections.\ \ +\f1\b \ul Install Options\ + +\f0\b0 \ulnone \ +You can control some aspects of what is installed by this package. To see the options, click on the +\f4 Customize +\f0 button in the +\f4 Installation Type +\f0 step of the macOS installer app. Click on a package name in the list shown to see more information about that option,\ + \ + \f1\b \ul Using IDLE or other Tk applications \f0\b0 \ulnone \ \ @@ -56,12 +66,22 @@ Due to new security checks on macOS 10.15 Catalina, when launching IDLE macOS ma \f0\b0 button to proceed.\ \ -\f1\b \ul macOS 11.0 (Big Sur) and Apple Silicon Mac support [new in 3.10.0a3]\ +\f1\b \ul macOS 11 (Big Sur) and Apple Silicon Mac support\ \f0\b0 \ulnone \ -As of 2020-11, macOS 11.0 (Big Sur) is the latest release of macOS and one of its major features is the support of new Apple Silicon Macs that are based on the ARM64 CPU architecture specification rather than the Intel 64 (x86_64) architecture used previously. There are other changes in Big Sur that affect Python operation regardless of CPU architecture.\ +For Python 3.10 releases, we provide a new +\f4 universal2 +\f0 installer variant that provides universal binaries for both +\f4 ARM64 +\f0 and +\f4 Intel 64 +\f0 architectures and is also supported on all Macs that support macOS 10.9 or later. Some of the advantages of the new installer variant: native ARM64 code on Apple Silicon Macs should run significantly faster than Rosetta2-emulated code; some operating system functions and options introduced in macOS releases since 10.9 are now exposed when available (primarily in the os module); and the new installer variant includes Tcl/Tk 8.6.11 rather than 8.6.8.\ \ -Beginning with 3.10.0a3, we provide a new "universal2" installer variant that provides universal binaries for both ARM64 and Intel 64 architectures and is also supported on all Macs that support macOS 10.9 or later. Some of the advantages of the new installer variant: native ARM64 code on Apple Silicon Macs should run significantly faster than Rosetta2-emulated code; some operating system functions and options introduced in macOS releases since 10.9 are now exposed when available (primarily in the os module); the new installer variant includes Tcl/Tk 8.6.10 rather than 8.6.8.\ +On Apple Silicon Macs, it is possible to run Python either with native ARM64 code or under Intel 64 emulation using Rosetta2. This option might be useful for testing or if binary wheels are not yet available with native ARM64 binaries. To easily force Python to run in emulation mode, invoke it from a command line shell with the +\f4 python3-intel64 +\f0 command instead of just +\f4 python3 +\f0 .\ \f1\b \ul \ Other changes\ diff --git a/Mac/BuildScript/resources/Welcome.rtf b/Mac/BuildScript/resources/Welcome.rtf index cadfbf6a54c362..c65119b7fa2e2c 100644 --- a/Mac/BuildScript/resources/Welcome.rtf +++ b/Mac/BuildScript/resources/Welcome.rtf @@ -1,4 +1,4 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2513 +{\rtf1\ansi\ansicpg1252\cocoartf2580 \cocoascreenfonts1\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fmodern\fcharset0 CourierNewPSMT; } {\colortbl;\red255\green255\blue255;} @@ -26,5 +26,5 @@ At the end of this install, click on \ \f1\b NOTE: -\f0\b0 This is an alpha test preview of Python 3.10.0, the next feature release of Python 3. It is not intended for production use.\ +\f0\b0 This is a beta test preview of Python 3.10.0, the next feature release of Python 3. It is not intended for production use.\ } \ No newline at end of file From webhook-mailer at python.org Mon May 3 01:49:31 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 05:49:31 -0000 Subject: [Python-checkins] [3.9] Update macOS installer readme for 3.9.5 (GH-25836) Message-ID: https://github.com/python/cpython/commit/7f7dc673540c47db544878bb32d20d9bd1445b94 commit: 7f7dc673540c47db544878bb32d20d9bd1445b94 branch: 3.9 author: Ned Deily committer: ned-deily date: 2021-05-03T01:49:27-04:00 summary: [3.9] Update macOS installer readme for 3.9.5 (GH-25836) files: M Mac/BuildScript/resources/ReadMe.rtf diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf index 2c0c3d5eb3a096..4eb18b7bdaf44d 100644 --- a/Mac/BuildScript/resources/ReadMe.rtf +++ b/Mac/BuildScript/resources/ReadMe.rtf @@ -1,6 +1,6 @@ -{\rtf1\ansi\ansicpg1252\cocoartf2513 +{\rtf1\ansi\ansicpg1252\cocoartf2580 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fswiss\fcharset0 Helvetica-Oblique; -\f3\fmodern\fcharset0 CourierNewPSMT;} +\f3\fmodern\fcharset0 CourierNewPSMT;\f4\fmodern\fcharset0 Courier;} {\colortbl;\red255\green255\blue255;} {\*\expandedcolortbl;;} \margl1440\margr1440\vieww13380\viewh14580\viewkind0 @@ -32,6 +32,16 @@ The bundled \f0 has its own default certificate store for verifying download connections.\ \ +\f1\b \ul Install Options\ + +\f0\b0 \ulnone \ +You can control some aspects of what is installed by this package. To see the options, click on the +\f4 Customize +\f0 button in the +\f4 Installation Type +\f0 step of the macOS installer app. Click on a package name in the list shown to see more information about that option.\ + \ + \f1\b \ul Using IDLE or other Tk applications \f0\b0 \ulnone \ \ @@ -50,18 +60,46 @@ Due to new security checks on macOS 10.15 Catalina, when launching IDLE macOS ma \f0\b0 button to proceed.\ \ -\f1\b \ul macOS 11.0 (Big Sur) and Apple Silicon Mac support [new in 3.9.1]\ +\f1\b \ul macOS 11 (Big Sur) and Apple Silicon Mac support [updated in 3.9.5]\ \f0\b0 \ulnone \ As of 2020-11, macOS 11.0 (Big Sur) is the latest release of macOS and one of its major features is the support of new Apple Silicon Macs that are based on the ARM64 CPU architecture specification rather than the Intel 64 (x86_64) architecture used previously. There are other changes in Big Sur that affect Python operation regardless of CPU architecture. As of 3.9.1, Python binaries from python.org fully support Big Sur. \ \ -python.org binaries for macOS have been provided via a downloadable installer that supports the Intel 64 architecture on macOS 10.9 and newer. This installer variant remains the default download for 3.9.1; it will install and run on all Macs that run macOS 10.9 or later, including 11.0 (Big Sur). This variant should run transparently on new Apple Silicon Macs using Apple's Rosetta 2 emulation. \ +python.org binaries for macOS have been provided via a downloadable installer that supports the Intel 64 architecture on macOS 10.9 and newer. This installer variant has been the default download for 3.9.1; it will install and run on all Macs that run macOS 10.9 or later, including 11.0 (Big Sur). This variant +\f2\i should +\f0\i0 run transparently on new Apple Silicon Macs using Apple's Rosetta 2 emulation. \ +\ +Beginning with 3.9.1, we provide a new +\f4 universal2 +\f0 installer variant that provides universal binaries for both +\f4 ARM64 +\f0 and +\f4 Intel 64 +\f0 architectures and is also supported on all Macs that support macOS 10.9 or later. Some of the advantages of the new installer variant: native ARM64 code on Apple Silicon Macs should run significantly faster than Rosetta 2-emulated code; some operating system functions and options introduced in macOS releases since 10.9 are now exposed when available (primarily in the os module); and the new installer variant includes Tcl/Tk 8.6.11 rather than 8.6.8.\ +\ +On Apple Silicon Macs with the +\f4 universal2 +\f0 variant, it is possible to run Python either with native ARM64 code or under Intel 64 emulation using Rosetta 2. This option might be useful for testing or if binary wheels are not yet available with native ARM64 binaries. To easily force Python to run in emulation mode, invoke it from a command line shell with the +\f4 python3-intel64 +\f0 (or +\f4 python3.10-intel64 +\f0 ) command (new with 3.9.5) instead of just +\f4 python3 +\f0 . \ \ -Beginning with 3.9.1, we also provide a new "universal2" installer variant that provides universal binaries for both ARM64 and Intel 64 architectures and is also supported on all Macs that support macOS 10.9 or later. Some of the advantages of the new installer variant: native ARM64 code on Apple Silicon Macs should run significantly faster than Rosetta2-emulated code; some operating system functions and options introduced in macOS releases since 10.9 are now exposed when available (primarily in the os module); binary wheels built for use with the current 10.9 variant *should* also work with the new variant; the new installer variant includes Tcl/Tk 8.6.10 rather than 8.6.8.\ +Binary wheels built for use with the legacy 10.9 variant +\f2\i should +\f0\i0 also work with the new variant on Intel-based Macs or when running under Rosetta2 emulation on Apple Silicon Macs. \ \ -Because of the scope of changes needed to fully support 11.0 and Apple Silicon Macs, the new "universal2" variant should be considered -\f2\i experimental -\f0\i0 in the 3.9.1 release. You may need to upgrade third-party components, like pip, to later versions once they are released. You may experience differences in behavior in IDLE and other Tk-based applications due to using the newer version of Tk. As always, if you encounter problems when using this installer variant, please check {\field{\*\fldinst{HYPERLINK "https://bugs.python.org"}}{\fldrslt https://bugs.python.org}} for existing reports and for opening new issues.\ +As of the 3.9.5 release, we encourage you to use the +\f4 universal2 +\f0 variant whenever possible. The legacy 10.9+ Intel-only variant will not be provided for Python 3.10 and the +\f4 universal2 +\f0 variant will become the default download for future 3.9.x releases. You may need to upgrade third-party components, like +\f4 pip +\f0 , to later versions once they are released. You may experience differences in behavior in +\f4 IDLE +\f0 and other Tk-based applications due to using the newer version of Tk. As always, if you encounter problems when using this installer variant, please check {\field{\*\fldinst{HYPERLINK "https://bugs.python.org"}}{\fldrslt https://bugs.python.org}} for existing reports and for opening new issues.\ \f1\b \ul \ Other changes\ From webhook-mailer at python.org Mon May 3 01:55:21 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 03 May 2021 05:55:21 -0000 Subject: [Python-checkins] More clarification of kw_only args. (GH-25838) Message-ID: https://github.com/python/cpython/commit/a21b3d2fa2d3f86724fccd844b1364b5ff3b22af commit: a21b3d2fa2d3f86724fccd844b1364b5ff3b22af branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-03T01:55:13-04:00 summary: More clarification of kw_only args. (GH-25838) Also, clarify that the dataclass decorator is what raises an error for some mutable defaults. files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index e3b01d38d812f..357ea9820fe64 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -307,8 +307,8 @@ Module contents - ``type``: The type of the field. - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``, - ``compare``, and ``metadata`` have the identical meaning and - values as they do in the :func:`field` declaration. + ``compare``, ``metadata``, and ``kw_only`` have the identical + meaning and values as they do in the :func:`field` declaration. Other attributes may exist, but they are private and must not be inspected or relied on. @@ -459,6 +459,9 @@ Module contents p = Point(0, y=1.5, z=2.0) + In a single dataclass, it is an error to specify more than one + field whose type is :const:`KW_ONLY`. + .. exception:: FrozenInstanceError Raised when an implicitly defined :meth:`__setattr__` or @@ -582,9 +585,12 @@ Re-ordering of keyword-only parameters in :meth:`__init__` After the parameters needed for :meth:`__init__` are computed, any keyword-only parameters are moved to come after all regular -(non-keyword-only) parameters. In this example, ``Base.y``, -``Base.w``, and ``D.t`` are keyword-only fields, and ``Base.x`` and -``D.z`` are regular fields:: +(non-keyword-only) parameters. This is a requirement of how +keyword-only parameters are implemented in Python: they must come +after non-keyword-only parameters. + +In this example, ``Base.y``, ``Base.w``, and ``D.t`` are keyword-only +fields, and ``Base.x`` and ``D.z`` are regular fields:: @dataclass class Base: @@ -666,14 +672,15 @@ Mutable default values assert D().x is D().x This has the same issue as the original example using class ``C``. - That is, two instances of class ``D`` that do not specify a value for - ``x`` when creating a class instance will share the same copy of - ``x``. Because dataclasses just use normal Python class creation - they also share this behavior. There is no general way for Data - Classes to detect this condition. Instead, dataclasses will raise a - :exc:`TypeError` if it detects a default parameter of type ``list``, - ``dict``, or ``set``. This is a partial solution, but it does protect - against many common errors. + That is, two instances of class ``D`` that do not specify a value + for ``x`` when creating a class instance will share the same copy + of ``x``. Because dataclasses just use normal Python class + creation they also share this behavior. There is no general way + for Data Classes to detect this condition. Instead, the + :func:`dataclass` decorator will raise a :exc:`TypeError` if it + detects a default parameter of type ``list``, ``dict``, or ``set``. + This is a partial solution, but it does protect against many common + errors. Using default factory functions is a way to create new instances of mutable types as default values for fields:: From webhook-mailer at python.org Mon May 3 02:33:43 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 03 May 2021 06:33:43 -0000 Subject: [Python-checkins] dataclasses docs: add a missing word. (GH-25839) Message-ID: https://github.com/python/cpython/commit/72720a2639368436da0981983549d000170623cc commit: 72720a2639368436da0981983549d000170623cc branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-03T02:33:34-04:00 summary: dataclasses docs: add a missing word. (GH-25839) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 357ea9820fe64..64540b3e963b5 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -439,7 +439,7 @@ Module contents .. data:: KW_ONLY - A sentinel value used a type annotation. Any fields after a + A sentinel value used as a type annotation. Any fields after a pseudo-field with the type of :const:`KW_ONLY` are marked as keyword-only fields. Note that a pseudo-field of type :const:`KW_ONLY` is otherwise completely ignored. This includes the From webhook-mailer at python.org Mon May 3 03:25:02 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 03 May 2021 07:25:02 -0000 Subject: [Python-checkins] bpo-44015: dataclasses should allow KW_ONLY to be specified only once per class (GH-25841) Message-ID: https://github.com/python/cpython/commit/99ad742ea913e421d012c1a623029eac31bdfe85 commit: 99ad742ea913e421d012c1a623029eac31bdfe85 branch: master author: Eric V. Smith committer: ericvsmith date: 2021-05-03T03:24:53-04:00 summary: bpo-44015: dataclasses should allow KW_ONLY to be specified only once per class (GH-25841) bpo-44015: Raise a TypeError if KW_ONLY is specified more than once. files: A Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst M Lib/dataclasses.py M Lib/test/test_dataclasses.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 363d0b66d208e..cbba320e01a54 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -930,6 +930,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, # we can. cls_fields = [] # Get a reference to this module for the _is_kw_only() test. + KW_ONLY_seen = False dataclasses = sys.modules[__name__] for name, type in cls_annotations.items(): # See if this is a marker to change the value of kw_only. @@ -939,6 +940,10 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, _is_kw_only))): # Switch the default to kw_only=True, and ignore this # annotation: it's not a real field. + if KW_ONLY_seen: + raise TypeError(f'{name!r} is KW_ONLY, but KW_ONLY ' + 'has already been specified') + KW_ONLY_seen = True kw_only = True else: # Otherwise it's a field of some type. diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 16ee4c7705d8c..8e645aeb4a750 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -3699,6 +3699,83 @@ class C: self.assertEqual(c.b, 3) self.assertEqual(c.c, 2) + def test_KW_ONLY_as_string(self): + @dataclass + class A: + a: int + _: 'dataclasses.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) + + def test_KW_ONLY_twice(self): + msg = "'Y' is KW_ONLY, but KW_ONLY has already been specified" + + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: int + X: KW_ONLY + Y: KW_ONLY + b: int + c: int + + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: int + X: KW_ONLY + b: int + Y: KW_ONLY + c: int + + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: int + X: KW_ONLY + b: int + c: int + Y: KW_ONLY + + # But this usage is okay, since it's not using KW_ONLY. + @dataclass + class A: + a: int + _: KW_ONLY + b: int + c: int = field(kw_only=True) + + # And if inheriting, it's okay. + @dataclass + class A: + a: int + _: KW_ONLY + b: int + c: int + @dataclass + class B(A): + _: KW_ONLY + d: int + + # Make sure the error is raised in a derived class. + with self.assertRaisesRegex(TypeError, msg): + @dataclass + class A: + a: int + _: KW_ONLY + b: int + c: int + @dataclass + class B(A): + X: KW_ONLY + d: int + Y: KW_ONLY + + def test_post_init(self): @dataclass class A: diff --git a/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst b/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst new file mode 100644 index 0000000000000..4c4f543fa0c2e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst @@ -0,0 +1 @@ +In @dataclass(), raise a TypeError if KW_ONLY is specified more than once. From webhook-mailer at python.org Mon May 3 03:39:08 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 03 May 2021 07:39:08 -0000 Subject: [Python-checkins] bpo-44011: Fix asyncio tests without ssl module (GH-25840) Message-ID: https://github.com/python/cpython/commit/37ebdf0a866457ce825d0ff6e498a10938895760 commit: 37ebdf0a866457ce825d0ff6e498a10938895760 branch: master author: Christian Heimes committer: tiran date: 2021-05-03T09:38:56+02:00 summary: bpo-44011: Fix asyncio tests without ssl module (GH-25840) Signed-off-by: Christian Heimes files: M Lib/asyncio/sslproto.py M Lib/test/test_asyncio/test_ssl.py diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index e71875ba9f009..79734ab63d2e0 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -12,7 +12,8 @@ from . import transports from .log import logger -SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError) +if ssl is not None: + SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError) class SSLProtocolState(enum.Enum): diff --git a/Lib/test/test_asyncio/test_ssl.py b/Lib/test/test_asyncio/test_ssl.py index 38235c63e01e9..4dcd3a0292a92 100644 --- a/Lib/test/test_asyncio/test_ssl.py +++ b/Lib/test/test_asyncio/test_ssl.py @@ -3,14 +3,18 @@ import contextlib import gc import logging -import os import select import socket -import ssl import tempfile import threading import time import weakref +import unittest + +try: + import ssl +except ImportError: + ssl = None from test import support from test.test_asyncio import utils as test_utils @@ -54,6 +58,7 @@ def connection_lost(self, exc): self.done.set_result(None) + at unittest.skipIf(ssl is None, 'No ssl module') class TestSSL(test_utils.TestCase): PAYLOAD_SIZE = 1024 * 100 From webhook-mailer at python.org Mon May 3 03:43:10 2021 From: webhook-mailer at python.org (isidentical) Date: Mon, 03 May 2021 07:43:10 -0000 Subject: [Python-checkins] bpo-42725: Render annotations effectless on symbol table with PEP 563 (GH-25583) Message-ID: https://github.com/python/cpython/commit/ad106c68eb00f5e4af2f937107baff6141948cee commit: ad106c68eb00f5e4af2f937107baff6141948cee branch: master author: Batuhan Taskaya committer: isidentical date: 2021-05-03T10:43:00+03:00 summary: bpo-42725: Render annotations effectless on symbol table with PEP 563 (GH-25583) files: A Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst M Include/internal/pycore_symtable.h M Lib/test/test_future.py M Modules/symtablemodule.c M Python/symtable.c diff --git a/Include/internal/pycore_symtable.h b/Include/internal/pycore_symtable.h index d6d90f6c26eb1..f3505f8949be4 100644 --- a/Include/internal/pycore_symtable.h +++ b/Include/internal/pycore_symtable.h @@ -10,7 +10,7 @@ extern "C" { struct _mod; // Type defined in pycore_ast.h -typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock } +typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock, AnnotationBlock } _Py_block_ty; struct _symtable_entry; diff --git a/Lib/test/test_future.py b/Lib/test/test_future.py index 8a09853d1f78f..4ef11232a3368 100644 --- a/Lib/test/test_future.py +++ b/Lib/test/test_future.py @@ -171,6 +171,14 @@ def assertAnnotationEqual( self.assertEqual(actual, expected) + def _exec_future(self, code): + scope = {} + exec( + "from __future__ import annotations\n" + + code, {}, scope + ) + return scope + def test_annotations(self): eq = self.assertAnnotationEqual eq('...') @@ -310,10 +318,6 @@ def test_annotations(self): 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)') @@ -321,8 +325,6 @@ def test_annotations(self): 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 + 3") def test_fstring_debug_annotations(self): @@ -354,6 +356,53 @@ def test_annotation_with_complex_target(self): "object.__debug__: int" ) + def test_annotations_symbol_table_pass(self): + namespace = self._exec_future(dedent(""" + from __future__ import annotations + + def foo(): + outer = 1 + def bar(): + inner: outer = 1 + return bar + """)) + + foo = namespace.pop("foo") + self.assertIsNone(foo().__closure__) + self.assertEqual(foo.__code__.co_cellvars, ()) + self.assertEqual(foo().__code__.co_freevars, ()) + + def test_annotations_forbidden(self): + with self.assertRaises(SyntaxError): + self._exec_future("test: (yield)") + + with self.assertRaises(SyntaxError): + self._exec_future("test.test: (yield a + b)") + + with self.assertRaises(SyntaxError): + self._exec_future("test[something]: (yield from x)") + + with self.assertRaises(SyntaxError): + self._exec_future("def func(test: (yield from outside_of_generator)): pass") + + with self.assertRaises(SyntaxError): + self._exec_future("def test() -> (await y): pass") + + with self.assertRaises(SyntaxError): + self._exec_future("async def test() -> something((a := b)): pass") + + with self.assertRaises(SyntaxError): + self._exec_future("test: await some.complicated[0].call(with_args=True or 1 is not 1)") + + with self.assertRaises(SyntaxError): + self._exec_future("test: f'{(x := 10):=10}'") + + with self.assertRaises(SyntaxError): + self._exec_future(dedent("""\ + def foo(): + def bar(arg: (yield)): pass + """)) + if __name__ == "__main__": unittest.main() diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst new file mode 100644 index 0000000000000..c9ea706e98266 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst @@ -0,0 +1,2 @@ +Usage of ``await``/``yield``/``yield from`` and named expressions within an +annotation is now forbidden when PEP 563 is activated. diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c index cf10b4deaf452..c25ecc2b5dc7a 100644 --- a/Modules/symtablemodule.c +++ b/Modules/symtablemodule.c @@ -58,7 +58,6 @@ _symtable_symtable_impl(PyObject *module, PyObject *source, } t = (PyObject *)st->st_top; Py_INCREF(t); - PyMem_Free((void *)st->st_future); _PySymtable_Free(st); return t; } diff --git a/Python/symtable.c b/Python/symtable.c index e620f1ecc1bc2..62bd1e2ec48f8 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -1,6 +1,6 @@ #include "Python.h" #include "pycore_ast.h" // identifier, stmt_ty -#include "pycore_compile.h" // _Py_Mangle() +#include "pycore_compile.h" // _Py_Mangle(), _PyFuture_FromAST() #include "pycore_parser.h" // _PyParser_ASTFromString() #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_symtable.h" // PySTEntryObject @@ -45,6 +45,10 @@ #define NAMED_EXPR_COMP_ITER_EXPR \ "assignment expression cannot be used in a comprehension iterable expression" +#define ANNOTATION_NOT_ALLOWED \ +"'%s' can not be used within an annotation" + + static PySTEntryObject * ste_new(struct symtable *st, identifier name, _Py_block_ty block, void *key, int lineno, int col_offset, @@ -209,17 +213,19 @@ static int symtable_visit_alias(struct symtable *st, alias_ty); static int symtable_visit_comprehension(struct symtable *st, comprehension_ty); static int symtable_visit_keyword(struct symtable *st, keyword_ty); static int symtable_visit_params(struct symtable *st, asdl_arg_seq *args); +static int symtable_visit_annotation(struct symtable *st, expr_ty annotation); static int symtable_visit_argannotations(struct symtable *st, asdl_arg_seq *args); 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_annotations(struct symtable *st, stmt_ty, 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 int symtable_raise_if_annotation_block(struct symtable *st, const char *, expr_ty); static identifier top = NULL, lambda = NULL, genexpr = NULL, listcomp = NULL, setcomp = NULL, dictcomp = NULL, - __class__ = NULL; + __class__ = NULL, _annotation = NULL; #define GET_IDENTIFIER(VAR) \ ((VAR) ? (VAR) : ((VAR) = PyUnicode_InternFromString(# VAR))) @@ -987,8 +993,17 @@ symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, /* The entry is owned by the stack. Borrow it for st_cur. */ Py_DECREF(ste); st->st_cur = ste; + + /* Annotation blocks shouldn't have any affect on the symbol table since in + * the compilation stage, they will all be transformed to strings. They are + * only created if future 'annotations' feature is activated. */ + if (block == AnnotationBlock) { + return 1; + } + if (block == ModuleBlock) st->st_global = st->st_cur->ste_symbols; + if (prev) { if (PyList_Append(prev->ste_children, (PyObject *)ste) < 0) { return 0; @@ -1190,7 +1205,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults); if (s->v.FunctionDef.args->kw_defaults) VISIT_SEQ_WITH_NULL(st, expr, s->v.FunctionDef.args->kw_defaults); - if (!symtable_visit_annotations(st, s->v.FunctionDef.args, + if (!symtable_visit_annotations(st, s, s->v.FunctionDef.args, s->v.FunctionDef.returns)) VISIT_QUIT(st, 0); if (s->v.FunctionDef.decorator_list) @@ -1273,7 +1288,10 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) else { VISIT(st, expr, s->v.AnnAssign.target); } - VISIT(st, expr, s->v.AnnAssign.annotation); + if (!symtable_visit_annotation(st, s->v.AnnAssign.annotation)) { + VISIT_QUIT(st, 0); + } + if (s->v.AnnAssign.value) { VISIT(st, expr, s->v.AnnAssign.value); } @@ -1422,7 +1440,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (s->v.AsyncFunctionDef.args->kw_defaults) VISIT_SEQ_WITH_NULL(st, expr, s->v.AsyncFunctionDef.args->kw_defaults); - if (!symtable_visit_annotations(st, s->v.AsyncFunctionDef.args, + if (!symtable_visit_annotations(st, s, s->v.AsyncFunctionDef.args, s->v.AsyncFunctionDef.returns)) VISIT_QUIT(st, 0); if (s->v.AsyncFunctionDef.decorator_list) @@ -1564,6 +1582,9 @@ symtable_visit_expr(struct symtable *st, expr_ty e) } switch (e->kind) { case NamedExpr_kind: + if (!symtable_raise_if_annotation_block(st, "named expression", e)) { + VISIT_QUIT(st, 0); + } if(!symtable_handle_namedexpr(st, e)) VISIT_QUIT(st, 0); break; @@ -1624,15 +1645,24 @@ symtable_visit_expr(struct symtable *st, expr_ty e) VISIT_QUIT(st, 0); break; case Yield_kind: + if (!symtable_raise_if_annotation_block(st, "yield expression", e)) { + VISIT_QUIT(st, 0); + } if (e->v.Yield.value) VISIT(st, expr, e->v.Yield.value); st->st_cur->ste_generator = 1; break; case YieldFrom_kind: + if (!symtable_raise_if_annotation_block(st, "yield expression", e)) { + VISIT_QUIT(st, 0); + } VISIT(st, expr, e->v.YieldFrom.value); st->st_cur->ste_generator = 1; break; case Await_kind: + if (!symtable_raise_if_annotation_block(st, "await expression", e)) { + VISIT_QUIT(st, 0); + } VISIT(st, expr, e->v.Await.value); st->st_cur->ste_coroutine = 1; break; @@ -1780,6 +1810,24 @@ symtable_visit_params(struct symtable *st, asdl_arg_seq *args) return 1; } +static int +symtable_visit_annotation(struct symtable *st, expr_ty annotation) +{ + int future_annotations = st->st_future->ff_features & CO_FUTURE_ANNOTATIONS; + if (future_annotations && + !symtable_enter_block(st, GET_IDENTIFIER(_annotation), AnnotationBlock, + (void *)annotation, annotation->lineno, + annotation->col_offset, annotation->end_lineno, + annotation->end_col_offset)) { + VISIT_QUIT(st, 0); + } + VISIT(st, expr, annotation); + if (future_annotations && !symtable_exit_block(st)) { + VISIT_QUIT(st, 0); + } + return 1; +} + static int symtable_visit_argannotations(struct symtable *st, asdl_arg_seq *args) { @@ -1798,8 +1846,15 @@ symtable_visit_argannotations(struct symtable *st, asdl_arg_seq *args) } static int -symtable_visit_annotations(struct symtable *st, arguments_ty a, expr_ty returns) +symtable_visit_annotations(struct symtable *st, stmt_ty o, arguments_ty a, expr_ty returns) { + int future_annotations = st->st_future->ff_features & CO_FUTURE_ANNOTATIONS; + if (future_annotations && + !symtable_enter_block(st, GET_IDENTIFIER(_annotation), AnnotationBlock, + (void *)o, o->lineno, o->col_offset, o->end_lineno, + o->end_col_offset)) { + VISIT_QUIT(st, 0); + } if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs)) return 0; if (a->args && !symtable_visit_argannotations(st, a->args)) @@ -1810,8 +1865,12 @@ symtable_visit_annotations(struct symtable *st, arguments_ty a, expr_ty returns) VISIT(st, expr, a->kwarg->annotation); if (a->kwonlyargs && !symtable_visit_argannotations(st, a->kwonlyargs)) return 0; - if (returns) - VISIT(st, expr, returns); + if (future_annotations && !symtable_exit_block(st)) { + VISIT_QUIT(st, 0); + } + if (returns && !symtable_visit_annotation(st, returns)) { + VISIT_QUIT(st, 0); + } return 1; } @@ -2033,6 +2092,21 @@ symtable_visit_dictcomp(struct symtable *st, expr_ty e) e->v.DictComp.value); } +static int +symtable_raise_if_annotation_block(struct symtable *st, const char *name, expr_ty e) +{ + if (st->st_cur->ste_type != AnnotationBlock) { + return 1; + } + + PyErr_Format(PyExc_SyntaxError, ANNOTATION_NOT_ALLOWED, name); + PyErr_RangedSyntaxLocationObject(st->st_filename, + e->lineno, + e->col_offset + 1, + e->end_lineno, + e->end_col_offset + 1); + return 0; +} struct symtable * _Py_SymtableStringObjectFlags(const char *str, PyObject *filename, @@ -2051,7 +2125,14 @@ _Py_SymtableStringObjectFlags(const char *str, PyObject *filename, _PyArena_Free(arena); return NULL; } - st = _PySymtable_Build(mod, filename, 0); + PyFutureFeatures *future = _PyFuture_FromAST(mod, filename); + if (future == NULL) { + _PyArena_Free(arena); + return NULL; + } + future->ff_features |= flags->cf_flags; + st = _PySymtable_Build(mod, filename, future); + PyObject_Free((void *)future); _PyArena_Free(arena); return st; } From webhook-mailer at python.org Mon May 3 05:06:27 2021 From: webhook-mailer at python.org (asvetlov) Date: Mon, 03 May 2021 09:06:27 -0000 Subject: [Python-checkins] Increase test timeout (GH-25842) Message-ID: https://github.com/python/cpython/commit/4ffd6fd2f13b3a7d32d41f64c38c455d491d4ca6 commit: 4ffd6fd2f13b3a7d32d41f64c38c455d491d4ca6 branch: master author: Andrew Svetlov committer: asvetlov date: 2021-05-03T12:06:17+03:00 summary: Increase test timeout (GH-25842) files: M Lib/test/test_asyncio/test_ssl.py diff --git a/Lib/test/test_asyncio/test_ssl.py b/Lib/test/test_asyncio/test_ssl.py index 4dcd3a0292a92..9cdd281221c57 100644 --- a/Lib/test/test_asyncio/test_ssl.py +++ b/Lib/test/test_asyncio/test_ssl.py @@ -179,7 +179,7 @@ async def wait_closed(self, obj): def test_create_server_ssl_1(self): CNT = 0 # number of clients that were successful TOTAL_CNT = 25 # total number of clients that test will create - TIMEOUT = 10.0 # timeout for this test + TIMEOUT = 60.0 # timeout for this test A_DATA = b'A' * 1024 * 1024 B_DATA = b'B' * 1024 * 1024 @@ -238,7 +238,7 @@ def prog(sock): async def start_server(): extras = {} - extras = dict(ssl_handshake_timeout=10.0) + extras = dict(ssl_handshake_timeout=40.0) srv = await asyncio.start_server( handle_client, @@ -303,7 +303,7 @@ def server(sock): async def client(addr): extras = {} - extras = dict(ssl_handshake_timeout=10.0) + extras = dict(ssl_handshake_timeout=40.0) reader, writer = await asyncio.open_connection( *addr, From webhook-mailer at python.org Mon May 3 05:21:14 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 03 May 2021 09:21:14 -0000 Subject: [Python-checkins] Doc: Fix random.uniform example comment. (GH-25784) Message-ID: https://github.com/python/cpython/commit/440c0257262fec6f519bb81e49f1a4f341aeed66 commit: 440c0257262fec6f519bb81e49f1a4f341aeed66 branch: master author: Julien Palard committer: rhettinger date: 2021-05-03T02:20:54-07:00 summary: Doc: Fix random.uniform example comment. (GH-25784) files: M Doc/library/random.rst diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 9f037a1a822ac..e924127d8b828 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -419,7 +419,7 @@ Basic examples:: >>> random() # Random float: 0.0 <= x < 1.0 0.37444887175646646 - >>> uniform(2.5, 10.0) # Random float: 2.5 <= x < 10.0 + >>> uniform(2.5, 10.0) # Random float: 2.5 <= x <= 10.0 3.1800146073117523 >>> expovariate(1 / 5) # Interval between arrivals averaging 5 seconds From webhook-mailer at python.org Mon May 3 08:43:14 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 03 May 2021 12:43:14 -0000 Subject: [Python-checkins] [3.9] Doc: Fix random.uniform example comment. (GH-25784) (GH-25843) Message-ID: https://github.com/python/cpython/commit/1536342c4491ffc70adeb540a04381e90ea623d7 commit: 1536342c4491ffc70adeb540a04381e90ea623d7 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-05-03T05:43:04-07:00 summary: [3.9] Doc: Fix random.uniform example comment. (GH-25784) (GH-25843) (cherry picked from commit 440c0257262fec6f519bb81e49f1a4f341aeed66) Co-authored-by: Julien Palard Automerge-Triggered-By: GH:JulienPalard files: M Doc/library/random.rst diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 0e703251259aa..f2d6749422a15 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -409,7 +409,7 @@ Basic examples:: >>> random() # Random float: 0.0 <= x < 1.0 0.37444887175646646 - >>> uniform(2.5, 10.0) # Random float: 2.5 <= x < 10.0 + >>> uniform(2.5, 10.0) # Random float: 2.5 <= x <= 10.0 3.1800146073117523 >>> expovariate(1 / 5) # Interval between arrivals averaging 5 seconds From webhook-mailer at python.org Mon May 3 09:06:40 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 03 May 2021 13:06:40 -0000 Subject: [Python-checkins] bpo-42800: Add audit events for f_code and tb_frame (GH-24182) Message-ID: https://github.com/python/cpython/commit/bb2f3ff7a8f0c3565ccc1946dba7e09a3f7dc209 commit: bb2f3ff7a8f0c3565ccc1946dba7e09a3f7dc209 branch: 3.9 author: Steve Dower committer: zooba date: 2021-05-03T14:06:36+01:00 summary: bpo-42800: Add audit events 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 files: A Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst M Doc/library/audit_events.rst M Doc/library/stdtypes.rst M Doc/reference/datamodel.rst M Misc/ACKS M Objects/frameobject.c M Objects/genobject.c M Python/traceback.c 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 0667a601576165..8a03b73b7650d4 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -5044,6 +5044,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 46ee8ec3cba6fc..403012307004ad 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/Misc/ACKS b/Misc/ACKS index 5e34ccb81d75c5..389c8e133f71bd 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -716,6 +716,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/frameobject.c b/Objects/frameobject.c index b511e4c832c770..50846dec50e8ec 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|READ_RESTRICTED}, {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, {"f_lasti", T_INT, OFF(f_lasti), READONLY}, diff --git a/Objects/genobject.c b/Objects/genobject.c index 72c93f613e0eda..5ba4de82ea70e0 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -711,9 +711,9 @@ static PyGetSetDef gen_getsetlist[] = { }; static PyMemberDef gen_memberlist[] = { - {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY}, + {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY|READ_RESTRICTED}, {"gi_running", T_BOOL, offsetof(PyGenObject, gi_running), READONLY}, - {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY}, + {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY|READ_RESTRICTED}, {NULL} /* Sentinel */ }; @@ -931,9 +931,9 @@ static PyGetSetDef coro_getsetlist[] = { }; static PyMemberDef coro_memberlist[] = { - {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY}, + {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY|READ_RESTRICTED}, {"cr_running", T_BOOL, offsetof(PyCoroObject, cr_running), READONLY}, - {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY}, + {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY|READ_RESTRICTED}, {"cr_origin", T_OBJECT, offsetof(PyCoroObject, cr_origin), READONLY}, {NULL} /* Sentinel */ }; @@ -1328,10 +1328,12 @@ 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|READ_RESTRICTED}, {"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|READ_RESTRICTED}, {NULL} /* Sentinel */ }; diff --git a/Python/traceback.c b/Python/traceback.c index 5d3a65cc160e04..a9a9dd92e38ee9 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|READ_RESTRICTED}, {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, {NULL} /* Sentinel */ From webhook-mailer at python.org Mon May 3 09:24:13 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 03 May 2021 13:24:13 -0000 Subject: [Python-checkins] bpo-42800: Add audit events for f_code and tb_frame (GH-24182) Message-ID: https://github.com/python/cpython/commit/8ab272f0f3dd7da44f8e21d2a5a39c2ab39490d6 commit: 8ab272f0f3dd7da44f8e21d2a5a39c2ab39490d6 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-05-03T06:24:05-07:00 summary: bpo-42800: Add audit events 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 (cherry picked from commit bb2f3ff7a8f0c3565ccc1946dba7e09a3f7dc209) Co-authored-by: Steve Dower files: A Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst M Doc/library/audit_events.rst M Doc/library/stdtypes.rst M Doc/reference/datamodel.rst M Misc/ACKS M Objects/frameobject.c M Objects/genobject.c M Python/traceback.c 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 fb500501c8f9ae..aaef42504aa255 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -4708,6 +4708,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 f71560d640c5bf..bf391ef1ff2c5f 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1000,6 +1000,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) @@ -1084,6 +1087,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/Misc/ACKS b/Misc/ACKS index 197616d7378f9a..a265e7e9a7273d 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -696,6 +696,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/frameobject.c b/Objects/frameobject.c index a796a59eee9e40..3abd8e52d859d9 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|READ_RESTRICTED}, {"f_builtins", T_OBJECT, OFF(f_builtins), READONLY}, {"f_globals", T_OBJECT, OFF(f_globals), READONLY}, {"f_lasti", T_INT, OFF(f_lasti), READONLY}, diff --git a/Objects/genobject.c b/Objects/genobject.c index ce7dd48a17cfb6..697947b6ff7db4 100644 --- a/Objects/genobject.c +++ b/Objects/genobject.c @@ -708,9 +708,9 @@ static PyGetSetDef gen_getsetlist[] = { }; static PyMemberDef gen_memberlist[] = { - {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY}, + {"gi_frame", T_OBJECT, offsetof(PyGenObject, gi_frame), READONLY|READ_RESTRICTED}, {"gi_running", T_BOOL, offsetof(PyGenObject, gi_running), READONLY}, - {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY}, + {"gi_code", T_OBJECT, offsetof(PyGenObject, gi_code), READONLY|READ_RESTRICTED}, {NULL} /* Sentinel */ }; @@ -944,9 +944,9 @@ static PyGetSetDef coro_getsetlist[] = { }; static PyMemberDef coro_memberlist[] = { - {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY}, + {"cr_frame", T_OBJECT, offsetof(PyCoroObject, cr_frame), READONLY|READ_RESTRICTED}, {"cr_running", T_BOOL, offsetof(PyCoroObject, cr_running), READONLY}, - {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY}, + {"cr_code", T_OBJECT, offsetof(PyCoroObject, cr_code), READONLY|READ_RESTRICTED}, {"cr_origin", T_OBJECT, offsetof(PyCoroObject, cr_origin), READONLY}, {NULL} /* Sentinel */ }; @@ -1341,10 +1341,12 @@ 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|READ_RESTRICTED}, {"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|READ_RESTRICTED}, {NULL} /* Sentinel */ }; diff --git a/Python/traceback.c b/Python/traceback.c index 0aa51ad37f49e2..d8dd8211fb0705 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -148,7 +148,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|READ_RESTRICTED}, {"tb_lasti", T_INT, OFF(tb_lasti), READONLY}, {"tb_lineno", T_INT, OFF(tb_lineno), READONLY}, {NULL} /* Sentinel */ From webhook-mailer at python.org Mon May 3 10:02:23 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 03 May 2021 14:02:23 -0000 Subject: [Python-checkins] Python 3.8.10 Message-ID: https://github.com/python/cpython/commit/3d8993a744813c5144851da5347d7b4b1885f234 commit: 3d8993a744813c5144851da5347d7b4b1885f234 branch: 3.8 author: ?ukasz Langa committer: ambv date: 2021-05-03T11:47:56+02:00 summary: Python 3.8.10 files: A Misc/NEWS.d/3.8.10.rst D Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst D Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst D Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst D Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst D Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst D Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst D Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst D Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst D Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.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-07-21-51-17.bpo-41735.NKqGKy.rst D Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst D Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst D Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst D Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst D Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst D Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst D Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst D Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst D Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst D Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst D Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst D Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst D Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst D Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst D Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst D Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst D Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst D Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst D Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst D Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst D Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst D Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst D Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst D Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst D Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst D Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst D Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst D Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst D Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.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 e074b01dca7719..d23d5afcd8d8e3 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 9 +#define PY_MICRO_VERSION 10 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.8.9+" +#define PY_VERSION "3.8.10" /*--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 2a16970b871297..e3dc1c5b5ec33d 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 12:30:35 2021 +# Autogenerated by Sphinx on Mon May 3 11:26:22 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -987,9 +987,9 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A ' - 'descriptor can define\n' - 'any combination of "__get__()", "__set__()" and ' + 'on which descriptor methods are defined. A descriptor ' + 'can define any\n' + 'combination of "__get__()", "__set__()" and ' '"__delete__()". If it\n' 'does not define "__get__()", then accessing the ' 'attribute will return\n' @@ -2746,7 +2746,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -2758,8 +2758,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -5201,7 +5207,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 ' @@ -5874,7 +5880,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -5886,8 +5892,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -6875,7 +6887,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' @@ -7473,12 +7485,18 @@ '\n' 'The "from" clause is used for exception chaining: if given, the ' 'second\n' - '*expression* must be another exception class or instance, which ' - 'will\n' - 'then be attached to the raised exception as the "__cause__" ' - 'attribute\n' - '(which is writable). If the raised exception is not handled, both\n' - 'exceptions will be printed:\n' + '*expression* must be another exception class or instance. If the\n' + 'second expression is an exception instance, it will be attached to ' + 'the\n' + 'raised exception as the "__cause__" attribute (which is writable). ' + 'If\n' + 'the expression is an exception class, the class will be ' + 'instantiated\n' + 'and the resulting exception instance will be attached to the ' + 'raised\n' + 'exception as the "__cause__" attribute. If the raised exception is ' + 'not\n' + 'handled, both exceptions will be printed:\n' '\n' ' >>> try:\n' ' ... print(1 / 0)\n' @@ -8820,10 +8838,10 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A descriptor ' - 'can define\n' - 'any combination of "__get__()", "__set__()" and ' - '"__delete__()". If it\n' + 'on which descriptor methods are defined. A descriptor can ' + 'define any\n' + 'combination of "__get__()", "__set__()" and "__delete__()". ' + 'If it\n' 'does not define "__get__()", then accessing the attribute ' 'will return\n' 'the descriptor object itself unless there is a value in the ' @@ -10049,7 +10067,7 @@ '*start* and\n' ' *end* are interpreted as in slice notation.\n' '\n' - 'str.encode(encoding="utf-8", errors="strict")\n' + "str.encode(encoding='utf-8', errors='strict')\n" '\n' ' Return an encoded version of the string as a bytes ' 'object. Default\n' @@ -10496,7 +10514,7 @@ 'followed by\n' ' the string itself.\n' '\n' - 'str.rsplit(sep=None, maxsplit=-1)\n' + 'str.rsplit(sep=None, maxsplit=- 1)\n' '\n' ' Return a list of the words in the string, using *sep* ' 'as the\n' @@ -10527,7 +10545,7 @@ " >>> 'mississippi'.rstrip('ipz')\n" " 'mississ'\n" '\n' - 'str.split(sep=None, maxsplit=-1)\n' + 'str.split(sep=None, maxsplit=- 1)\n' '\n' ' Return a list of the words in the string, using *sep* ' 'as the\n' @@ -11485,7 +11503,7 @@ ' points. All the code points in the range "U+0000 - ' 'U+10FFFF"\n' ' can be represented in a string. Python doesn?t have a ' - '"char"\n' + '*char*\n' ' type; instead, every code point in the string is ' 'represented\n' ' as a string object with length "1". The built-in ' diff --git a/Misc/NEWS.d/3.8.10.rst b/Misc/NEWS.d/3.8.10.rst new file mode 100644 index 00000000000000..5612f75a3c1bfe --- /dev/null +++ b/Misc/NEWS.d/3.8.10.rst @@ -0,0 +1,450 @@ +.. bpo: 43434 +.. date: 2021-05-02-17-50-23 +.. nonce: cy7xz6 +.. release date: 2021-05-03 +.. section: Security + +Creating a :class:`sqlite3.Connection` object now also produces a +``sqlite3.connect`` :ref:`auditing event `. Previously this event +was only produced by :func:`sqlite3.connect` calls. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43472 +.. date: 2021-04-21-22-53-31 +.. nonce: gjLBTb +.. section: Security + +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. + +.. + +.. bpo: 43075 +.. date: 2021-01-31-05-28-14 +.. nonce: DoAXqO +.. section: Security + +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. + +.. + +.. bpo: 43105 +.. date: 2021-03-31-20-35-11 +.. nonce: PBVmHm +.. section: Core and Builtins + +Importlib now resolves relative paths when creating module spec objects from +file locations. + +.. + +.. bpo: 42924 +.. date: 2021-01-13-14-06-01 +.. nonce: _WS1Ok +.. section: Core and Builtins + +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). + +.. + +.. bpo: 43993 +.. date: 2021-04-30-19-23-45 +.. nonce: T7_yoq +.. section: Library + +Update bundled pip to 21.1.1. + +.. + +.. bpo: 43937 +.. date: 2021-04-25-13-34-13 +.. nonce: isx95l +.. section: Library + +Fixed the :mod:`turtle` module working with non-default root window. + +.. + +.. bpo: 43930 +.. date: 2021-04-24-14-23-07 +.. nonce: R7ah0m +.. section: Library + +Update bundled pip to 21.1 and setuptools to 56.0.0 + +.. + +.. bpo: 43920 +.. date: 2021-04-23-11-54-38 +.. nonce: cJMQ2D +.. section: Library + +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. + +.. + +.. bpo: 43607 +.. date: 2021-04-22-22-39-58 +.. nonce: 7IYDkG +.. section: Library + +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. + +.. + +.. bpo: 43284 +.. date: 2021-04-21-14-50-57 +.. nonce: 2QZn2T +.. section: Library + +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. + +.. + +.. bpo: 42248 +.. date: 2021-04-11-21-10-57 +.. nonce: pedB1E +.. section: Library + +[Enum] ensure exceptions raised in ``_missing__`` are released + +.. + +.. bpo: 43799 +.. date: 2021-04-10-11-35-50 +.. nonce: 1iV4pX +.. section: Library + +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. + +.. + +.. bpo: 43794 +.. date: 2021-04-09-16-14-22 +.. nonce: -1XPDH +.. section: Library + +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) + +.. + +.. bpo: 43789 +.. date: 2021-04-09-14-08-03 +.. nonce: eaHlAm +.. section: Library + +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. + +.. + +.. bpo: 43788 +.. date: 2021-04-09-12-08-01 +.. nonce: YsvInM +.. section: Library + +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. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-51-19 +.. nonce: LwGy8R +.. section: Library + +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. + +.. + +.. bpo: 43534 +.. date: 2021-03-18-15-46-08 +.. nonce: vPE9Us +.. section: Library + +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. + +.. + +.. bpo: 43522 +.. date: 2021-03-16-22-37-32 +.. nonce: dhNwOu +.. section: Library + +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. +OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. + +.. + +.. bpo: 42967 +.. date: 2021-03-11-00-31-41 +.. nonce: 2PeQRw +.. section: Library + +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``. + +.. + +.. bpo: 43176 +.. date: 2021-02-09-07-24-29 +.. nonce: bocNQn +.. section: Library + +Fixed processing of a dataclass that inherits from a frozen dataclass with +no fields. It is now correctly detected as an error. + +.. + +.. bpo: 34463 +.. date: 2020-12-22-22-51-48 +.. nonce: TUD8V5 +.. section: Library + +Fixed discrepancy between :mod:`traceback` and the interpreter in formatting +of SyntaxError with lineno not set (:mod:`traceback` was changed to match +interpreter). + +.. + +.. bpo: 41735 +.. date: 2020-09-07-21-51-17 +.. nonce: NKqGKy +.. section: Library + +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. + +.. + +.. 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: 36470 +.. date: 2020-06-13-23-33-32 +.. nonce: oi6Kdb +.. section: Library + +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. + +.. + +.. bpo: 28577 +.. date: 2020-03-02-23-52-38 +.. nonce: EK91ae +.. section: Library + +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. + +.. + +.. bpo: 32745 +.. date: 2018-08-09-23-47-10 +.. nonce: iQi9hI +.. section: Library + +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. + +.. + +.. bpo: 43959 +.. date: 2021-04-27-22-22-22 +.. nonce: n2261q +.. section: Documentation + +The documentation on the PyContextVar C-API was clarified. + +.. + +.. bpo: 43938 +.. date: 2021-04-25-22-44-27 +.. nonce: nC660q +.. section: Documentation + +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. + +.. + +.. bpo: 43739 +.. date: 2021-04-06-07-05-49 +.. nonce: L4HjiX +.. section: Documentation + +Fixing the example code in Doc/extending/extending.rst to declare and +initialize the pmodule variable to be of the right type. + +.. + +.. bpo: 43842 +.. date: 2021-04-16-14-07-40 +.. nonce: w60GAH +.. section: Tests + +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. + +.. + +.. bpo: 43811 +.. date: 2021-04-12-11-14-28 +.. nonce: vGNbnD +.. section: Tests + +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. + +.. + +.. bpo: 43791 +.. date: 2021-04-09-15-10-38 +.. nonce: 4KxiXK +.. section: Tests + +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. + +.. + +.. bpo: 35306 +.. date: 2021-04-22-20-39-49 +.. nonce: F0Cg6X +.. section: Windows + +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. + +.. + +.. bpo: 38822 +.. date: 2021-04-22-19-49-20 +.. nonce: jgdPmq +.. section: Windows + +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`. + +.. + +.. bpo: 26227 +.. date: 2021-04-21-23-37-34 +.. nonce: QMY_eA +.. section: Windows + +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. + +.. + +.. bpo: 43745 +.. date: 2021-04-06-12-27-33 +.. nonce: rdKNda +.. section: Windows + +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-34-33 +.. nonce: AsYnVX +.. section: Windows + +Upgrade Windows installer to use SQLite 3.35.5. + +.. + +.. bpo: 44009 +.. date: 2021-05-02-03-45-30 +.. nonce: uvhmlh +.. section: macOS + +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. + +.. + +.. bpo: 41100 +.. date: 2021-04-10-17-01-18 +.. nonce: N9FhqU +.. section: macOS + +As of 3.8.10, Python now supports building and running on macOS 11 (Big Sur) +and on Apple Silicon Macs (based on the ``ARM64`` architecture). A new +universal build variant, ``universal2``, is also available to natively +support both ``ARM64`` and ``Intel 64`` in one set of executables. This +backport from Python 3.9 does not include support for "weaklinking"; to +support a range of macOS versions, continue to target for and build on the +oldest version in the range; for 3.8.x, the ``universal2`` variant is only +useful on macOS 11 or later. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-32-23 +.. nonce: 1ZRcV9 +.. section: macOS + +Update macOS installer to use SQLite 3.35.4. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-52-07 +.. nonce: HSyaKH +.. section: IDLE + +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. + +.. + +.. bpo: 43962 +.. date: 2021-04-28-13-13-07 +.. nonce: 9Jzs5X +.. section: C API + +_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/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 deleted file mode 100644 index 32164162f90ad0..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst +++ /dev/null @@ -1,5 +0,0 @@ -_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/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 deleted file mode 100644 index 33fbb5235ddb66..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index dd4c18661ec0b8..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importlib now resolves relative paths when creating module spec objects from -file locations. 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 deleted file mode 100644 index 9f8d3625e79618..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index dcf252e21bb9e0..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update dataclasses documentation to express that FrozenInstanceError is -derived from AttributeError. 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 deleted file mode 100644 index ba23ffd577b3d4..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst +++ /dev/null @@ -1 +0,0 @@ -The documentation on the PyContextVar C-API was clarified. 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 deleted file mode 100644 index 105ec9281f0051..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst +++ /dev/null @@ -1,2 +0,0 @@ -IDLE dialog windows are now recognized as dialogs by window managers on -macOS and X Window. diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst deleted file mode 100644 index e6a60fe8da140b..00000000000000 --- a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: -embedded null characters would cause a :exc:`ValueError` to be raised. Patch -by Zackery Spytz. 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 deleted file mode 100644 index de4c064378c247..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-03-02-23-52-38.bpo-28577.EK91ae.rst +++ /dev/null @@ -1 +0,0 @@ -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. 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 deleted file mode 100644 index 9b6ab994f3b6a3..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch -by Claudiu Popa. 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 e8720ac82ffb13..00000000000000 --- 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-07-21-51-17.bpo-41735.NKqGKy.rst b/Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst deleted file mode 100644 index 9e36435a364eaf..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-07-21-51-17.bpo-41735.NKqGKy.rst +++ /dev/null @@ -1 +0,0 @@ -Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. 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 deleted file mode 100644 index d045fb7dbabfc6..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-22-22-51-48.bpo-34463.TUD8V5.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 016514d9c3346c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. 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 deleted file mode 100644 index f8ad3eaaedd785..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst +++ /dev/null @@ -1,3 +0,0 @@ -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``. 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 deleted file mode 100644 index a17e1b44637383..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index 7f2e5a46add039..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient -window working on behalf of the canvas 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 deleted file mode 100644 index 7916d2248b231d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`tkinter` 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-09-12-08-01.bpo-43788.YsvInM.rst b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst deleted file mode 100644 index ff76256472c6ec..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1c0852946214d2..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 64894bdc017e53..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst +++ /dev/null @@ -1 +0,0 @@ -Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) 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 deleted file mode 100644 index bd79519015c7a9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 0722d35a37a1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst +++ /dev/null @@ -1 +0,0 @@ -[Enum] ensure exceptions raised in ``_missing__`` are released 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 deleted file mode 100644 index 7e41016015efed..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index fa62846acaa984..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL -paths. 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 deleted file mode 100644 index 28ff0fb3afa9d3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 7dac21f3d9b197..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file 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 deleted file mode 100644 index cb4d90b723d1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the :mod:`turtle` module working with non-default root window. diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst deleted file mode 100644 index c9d2c458eee75c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1.1. \ No newline at end of file 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 deleted file mode 100644 index 1c9f727e965fb8..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst +++ /dev/null @@ -1 +0,0 @@ -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. 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 deleted file mode 100644 index e38dc169def96e..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst +++ /dev/null @@ -1,3 +0,0 @@ -Ensures interpreter-level audit hooks receive the -``cpython.PyInterpreterState_New`` event when called through the -``_xxsubinterpreters`` module. diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst deleted file mode 100644 index 28b7fc53853405..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst +++ /dev/null @@ -1,4 +0,0 @@ -Creating a :class:`sqlite3.Connection` object now also produces -a ``sqlite3.connect`` :ref:`auditing event `. -Previously this event was only produced by :func:`sqlite3.connect` -calls. Patch by Erlend E. Aasland. 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 deleted file mode 100644 index 964ae5abb3d880..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst +++ /dev/null @@ -1,2 +0,0 @@ -OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests -are failing with TLSV1_ALERT_INTERNAL_ERROR. 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 deleted file mode 100644 index d4c7066013332c..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up -testing. 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 deleted file mode 100644 index 5b4a120eb86371..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index 93da1b6dec8e3b..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst +++ /dev/null @@ -1 +0,0 @@ -Upgrade Windows installer to use SQLite 3.35.5. 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 deleted file mode 100644 index 8ec498d11ea938..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst +++ /dev/null @@ -1,2 +0,0 @@ -Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were -mislabelled and actually included 1.1.1i again. 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 deleted file mode 100644 index d6826fb39706bd..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed decoding of host names in :func:`socket.gethostbyaddr` and -:func:`socket.gethostbyname_ex`. 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 deleted file mode 100644 index 072a96989c3d04..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index af41b3ceacb648..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst +++ /dev/null @@ -1,2 +0,0 @@ -Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an -invalid filename. 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 deleted file mode 100644 index 39f15370688161..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer to use SQLite 3.35.4. diff --git a/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst b/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst deleted file mode 100644 index e087df98f75bff..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-04-10-17-01-18.bpo-41100.N9FhqU.rst +++ /dev/null @@ -1,9 +0,0 @@ -As of 3.8.10, Python now supports building and running on macOS 11 -(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture). -A new universal build variant, ``universal2``, is also available to natively -support both ``ARM64`` and ``Intel 64`` in one set of executables. -This backport from Python 3.9 does not include support for "weaklinking"; -to support a range of macOS versions, continue to target -for and build on the oldest version in the range; for 3.8.x, the -``universal2`` variant is only useful on macOS 11 or later. - diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst deleted file mode 100644 index f9f11c8ae6a793..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst +++ /dev/null @@ -1,4 +0,0 @@ -Provide "python3.x-intel64" executable to allow reliably forcing macOS -universal2 framework builds to run under Rosetta 2 Intel-64 emulation on -Apple Silicon Macs. This can be useful for testing or when universal2 -wheels are not yet available. diff --git a/README.rst b/README.rst index f836af12f2cf6c..49eb70f71c128e 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ -This is Python version 3.8.9 -============================ +This is Python version 3.8.10 +============================= .. image:: https://travis-ci.org/python/cpython.svg?branch=3.8 :alt: CPython build status on Travis CI From webhook-mailer at python.org Mon May 3 10:50:31 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 14:50:31 -0000 Subject: [Python-checkins] bpo-43916: Move the _PyStructSequence_InitType function to the internal API (GH-25854) Message-ID: https://github.com/python/cpython/commit/c2931d31f8ba7cf10044de276018c713ffc73592 commit: c2931d31f8ba7cf10044de276018c713ffc73592 branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-03T15:50:24+01:00 summary: bpo-43916: Move the _PyStructSequence_InitType function to the internal API (GH-25854) files: A Include/internal/pycore_structseq.h M Doc/data/stable_abi.dat M Include/structseq.h M Makefile.pre.in M Misc/stable_abi.txt M Modules/_cursesmodule.c M Objects/structseq.c M PC/python3dll.c M PCbuild/pythoncore.vcxproj M Python/sysmodule.c diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index b21374a05cb6a5..833228f7fd755d 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -918,7 +918,6 @@ Py_tp_setattro Py_tp_str Py_tp_traverse Py_uintptr_t -_PyStructSequence_InitType _frame _node allocfunc diff --git a/Include/internal/pycore_structseq.h b/Include/internal/pycore_structseq.h new file mode 100644 index 00000000000000..84c8d477e0dac8 --- /dev/null +++ b/Include/internal/pycore_structseq.h @@ -0,0 +1,21 @@ +#ifndef Py_INTERNAL_STRUCTSEQ_H +#define Py_INTERNAL_STRUCTSEQ_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + + +PyAPI_FUNC(int) _PyStructSequence_InitType( + PyTypeObject *type, + PyStructSequence_Desc *desc, + unsigned long tp_flags); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_STRUCTSEQ_H */ diff --git a/Include/structseq.h b/Include/structseq.h index 890e03130b4edb..8f51c89163a4e1 100644 --- a/Include/structseq.h +++ b/Include/structseq.h @@ -27,10 +27,6 @@ PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, PyAPI_FUNC(int) PyStructSequence_InitType2(PyTypeObject *type, PyStructSequence_Desc *desc); #endif -PyAPI_FUNC(int) _PyStructSequence_InitType( - PyTypeObject *type, - PyStructSequence_Desc *desc, - unsigned long tp_flags); PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc); PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); diff --git a/Makefile.pre.in b/Makefile.pre.in index 0836655e15adb4..92cc48657a2af0 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1171,6 +1171,7 @@ PYTHON_HEADERS= \ $(srcdir)/Include/internal/pycore_pymem.h \ $(srcdir)/Include/internal/pycore_pystate.h \ $(srcdir)/Include/internal/pycore_runtime.h \ + $(srcdir)/Include/internal/pycore_structseq.h \ $(srcdir)/Include/internal/pycore_symtable.h \ $(srcdir)/Include/internal/pycore_sysmodule.h \ $(srcdir)/Include/internal/pycore_traceback.h \ diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index d79746e0a4ec04..2a802bd5f4b831 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2121,8 +2121,6 @@ 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/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index bcf9ad19386b25..b6b7ca458b454a 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -104,7 +104,7 @@ static const char PyCursesVersion[] = "2.2"; #include "Python.h" #include "pycore_long.h" // _PyLong_GetZero() - +#include "pycore_structseq.h" // PyStructSequence_InitType() #ifdef __hpux #define STRICT_SYSV_CURSES diff --git a/Objects/structseq.c b/Objects/structseq.c index bf59f47fcf073b..73795b677b404f 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -11,6 +11,7 @@ #include "pycore_tuple.h" // _PyTuple_FromArray() #include "pycore_object.h" // _PyObject_GC_TRACK() #include "structmember.h" // PyMemberDef +#include "pycore_structseq.h" // PyStructSequence_InitType() static const char visible_length_key[] = "n_sequence_fields"; static const char real_length_key[] = "n_fields"; diff --git a/PC/python3dll.c b/PC/python3dll.c index 30868c1864622e..574d4dcad9f75b 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -35,7 +35,6 @@ 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) diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 429d437c5ebc20..0382977d6c367a 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -209,6 +209,7 @@ + diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 2190bbf37fdae1..ac49f7867a5cb3 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -24,6 +24,7 @@ Data members: #include "pycore_pymem.h" // _PyMem_SetDefaultAllocator() #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_tuple.h" // _PyTuple_FromArray() +#include "pycore_structseq.h" // PyStructSequence_InitType() #include "code.h" #include "frameobject.h" // PyFrame_GetBack() From webhook-mailer at python.org Mon May 3 11:21:06 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 15:21:06 -0000 Subject: [Python-checkins] bpo-43754: Fix compiler warning in Python/compile.c (GH-25855) Message-ID: https://github.com/python/cpython/commit/39494285e15dc2d291ec13de5045b930eaf0a3db commit: 39494285e15dc2d291ec13de5045b930eaf0a3db branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-03T16:20:46+01:00 summary: bpo-43754: Fix compiler warning in Python/compile.c (GH-25855) This fixes the following warning: 'initializing': conversion from 'Py_ssize_t' to 'int', possible loss of data [D:\a\cpython\cpython\PCbuild\pythoncore.vcxproj] files: M Python/compile.c diff --git a/Python/compile.c b/Python/compile.c index 7cc75ada472c7..4fc8b38d97828 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6144,7 +6144,7 @@ compiler_pattern_or(struct compiler *c, pattern_ty p, pattern_context *pc) // - A copy of the subject. // - Anything else that may be on top of the stack. // - Any previous stores we've already stashed away on the stack. - int nrots = nstores + 1 + pc->on_top + PyList_GET_SIZE(pc->stores); + Py_ssize_t nrots = nstores + 1 + pc->on_top + PyList_GET_SIZE(pc->stores); for (Py_ssize_t i = 0; i < nstores; i++) { // Rotate this capture to its proper place on the stack: if (!compiler_addop_i(c, ROT_N, nrots)) { From webhook-mailer at python.org Mon May 3 11:22:04 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 15:22:04 -0000 Subject: [Python-checkins] bpo-44011: Revert "New asyncio ssl implementation (GH-17975)" (GH-25848) Message-ID: https://github.com/python/cpython/commit/7719953b30430b351ba0f153c2b51b16cc68ee36 commit: 7719953b30430b351ba0f153c2b51b16cc68ee36 branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-03T16:21:59+01:00 summary: bpo-44011: Revert "New asyncio ssl implementation (GH-17975)" (GH-25848) This reverts commit 5fb06edbbb769561e245d0fe13002bab50e2ae60 and all subsequent dependent commits. files: D Lib/test/test_asyncio/test_ssl.py D Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst M Lib/asyncio/base_events.py M Lib/asyncio/constants.py M Lib/asyncio/events.py M Lib/asyncio/proactor_events.py M Lib/asyncio/selector_events.py M Lib/asyncio/sslproto.py M Lib/asyncio/unix_events.py M Lib/test/test_asyncio/test_base_events.py M Lib/test/test_asyncio/test_selector_events.py M Lib/test/test_asyncio/test_sslproto.py diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index e54ee309e42e6f..f789635e0f893a 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -273,7 +273,7 @@ async def restore(self): class Server(events.AbstractServer): def __init__(self, loop, sockets, protocol_factory, ssl_context, backlog, - ssl_handshake_timeout, ssl_shutdown_timeout=None): + ssl_handshake_timeout): self._loop = loop self._sockets = sockets self._active_count = 0 @@ -282,7 +282,6 @@ def __init__(self, loop, sockets, protocol_factory, ssl_context, backlog, self._backlog = backlog self._ssl_context = ssl_context self._ssl_handshake_timeout = ssl_handshake_timeout - self._ssl_shutdown_timeout = ssl_shutdown_timeout self._serving = False self._serving_forever_fut = None @@ -314,8 +313,7 @@ def _start_serving(self): sock.listen(self._backlog) self._loop._start_serving( self._protocol_factory, sock, self._ssl_context, - self, self._backlog, self._ssl_handshake_timeout, - self._ssl_shutdown_timeout) + self, self._backlog, self._ssl_handshake_timeout) def get_loop(self): return self._loop @@ -469,7 +467,6 @@ def _make_ssl_transport( *, server_side=False, server_hostname=None, extra=None, server=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, call_connection_made=True): """Create SSL transport.""" raise NotImplementedError @@ -972,7 +969,6 @@ async def create_connection( proto=0, flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, happy_eyeballs_delay=None, interleave=None): """Connect to a TCP server. @@ -1008,10 +1004,6 @@ async def create_connection( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - if happy_eyeballs_delay is not None and interleave is None: # If using happy eyeballs, default to interleave addresses by family interleave = 1 @@ -1087,8 +1079,7 @@ async def create_connection( transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) if self._debug: # Get the socket from the transport because SSL transport closes # the old socket and creates a new SSL socket @@ -1100,8 +1091,7 @@ async def create_connection( async def _create_connection_transport( self, sock, protocol_factory, ssl, server_hostname, server_side=False, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): sock.setblocking(False) @@ -1112,8 +1102,7 @@ async def _create_connection_transport( transport = self._make_ssl_transport( sock, protocol, sslcontext, waiter, server_side=server_side, server_hostname=server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) else: transport = self._make_socket_transport(sock, protocol, waiter) @@ -1204,8 +1193,7 @@ async def _sendfile_fallback(self, transp, file, offset, count): async def start_tls(self, transport, protocol, sslcontext, *, server_side=False, server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): """Upgrade transport to TLS. Return a new transport that *protocol* should start using @@ -1228,7 +1216,6 @@ async def start_tls(self, transport, protocol, sslcontext, *, self, protocol, sslcontext, waiter, server_side, server_hostname, ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout, call_connection_made=False) # Pause early so that "ssl_protocol.data_received()" doesn't @@ -1427,7 +1414,6 @@ async def create_server( reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, start_serving=True): """Create a TCP server. @@ -1451,10 +1437,6 @@ async def create_server( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None and ssl is None: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - if host is not None or port is not None: if sock is not None: raise ValueError( @@ -1527,8 +1509,7 @@ async def create_server( sock.setblocking(False) server = Server(self, sockets, protocol_factory, - ssl, backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) + ssl, backlog, ssl_handshake_timeout) if start_serving: server._start_serving() # Skip one loop iteration so that all 'loop.add_reader' @@ -1542,8 +1523,7 @@ async def create_server( async def connect_accepted_socket( self, protocol_factory, sock, *, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): if sock.type != socket.SOCK_STREAM: raise ValueError(f'A Stream Socket was expected, got {sock!r}') @@ -1551,14 +1531,9 @@ async def connect_accepted_socket( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, '', server_side=True, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) if self._debug: # Get the socket from the transport because SSL transport closes # the old socket and creates a new SSL socket diff --git a/Lib/asyncio/constants.py b/Lib/asyncio/constants.py index f171ead28fecd3..33feed60e55b00 100644 --- a/Lib/asyncio/constants.py +++ b/Lib/asyncio/constants.py @@ -15,17 +15,10 @@ # The default timeout matches that of Nginx. SSL_HANDSHAKE_TIMEOUT = 60.0 -# Number of seconds to wait for SSL shutdown to complete -# The default timeout mimics lingering_time -SSL_SHUTDOWN_TIMEOUT = 30.0 - # Used in sendfile fallback code. We use fallback for platforms # that don't support sendfile, or for TLS connections. SENDFILE_FALLBACK_READBUFFER_SIZE = 1024 * 256 -FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB -FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB - # The enum should be here to break circular dependencies between # base_events and sslproto class _SendfileMode(enum.Enum): diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index d5254fa5e7e73e..b966ad26bf467b 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -304,7 +304,6 @@ async def create_connection( flags=0, sock=None, local_addr=None, server_hostname=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, happy_eyeballs_delay=None, interleave=None): raise NotImplementedError @@ -314,7 +313,6 @@ async def create_server( flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, start_serving=True): """A coroutine which creates a TCP server bound to host and port. @@ -355,10 +353,6 @@ async def create_server( will wait for completion of the SSL handshake before aborting the connection. Default is 60s. - ssl_shutdown_timeout is the time in seconds that an SSL server - will wait for completion of the SSL shutdown procedure - before aborting the connection. Default is 30s. - start_serving set to True (default) causes the created server to start accepting connections immediately. When set to False, the user should await Server.start_serving() or Server.serve_forever() @@ -377,8 +371,7 @@ async def sendfile(self, transport, file, offset=0, count=None, async def start_tls(self, transport, protocol, sslcontext, *, server_side=False, server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): """Upgrade a transport to TLS. Return a new transport that *protocol* should start using @@ -390,15 +383,13 @@ async def create_unix_connection( self, protocol_factory, path=None, *, ssl=None, sock=None, server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): raise NotImplementedError async def create_unix_server( self, protocol_factory, path=None, *, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, start_serving=True): """A coroutine which creates a UNIX Domain Socket server. @@ -420,9 +411,6 @@ async def create_unix_server( ssl_handshake_timeout is the time in seconds that an SSL server will wait for the SSL handshake to complete (defaults to 60s). - ssl_shutdown_timeout is the time in seconds that an SSL server - will wait for the SSL shutdown to finish (defaults to 30s). - start_serving set to True (default) causes the created server to start accepting connections immediately. When set to False, the user should await Server.start_serving() or Server.serve_forever() @@ -433,8 +421,7 @@ async def create_unix_server( async def connect_accepted_socket( self, protocol_factory, sock, *, ssl=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): """Handle an accepted connection. This is used by servers that accept connections outside of diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py index 10852afe2b4138..45c11ee4b487ec 100644 --- a/Lib/asyncio/proactor_events.py +++ b/Lib/asyncio/proactor_events.py @@ -642,13 +642,11 @@ def _make_ssl_transport( self, rawsock, protocol, sslcontext, waiter=None, *, server_side=False, server_hostname=None, extra=None, server=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): ssl_protocol = sslproto.SSLProtocol( self, protocol, sslcontext, waiter, server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) _ProactorSocketTransport(self, rawsock, ssl_protocol, extra=extra, server=server) return ssl_protocol._app_transport @@ -814,8 +812,7 @@ def _write_to_self(self): def _start_serving(self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): def loop(f=None): try: @@ -829,8 +826,7 @@ def loop(f=None): self._make_ssl_transport( conn, protocol, sslcontext, server_side=True, extra={'peername': addr}, server=server, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) else: self._make_socket_transport( conn, protocol, diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 63ab15f30fb5d7..59cb6b1babec54 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -70,15 +70,11 @@ def _make_ssl_transport( self, rawsock, protocol, sslcontext, waiter=None, *, server_side=False, server_hostname=None, extra=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT, - ): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): ssl_protocol = sslproto.SSLProtocol( - self, protocol, sslcontext, waiter, - server_side, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout - ) + self, protocol, sslcontext, waiter, + server_side, server_hostname, + ssl_handshake_timeout=ssl_handshake_timeout) _SelectorSocketTransport(self, rawsock, ssl_protocol, extra=extra, server=server) return ssl_protocol._app_transport @@ -150,17 +146,15 @@ def _write_to_self(self): def _start_serving(self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): self._add_reader(sock.fileno(), self._accept_connection, protocol_factory, sock, sslcontext, server, backlog, - ssl_handshake_timeout, ssl_shutdown_timeout) + ssl_handshake_timeout) def _accept_connection( self, protocol_factory, sock, sslcontext=None, server=None, backlog=100, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): # This method is only called once for each event loop tick where the # listening socket has triggered an EVENT_READ. There may be multiple # connections waiting for an .accept() so it is called in a loop. @@ -191,22 +185,20 @@ def _accept_connection( self.call_later(constants.ACCEPT_RETRY_DELAY, self._start_serving, protocol_factory, sock, sslcontext, server, - backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) + backlog, ssl_handshake_timeout) else: raise # The event loop will catch, log and ignore it. else: extra = {'peername': addr} accept = self._accept_connection2( protocol_factory, conn, extra, sslcontext, server, - ssl_handshake_timeout, ssl_shutdown_timeout) + ssl_handshake_timeout) self.create_task(accept) async def _accept_connection2( self, protocol_factory, conn, extra, sslcontext=None, server=None, - ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT, - ssl_shutdown_timeout=constants.SSL_SHUTDOWN_TIMEOUT): + ssl_handshake_timeout=constants.SSL_HANDSHAKE_TIMEOUT): protocol = None transport = None try: @@ -216,8 +208,7 @@ async def _accept_connection2( transport = self._make_ssl_transport( conn, protocol, sslcontext, waiter=waiter, server_side=True, extra=extra, server=server, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) else: transport = self._make_socket_transport( conn, protocol, waiter=waiter, extra=extra, diff --git a/Lib/asyncio/sslproto.py b/Lib/asyncio/sslproto.py index 79734ab63d2e0f..cad25b26539f5a 100644 --- a/Lib/asyncio/sslproto.py +++ b/Lib/asyncio/sslproto.py @@ -1,5 +1,4 @@ import collections -import enum import warnings try: import ssl @@ -7,38 +6,10 @@ ssl = None from . import constants -from . import exceptions from . import protocols from . import transports from .log import logger -if ssl is not None: - SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError) - - -class SSLProtocolState(enum.Enum): - UNWRAPPED = "UNWRAPPED" - DO_HANDSHAKE = "DO_HANDSHAKE" - WRAPPED = "WRAPPED" - FLUSHING = "FLUSHING" - SHUTDOWN = "SHUTDOWN" - - -class AppProtocolState(enum.Enum): - # This tracks the state of app protocol (https://git.io/fj59P): - # - # INIT -cm-> CON_MADE [-dr*->] [-er-> EOF?] -cl-> CON_LOST - # - # * cm: connection_made() - # * dr: data_received() - # * er: eof_received() - # * cl: connection_lost() - - STATE_INIT = "STATE_INIT" - STATE_CON_MADE = "STATE_CON_MADE" - STATE_EOF = "STATE_EOF" - STATE_CON_LOST = "STATE_CON_LOST" - def _create_transport_context(server_side, server_hostname): if server_side: @@ -54,35 +25,269 @@ def _create_transport_context(server_side, server_hostname): return sslcontext -def add_flowcontrol_defaults(high, low, kb): - if high is None: - if low is None: - hi = kb * 1024 - else: - lo = low - hi = 4 * lo - else: - hi = high - if low is None: - lo = hi // 4 - else: - lo = low +# States of an _SSLPipe. +_UNWRAPPED = "UNWRAPPED" +_DO_HANDSHAKE = "DO_HANDSHAKE" +_WRAPPED = "WRAPPED" +_SHUTDOWN = "SHUTDOWN" + + +class _SSLPipe(object): + """An SSL "Pipe". + + An SSL pipe allows you to communicate with an SSL/TLS protocol instance + through memory buffers. It can be used to implement a security layer for an + existing connection where you don't have access to the connection's file + descriptor, or for some reason you don't want to use it. + + An SSL pipe can be in "wrapped" and "unwrapped" mode. In unwrapped mode, + data is passed through untransformed. In wrapped mode, application level + data is encrypted to SSL record level data and vice versa. The SSL record + level is the lowest level in the SSL protocol suite and is what travels + as-is over the wire. + + An SslPipe initially is in "unwrapped" mode. To start SSL, call + do_handshake(). To shutdown SSL again, call unwrap(). + """ + + max_size = 256 * 1024 # Buffer size passed to read() + + def __init__(self, context, server_side, server_hostname=None): + """ + The *context* argument specifies the ssl.SSLContext to use. + + The *server_side* argument indicates whether this is a server side or + client side transport. + + The optional *server_hostname* argument can be used to specify the + hostname you are connecting to. You may only specify this parameter if + the _ssl module supports Server Name Indication (SNI). + """ + self._context = context + self._server_side = server_side + self._server_hostname = server_hostname + self._state = _UNWRAPPED + self._incoming = ssl.MemoryBIO() + self._outgoing = ssl.MemoryBIO() + self._sslobj = None + self._need_ssldata = False + self._handshake_cb = None + self._shutdown_cb = None + + @property + def context(self): + """The SSL context passed to the constructor.""" + return self._context + + @property + def ssl_object(self): + """The internal ssl.SSLObject instance. + + Return None if the pipe is not wrapped. + """ + return self._sslobj + + @property + def need_ssldata(self): + """Whether more record level data is needed to complete a handshake + that is currently in progress.""" + return self._need_ssldata + + @property + def wrapped(self): + """ + Whether a security layer is currently in effect. + + Return False during handshake. + """ + return self._state == _WRAPPED + + def do_handshake(self, callback=None): + """Start the SSL handshake. + + Return a list of ssldata. A ssldata element is a list of buffers + + The optional *callback* argument can be used to install a callback that + will be called when the handshake is complete. The callback will be + called with None if successful, else an exception instance. + """ + if self._state != _UNWRAPPED: + raise RuntimeError('handshake in progress or completed') + self._sslobj = self._context.wrap_bio( + self._incoming, self._outgoing, + server_side=self._server_side, + server_hostname=self._server_hostname) + self._state = _DO_HANDSHAKE + self._handshake_cb = callback + ssldata, appdata = self.feed_ssldata(b'', only_handshake=True) + assert len(appdata) == 0 + return ssldata + + def shutdown(self, callback=None): + """Start the SSL shutdown sequence. + + Return a list of ssldata. A ssldata element is a list of buffers - if not hi >= lo >= 0: - raise ValueError('high (%r) must be >= low (%r) must be >= 0' % - (hi, lo)) + The optional *callback* argument can be used to install a callback that + will be called when the shutdown is complete. The callback will be + called without arguments. + """ + if self._state == _UNWRAPPED: + raise RuntimeError('no security layer present') + if self._state == _SHUTDOWN: + raise RuntimeError('shutdown in progress') + assert self._state in (_WRAPPED, _DO_HANDSHAKE) + self._state = _SHUTDOWN + self._shutdown_cb = callback + ssldata, appdata = self.feed_ssldata(b'') + assert appdata == [] or appdata == [b''] + return ssldata + + def feed_eof(self): + """Send a potentially "ragged" EOF. + + This method will raise an SSL_ERROR_EOF exception if the EOF is + unexpected. + """ + self._incoming.write_eof() + ssldata, appdata = self.feed_ssldata(b'') + assert appdata == [] or appdata == [b''] + + def feed_ssldata(self, data, only_handshake=False): + """Feed SSL record level data into the pipe. + + The data must be a bytes instance. It is OK to send an empty bytes + instance. This can be used to get ssldata for a handshake initiated by + this endpoint. + + Return a (ssldata, appdata) tuple. The ssldata element is a list of + buffers containing SSL data that needs to be sent to the remote SSL. + + The appdata element is a list of buffers containing plaintext data that + needs to be forwarded to the application. The appdata list may contain + an empty buffer indicating an SSL "close_notify" alert. This alert must + be acknowledged by calling shutdown(). + """ + if self._state == _UNWRAPPED: + # If unwrapped, pass plaintext data straight through. + if data: + appdata = [data] + else: + appdata = [] + return ([], appdata) + + self._need_ssldata = False + if data: + self._incoming.write(data) + + ssldata = [] + appdata = [] + try: + if self._state == _DO_HANDSHAKE: + # Call do_handshake() until it doesn't raise anymore. + self._sslobj.do_handshake() + self._state = _WRAPPED + if self._handshake_cb: + self._handshake_cb(None) + if only_handshake: + return (ssldata, appdata) + # Handshake done: execute the wrapped block + + if self._state == _WRAPPED: + # Main state: read data from SSL until close_notify + while True: + chunk = self._sslobj.read(self.max_size) + appdata.append(chunk) + if not chunk: # close_notify + break + + elif self._state == _SHUTDOWN: + # Call shutdown() until it doesn't raise anymore. + self._sslobj.unwrap() + self._sslobj = None + self._state = _UNWRAPPED + if self._shutdown_cb: + self._shutdown_cb() + + elif self._state == _UNWRAPPED: + # Drain possible plaintext data after close_notify. + appdata.append(self._incoming.read()) + except (ssl.SSLError, ssl.CertificateError) as exc: + exc_errno = getattr(exc, 'errno', None) + if exc_errno not in ( + ssl.SSL_ERROR_WANT_READ, ssl.SSL_ERROR_WANT_WRITE, + ssl.SSL_ERROR_SYSCALL): + if self._state == _DO_HANDSHAKE and self._handshake_cb: + self._handshake_cb(exc) + raise + self._need_ssldata = (exc_errno == ssl.SSL_ERROR_WANT_READ) + + # Check for record level data that needs to be sent back. + # Happens for the initial handshake and renegotiations. + if self._outgoing.pending: + ssldata.append(self._outgoing.read()) + return (ssldata, appdata) + + def feed_appdata(self, data, offset=0): + """Feed plaintext data into the pipe. + + Return an (ssldata, offset) tuple. The ssldata element is a list of + buffers containing record level data that needs to be sent to the + remote SSL instance. The offset is the number of plaintext bytes that + were processed, which may be less than the length of data. + + NOTE: In case of short writes, this call MUST be retried with the SAME + buffer passed into the *data* argument (i.e. the id() must be the + same). This is an OpenSSL requirement. A further particularity is that + a short write will always have offset == 0, because the _ssl module + does not enable partial writes. And even though the offset is zero, + there will still be encrypted data in ssldata. + """ + assert 0 <= offset <= len(data) + if self._state == _UNWRAPPED: + # pass through data in unwrapped mode + if offset < len(data): + ssldata = [data[offset:]] + else: + ssldata = [] + return (ssldata, len(data)) - return hi, lo + ssldata = [] + view = memoryview(data) + while True: + self._need_ssldata = False + try: + if offset < len(view): + offset += self._sslobj.write(view[offset:]) + except ssl.SSLError as exc: + # It is not allowed to call write() after unwrap() until the + # close_notify is acknowledged. We return the condition to the + # caller as a short write. + exc_errno = getattr(exc, 'errno', None) + if exc.reason == 'PROTOCOL_IS_SHUTDOWN': + exc_errno = exc.errno = ssl.SSL_ERROR_WANT_READ + if exc_errno not in (ssl.SSL_ERROR_WANT_READ, + ssl.SSL_ERROR_WANT_WRITE, + ssl.SSL_ERROR_SYSCALL): + raise + self._need_ssldata = (exc_errno == ssl.SSL_ERROR_WANT_READ) + + # See if there's any record level data back for us. + if self._outgoing.pending: + ssldata.append(self._outgoing.read()) + if offset == len(view) or self._need_ssldata: + break + return (ssldata, offset) class _SSLProtocolTransport(transports._FlowControlMixin, transports.Transport): - _start_tls_compatible = True _sendfile_compatible = constants._SendfileMode.FALLBACK def __init__(self, loop, ssl_protocol): self._loop = loop + # SSLProtocol instance self._ssl_protocol = ssl_protocol self._closed = False @@ -110,15 +315,16 @@ def close(self): self._closed = True self._ssl_protocol._start_shutdown() - def __del__(self, _warnings=warnings): + def __del__(self, _warn=warnings.warn): if not self._closed: - self._closed = True - _warnings.warn( - "unclosed transport ", ResourceWarning) + _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) + self.close() def is_reading(self): - return not self._ssl_protocol._app_reading_paused + tr = self._ssl_protocol._transport + if tr is None: + raise RuntimeError('SSL transport has not been initialized yet') + return tr.is_reading() def pause_reading(self): """Pause the receiving end. @@ -126,7 +332,7 @@ def pause_reading(self): No data will be passed to the protocol's data_received() method until resume_reading() is called. """ - self._ssl_protocol._pause_reading() + self._ssl_protocol._transport.pause_reading() def resume_reading(self): """Resume the receiving end. @@ -134,7 +340,7 @@ def resume_reading(self): Data received will once again be passed to the protocol's data_received() method. """ - self._ssl_protocol._resume_reading() + self._ssl_protocol._transport.resume_reading() def set_write_buffer_limits(self, high=None, low=None): """Set the high- and low-water limits for write flow control. @@ -155,51 +361,16 @@ def set_write_buffer_limits(self, high=None, low=None): reduces opportunities for doing I/O and computation concurrently. """ - self._ssl_protocol._set_write_buffer_limits(high, low) - self._ssl_protocol._control_app_writing() - - def get_write_buffer_limits(self): - return (self._ssl_protocol._outgoing_low_water, - self._ssl_protocol._outgoing_high_water) + self._ssl_protocol._transport.set_write_buffer_limits(high, low) def get_write_buffer_size(self): - """Return the current size of the write buffers.""" - return self._ssl_protocol._get_write_buffer_size() - - def set_read_buffer_limits(self, high=None, low=None): - """Set the high- and low-water limits for read flow control. - - These two values control when to call the upstream transport's - pause_reading() and resume_reading() methods. If specified, - the low-water limit must be less than or equal to the - high-water limit. Neither value can be negative. - - The defaults are implementation-specific. If only the - high-water limit is given, the low-water limit defaults to an - implementation-specific value less than or equal to the - high-water limit. Setting high to zero forces low to zero as - well, and causes pause_reading() to be called whenever the - buffer becomes non-empty. Setting low to zero causes - resume_reading() to be called only once the buffer is empty. - Use of zero for either limit is generally sub-optimal as it - reduces opportunities for doing I/O and computation - concurrently. - """ - self._ssl_protocol._set_read_buffer_limits(high, low) - self._ssl_protocol._control_ssl_reading() - - def get_read_buffer_limits(self): - return (self._ssl_protocol._incoming_low_water, - self._ssl_protocol._incoming_high_water) - - def get_read_buffer_size(self): - """Return the current size of the read buffer.""" - return self._ssl_protocol._get_read_buffer_size() + """Return the current size of the write buffer.""" + return self._ssl_protocol._transport.get_write_buffer_size() @property def _protocol_paused(self): # Required for sendfile fallback pause_writing/resume_writing logic - return self._ssl_protocol._app_writing_paused + return self._ssl_protocol._transport._protocol_paused def write(self, data): """Write some data bytes to the transport. @@ -212,22 +383,7 @@ def write(self, data): f"got {type(data).__name__}") if not data: return - self._ssl_protocol._write_appdata((data,)) - - def writelines(self, list_of_data): - """Write a list (or any iterable) of data bytes to the transport. - - The default implementation concatenates the arguments and - calls write() on the result. - """ - self._ssl_protocol._write_appdata(list_of_data) - - def write_eof(self): - """Close the write end after flushing buffered data. - - This raises :exc:`NotImplementedError` right now. - """ - raise NotImplementedError + self._ssl_protocol._write_appdata(data) def can_write_eof(self): """Return True if this transport supports write_eof(), False if not.""" @@ -240,36 +396,23 @@ def abort(self): The protocol's connection_lost() method will (eventually) be called with None as its argument. """ - self._closed = True self._ssl_protocol._abort() - - def _force_close(self, exc): self._closed = True - self._ssl_protocol._abort(exc) - def _test__append_write_backlog(self, data): - # for test only - self._ssl_protocol._write_backlog.append(data) - self._ssl_protocol._write_buffer_size += len(data) +class SSLProtocol(protocols.Protocol): + """SSL protocol. -class SSLProtocol(protocols.BufferedProtocol): - max_size = 256 * 1024 # Buffer size passed to read() - - _handshake_start_time = None - _handshake_timeout_handle = None - _shutdown_timeout_handle = None + Implementation of SSL on top of a socket using incoming and outgoing + buffers which are ssl.MemoryBIO objects. + """ def __init__(self, loop, app_protocol, sslcontext, waiter, server_side=False, server_hostname=None, call_connection_made=True, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): if ssl is None: - raise RuntimeError("stdlib ssl module not available") - - self._ssl_buffer = bytearray(self.max_size) - self._ssl_buffer_view = memoryview(self._ssl_buffer) + raise RuntimeError('stdlib ssl module not available') if ssl_handshake_timeout is None: ssl_handshake_timeout = constants.SSL_HANDSHAKE_TIMEOUT @@ -277,12 +420,6 @@ def __init__(self, loop, app_protocol, sslcontext, waiter, raise ValueError( f"ssl_handshake_timeout should be a positive number, " f"got {ssl_handshake_timeout}") - if ssl_shutdown_timeout is None: - ssl_shutdown_timeout = constants.SSL_SHUTDOWN_TIMEOUT - elif ssl_shutdown_timeout <= 0: - raise ValueError( - f"ssl_shutdown_timeout should be a positive number, " - f"got {ssl_shutdown_timeout}") if not sslcontext: sslcontext = _create_transport_context( @@ -305,54 +442,21 @@ def __init__(self, loop, app_protocol, sslcontext, waiter, self._waiter = waiter self._loop = loop self._set_app_protocol(app_protocol) - self._app_transport = None - self._app_transport_created = False + self._app_transport = _SSLProtocolTransport(self._loop, self) + # _SSLPipe instance (None until the connection is made) + self._sslpipe = None + self._session_established = False + self._in_handshake = False + self._in_shutdown = False # transport, ex: SelectorSocketTransport self._transport = None + self._call_connection_made = call_connection_made self._ssl_handshake_timeout = ssl_handshake_timeout - self._ssl_shutdown_timeout = ssl_shutdown_timeout - # SSL and state machine - self._incoming = ssl.MemoryBIO() - self._outgoing = ssl.MemoryBIO() - self._state = SSLProtocolState.UNWRAPPED - self._conn_lost = 0 # Set when connection_lost called - if call_connection_made: - self._app_state = AppProtocolState.STATE_INIT - else: - self._app_state = AppProtocolState.STATE_CON_MADE - self._sslobj = self._sslcontext.wrap_bio( - self._incoming, self._outgoing, - server_side=self._server_side, - server_hostname=self._server_hostname) - - # Flow Control - - self._ssl_writing_paused = False - - self._app_reading_paused = False - - self._ssl_reading_paused = False - self._incoming_high_water = 0 - self._incoming_low_water = 0 - self._set_read_buffer_limits() - self._eof_received = False - - self._app_writing_paused = False - self._outgoing_high_water = 0 - self._outgoing_low_water = 0 - self._set_write_buffer_limits() - self._get_app_transport() def _set_app_protocol(self, app_protocol): self._app_protocol = app_protocol - # Make fast hasattr check first - if (hasattr(app_protocol, 'get_buffer') and - isinstance(app_protocol, protocols.BufferedProtocol)): - self._app_protocol_get_buffer = app_protocol.get_buffer - self._app_protocol_buffer_updated = app_protocol.buffer_updated - self._app_protocol_is_buffer = True - else: - self._app_protocol_is_buffer = False + self._app_protocol_is_buffer = \ + isinstance(app_protocol, protocols.BufferedProtocol) def _wakeup_waiter(self, exc=None): if self._waiter is None: @@ -364,20 +468,15 @@ def _wakeup_waiter(self, exc=None): self._waiter.set_result(None) self._waiter = None - def _get_app_transport(self): - if self._app_transport is None: - if self._app_transport_created: - raise RuntimeError('Creating _SSLProtocolTransport twice') - self._app_transport = _SSLProtocolTransport(self._loop, self) - self._app_transport_created = True - return self._app_transport - def connection_made(self, transport): """Called when the low-level connection is made. Start the SSL handshake. """ self._transport = transport + self._sslpipe = _SSLPipe(self._sslcontext, + self._server_side, + self._server_hostname) self._start_handshake() def connection_lost(self, exc): @@ -387,58 +486,72 @@ def connection_lost(self, exc): meaning a regular EOF is received or the connection was aborted or closed). """ - self._write_backlog.clear() - self._outgoing.read() - self._conn_lost += 1 - - # Just mark the app transport as closed so that its __dealloc__ - # doesn't complain. - if self._app_transport is not None: - self._app_transport._closed = True - - if self._state != SSLProtocolState.DO_HANDSHAKE: - if ( - self._app_state == AppProtocolState.STATE_CON_MADE or - self._app_state == AppProtocolState.STATE_EOF - ): - self._app_state = AppProtocolState.STATE_CON_LOST - self._loop.call_soon(self._app_protocol.connection_lost, exc) - self._set_state(SSLProtocolState.UNWRAPPED) + if self._session_established: + self._session_established = False + self._loop.call_soon(self._app_protocol.connection_lost, exc) + else: + # Most likely an exception occurred while in SSL handshake. + # Just mark the app transport as closed so that its __del__ + # doesn't complain. + if self._app_transport is not None: + self._app_transport._closed = True self._transport = None self._app_transport = None - self._app_protocol = None + if getattr(self, '_handshake_timeout_handle', None): + self._handshake_timeout_handle.cancel() self._wakeup_waiter(exc) + self._app_protocol = None + self._sslpipe = None - if self._shutdown_timeout_handle: - self._shutdown_timeout_handle.cancel() - self._shutdown_timeout_handle = None - if self._handshake_timeout_handle: - self._handshake_timeout_handle.cancel() - self._handshake_timeout_handle = None + def pause_writing(self): + """Called when the low-level transport's buffer goes over + the high-water mark. + """ + self._app_protocol.pause_writing() - def get_buffer(self, n): - want = n - if want <= 0 or want > self.max_size: - want = self.max_size - if len(self._ssl_buffer) < want: - self._ssl_buffer = bytearray(want) - self._ssl_buffer_view = memoryview(self._ssl_buffer) - return self._ssl_buffer_view + def resume_writing(self): + """Called when the low-level transport's buffer drains below + the low-water mark. + """ + self._app_protocol.resume_writing() - def buffer_updated(self, nbytes): - self._incoming.write(self._ssl_buffer_view[:nbytes]) + def data_received(self, data): + """Called when some SSL data is received. - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._do_handshake() + The argument is a bytes object. + """ + if self._sslpipe is None: + # transport closing, sslpipe is destroyed + return - elif self._state == SSLProtocolState.WRAPPED: - self._do_read() + try: + ssldata, appdata = self._sslpipe.feed_ssldata(data) + except (SystemExit, KeyboardInterrupt): + raise + except BaseException as e: + self._fatal_error(e, 'SSL error in data received') + return - elif self._state == SSLProtocolState.FLUSHING: - self._do_flush() + for chunk in ssldata: + self._transport.write(chunk) - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() + for chunk in appdata: + if chunk: + try: + if self._app_protocol_is_buffer: + protocols._feed_data_to_buffered_proto( + self._app_protocol, chunk) + else: + self._app_protocol.data_received(chunk) + except (SystemExit, KeyboardInterrupt): + raise + except BaseException as ex: + self._fatal_error( + ex, 'application protocol failed to receive SSL data') + return + else: + self._start_shutdown() + break def eof_received(self): """Called when the other end of the low-level stream @@ -448,32 +561,19 @@ def eof_received(self): will close itself. If it returns a true value, closing the transport is up to the protocol. """ - self._eof_received = True try: if self._loop.get_debug(): logger.debug("%r received EOF", self) - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._on_handshake_complete(ConnectionResetError) - - elif self._state == SSLProtocolState.WRAPPED: - self._set_state(SSLProtocolState.FLUSHING) - if self._app_reading_paused: - return True - else: - self._do_flush() - - elif self._state == SSLProtocolState.FLUSHING: - self._do_write() - self._set_state(SSLProtocolState.SHUTDOWN) - self._do_shutdown() + self._wakeup_waiter(ConnectionResetError) - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() - - except Exception: + if not self._in_handshake: + keep_open = self._app_protocol.eof_received() + if keep_open: + logger.warning('returning true from eof_received() ' + 'has no effect when using ssl') + finally: self._transport.close() - raise def _get_extra_info(self, name, default=None): if name in self._extra: @@ -483,45 +583,19 @@ def _get_extra_info(self, name, default=None): else: return default - def _set_state(self, new_state): - allowed = False - - if new_state == SSLProtocolState.UNWRAPPED: - allowed = True - - elif ( - self._state == SSLProtocolState.UNWRAPPED and - new_state == SSLProtocolState.DO_HANDSHAKE - ): - allowed = True - - elif ( - self._state == SSLProtocolState.DO_HANDSHAKE and - new_state == SSLProtocolState.WRAPPED - ): - allowed = True - - elif ( - self._state == SSLProtocolState.WRAPPED and - new_state == SSLProtocolState.FLUSHING - ): - allowed = True - - elif ( - self._state == SSLProtocolState.FLUSHING and - new_state == SSLProtocolState.SHUTDOWN - ): - allowed = True - - if allowed: - self._state = new_state - + def _start_shutdown(self): + if self._in_shutdown: + return + if self._in_handshake: + self._abort() else: - raise RuntimeError( - 'cannot switch state from {} to {}'.format( - self._state, new_state)) + self._in_shutdown = True + self._write_appdata(b'') - # Handshake flow + def _write_appdata(self, data): + self._write_backlog.append((data, 0)) + self._write_buffer_size += len(data) + self._process_write_backlog() def _start_handshake(self): if self._loop.get_debug(): @@ -529,18 +603,17 @@ def _start_handshake(self): self._handshake_start_time = self._loop.time() else: self._handshake_start_time = None - - self._set_state(SSLProtocolState.DO_HANDSHAKE) - - # start handshake timeout count down + self._in_handshake = True + # (b'', 1) is a special value in _process_write_backlog() to do + # the SSL handshake + self._write_backlog.append((b'', 1)) self._handshake_timeout_handle = \ self._loop.call_later(self._ssl_handshake_timeout, - lambda: self._check_handshake_timeout()) - - self._do_handshake() + self._check_handshake_timeout) + self._process_write_backlog() def _check_handshake_timeout(self): - if self._state == SSLProtocolState.DO_HANDSHAKE: + if self._in_handshake is True: msg = ( f"SSL handshake is taking longer than " f"{self._ssl_handshake_timeout} seconds: " @@ -548,37 +621,24 @@ def _check_handshake_timeout(self): ) self._fatal_error(ConnectionAbortedError(msg)) - def _do_handshake(self): - try: - self._sslobj.do_handshake() - except SSLAgainErrors: - self._process_outgoing() - except ssl.SSLError as exc: - self._on_handshake_complete(exc) - else: - self._on_handshake_complete(None) - def _on_handshake_complete(self, handshake_exc): - if self._handshake_timeout_handle is not None: - self._handshake_timeout_handle.cancel() - self._handshake_timeout_handle = None + self._in_handshake = False + self._handshake_timeout_handle.cancel() - sslobj = self._sslobj + sslobj = self._sslpipe.ssl_object try: - if handshake_exc is None: - self._set_state(SSLProtocolState.WRAPPED) - else: + if handshake_exc is not None: raise handshake_exc peercert = sslobj.getpeercert() - except Exception as exc: - self._set_state(SSLProtocolState.UNWRAPPED) + except (SystemExit, KeyboardInterrupt): + raise + except BaseException as exc: if isinstance(exc, ssl.CertificateError): msg = 'SSL handshake failed on verifying the certificate' else: msg = 'SSL handshake failed' self._fatal_error(exc, msg) - self._wakeup_waiter(exc) return if self._loop.get_debug(): @@ -589,330 +649,85 @@ def _on_handshake_complete(self, handshake_exc): self._extra.update(peercert=peercert, cipher=sslobj.cipher(), compression=sslobj.compression(), - ssl_object=sslobj) - if self._app_state == AppProtocolState.STATE_INIT: - self._app_state = AppProtocolState.STATE_CON_MADE - self._app_protocol.connection_made(self._get_app_transport()) + ssl_object=sslobj, + ) + if self._call_connection_made: + self._app_protocol.connection_made(self._app_transport) self._wakeup_waiter() - self._do_read() - - # Shutdown flow - - def _start_shutdown(self): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN, - SSLProtocolState.UNWRAPPED - ) - ): - return - if self._app_transport is not None: - self._app_transport._closed = True - if self._state == SSLProtocolState.DO_HANDSHAKE: - self._abort() - else: - self._set_state(SSLProtocolState.FLUSHING) - self._shutdown_timeout_handle = self._loop.call_later( - self._ssl_shutdown_timeout, - lambda: self._check_shutdown_timeout() - ) - self._do_flush() - - def _check_shutdown_timeout(self): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN - ) - ): - self._transport._force_close( - exceptions.TimeoutError('SSL shutdown timed out')) - - def _do_flush(self): - self._do_read() - self._set_state(SSLProtocolState.SHUTDOWN) - self._do_shutdown() - - def _do_shutdown(self): - try: - if not self._eof_received: - self._sslobj.unwrap() - except SSLAgainErrors: - self._process_outgoing() - except ssl.SSLError as exc: - self._on_shutdown_complete(exc) - else: - self._process_outgoing() - self._call_eof_received() - self._on_shutdown_complete(None) - - def _on_shutdown_complete(self, shutdown_exc): - if self._shutdown_timeout_handle is not None: - self._shutdown_timeout_handle.cancel() - self._shutdown_timeout_handle = None - - if shutdown_exc: - self._fatal_error(shutdown_exc) - else: - self._loop.call_soon(self._transport.close) - - def _abort(self): - self._set_state(SSLProtocolState.UNWRAPPED) - if self._transport is not None: - self._transport.abort() - - # Outgoing flow - - def _write_appdata(self, list_of_data): - if ( - self._state in ( - SSLProtocolState.FLUSHING, - SSLProtocolState.SHUTDOWN, - SSLProtocolState.UNWRAPPED - ) - ): - if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: - logger.warning('SSL connection is closed') - self._conn_lost += 1 + self._session_established = True + # In case transport.write() was already called. Don't call + # immediately _process_write_backlog(), but schedule it: + # _on_handshake_complete() can be called indirectly from + # _process_write_backlog(), and _process_write_backlog() is not + # reentrant. + self._loop.call_soon(self._process_write_backlog) + + def _process_write_backlog(self): + # Try to make progress on the write backlog. + if self._transport is None or self._sslpipe is None: return - for data in list_of_data: - self._write_backlog.append(data) - self._write_buffer_size += len(data) - try: - if self._state == SSLProtocolState.WRAPPED: - self._do_write() - - except Exception as ex: - self._fatal_error(ex, 'Fatal error on SSL protocol') - - def _do_write(self): - try: - while self._write_backlog: - data = self._write_backlog[0] - count = self._sslobj.write(data) - data_len = len(data) - if count < data_len: - self._write_backlog[0] = data[count:] - self._write_buffer_size -= count + for i in range(len(self._write_backlog)): + data, offset = self._write_backlog[0] + if data: + ssldata, offset = self._sslpipe.feed_appdata(data, offset) + elif offset: + ssldata = self._sslpipe.do_handshake( + self._on_handshake_complete) + offset = 1 else: - del self._write_backlog[0] - self._write_buffer_size -= data_len - except SSLAgainErrors: - pass - self._process_outgoing() - - def _process_outgoing(self): - if not self._ssl_writing_paused: - data = self._outgoing.read() - if len(data): - self._transport.write(data) - self._control_app_writing() - - # Incoming flow - - def _do_read(self): - if ( - self._state not in ( - SSLProtocolState.WRAPPED, - SSLProtocolState.FLUSHING, - ) - ): - return - try: - if not self._app_reading_paused: - if self._app_protocol_is_buffer: - self._do_read__buffered() - else: - self._do_read__copied() - if self._write_backlog: - self._do_write() - else: - self._process_outgoing() - self._control_ssl_reading() - except Exception as ex: - self._fatal_error(ex, 'Fatal error on SSL protocol') - - def _do_read__buffered(self): - offset = 0 - count = 1 - - buf = self._app_protocol_get_buffer(self._get_read_buffer_size()) - wants = len(buf) - - try: - count = self._sslobj.read(wants, buf) - - if count > 0: - offset = count - while offset < wants: - count = self._sslobj.read(wants - offset, buf[offset:]) - if count > 0: - offset += count - else: - break - else: - self._loop.call_soon(lambda: self._do_read()) - except SSLAgainErrors: - pass - if offset > 0: - self._app_protocol_buffer_updated(offset) - if not count: - # close_notify - self._call_eof_received() - self._start_shutdown() - - def _do_read__copied(self): - chunk = b'1' - zero = True - one = False - - try: - while True: - chunk = self._sslobj.read(self.max_size) - if not chunk: + ssldata = self._sslpipe.shutdown(self._finalize) + offset = 1 + + for chunk in ssldata: + self._transport.write(chunk) + + if offset < len(data): + self._write_backlog[0] = (data, offset) + # A short write means that a write is blocked on a read + # We need to enable reading if it is paused! + assert self._sslpipe.need_ssldata + if self._transport._paused: + self._transport.resume_reading() break - if zero: - zero = False - one = True - first = chunk - elif one: - one = False - data = [first, chunk] - else: - data.append(chunk) - except SSLAgainErrors: - pass - if one: - self._app_protocol.data_received(first) - elif not zero: - self._app_protocol.data_received(b''.join(data)) - if not chunk: - # close_notify - self._call_eof_received() - self._start_shutdown() - - def _call_eof_received(self): - try: - if self._app_state == AppProtocolState.STATE_CON_MADE: - self._app_state = AppProtocolState.STATE_EOF - keep_open = self._app_protocol.eof_received() - if keep_open: - logger.warning('returning true from eof_received() ' - 'has no effect when using ssl') - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as ex: - self._fatal_error(ex, 'Error calling eof_received()') - - # Flow control for writes from APP socket - def _control_app_writing(self): - size = self._get_write_buffer_size() - if size >= self._outgoing_high_water and not self._app_writing_paused: - self._app_writing_paused = True - try: - self._app_protocol.pause_writing() - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.pause_writing() failed', - 'exception': exc, - 'transport': self._app_transport, - 'protocol': self, - }) - elif size <= self._outgoing_low_water and self._app_writing_paused: - self._app_writing_paused = False - try: - self._app_protocol.resume_writing() - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as exc: - self._loop.call_exception_handler({ - 'message': 'protocol.resume_writing() failed', - 'exception': exc, - 'transport': self._app_transport, - 'protocol': self, - }) - - def _get_write_buffer_size(self): - return self._outgoing.pending + self._write_buffer_size - - def _set_write_buffer_limits(self, high=None, low=None): - high, low = add_flowcontrol_defaults( - high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_WRITE) - self._outgoing_high_water = high - self._outgoing_low_water = low - - # Flow control for reads to APP socket - - def _pause_reading(self): - self._app_reading_paused = True - - def _resume_reading(self): - if self._app_reading_paused: - self._app_reading_paused = False - - def resume(): - if self._state == SSLProtocolState.WRAPPED: - self._do_read() - elif self._state == SSLProtocolState.FLUSHING: - self._do_flush() - elif self._state == SSLProtocolState.SHUTDOWN: - self._do_shutdown() - self._loop.call_soon(resume) - - # Flow control for reads from SSL socket - - def _control_ssl_reading(self): - size = self._get_read_buffer_size() - if size >= self._incoming_high_water and not self._ssl_reading_paused: - self._ssl_reading_paused = True - self._transport.pause_reading() - elif size <= self._incoming_low_water and self._ssl_reading_paused: - self._ssl_reading_paused = False - self._transport.resume_reading() - - def _set_read_buffer_limits(self, high=None, low=None): - high, low = add_flowcontrol_defaults( - high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_READ) - self._incoming_high_water = high - self._incoming_low_water = low - - def _get_read_buffer_size(self): - return self._incoming.pending - - # Flow control for writes to SSL socket - - def pause_writing(self): - """Called when the low-level transport's buffer goes over - the high-water mark. - """ - assert not self._ssl_writing_paused - self._ssl_writing_paused = True - - def resume_writing(self): - """Called when the low-level transport's buffer drains below - the low-water mark. - """ - assert self._ssl_writing_paused - self._ssl_writing_paused = False - self._process_outgoing() + # An entire chunk from the backlog was processed. We can + # delete it and reduce the outstanding buffer size. + del self._write_backlog[0] + self._write_buffer_size -= len(data) + except (SystemExit, KeyboardInterrupt): + raise + except BaseException as exc: + if self._in_handshake: + # Exceptions will be re-raised in _on_handshake_complete. + self._on_handshake_complete(exc) + else: + self._fatal_error(exc, 'Fatal error on SSL transport') def _fatal_error(self, exc, message='Fatal error on transport'): - if self._transport: - self._transport._force_close(exc) - if isinstance(exc, OSError): if self._loop.get_debug(): logger.debug("%r: %s", self, message, exc_info=True) - elif not isinstance(exc, exceptions.CancelledError): + else: self._loop.call_exception_handler({ 'message': message, 'exception': exc, 'transport': self._transport, 'protocol': self, }) + if self._transport: + self._transport._force_close(exc) + + def _finalize(self): + self._sslpipe = None + + if self._transport is not None: + self._transport.close() + + def _abort(self): + try: + if self._transport is not None: + self._transport.abort() + finally: + self._finalize() diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index 181e1885152fab..a55b3a375fa22d 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -229,8 +229,7 @@ async def create_unix_connection( self, protocol_factory, path=None, *, ssl=None, sock=None, server_hostname=None, - ssl_handshake_timeout=None, - ssl_shutdown_timeout=None): + ssl_handshake_timeout=None): assert server_hostname is None or isinstance(server_hostname, str) if ssl: if server_hostname is None: @@ -242,9 +241,6 @@ async def create_unix_connection( if ssl_handshake_timeout is not None: raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') if path is not None: if sock is not None: @@ -271,15 +267,13 @@ async def create_unix_connection( transport, protocol = await self._create_connection_transport( sock, protocol_factory, ssl, server_hostname, - ssl_handshake_timeout=ssl_handshake_timeout, - ssl_shutdown_timeout=ssl_shutdown_timeout) + ssl_handshake_timeout=ssl_handshake_timeout) return transport, protocol async def create_unix_server( self, protocol_factory, path=None, *, sock=None, backlog=100, ssl=None, ssl_handshake_timeout=None, - ssl_shutdown_timeout=None, start_serving=True): if isinstance(ssl, bool): raise TypeError('ssl argument must be an SSLContext or None') @@ -288,10 +282,6 @@ async def create_unix_server( raise ValueError( 'ssl_handshake_timeout is only meaningful with ssl') - if ssl_shutdown_timeout is not None and not ssl: - raise ValueError( - 'ssl_shutdown_timeout is only meaningful with ssl') - if path is not None: if sock is not None: raise ValueError( @@ -338,8 +328,7 @@ async def create_unix_server( sock.setblocking(False) server = base_events.Server(self, [sock], protocol_factory, - ssl, backlog, ssl_handshake_timeout, - ssl_shutdown_timeout) + ssl, backlog, ssl_handshake_timeout) if start_serving: server._start_serving() # Skip one loop iteration so that all 'loop.add_reader' diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index be5ea1e3c738da..5691d4250aca9e 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -1437,51 +1437,44 @@ def mock_make_ssl_transport(sock, protocol, sslcontext, waiter, self.loop._make_ssl_transport.side_effect = mock_make_ssl_transport ANY = mock.ANY handshake_timeout = object() - shutdown_timeout = object() # First try the default server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='python.org', - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) # Next try an explicit server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, server_hostname='perl.com', - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='perl.com', - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) # Finally try an explicit empty server_hostname. self.loop._make_ssl_transport.reset_mock() coro = self.loop.create_connection( MyProto, 'python.org', 80, ssl=True, server_hostname='', - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) transport, _ = self.loop.run_until_complete(coro) transport.close() self.loop._make_ssl_transport.assert_called_with( ANY, ANY, ANY, ANY, server_side=False, server_hostname='', - ssl_handshake_timeout=handshake_timeout, - ssl_shutdown_timeout=shutdown_timeout) + ssl_handshake_timeout=handshake_timeout) def test_create_connection_no_ssl_server_hostname_errors(self): # When not using ssl, server_hostname must be None. @@ -1888,7 +1881,7 @@ def test_accept_connection_exception(self, m_log): constants.ACCEPT_RETRY_DELAY, # self.loop._start_serving mock.ANY, - MyProto, sock, None, None, mock.ANY, mock.ANY, mock.ANY) + MyProto, sock, None, None, mock.ANY, mock.ANY) def test_call_coroutine(self): with self.assertWarns(DeprecationWarning): diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py index 349e4f2dca0634..1613c753c26ee5 100644 --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -70,6 +70,44 @@ def test_make_socket_transport(self): close_transport(transport) + @unittest.skipIf(ssl is None, 'No ssl module') + def test_make_ssl_transport(self): + m = mock.Mock() + self.loop._add_reader = mock.Mock() + self.loop._add_reader._is_coroutine = False + self.loop._add_writer = mock.Mock() + self.loop._remove_reader = mock.Mock() + self.loop._remove_writer = mock.Mock() + waiter = self.loop.create_future() + with test_utils.disable_logger(): + transport = self.loop._make_ssl_transport( + m, asyncio.Protocol(), m, waiter) + + with self.assertRaisesRegex(RuntimeError, + r'SSL transport.*not.*initialized'): + transport.is_reading() + + # execute the handshake while the logger is disabled + # to ignore SSL handshake failure + test_utils.run_briefly(self.loop) + + self.assertTrue(transport.is_reading()) + transport.pause_reading() + transport.pause_reading() + self.assertFalse(transport.is_reading()) + transport.resume_reading() + transport.resume_reading() + self.assertTrue(transport.is_reading()) + + # Sanity check + class_name = transport.__class__.__name__ + self.assertIn("ssl", class_name.lower()) + self.assertIn("transport", class_name.lower()) + + transport.close() + # execute pending callbacks to close the socket transport + test_utils.run_briefly(self.loop) + @mock.patch('asyncio.selector_events.ssl', None) @mock.patch('asyncio.sslproto.ssl', None) def test_make_ssl_transport_without_ssl_error(self): diff --git a/Lib/test/test_asyncio/test_ssl.py b/Lib/test/test_asyncio/test_ssl.py deleted file mode 100644 index 9cdd281221c57a..00000000000000 --- a/Lib/test/test_asyncio/test_ssl.py +++ /dev/null @@ -1,1723 +0,0 @@ -import asyncio -import asyncio.sslproto -import contextlib -import gc -import logging -import select -import socket -import tempfile -import threading -import time -import weakref -import unittest - -try: - import ssl -except ImportError: - ssl = None - -from test import support -from test.test_asyncio import utils as test_utils - - -def tearDownModule(): - asyncio.set_event_loop_policy(None) - - -class MyBaseProto(asyncio.Protocol): - connected = None - done = None - - def __init__(self, loop=None): - self.transport = None - self.state = 'INITIAL' - self.nbytes = 0 - if loop is not None: - self.connected = asyncio.Future(loop=loop) - self.done = asyncio.Future(loop=loop) - - def connection_made(self, transport): - self.transport = transport - assert self.state == 'INITIAL', self.state - self.state = 'CONNECTED' - if self.connected: - self.connected.set_result(None) - - def data_received(self, data): - assert self.state == 'CONNECTED', self.state - self.nbytes += len(data) - - def eof_received(self): - assert self.state == 'CONNECTED', self.state - self.state = 'EOF' - - def connection_lost(self, exc): - assert self.state in ('CONNECTED', 'EOF'), self.state - self.state = 'CLOSED' - if self.done: - self.done.set_result(None) - - - at unittest.skipIf(ssl is None, 'No ssl module') -class TestSSL(test_utils.TestCase): - - PAYLOAD_SIZE = 1024 * 100 - TIMEOUT = 60 - - def setUp(self): - super().setUp() - self.loop = asyncio.new_event_loop() - self.set_event_loop(self.loop) - self.addCleanup(self.loop.close) - - def tearDown(self): - # just in case if we have transport close callbacks - if not self.loop.is_closed(): - test_utils.run_briefly(self.loop) - - self.doCleanups() - support.gc_collect() - super().tearDown() - - def tcp_server(self, server_prog, *, - family=socket.AF_INET, - addr=None, - timeout=5, - backlog=1, - max_clients=10): - - if addr is None: - if family == getattr(socket, "AF_UNIX", None): - with tempfile.NamedTemporaryFile() as tmp: - addr = tmp.name - else: - addr = ('127.0.0.1', 0) - - sock = socket.socket(family, socket.SOCK_STREAM) - - if timeout is None: - raise RuntimeError('timeout is required') - if timeout <= 0: - raise RuntimeError('only blocking sockets are supported') - sock.settimeout(timeout) - - try: - sock.bind(addr) - sock.listen(backlog) - except OSError as ex: - sock.close() - raise ex - - return TestThreadedServer( - self, sock, server_prog, timeout, max_clients) - - def tcp_client(self, client_prog, - family=socket.AF_INET, - timeout=10): - - sock = socket.socket(family, socket.SOCK_STREAM) - - if timeout is None: - raise RuntimeError('timeout is required') - if timeout <= 0: - raise RuntimeError('only blocking sockets are supported') - sock.settimeout(timeout) - - return TestThreadedClient( - self, sock, client_prog, timeout) - - def unix_server(self, *args, **kwargs): - return self.tcp_server(*args, family=socket.AF_UNIX, **kwargs) - - def unix_client(self, *args, **kwargs): - return self.tcp_client(*args, family=socket.AF_UNIX, **kwargs) - - def _create_server_ssl_context(self, certfile, keyfile=None): - sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) - sslcontext.options |= ssl.OP_NO_SSLv2 - sslcontext.load_cert_chain(certfile, keyfile) - return sslcontext - - def _create_client_ssl_context(self, *, disable_verify=True): - sslcontext = ssl.create_default_context() - sslcontext.check_hostname = False - if disable_verify: - sslcontext.verify_mode = ssl.CERT_NONE - return sslcontext - - @contextlib.contextmanager - def _silence_eof_received_warning(self): - # TODO This warning has to be fixed in asyncio. - logger = logging.getLogger('asyncio') - filter = logging.Filter('has no effect when using ssl') - logger.addFilter(filter) - try: - yield - finally: - logger.removeFilter(filter) - - def _abort_socket_test(self, ex): - try: - self.loop.stop() - finally: - self.fail(ex) - - def new_loop(self): - return asyncio.new_event_loop() - - def new_policy(self): - return asyncio.DefaultEventLoopPolicy() - - async def wait_closed(self, obj): - if not isinstance(obj, asyncio.StreamWriter): - return - try: - await obj.wait_closed() - except (BrokenPipeError, ConnectionError): - pass - - def test_create_server_ssl_1(self): - CNT = 0 # number of clients that were successful - TOTAL_CNT = 25 # total number of clients that test will create - TIMEOUT = 60.0 # timeout for this test - - A_DATA = b'A' * 1024 * 1024 - B_DATA = b'B' * 1024 * 1024 - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY - ) - client_sslctx = self._create_client_ssl_context() - - clients = [] - - async def handle_client(reader, writer): - nonlocal CNT - - data = await reader.readexactly(len(A_DATA)) - self.assertEqual(data, A_DATA) - writer.write(b'OK') - - data = await reader.readexactly(len(B_DATA)) - self.assertEqual(data, B_DATA) - writer.writelines([b'SP', bytearray(b'A'), memoryview(b'M')]) - - await writer.drain() - writer.close() - - CNT += 1 - - async def test_client(addr): - fut = asyncio.Future() - - def prog(sock): - try: - sock.starttls(client_sslctx) - sock.connect(addr) - sock.send(A_DATA) - - data = sock.recv_all(2) - self.assertEqual(data, b'OK') - - sock.send(B_DATA) - data = sock.recv_all(4) - self.assertEqual(data, b'SPAM') - - sock.close() - - except Exception as ex: - self.loop.call_soon_threadsafe(fut.set_exception, ex) - else: - self.loop.call_soon_threadsafe(fut.set_result, None) - - client = self.tcp_client(prog) - client.start() - clients.append(client) - - await fut - - async def start_server(): - extras = {} - extras = dict(ssl_handshake_timeout=40.0) - - srv = await asyncio.start_server( - handle_client, - '127.0.0.1', 0, - family=socket.AF_INET, - ssl=sslctx, - **extras) - - try: - srv_socks = srv.sockets - self.assertTrue(srv_socks) - - addr = srv_socks[0].getsockname() - - tasks = [] - for _ in range(TOTAL_CNT): - tasks.append(test_client(addr)) - - await asyncio.wait_for(asyncio.gather(*tasks), TIMEOUT) - - finally: - self.loop.call_soon(srv.close) - await srv.wait_closed() - - with self._silence_eof_received_warning(): - self.loop.run_until_complete(start_server()) - - self.assertEqual(CNT, TOTAL_CNT) - - for client in clients: - client.stop() - - def test_create_connection_ssl_1(self): - self.loop.set_exception_handler(None) - - CNT = 0 - TOTAL_CNT = 25 - - A_DATA = b'A' * 1024 * 1024 - B_DATA = b'B' * 1024 * 1024 - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, - test_utils.ONLYKEY - ) - client_sslctx = self._create_client_ssl_context() - - def server(sock): - sock.starttls( - sslctx, - server_side=True) - - data = sock.recv_all(len(A_DATA)) - self.assertEqual(data, A_DATA) - sock.send(b'OK') - - data = sock.recv_all(len(B_DATA)) - self.assertEqual(data, B_DATA) - sock.send(b'SPAM') - - sock.close() - - async def client(addr): - extras = {} - extras = dict(ssl_handshake_timeout=40.0) - - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='', - **extras) - - writer.write(A_DATA) - self.assertEqual(await reader.readexactly(2), b'OK') - - writer.write(B_DATA) - self.assertEqual(await reader.readexactly(4), b'SPAM') - - nonlocal CNT - CNT += 1 - - writer.close() - await self.wait_closed(writer) - - async def client_sock(addr): - sock = socket.socket() - sock.connect(addr) - reader, writer = await asyncio.open_connection( - sock=sock, - ssl=client_sslctx, - server_hostname='') - - writer.write(A_DATA) - self.assertEqual(await reader.readexactly(2), b'OK') - - writer.write(B_DATA) - self.assertEqual(await reader.readexactly(4), b'SPAM') - - nonlocal CNT - CNT += 1 - - writer.close() - await self.wait_closed(writer) - sock.close() - - def run(coro): - nonlocal CNT - CNT = 0 - - async def _gather(*tasks): - # trampoline - return await asyncio.gather(*tasks) - - with self.tcp_server(server, - max_clients=TOTAL_CNT, - backlog=TOTAL_CNT) as srv: - tasks = [] - for _ in range(TOTAL_CNT): - tasks.append(coro(srv.addr)) - - self.loop.run_until_complete(_gather(*tasks)) - - self.assertEqual(CNT, TOTAL_CNT) - - with self._silence_eof_received_warning(): - run(client) - - with self._silence_eof_received_warning(): - run(client_sock) - - def test_create_connection_ssl_slow_handshake(self): - client_sslctx = self._create_client_ssl_context() - - # silence error logger - self.loop.set_exception_handler(lambda *args: None) - - def server(sock): - try: - sock.recv_all(1024 * 1024) - except ConnectionAbortedError: - pass - finally: - sock.close() - - async def client(addr): - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='', - ssl_handshake_timeout=1.0) - writer.close() - await self.wait_closed(writer) - - with self.tcp_server(server, - max_clients=1, - backlog=1) as srv: - - with self.assertRaisesRegex( - ConnectionAbortedError, - r'SSL handshake.*is taking longer'): - - self.loop.run_until_complete(client(srv.addr)) - - def test_create_connection_ssl_failed_certificate(self): - # silence error logger - self.loop.set_exception_handler(lambda *args: None) - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, - test_utils.ONLYKEY - ) - client_sslctx = self._create_client_ssl_context(disable_verify=False) - - def server(sock): - try: - sock.starttls( - sslctx, - server_side=True) - sock.connect() - except (ssl.SSLError, OSError): - pass - finally: - sock.close() - - async def client(addr): - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='', - ssl_handshake_timeout=1.0) - writer.close() - await self.wait_closed(writer) - - with self.tcp_server(server, - max_clients=1, - backlog=1) as srv: - - with self.assertRaises(ssl.SSLCertVerificationError): - self.loop.run_until_complete(client(srv.addr)) - - def test_ssl_handshake_timeout(self): - # bpo-29970: Check that a connection is aborted if handshake is not - # completed in timeout period, instead of remaining open indefinitely - client_sslctx = test_utils.simple_client_sslcontext() - - # silence error logger - messages = [] - self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx)) - - server_side_aborted = False - - def server(sock): - nonlocal server_side_aborted - try: - sock.recv_all(1024 * 1024) - except ConnectionAbortedError: - server_side_aborted = True - finally: - sock.close() - - async def client(addr): - await asyncio.wait_for( - self.loop.create_connection( - asyncio.Protocol, - *addr, - ssl=client_sslctx, - server_hostname='', - ssl_handshake_timeout=10.0), - 0.5) - - with self.tcp_server(server, - max_clients=1, - backlog=1) as srv: - - with self.assertRaises(asyncio.TimeoutError): - self.loop.run_until_complete(client(srv.addr)) - - self.assertTrue(server_side_aborted) - - # Python issue #23197: cancelling a handshake must not raise an - # exception or log an error, even if the handshake failed - self.assertEqual(messages, []) - - def test_ssl_handshake_connection_lost(self): - # #246: make sure that no connection_lost() is called before - # connection_made() is called first - - client_sslctx = test_utils.simple_client_sslcontext() - - # silence error logger - self.loop.set_exception_handler(lambda loop, ctx: None) - - connection_made_called = False - connection_lost_called = False - - def server(sock): - sock.recv(1024) - # break the connection during handshake - sock.close() - - class ClientProto(asyncio.Protocol): - def connection_made(self, transport): - nonlocal connection_made_called - connection_made_called = True - - def connection_lost(self, exc): - nonlocal connection_lost_called - connection_lost_called = True - - async def client(addr): - await self.loop.create_connection( - ClientProto, - *addr, - ssl=client_sslctx, - server_hostname=''), - - with self.tcp_server(server, - max_clients=1, - backlog=1) as srv: - - with self.assertRaises(ConnectionResetError): - self.loop.run_until_complete(client(srv.addr)) - - if connection_lost_called: - if connection_made_called: - self.fail("unexpected call to connection_lost()") - else: - self.fail("unexpected call to connection_lost() without" - "calling connection_made()") - elif connection_made_called: - self.fail("unexpected call to connection_made()") - - def test_ssl_connect_accepted_socket(self): - proto = ssl.PROTOCOL_TLS_SERVER - server_context = ssl.SSLContext(proto) - server_context.load_cert_chain(test_utils.ONLYCERT, test_utils.ONLYKEY) - if hasattr(server_context, 'check_hostname'): - server_context.check_hostname = False - server_context.verify_mode = ssl.CERT_NONE - - client_context = ssl.SSLContext(proto) - if hasattr(server_context, 'check_hostname'): - client_context.check_hostname = False - client_context.verify_mode = ssl.CERT_NONE - - def test_connect_accepted_socket(self, server_ssl=None, client_ssl=None): - loop = self.loop - - class MyProto(MyBaseProto): - - def connection_lost(self, exc): - super().connection_lost(exc) - loop.call_soon(loop.stop) - - def data_received(self, data): - super().data_received(data) - self.transport.write(expected_response) - - lsock = socket.socket(socket.AF_INET) - lsock.bind(('127.0.0.1', 0)) - lsock.listen(1) - addr = lsock.getsockname() - - message = b'test data' - response = None - expected_response = b'roger' - - def client(): - nonlocal response - try: - csock = socket.socket(socket.AF_INET) - if client_ssl is not None: - csock = client_ssl.wrap_socket(csock) - csock.connect(addr) - csock.sendall(message) - response = csock.recv(99) - csock.close() - except Exception as exc: - print( - "Failure in client thread in test_connect_accepted_socket", - exc) - - thread = threading.Thread(target=client, daemon=True) - thread.start() - - conn, _ = lsock.accept() - proto = MyProto(loop=loop) - proto.loop = loop - - extras = {} - if server_ssl: - extras = dict(ssl_handshake_timeout=10.0) - - f = loop.create_task( - loop.connect_accepted_socket( - (lambda: proto), conn, ssl=server_ssl, - **extras)) - loop.run_forever() - conn.close() - lsock.close() - - thread.join(1) - self.assertFalse(thread.is_alive()) - self.assertEqual(proto.state, 'CLOSED') - self.assertEqual(proto.nbytes, len(message)) - self.assertEqual(response, expected_response) - tr, _ = f.result() - - if server_ssl: - self.assertIn('SSL', tr.__class__.__name__) - - tr.close() - # let it close - self.loop.run_until_complete(asyncio.sleep(0.1)) - - def test_start_tls_client_corrupted_ssl(self): - self.loop.set_exception_handler(lambda loop, ctx: None) - - sslctx = test_utils.simple_server_sslcontext() - client_sslctx = test_utils.simple_client_sslcontext() - - def server(sock): - orig_sock = sock.dup() - try: - sock.starttls( - sslctx, - server_side=True) - sock.sendall(b'A\n') - sock.recv_all(1) - orig_sock.send(b'please corrupt the SSL connection') - except ssl.SSLError: - pass - finally: - sock.close() - orig_sock.close() - - async def client(addr): - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='') - - self.assertEqual(await reader.readline(), b'A\n') - writer.write(b'B') - with self.assertRaises(ssl.SSLError): - await reader.readline() - writer.close() - try: - await self.wait_closed(writer) - except ssl.SSLError: - pass - return 'OK' - - with self.tcp_server(server, - max_clients=1, - backlog=1) as srv: - - res = self.loop.run_until_complete(client(srv.addr)) - - self.assertEqual(res, 'OK') - - def test_start_tls_client_reg_proto_1(self): - HELLO_MSG = b'1' * self.PAYLOAD_SIZE - - server_context = test_utils.simple_server_sslcontext() - client_context = test_utils.simple_client_sslcontext() - - def serve(sock): - sock.settimeout(self.TIMEOUT) - - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.starttls(server_context, server_side=True) - - sock.sendall(b'O') - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.unwrap() - sock.close() - - class ClientProto(asyncio.Protocol): - def __init__(self, on_data, on_eof): - self.on_data = on_data - self.on_eof = on_eof - self.con_made_cnt = 0 - - def connection_made(proto, tr): - proto.con_made_cnt += 1 - # Ensure connection_made gets called only once. - self.assertEqual(proto.con_made_cnt, 1) - - def data_received(self, data): - self.on_data.set_result(data) - - def eof_received(self): - self.on_eof.set_result(True) - - async def client(addr): - await asyncio.sleep(0.5) - - on_data = self.loop.create_future() - on_eof = self.loop.create_future() - - tr, proto = await self.loop.create_connection( - lambda: ClientProto(on_data, on_eof), *addr) - - tr.write(HELLO_MSG) - new_tr = await self.loop.start_tls(tr, proto, client_context) - - self.assertEqual(await on_data, b'O') - new_tr.write(HELLO_MSG) - await on_eof - - new_tr.close() - - with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: - self.loop.run_until_complete( - asyncio.wait_for(client(srv.addr), timeout=10)) - - def test_create_connection_memory_leak(self): - HELLO_MSG = b'1' * self.PAYLOAD_SIZE - - server_context = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY) - client_context = self._create_client_ssl_context() - - def serve(sock): - sock.settimeout(self.TIMEOUT) - - sock.starttls(server_context, server_side=True) - - sock.sendall(b'O') - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.unwrap() - sock.close() - - class ClientProto(asyncio.Protocol): - def __init__(self, on_data, on_eof): - self.on_data = on_data - self.on_eof = on_eof - self.con_made_cnt = 0 - - def connection_made(proto, tr): - # XXX: We assume user stores the transport in protocol - proto.tr = tr - proto.con_made_cnt += 1 - # Ensure connection_made gets called only once. - self.assertEqual(proto.con_made_cnt, 1) - - def data_received(self, data): - self.on_data.set_result(data) - - def eof_received(self): - self.on_eof.set_result(True) - - async def client(addr): - await asyncio.sleep(0.5) - - on_data = self.loop.create_future() - on_eof = self.loop.create_future() - - tr, proto = await self.loop.create_connection( - lambda: ClientProto(on_data, on_eof), *addr, - ssl=client_context) - - self.assertEqual(await on_data, b'O') - tr.write(HELLO_MSG) - await on_eof - - tr.close() - - with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: - self.loop.run_until_complete( - asyncio.wait_for(client(srv.addr), timeout=10)) - - # No garbage is left for SSL client from loop.create_connection, even - # if user stores the SSLTransport in corresponding protocol instance - client_context = weakref.ref(client_context) - self.assertIsNone(client_context()) - - def test_start_tls_client_buf_proto_1(self): - HELLO_MSG = b'1' * self.PAYLOAD_SIZE - - server_context = test_utils.simple_server_sslcontext() - client_context = test_utils.simple_client_sslcontext() - - client_con_made_calls = 0 - - def serve(sock): - sock.settimeout(self.TIMEOUT) - - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.starttls(server_context, server_side=True) - - sock.sendall(b'O') - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.sendall(b'2') - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.unwrap() - sock.close() - - class ClientProtoFirst(asyncio.BufferedProtocol): - def __init__(self, on_data): - self.on_data = on_data - self.buf = bytearray(1) - - def connection_made(self, tr): - nonlocal client_con_made_calls - client_con_made_calls += 1 - - def get_buffer(self, sizehint): - return self.buf - - def buffer_updated(self, nsize): - assert nsize == 1 - self.on_data.set_result(bytes(self.buf[:nsize])) - - def eof_received(self): - pass - - class ClientProtoSecond(asyncio.Protocol): - def __init__(self, on_data, on_eof): - self.on_data = on_data - self.on_eof = on_eof - self.con_made_cnt = 0 - - def connection_made(self, tr): - nonlocal client_con_made_calls - client_con_made_calls += 1 - - def data_received(self, data): - self.on_data.set_result(data) - - def eof_received(self): - self.on_eof.set_result(True) - - async def client(addr): - await asyncio.sleep(0.5) - - on_data1 = self.loop.create_future() - on_data2 = self.loop.create_future() - on_eof = self.loop.create_future() - - tr, proto = await self.loop.create_connection( - lambda: ClientProtoFirst(on_data1), *addr) - - tr.write(HELLO_MSG) - new_tr = await self.loop.start_tls(tr, proto, client_context) - - self.assertEqual(await on_data1, b'O') - new_tr.write(HELLO_MSG) - - new_tr.set_protocol(ClientProtoSecond(on_data2, on_eof)) - self.assertEqual(await on_data2, b'2') - new_tr.write(HELLO_MSG) - await on_eof - - new_tr.close() - - # connection_made() should be called only once -- when - # we establish connection for the first time. Start TLS - # doesn't call connection_made() on application protocols. - self.assertEqual(client_con_made_calls, 1) - - with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: - self.loop.run_until_complete( - asyncio.wait_for(client(srv.addr), - timeout=self.TIMEOUT)) - - def test_start_tls_slow_client_cancel(self): - HELLO_MSG = b'1' * self.PAYLOAD_SIZE - - client_context = test_utils.simple_client_sslcontext() - server_waits_on_handshake = self.loop.create_future() - - def serve(sock): - sock.settimeout(self.TIMEOUT) - - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - try: - self.loop.call_soon_threadsafe( - server_waits_on_handshake.set_result, None) - data = sock.recv_all(1024 * 1024) - except ConnectionAbortedError: - pass - finally: - sock.close() - - class ClientProto(asyncio.Protocol): - def __init__(self, on_data, on_eof): - self.on_data = on_data - self.on_eof = on_eof - self.con_made_cnt = 0 - - def connection_made(proto, tr): - proto.con_made_cnt += 1 - # Ensure connection_made gets called only once. - self.assertEqual(proto.con_made_cnt, 1) - - def data_received(self, data): - self.on_data.set_result(data) - - def eof_received(self): - self.on_eof.set_result(True) - - async def client(addr): - await asyncio.sleep(0.5) - - on_data = self.loop.create_future() - on_eof = self.loop.create_future() - - tr, proto = await self.loop.create_connection( - lambda: ClientProto(on_data, on_eof), *addr) - - tr.write(HELLO_MSG) - - await server_waits_on_handshake - - with self.assertRaises(asyncio.TimeoutError): - await asyncio.wait_for( - self.loop.start_tls(tr, proto, client_context), - 0.5) - - with self.tcp_server(serve, timeout=self.TIMEOUT) as srv: - self.loop.run_until_complete( - asyncio.wait_for(client(srv.addr), timeout=10)) - - def test_start_tls_server_1(self): - HELLO_MSG = b'1' * self.PAYLOAD_SIZE - - server_context = test_utils.simple_server_sslcontext() - client_context = test_utils.simple_client_sslcontext() - - def client(sock, addr): - sock.settimeout(self.TIMEOUT) - - sock.connect(addr) - data = sock.recv_all(len(HELLO_MSG)) - self.assertEqual(len(data), len(HELLO_MSG)) - - sock.starttls(client_context) - sock.sendall(HELLO_MSG) - - sock.unwrap() - sock.close() - - class ServerProto(asyncio.Protocol): - def __init__(self, on_con, on_eof, on_con_lost): - self.on_con = on_con - self.on_eof = on_eof - self.on_con_lost = on_con_lost - self.data = b'' - - def connection_made(self, tr): - self.on_con.set_result(tr) - - def data_received(self, data): - self.data += data - - def eof_received(self): - self.on_eof.set_result(1) - - def connection_lost(self, exc): - if exc is None: - self.on_con_lost.set_result(None) - else: - self.on_con_lost.set_exception(exc) - - async def main(proto, on_con, on_eof, on_con_lost): - tr = await on_con - tr.write(HELLO_MSG) - - self.assertEqual(proto.data, b'') - - new_tr = await self.loop.start_tls( - tr, proto, server_context, - server_side=True, - ssl_handshake_timeout=self.TIMEOUT) - - await on_eof - await on_con_lost - self.assertEqual(proto.data, HELLO_MSG) - new_tr.close() - - async def run_main(): - on_con = self.loop.create_future() - on_eof = self.loop.create_future() - on_con_lost = self.loop.create_future() - proto = ServerProto(on_con, on_eof, on_con_lost) - - server = await self.loop.create_server( - lambda: proto, '127.0.0.1', 0) - addr = server.sockets[0].getsockname() - - with self.tcp_client(lambda sock: client(sock, addr), - timeout=self.TIMEOUT): - await asyncio.wait_for( - main(proto, on_con, on_eof, on_con_lost), - timeout=self.TIMEOUT) - - server.close() - await server.wait_closed() - - self.loop.run_until_complete(run_main()) - - def test_create_server_ssl_over_ssl(self): - CNT = 0 # number of clients that were successful - TOTAL_CNT = 25 # total number of clients that test will create - TIMEOUT = 10.0 # timeout for this test - - A_DATA = b'A' * 1024 * 1024 - B_DATA = b'B' * 1024 * 1024 - - sslctx_1 = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY) - client_sslctx_1 = self._create_client_ssl_context() - sslctx_2 = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY) - client_sslctx_2 = self._create_client_ssl_context() - - clients = [] - - async def handle_client(reader, writer): - nonlocal CNT - - data = await reader.readexactly(len(A_DATA)) - self.assertEqual(data, A_DATA) - writer.write(b'OK') - - data = await reader.readexactly(len(B_DATA)) - self.assertEqual(data, B_DATA) - writer.writelines([b'SP', bytearray(b'A'), memoryview(b'M')]) - - await writer.drain() - writer.close() - - CNT += 1 - - class ServerProtocol(asyncio.StreamReaderProtocol): - def connection_made(self, transport): - super_ = super() - transport.pause_reading() - fut = self._loop.create_task(self._loop.start_tls( - transport, self, sslctx_2, server_side=True)) - - def cb(_): - try: - tr = fut.result() - except Exception as ex: - super_.connection_lost(ex) - else: - super_.connection_made(tr) - fut.add_done_callback(cb) - - def server_protocol_factory(): - reader = asyncio.StreamReader() - protocol = ServerProtocol(reader, handle_client) - return protocol - - async def test_client(addr): - fut = asyncio.Future() - - def prog(sock): - try: - sock.connect(addr) - sock.starttls(client_sslctx_1) - - # because wrap_socket() doesn't work correctly on - # SSLSocket, we have to do the 2nd level SSL manually - incoming = ssl.MemoryBIO() - outgoing = ssl.MemoryBIO() - sslobj = client_sslctx_2.wrap_bio(incoming, outgoing) - - def do(func, *args): - while True: - try: - rv = func(*args) - break - except ssl.SSLWantReadError: - if outgoing.pending: - sock.send(outgoing.read()) - incoming.write(sock.recv(65536)) - if outgoing.pending: - sock.send(outgoing.read()) - return rv - - do(sslobj.do_handshake) - - do(sslobj.write, A_DATA) - data = do(sslobj.read, 2) - self.assertEqual(data, b'OK') - - do(sslobj.write, B_DATA) - data = b'' - while True: - chunk = do(sslobj.read, 4) - if not chunk: - break - data += chunk - self.assertEqual(data, b'SPAM') - - do(sslobj.unwrap) - sock.close() - - except Exception as ex: - self.loop.call_soon_threadsafe(fut.set_exception, ex) - sock.close() - else: - self.loop.call_soon_threadsafe(fut.set_result, None) - - client = self.tcp_client(prog) - client.start() - clients.append(client) - - await fut - - async def start_server(): - extras = {} - - srv = await self.loop.create_server( - server_protocol_factory, - '127.0.0.1', 0, - family=socket.AF_INET, - ssl=sslctx_1, - **extras) - - try: - srv_socks = srv.sockets - self.assertTrue(srv_socks) - - addr = srv_socks[0].getsockname() - - tasks = [] - for _ in range(TOTAL_CNT): - tasks.append(test_client(addr)) - - await asyncio.wait_for(asyncio.gather(*tasks), TIMEOUT) - - finally: - self.loop.call_soon(srv.close) - await srv.wait_closed() - - with self._silence_eof_received_warning(): - self.loop.run_until_complete(start_server()) - - self.assertEqual(CNT, TOTAL_CNT) - - for client in clients: - client.stop() - - def test_shutdown_cleanly(self): - CNT = 0 - TOTAL_CNT = 25 - - A_DATA = b'A' * 1024 * 1024 - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY) - client_sslctx = self._create_client_ssl_context() - - def server(sock): - sock.starttls( - sslctx, - server_side=True) - - data = sock.recv_all(len(A_DATA)) - self.assertEqual(data, A_DATA) - sock.send(b'OK') - - sock.unwrap() - - sock.close() - - async def client(addr): - extras = {} - extras = dict(ssl_handshake_timeout=10.0) - - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='', - **extras) - - writer.write(A_DATA) - self.assertEqual(await reader.readexactly(2), b'OK') - - self.assertEqual(await reader.read(), b'') - - nonlocal CNT - CNT += 1 - - writer.close() - await self.wait_closed(writer) - - def run(coro): - nonlocal CNT - CNT = 0 - - async def _gather(*tasks): - return await asyncio.gather(*tasks) - - with self.tcp_server(server, - max_clients=TOTAL_CNT, - backlog=TOTAL_CNT) as srv: - tasks = [] - for _ in range(TOTAL_CNT): - tasks.append(coro(srv.addr)) - - self.loop.run_until_complete( - _gather(*tasks)) - - self.assertEqual(CNT, TOTAL_CNT) - - with self._silence_eof_received_warning(): - run(client) - - def test_flush_before_shutdown(self): - CHUNK = 1024 * 128 - SIZE = 32 - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, test_utils.ONLYKEY) - client_sslctx = self._create_client_ssl_context() - if hasattr(ssl, 'OP_NO_TLSv1_3'): - client_sslctx.options |= ssl.OP_NO_TLSv1_3 - - future = None - - def server(sock): - sock.starttls(sslctx, server_side=True) - self.assertEqual(sock.recv_all(4), b'ping') - sock.send(b'pong') - time.sleep(0.5) # hopefully stuck the TCP buffer - data = sock.recv_all(CHUNK * SIZE) - self.assertEqual(len(data), CHUNK * SIZE) - sock.close() - - def run(meth): - def wrapper(sock): - try: - meth(sock) - except Exception as ex: - self.loop.call_soon_threadsafe(future.set_exception, ex) - else: - self.loop.call_soon_threadsafe(future.set_result, None) - return wrapper - - async def client(addr): - nonlocal future - future = self.loop.create_future() - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='') - sslprotocol = writer.transport._ssl_protocol - writer.write(b'ping') - data = await reader.readexactly(4) - self.assertEqual(data, b'pong') - - sslprotocol.pause_writing() - for _ in range(SIZE): - writer.write(b'x' * CHUNK) - - writer.close() - sslprotocol.resume_writing() - - await self.wait_closed(writer) - try: - data = await reader.read() - self.assertEqual(data, b'') - except ConnectionResetError: - pass - await future - - with self.tcp_server(run(server)) as srv: - self.loop.run_until_complete(client(srv.addr)) - - def test_remote_shutdown_receives_trailing_data(self): - CHUNK = 1024 * 128 - SIZE = 32 - - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, - test_utils.ONLYKEY - ) - client_sslctx = self._create_client_ssl_context() - future = None - - def server(sock): - incoming = ssl.MemoryBIO() - outgoing = ssl.MemoryBIO() - sslobj = sslctx.wrap_bio(incoming, outgoing, server_side=True) - - while True: - try: - sslobj.do_handshake() - except ssl.SSLWantReadError: - if outgoing.pending: - sock.send(outgoing.read()) - incoming.write(sock.recv(16384)) - else: - if outgoing.pending: - sock.send(outgoing.read()) - break - - while True: - try: - data = sslobj.read(4) - except ssl.SSLWantReadError: - incoming.write(sock.recv(16384)) - else: - break - - self.assertEqual(data, b'ping') - sslobj.write(b'pong') - sock.send(outgoing.read()) - - time.sleep(0.2) # wait for the peer to fill its backlog - - # send close_notify but don't wait for response - with self.assertRaises(ssl.SSLWantReadError): - sslobj.unwrap() - sock.send(outgoing.read()) - - # should receive all data - data_len = 0 - while True: - try: - chunk = len(sslobj.read(16384)) - data_len += chunk - except ssl.SSLWantReadError: - incoming.write(sock.recv(16384)) - except ssl.SSLZeroReturnError: - break - - self.assertEqual(data_len, CHUNK * SIZE) - - # verify that close_notify is received - sslobj.unwrap() - - sock.close() - - def eof_server(sock): - sock.starttls(sslctx, server_side=True) - self.assertEqual(sock.recv_all(4), b'ping') - sock.send(b'pong') - - time.sleep(0.2) # wait for the peer to fill its backlog - - # send EOF - sock.shutdown(socket.SHUT_WR) - - # should receive all data - data = sock.recv_all(CHUNK * SIZE) - self.assertEqual(len(data), CHUNK * SIZE) - - sock.close() - - async def client(addr): - nonlocal future - future = self.loop.create_future() - - reader, writer = await asyncio.open_connection( - *addr, - ssl=client_sslctx, - server_hostname='') - writer.write(b'ping') - data = await reader.readexactly(4) - self.assertEqual(data, b'pong') - - # fill write backlog in a hacky way - renegotiation won't help - for _ in range(SIZE): - writer.transport._test__append_write_backlog(b'x' * CHUNK) - - try: - data = await reader.read() - self.assertEqual(data, b'') - except (BrokenPipeError, ConnectionResetError): - pass - - await future - - writer.close() - await self.wait_closed(writer) - - def run(meth): - def wrapper(sock): - try: - meth(sock) - except Exception as ex: - self.loop.call_soon_threadsafe(future.set_exception, ex) - else: - self.loop.call_soon_threadsafe(future.set_result, None) - return wrapper - - with self.tcp_server(run(server)) as srv: - self.loop.run_until_complete(client(srv.addr)) - - with self.tcp_server(run(eof_server)) as srv: - self.loop.run_until_complete(client(srv.addr)) - - def test_connect_timeout_warning(self): - s = socket.socket(socket.AF_INET) - s.bind(('127.0.0.1', 0)) - addr = s.getsockname() - - async def test(): - try: - await asyncio.wait_for( - self.loop.create_connection(asyncio.Protocol, - *addr, ssl=True), - 0.1) - except (ConnectionRefusedError, asyncio.TimeoutError): - pass - else: - self.fail('TimeoutError is not raised') - - with s: - try: - with self.assertWarns(ResourceWarning) as cm: - self.loop.run_until_complete(test()) - gc.collect() - gc.collect() - gc.collect() - except AssertionError as e: - self.assertEqual(str(e), 'ResourceWarning not triggered') - else: - self.fail('Unexpected ResourceWarning: {}'.format(cm.warning)) - - def test_handshake_timeout_handler_leak(self): - s = socket.socket(socket.AF_INET) - s.bind(('127.0.0.1', 0)) - s.listen(1) - addr = s.getsockname() - - async def test(ctx): - try: - await asyncio.wait_for( - self.loop.create_connection(asyncio.Protocol, *addr, - ssl=ctx), - 0.1) - except (ConnectionRefusedError, asyncio.TimeoutError): - pass - else: - self.fail('TimeoutError is not raised') - - with s: - ctx = ssl.create_default_context() - self.loop.run_until_complete(test(ctx)) - ctx = weakref.ref(ctx) - - # SSLProtocol should be DECREF to 0 - self.assertIsNone(ctx()) - - def test_shutdown_timeout_handler_leak(self): - loop = self.loop - - def server(sock): - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, - test_utils.ONLYKEY - ) - sock = sslctx.wrap_socket(sock, server_side=True) - sock.recv(32) - sock.close() - - class Protocol(asyncio.Protocol): - def __init__(self): - self.fut = asyncio.Future(loop=loop) - - def connection_lost(self, exc): - self.fut.set_result(None) - - async def client(addr, ctx): - tr, pr = await loop.create_connection(Protocol, *addr, ssl=ctx) - tr.close() - await pr.fut - - with self.tcp_server(server) as srv: - ctx = self._create_client_ssl_context() - loop.run_until_complete(client(srv.addr, ctx)) - ctx = weakref.ref(ctx) - - # asyncio has no shutdown timeout, but it ends up with a circular - # reference loop - not ideal (introduces gc glitches), but at least - # not leaking - gc.collect() - gc.collect() - gc.collect() - - # SSLProtocol should be DECREF to 0 - self.assertIsNone(ctx()) - - def test_shutdown_timeout_handler_not_set(self): - loop = self.loop - eof = asyncio.Event() - extra = None - - def server(sock): - sslctx = self._create_server_ssl_context( - test_utils.ONLYCERT, - test_utils.ONLYKEY - ) - sock = sslctx.wrap_socket(sock, server_side=True) - sock.send(b'hello') - assert sock.recv(1024) == b'world' - sock.send(b'extra bytes') - # sending EOF here - sock.shutdown(socket.SHUT_WR) - loop.call_soon_threadsafe(eof.set) - # make sure we have enough time to reproduce the issue - assert sock.recv(1024) == b'' - sock.close() - - class Protocol(asyncio.Protocol): - def __init__(self): - self.fut = asyncio.Future(loop=loop) - self.transport = None - - def connection_made(self, transport): - self.transport = transport - - def data_received(self, data): - if data == b'hello': - self.transport.write(b'world') - # pause reading would make incoming data stay in the sslobj - self.transport.pause_reading() - else: - nonlocal extra - extra = data - - def connection_lost(self, exc): - if exc is None: - self.fut.set_result(None) - else: - self.fut.set_exception(exc) - - async def client(addr): - ctx = self._create_client_ssl_context() - tr, pr = await loop.create_connection(Protocol, *addr, ssl=ctx) - await eof.wait() - tr.resume_reading() - await pr.fut - tr.close() - assert extra == b'extra bytes' - - with self.tcp_server(server) as srv: - loop.run_until_complete(client(srv.addr)) - - -############################################################################### -# Socket Testing Utilities -############################################################################### - - -class TestSocketWrapper: - - def __init__(self, sock): - self.__sock = sock - - def recv_all(self, n): - buf = b'' - while len(buf) < n: - data = self.recv(n - len(buf)) - if data == b'': - raise ConnectionAbortedError - buf += data - return buf - - def starttls(self, ssl_context, *, - server_side=False, - server_hostname=None, - do_handshake_on_connect=True): - - assert isinstance(ssl_context, ssl.SSLContext) - - ssl_sock = ssl_context.wrap_socket( - self.__sock, server_side=server_side, - server_hostname=server_hostname, - do_handshake_on_connect=do_handshake_on_connect) - - if server_side: - ssl_sock.do_handshake() - - self.__sock.close() - self.__sock = ssl_sock - - def __getattr__(self, name): - return getattr(self.__sock, name) - - def __repr__(self): - return '<{} {!r}>'.format(type(self).__name__, self.__sock) - - -class SocketThread(threading.Thread): - - def stop(self): - self._active = False - self.join() - - def __enter__(self): - self.start() - return self - - def __exit__(self, *exc): - self.stop() - - -class TestThreadedClient(SocketThread): - - def __init__(self, test, sock, prog, timeout): - threading.Thread.__init__(self, None, None, 'test-client') - self.daemon = True - - self._timeout = timeout - self._sock = sock - self._active = True - self._prog = prog - self._test = test - - def run(self): - try: - self._prog(TestSocketWrapper(self._sock)) - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as ex: - self._test._abort_socket_test(ex) - - -class TestThreadedServer(SocketThread): - - def __init__(self, test, sock, prog, timeout, max_clients): - threading.Thread.__init__(self, None, None, 'test-server') - self.daemon = True - - self._clients = 0 - self._finished_clients = 0 - self._max_clients = max_clients - self._timeout = timeout - self._sock = sock - self._active = True - - self._prog = prog - - self._s1, self._s2 = socket.socketpair() - self._s1.setblocking(False) - - self._test = test - - def stop(self): - try: - if self._s2 and self._s2.fileno() != -1: - try: - self._s2.send(b'stop') - except OSError: - pass - finally: - super().stop() - - def run(self): - try: - with self._sock: - self._sock.setblocking(0) - self._run() - finally: - self._s1.close() - self._s2.close() - - def _run(self): - while self._active: - if self._clients >= self._max_clients: - return - - r, w, x = select.select( - [self._sock, self._s1], [], [], self._timeout) - - if self._s1 in r: - return - - if self._sock in r: - try: - conn, addr = self._sock.accept() - except BlockingIOError: - continue - except socket.timeout: - if not self._active: - return - else: - raise - else: - self._clients += 1 - conn.settimeout(self._timeout) - try: - with conn: - self._handle_client(conn) - except (KeyboardInterrupt, SystemExit): - raise - except BaseException as ex: - self._active = False - try: - raise - finally: - self._test._abort_socket_test(ex) - - def _handle_client(self, sock): - self._prog(TestSocketWrapper(sock)) - - @property - def addr(self): - return self._sock.getsockname() diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py index 79a81bd8c39b69..e87863eb712373 100644 --- a/Lib/test/test_asyncio/test_sslproto.py +++ b/Lib/test/test_asyncio/test_sslproto.py @@ -15,6 +15,7 @@ from asyncio import log from asyncio import protocols from asyncio import sslproto +from test import support from test.test_asyncio import utils as test_utils from test.test_asyncio import functional as func_tests @@ -43,13 +44,16 @@ def ssl_protocol(self, *, waiter=None, proto=None): def connection_made(self, ssl_proto, *, do_handshake=None): transport = mock.Mock() - sslobj = mock.Mock() - # emulate reading decompressed data - sslobj.read.side_effect = ssl.SSLWantReadError - if do_handshake is not None: - sslobj.do_handshake = do_handshake - ssl_proto._sslobj = sslobj - ssl_proto.connection_made(transport) + sslpipe = mock.Mock() + sslpipe.shutdown.return_value = b'' + if do_handshake: + sslpipe.do_handshake.side_effect = do_handshake + else: + def mock_handshake(callback): + return [] + sslpipe.do_handshake.side_effect = mock_handshake + with mock.patch('asyncio.sslproto._SSLPipe', return_value=sslpipe): + ssl_proto.connection_made(transport) return transport def test_handshake_timeout_zero(self): @@ -71,10 +75,7 @@ def test_handshake_timeout_negative(self): def test_eof_received_waiter(self): waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - self.connection_made( - ssl_proto, - do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) - ) + self.connection_made(ssl_proto) ssl_proto.eof_received() test_utils.run_briefly(self.loop) self.assertIsInstance(waiter.exception(), ConnectionResetError) @@ -99,10 +100,7 @@ def test_connection_lost(self): # yield from waiter hang if lost_connection was called. waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - self.connection_made( - ssl_proto, - do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) - ) + self.connection_made(ssl_proto) ssl_proto.connection_lost(ConnectionAbortedError) test_utils.run_briefly(self.loop) self.assertIsInstance(waiter.exception(), ConnectionAbortedError) @@ -112,10 +110,7 @@ def test_close_during_handshake(self): waiter = self.loop.create_future() ssl_proto = self.ssl_protocol(waiter=waiter) - transport = self.connection_made( - ssl_proto, - do_handshake=mock.Mock(side_effect=ssl.SSLWantReadError) - ) + transport = self.connection_made(ssl_proto) test_utils.run_briefly(self.loop) ssl_proto._app_transport.close() @@ -148,7 +143,7 @@ def test_data_received_after_closing(self): transp.close() # should not raise - self.assertIsNone(ssl_proto.buffer_updated(5)) + self.assertIsNone(ssl_proto.data_received(b'data')) def test_write_after_closing(self): ssl_proto = self.ssl_protocol() diff --git a/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst b/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst deleted file mode 100644 index e2b5a9e395ef1c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-02-23-44-21.bpo-44011.hd8iUO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Reimplement SSL/TLS support in asyncio, borrow the impelementation from -uvloop library. From webhook-mailer at python.org Mon May 3 11:45:10 2021 From: webhook-mailer at python.org (tiran) Date: Mon, 03 May 2021 15:45:10 -0000 Subject: [Python-checkins] bpo-43943: ssl tests: Increase server socket timeout, backlog, debugging (GH-25850) Message-ID: https://github.com/python/cpython/commit/c715b524210050bdd2a2e233817246d443bbb236 commit: c715b524210050bdd2a2e233817246d443bbb236 branch: master author: Christian Heimes committer: tiran date: 2021-05-03T17:45:02+02:00 summary: bpo-43943: ssl tests: Increase server socket timeout, backlog, debugging (GH-25850) 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 acb64f15fa0d3..00d5eff81537d 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2587,8 +2587,8 @@ def start(self, flag=None): threading.Thread.start(self) def run(self): - self.sock.settimeout(0.05) - self.sock.listen() + self.sock.settimeout(1.0) + self.sock.listen(5) self.active = True if self.flag: # signal an event @@ -2602,8 +2602,9 @@ def run(self): handler = self.ConnectionHandler(self, newconn, connaddr) handler.start() handler.join() - except TimeoutError: - pass + except TimeoutError as e: + if support.verbose: + sys.stdout.write(f' connection timeout {e!r}\n') except KeyboardInterrupt: self.stop() except BaseException as e: @@ -2611,7 +2612,12 @@ def run(self): sys.stdout.write( ' connection handling failed: ' + repr(e) + '\n') - self.sock.close() + self.close() + + def close(self): + if self.sock is not None: + self.sock.close() + self.sock = None def stop(self): self.active = False From webhook-mailer at python.org Mon May 3 11:47:36 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 15:47:36 -0000 Subject: [Python-checkins] bpo-38530: Refactor and improve AttributeError suggestions (GH-25776) Message-ID: https://github.com/python/cpython/commit/80a2a4ed7d090fff2584302f07315d567109bca9 commit: 80a2a4ed7d090fff2584302f07315d567109bca9 branch: master author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: pablogsal date: 2021-05-03T16:47:27+01:00 summary: bpo-38530: Refactor and improve AttributeError suggestions (GH-25776) - Make case-swaps half the cost of any other edit - Refactor Levenshtein code to not use memory allocator, and to bail early on no match. - Add comments to Levenshtein distance code - Add test cases for Levenshtein distance behind a debug macro - Set threshold to `(name_size + item_size + 3) * MOVE_COST / 6`. - Reasoning: similar to `difflib.SequenceMatcher.ratio()` >= 2/3: ``` "Multiset Jaccard similarity" >= 2/3 matching letters / total letters >= 2/3 (name_size - distance + item_size - distance) / (name_size + item_size) >= 2/3 1 - (2*distance) / (name_size + item_size) >= 2/3 1/3 >= (2*distance) / (name_size + item_size) (name_size + item_size) / 6 >= distance With rounding: (name_size + item_size + 3) // 6 >= distance ``` Co-authored-by: Pablo Galindo files: M Include/internal/pycore_pyerrors.h M Lib/test/test_exceptions.py M Modules/_testinternalcapi.c M Python/suggestions.c diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h index d1af8e91b3b90..a5e97fe23fb05 100644 --- a/Include/internal/pycore_pyerrors.h +++ b/Include/internal/pycore_pyerrors.h @@ -87,6 +87,8 @@ PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate); PyAPI_FUNC(void) _Py_DumpExtensionModules(int fd, PyInterpreterState *interp); extern PyObject* _Py_Offer_Suggestions(PyObject* exception); +PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b, + Py_ssize_t max_cost); #ifdef __cplusplus } diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 3810108e35663..bc0404ea4b04d 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1486,13 +1486,13 @@ def func(): def test_name_error_suggestions_from_builtins(self): def func(): - print(AttributeErrop) + print(ZeroDivisionErrrrr) try: func() except NameError as exc: with support.captured_stderr() as err: sys.__excepthook__(*sys.exc_info()) - self.assertIn("'AttributeError'?", err.getvalue()) + self.assertIn("'ZeroDivisionError'?", err.getvalue()) def test_name_error_suggestions_do_not_trigger_for_long_names(self): def f(): @@ -1565,21 +1565,87 @@ def test_name_error_bad_suggestions_do_not_trigger_for_small_names(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 = \ - 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 = 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 + 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 = 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 = a162 = a163 = a164 = a165 = a166 = a167 = a168 = a169 = a170 = \ + a171 = a172 = a173 = a174 = a175 = a176 = a177 = a178 = a179 = a180 = \ + a181 = a182 = a183 = a184 = a185 = a186 = a187 = a188 = a189 = a190 = \ + a191 = a192 = a193 = a194 = a195 = a196 = a197 = a198 = a199 = a200 = \ + a201 = a202 = a203 = a204 = a205 = a206 = a207 = a208 = a209 = a210 = \ + a211 = a212 = a213 = a214 = a215 = a216 = a217 = a218 = a219 = a220 = \ + a221 = a222 = a223 = a224 = a225 = a226 = a227 = a228 = a229 = a230 = \ + a231 = a232 = a233 = a234 = a235 = a236 = a237 = a238 = a239 = a240 = \ + a241 = a242 = a243 = a244 = a245 = a246 = a247 = a248 = a249 = a250 = \ + a251 = a252 = a253 = a254 = a255 = a256 = a257 = a258 = a259 = a260 = \ + a261 = a262 = a263 = a264 = a265 = a266 = a267 = a268 = a269 = a270 = \ + a271 = a272 = a273 = a274 = a275 = a276 = a277 = a278 = a279 = a280 = \ + a281 = a282 = a283 = a284 = a285 = a286 = a287 = a288 = a289 = a290 = \ + a291 = a292 = a293 = a294 = a295 = a296 = a297 = a298 = a299 = a300 = \ + a301 = a302 = a303 = a304 = a305 = a306 = a307 = a308 = a309 = a310 = \ + a311 = a312 = a313 = a314 = a315 = a316 = a317 = a318 = a319 = a320 = \ + a321 = a322 = a323 = a324 = a325 = a326 = a327 = a328 = a329 = a330 = \ + a331 = a332 = a333 = a334 = a335 = a336 = a337 = a338 = a339 = a340 = \ + a341 = a342 = a343 = a344 = a345 = a346 = a347 = a348 = a349 = a350 = \ + a351 = a352 = a353 = a354 = a355 = a356 = a357 = a358 = a359 = a360 = \ + a361 = a362 = a363 = a364 = a365 = a366 = a367 = a368 = a369 = a370 = \ + a371 = a372 = a373 = a374 = a375 = a376 = a377 = a378 = a379 = a380 = \ + a381 = a382 = a383 = a384 = a385 = a386 = a387 = a388 = a389 = a390 = \ + a391 = a392 = a393 = a394 = a395 = a396 = a397 = a398 = a399 = a400 = \ + a401 = a402 = a403 = a404 = a405 = a406 = a407 = a408 = a409 = a410 = \ + a411 = a412 = a413 = a414 = a415 = a416 = a417 = a418 = a419 = a420 = \ + a421 = a422 = a423 = a424 = a425 = a426 = a427 = a428 = a429 = a430 = \ + a431 = a432 = a433 = a434 = a435 = a436 = a437 = a438 = a439 = a440 = \ + a441 = a442 = a443 = a444 = a445 = a446 = a447 = a448 = a449 = a450 = \ + a451 = a452 = a453 = a454 = a455 = a456 = a457 = a458 = a459 = a460 = \ + a461 = a462 = a463 = a464 = a465 = a466 = a467 = a468 = a469 = a470 = \ + a471 = a472 = a473 = a474 = a475 = a476 = a477 = a478 = a479 = a480 = \ + a481 = a482 = a483 = a484 = a485 = a486 = a487 = a488 = a489 = a490 = \ + a491 = a492 = a493 = a494 = a495 = a496 = a497 = a498 = a499 = a500 = \ + a501 = a502 = a503 = a504 = a505 = a506 = a507 = a508 = a509 = a510 = \ + a511 = a512 = a513 = a514 = a515 = a516 = a517 = a518 = a519 = a520 = \ + a521 = a522 = a523 = a524 = a525 = a526 = a527 = a528 = a529 = a530 = \ + a531 = a532 = a533 = a534 = a535 = a536 = a537 = a538 = a539 = a540 = \ + a541 = a542 = a543 = a544 = a545 = a546 = a547 = a548 = a549 = a550 = \ + a551 = a552 = a553 = a554 = a555 = a556 = a557 = a558 = a559 = a560 = \ + a561 = a562 = a563 = a564 = a565 = a566 = a567 = a568 = a569 = a570 = \ + a571 = a572 = a573 = a574 = a575 = a576 = a577 = a578 = a579 = a580 = \ + a581 = a582 = a583 = a584 = a585 = a586 = a587 = a588 = a589 = a590 = \ + a591 = a592 = a593 = a594 = a595 = a596 = a597 = a598 = a599 = a600 = \ + a601 = a602 = a603 = a604 = a605 = a606 = a607 = a608 = a609 = a610 = \ + a611 = a612 = a613 = a614 = a615 = a616 = a617 = a618 = a619 = a620 = \ + a621 = a622 = a623 = a624 = a625 = a626 = a627 = a628 = a629 = a630 = \ + a631 = a632 = a633 = a634 = a635 = a636 = a637 = a638 = a639 = a640 = \ + a641 = a642 = a643 = a644 = a645 = a646 = a647 = a648 = a649 = a650 = \ + a651 = a652 = a653 = a654 = a655 = a656 = a657 = a658 = a659 = a660 = \ + a661 = a662 = a663 = a664 = a665 = a666 = a667 = a668 = a669 = a670 = \ + a671 = a672 = a673 = a674 = a675 = a676 = a677 = a678 = a679 = a680 = \ + a681 = a682 = a683 = a684 = a685 = a686 = a687 = a688 = a689 = a690 = \ + a691 = a692 = a693 = a694 = a695 = a696 = a697 = a698 = a699 = a700 = \ + a701 = a702 = a703 = a704 = a705 = a706 = a707 = a708 = a709 = a710 = \ + a711 = a712 = a713 = a714 = a715 = a716 = a717 = a718 = a719 = a720 = \ + a721 = a722 = a723 = a724 = a725 = a726 = a727 = a728 = a729 = a730 = \ + a731 = a732 = a733 = a734 = a735 = a736 = a737 = a738 = a739 = a740 = \ + a741 = a742 = a743 = a744 = a745 = a746 = a747 = a748 = a749 = a750 = \ + a751 = a752 = a753 = a754 = a755 = a756 = a757 = a758 = a759 = a760 = \ + a761 = a762 = a763 = a764 = a765 = a766 = a767 = a768 = a769 = a770 = \ + a771 = a772 = a773 = a774 = a775 = a776 = a777 = a778 = a779 = a780 = \ + a781 = a782 = a783 = a784 = a785 = a786 = a787 = a788 = a789 = a790 = \ + a791 = a792 = a793 = a794 = a795 = a796 = a797 = a798 = a799 = a800 \ + = None print(a0) try: @@ -1778,7 +1844,7 @@ class A: blech = None # A class with a very big __dict__ will not be consider # for suggestions. - for index in range(160): + for index in range(2000): setattr(A, f"index_{index}", None) try: diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index ab6c5965d1661..d5616fd59c6e5 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -18,6 +18,7 @@ #include "pycore_hashtable.h" // _Py_hashtable_new() #include "pycore_initconfig.h" // _Py_GetConfigsAsDict() #include "pycore_interp.h" // _PyInterpreterState_GetConfigCopy() +#include "pycore_pyerrors.h" // _Py_UTF8_Edit_Cost() static PyObject * @@ -279,6 +280,91 @@ test_atomic_funcs(PyObject *self, PyObject *Py_UNUSED(args)) } +static int +check_edit_cost(const char *a, const char *b, Py_ssize_t expected) +{ + int ret = -1; + PyObject *a_obj = NULL; + PyObject *b_obj = NULL; + + a_obj = PyUnicode_FromString(a); + if (a_obj == NULL) { + goto exit; + } + b_obj = PyUnicode_FromString(b); + if (a_obj == NULL) { + goto exit; + } + Py_ssize_t result = _Py_UTF8_Edit_Cost(a_obj, b_obj, -1); + if (result != expected) { + PyErr_Format(PyExc_AssertionError, + "Edit cost from '%s' to '%s' returns %zd, expected %zd", + a, b, result, expected); + goto exit; + } + // Check that smaller max_edits thresholds are exceeded. + Py_ssize_t max_edits = result; + while (max_edits > 0) { + max_edits /= 2; + Py_ssize_t result2 = _Py_UTF8_Edit_Cost(a_obj, b_obj, max_edits); + if (result2 <= max_edits) { + PyErr_Format(PyExc_AssertionError, + "Edit cost from '%s' to '%s' (threshold %zd) " + "returns %zd, expected greater than %zd", + a, b, max_edits, result2, max_edits); + goto exit; + } + } + // Check that bigger max_edits thresholds don't change anything + Py_ssize_t result3 = _Py_UTF8_Edit_Cost(a_obj, b_obj, result * 2 + 1); + if (result3 != result) { + PyErr_Format(PyExc_AssertionError, + "Edit cost from '%s' to '%s' (threshold %zd) " + "returns %zd, expected %zd", + a, b, result * 2, result3, result); + goto exit; + } + ret = 0; +exit: + Py_XDECREF(a_obj); + Py_XDECREF(b_obj); + return ret; +} + +static PyObject * +test_edit_cost(PyObject *self, PyObject *Py_UNUSED(args)) +{ + #define CHECK(a, b, n) do { \ + if (check_edit_cost(a, b, n) < 0) { \ + return NULL; \ + } \ + } while (0) \ + + CHECK("", "", 0); + CHECK("", "a", 2); + CHECK("a", "A", 1); + CHECK("Apple", "Aple", 2); + CHECK("Banana", "B at n@n@", 6); + CHECK("Cherry", "Cherry!", 2); + CHECK("---0---", "------", 2); + CHECK("abc", "y", 6); + CHECK("aa", "bb", 4); + CHECK("aaaaa", "AAAAA", 5); + CHECK("wxyz", "wXyZ", 2); + CHECK("wxyz", "wXyZ123", 8); + CHECK("Python", "Java", 12); + CHECK("Java", "C#", 8); + CHECK("AbstractFoobarManager", "abstract_foobar_manager", 3+2*2); + CHECK("CPython", "PyPy", 10); + CHECK("CPython", "pypy", 11); + CHECK("AttributeError", "AttributeErrop", 2); + CHECK("AttributeError", "AttributeErrorTests", 10); + + #undef CHECK + Py_RETURN_NONE; +} + + static PyMethodDef TestMethods[] = { {"get_configs", get_configs, METH_NOARGS}, {"get_recursion_depth", get_recursion_depth, METH_NOARGS}, @@ -289,6 +375,7 @@ static PyMethodDef TestMethods[] = { {"get_config", test_get_config, METH_NOARGS}, {"set_config", test_set_config, METH_O}, {"test_atomic_funcs", test_atomic_funcs, METH_NOARGS}, + {"test_edit_cost", test_edit_cost, METH_NOARGS}, {NULL, NULL} /* sentinel */ }; diff --git a/Python/suggestions.c b/Python/suggestions.c index 2fd6714e84787..6fb01f10cd37c 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -3,78 +3,129 @@ #include "pycore_pyerrors.h" -#define MAX_DISTANCE 3 -#define MAX_CANDIDATE_ITEMS 160 -#define MAX_STRING_SIZE 25 +#define MAX_CANDIDATE_ITEMS 750 +#define MAX_STRING_SIZE 40 -/* Calculate the Levenshtein distance between string1 and string2 */ -static Py_ssize_t -levenshtein_distance(const char *a, size_t a_size, - const char *b, size_t b_size) { +#define MOVE_COST 2 +#define CASE_COST 1 - if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) { +#define LEAST_FIVE_BITS(n) ((n) & 31) + +static inline int +substitution_cost(char a, char b) +{ + if (LEAST_FIVE_BITS(a) != LEAST_FIVE_BITS(b)) { + // Not the same, not a case flip. + return MOVE_COST; + } + if (a == b) { return 0; } + if ('A' <= a && a <= 'Z') { + a += ('a' - 'A'); + } + if ('A' <= b && b <= 'Z') { + b += ('a' - 'A'); + } + if (a == b) { + return CASE_COST; + } + return MOVE_COST; +} + +/* Calculate the Levenshtein distance between string1 and string2 */ +static Py_ssize_t +levenshtein_distance(const char *a, size_t a_size, + const char *b, size_t b_size, + size_t max_cost) +{ + static size_t buffer[MAX_STRING_SIZE]; // Both strings are the same (by identity) if (a == b) { return 0; } - // The first string is empty - if (a_size == 0) { - return b_size; + // Trim away common affixes. + while (a_size && b_size && a[0] == b[0]) { + a++; a_size--; + b++; b_size--; + } + while (a_size && b_size && a[a_size-1] == b[b_size-1]) { + a_size--; + b_size--; + } + if (a_size == 0 || b_size == 0) { + return (a_size + b_size) * MOVE_COST; + } + if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) { + return max_cost + 1; } - // The second string is empty - if (b_size == 0) { - return a_size; + // Prefer shorter buffer + if (b_size < a_size) { + const char *t = a; a = b; b = t; + size_t t_size = a_size; a_size = b_size; b_size = t_size; } - size_t *buffer = PyMem_Calloc(a_size, sizeof(size_t)); - if (buffer == NULL) { - return -1; + // quick fail when a match is impossible. + if ((b_size - a_size) * MOVE_COST > max_cost) { + return max_cost + 1; } + // Instead of producing the whole traditional len(a)-by-len(b) + // matrix, we can update just one row in place. // Initialize the buffer row - size_t index = 0; - while (index < a_size) { - buffer[index] = index + 1; - index++; + for (size_t i = 0; i < a_size; i++) { + // cost from b[:0] to a[:i+1] + buffer[i] = (i + 1) * MOVE_COST; } - size_t b_index = 0; size_t result = 0; - while (b_index < b_size) { + for (size_t b_index = 0; b_index < b_size; b_index++) { 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; + // cost(b[:b_index], a[:0]) == b_index * MOVE_COST + size_t distance = result = b_index * MOVE_COST; + size_t minimum = SIZE_MAX; + for (size_t index = 0; index < a_size; index++) { + + // cost(b[:b_index+1], a[:index+1]) = min( + // // 1) substitute + // cost(b[:b_index], a[:index]) + // + substitution_cost(b[b_index], a[index]), + // // 2) delete from b + // cost(b[:b_index], a[:index+1]) + MOVE_COST, + // // 3) delete from a + // cost(b[:b_index+1], a[index]) + MOVE_COST + // ) + + // 1) Previous distance in this row is cost(b[:b_index], a[:index]) + size_t substitute = distance + substitution_cost(code, a[index]); + // 2) cost(b[:b_index], a[:index+1]) from previous row 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; - } - } + // 3) existing result is cost(b[:b_index+1], a[index]) + + size_t insert_delete = Py_MIN(result, distance) + MOVE_COST; + result = Py_MIN(insert_delete, substitute); + + // cost(b[:b_index+1], a[:index+1]) buffer[index] = result; + if (result < minimum) { + minimum = result; + } + } + if (minimum > max_cost) { + // Everything in this row is too big, so bail early. + return max_cost + 1; } } - PyMem_Free(buffer); return result; } static inline PyObject * calculate_suggestions(PyObject *dir, - PyObject *name) { + PyObject *name) +{ assert(!PyErr_Occurred()); assert(PyList_CheckExact(dir)); @@ -83,13 +134,14 @@ calculate_suggestions(PyObject *dir, return NULL; } - Py_ssize_t suggestion_distance = PyUnicode_GetLength(name); + Py_ssize_t suggestion_distance = PY_SSIZE_T_MAX; PyObject *suggestion = NULL; 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); Py_ssize_t item_size; @@ -97,15 +149,14 @@ calculate_suggestions(PyObject *dir, if (item_str == NULL) { return NULL; } - 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 || - current_distance * 2 > name_size) - { + // No more than 1/3 of the involved characters should need changed. + Py_ssize_t max_distance = (name_size + item_size + 3) * MOVE_COST / 6; + // Don't take matches we've already beaten. + max_distance = Py_MIN(max_distance, suggestion_distance - 1); + Py_ssize_t current_distance = + levenshtein_distance(name_str, name_size, + item_str, item_size, max_distance); + if (current_distance > max_distance) { continue; } if (!suggestion || current_distance < suggestion_distance) { @@ -113,15 +164,13 @@ calculate_suggestions(PyObject *dir, suggestion_distance = current_distance; } } - if (!suggestion) { - return NULL; - } - Py_INCREF(suggestion); + Py_XINCREF(suggestion); return suggestion; } static PyObject * -offer_suggestions_for_attribute_error(PyAttributeErrorObject *exc) { +offer_suggestions_for_attribute_error(PyAttributeErrorObject *exc) +{ PyObject *name = exc->name; // borrowed reference PyObject *obj = exc->obj; // borrowed reference @@ -142,7 +191,8 @@ offer_suggestions_for_attribute_error(PyAttributeErrorObject *exc) { static PyObject * -offer_suggestions_for_name_error(PyNameErrorObject *exc) { +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 a variable name or we have an invalid one @@ -194,7 +244,9 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { // Offer suggestions for a given exception. Returns a python string object containing the // 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 * +_Py_Offer_Suggestions(PyObject *exception) +{ PyObject *result = NULL; assert(!PyErr_Occurred()); if (Py_IS_TYPE(exception, (PyTypeObject*)PyExc_AttributeError)) { @@ -205,3 +257,22 @@ PyObject *_Py_Offer_Suggestions(PyObject *exception) { return result; } +Py_ssize_t +_Py_UTF8_Edit_Cost(PyObject *a, PyObject *b, Py_ssize_t max_cost) +{ + assert(PyUnicode_Check(a) && PyUnicode_Check(b)); + Py_ssize_t size_a, size_b; + const char *utf8_a = PyUnicode_AsUTF8AndSize(a, &size_a); + if (utf8_a == NULL) { + return -1; + } + const char *utf8_b = PyUnicode_AsUTF8AndSize(b, &size_b); + if (utf8_b == NULL) { + return -1; + } + if (max_cost == -1) { + max_cost = MOVE_COST * Py_MAX(size_a, size_b); + } + return levenshtein_distance(utf8_a, size_a, utf8_b, size_b, max_cost); +} + From webhook-mailer at python.org Mon May 3 14:26:46 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 03 May 2021 18:26:46 -0000 Subject: [Python-checkins] Python 3.9.5 Message-ID: https://github.com/python/cpython/commit/0a7dcbdb13f1f2ab6e76e1cff47e80fb263f5da0 commit: 0a7dcbdb13f1f2ab6e76e1cff47e80fb263f5da0 branch: 3.9 author: ?ukasz Langa committer: ambv date: 2021-05-03T16:54:42+02:00 summary: Python 3.9.5 files: A Misc/NEWS.d/3.9.5.rst D Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst D Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst D Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst D Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst D Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst D Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst D Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst D Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst D Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst D Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst D Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst D Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst D Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst D Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst D Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst D Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst D Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst D Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst D Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst D Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst D Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst D Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst D Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst D Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst D Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst D Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst D Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst D Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst D Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst D Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst D Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst D Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst D Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst D Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst D Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst D Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst D Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst D Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst D Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst D Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst D Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst D Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.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 06ab0e776c09bb..32ce11654c0820 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 4 +#define PY_MICRO_VERSION 5 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.9.4+" +#define PY_VERSION "3.9.5" /*--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 e3b6f14e4f2af0..b38d2a18809443 100644 --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Sun Apr 4 14:53:49 2021 +# Autogenerated by Sphinx on Mon May 3 16:52:46 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -986,9 +986,9 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A ' - 'descriptor can define\n' - 'any combination of "__get__()", "__set__()" and ' + 'on which descriptor methods are defined. A descriptor ' + 'can define any\n' + 'combination of "__get__()", "__set__()" and ' '"__delete__()". If it\n' 'does not define "__get__()", then accessing the ' 'attribute will return\n' @@ -1358,6 +1358,10 @@ 'through their "__code__" attribute. See also the ' '"code" module.\n' '\n' + 'Accessing "__code__" raises an auditing event ' + '"object.__getattr__"\n' + 'with arguments "obj" and ""__code__"".\n' + '\n' 'A code object can be executed or evaluated by passing ' 'it (instead of a\n' 'source string) to the "exec()" or "eval()" built-in ' @@ -2655,7 +2659,6 @@ ' decorators ::= decorator+\n' ' decorator ::= "@" assignment_expression ' 'NEWLINE\n' - ' dotted_name ::= identifier ("." identifier)*\n' ' parameter_list ::= defparameter ("," ' 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n' ' | parameter_list_no_posonly\n' @@ -2755,7 +2758,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -2767,8 +2770,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -5217,7 +5226,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 ' @@ -5795,7 +5804,6 @@ ' decorators ::= decorator+\n' ' decorator ::= "@" assignment_expression ' 'NEWLINE\n' - ' dotted_name ::= identifier ("." identifier)*\n' ' parameter_list ::= defparameter ("," ' 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n' ' | parameter_list_no_posonly\n' @@ -5895,7 +5903,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -5907,8 +5915,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -6613,10 +6627,7 @@ 'lambda': 'Lambdas\n' '*******\n' '\n' - ' lambda_expr ::= "lambda" [parameter_list] ":" ' - 'expression\n' - ' lambda_expr_nocond ::= "lambda" [parameter_list] ":" ' - 'expression_nocond\n' + ' lambda_expr ::= "lambda" [parameter_list] ":" expression\n' '\n' 'Lambda expressions (sometimes called lambda forms) are used to ' 'create\n' @@ -6896,7 +6907,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' @@ -7237,8 +7248,8 @@ '\n' 'The following table summarizes the operator precedence ' 'in Python, from\n' - 'lowest precedence (least binding) to highest precedence ' - '(most\n' + 'highest precedence (most binding) to lowest precedence ' + '(least\n' 'binding). Operators in the same box have the same ' 'precedence. Unless\n' 'the syntax is explicitly given, operators are binary. ' @@ -7257,71 +7268,71 @@ '| Operator | ' 'Description |\n' '|=================================================|=======================================|\n' - '| ":=" | ' - 'Assignment expression |\n' - '+-------------------------------------------------+---------------------------------------+\n' - '| "lambda" | ' - 'Lambda expression |\n' + '| "(expressions...)", "[expressions...]", "{key: | ' + 'Binding or parenthesized expression, |\n' + '| value...}", "{expressions...}" | list ' + 'display, dictionary display, set |\n' + '| | ' + 'display |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "if" ? "else" | ' - 'Conditional expression |\n' + '| "x[index]", "x[index:index]", | ' + 'Subscription, slicing, call, |\n' + '| "x(arguments...)", "x.attribute" | ' + 'attribute reference |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "or" | ' - 'Boolean OR |\n' + '| "await" "x" | ' + 'Await expression |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "and" | ' - 'Boolean AND |\n' + '| "**" | ' + 'Exponentiation [5] |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "not" "x" | ' - 'Boolean NOT |\n' + '| "+x", "-x", "~x" | ' + 'Positive, negative, bitwise NOT |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "in", "not in", "is", "is not", "<", "<=", ">", | ' - 'Comparisons, including membership |\n' - '| ">=", "!=", "==" | ' - 'tests and identity tests |\n' + '| "*", "@", "/", "//", "%" | ' + 'Multiplication, matrix |\n' + '| | ' + 'multiplication, division, floor |\n' + '| | ' + 'division, remainder [6] |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "|" | ' - 'Bitwise OR |\n' + '| "+", "-" | ' + 'Addition and subtraction |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "^" | ' - 'Bitwise XOR |\n' + '| "<<", ">>" | ' + 'Shifts |\n' '+-------------------------------------------------+---------------------------------------+\n' '| "&" | ' 'Bitwise AND |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "<<", ">>" | ' - 'Shifts |\n' + '| "^" | ' + 'Bitwise XOR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "+", "-" | ' - 'Addition and subtraction |\n' + '| "|" | ' + 'Bitwise OR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "*", "@", "/", "//", "%" | ' - 'Multiplication, matrix |\n' - '| | ' - 'multiplication, division, floor |\n' - '| | ' - 'division, remainder [5] |\n' + '| "in", "not in", "is", "is not", "<", "<=", ">", | ' + 'Comparisons, including membership |\n' + '| ">=", "!=", "==" | ' + 'tests and identity tests |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "+x", "-x", "~x" | ' - 'Positive, negative, bitwise NOT |\n' + '| "not" "x" | ' + 'Boolean NOT |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "**" | ' - 'Exponentiation [6] |\n' + '| "and" | ' + 'Boolean AND |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "await" "x" | ' - 'Await expression |\n' + '| "or" | ' + 'Boolean OR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "x[index]", "x[index:index]", | ' - 'Subscription, slicing, call, |\n' - '| "x(arguments...)", "x.attribute" | ' - 'attribute reference |\n' + '| "if" ? "else" | ' + 'Conditional expression |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "(expressions...)", "[expressions...]", "{key: | ' - 'Binding or parenthesized expression, |\n' - '| value...}", "{expressions...}" | list ' - 'display, dictionary display, set |\n' - '| | ' - 'display |\n' + '| "lambda" | ' + 'Lambda expression |\n' + '+-------------------------------------------------+---------------------------------------+\n' + '| ":=" | ' + 'Assignment expression |\n' '+-------------------------------------------------+---------------------------------------+\n' '\n' '-[ Footnotes ]-\n' @@ -7402,14 +7413,14 @@ 'Check their\n' ' documentation for more info.\n' '\n' - '[5] The "%" operator is also used for string formatting; ' - 'the same\n' - ' precedence applies.\n' - '\n' - '[6] The power operator "**" binds less tightly than an ' + '[5] The power operator "**" binds less tightly than an ' 'arithmetic or\n' ' bitwise unary operator on its right, that is, ' - '"2**-1" is "0.5".\n', + '"2**-1" is "0.5".\n' + '\n' + '[6] The "%" operator is also used for string formatting; ' + 'the same\n' + ' precedence applies.\n', 'pass': 'The "pass" statement\n' '********************\n' '\n' @@ -7494,12 +7505,18 @@ '\n' 'The "from" clause is used for exception chaining: if given, the ' 'second\n' - '*expression* must be another exception class or instance, which ' - 'will\n' - 'then be attached to the raised exception as the "__cause__" ' - 'attribute\n' - '(which is writable). If the raised exception is not handled, both\n' - 'exceptions will be printed:\n' + '*expression* must be another exception class or instance. If the\n' + 'second expression is an exception instance, it will be attached to ' + 'the\n' + 'raised exception as the "__cause__" attribute (which is writable). ' + 'If\n' + 'the expression is an exception class, the class will be ' + 'instantiated\n' + 'and the resulting exception instance will be attached to the ' + 'raised\n' + 'exception as the "__cause__" attribute. If the raised exception is ' + 'not\n' + 'handled, both exceptions will be printed:\n' '\n' ' >>> try:\n' ' ... print(1 / 0)\n' @@ -8841,10 +8858,10 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A descriptor ' - 'can define\n' - 'any combination of "__get__()", "__set__()" and ' - '"__delete__()". If it\n' + 'on which descriptor methods are defined. A descriptor can ' + 'define any\n' + 'combination of "__get__()", "__set__()" and "__delete__()". ' + 'If it\n' 'does not define "__get__()", then accessing the attribute ' 'will return\n' 'the descriptor object itself unless there is a value in the ' @@ -10071,7 +10088,7 @@ '*start* and\n' ' *end* are interpreted as in slice notation.\n' '\n' - 'str.encode(encoding="utf-8", errors="strict")\n' + "str.encode(encoding='utf-8', errors='strict')\n" '\n' ' Return an encoded version of the string as a bytes ' 'object. Default\n' @@ -10577,7 +10594,7 @@ 'followed by\n' ' the string itself.\n' '\n' - 'str.rsplit(sep=None, maxsplit=-1)\n' + 'str.rsplit(sep=None, maxsplit=- 1)\n' '\n' ' Return a list of the words in the string, using *sep* ' 'as the\n' @@ -10618,7 +10635,7 @@ " >>> 'Monty Python'.removesuffix(' Python')\n" " 'Monty'\n" '\n' - 'str.split(sep=None, maxsplit=-1)\n' + 'str.split(sep=None, maxsplit=- 1)\n' '\n' ' Return a list of the words in the string, using *sep* ' 'as the\n' @@ -11590,7 +11607,7 @@ ' points. All the code points in the range "U+0000 - ' 'U+10FFFF"\n' ' can be represented in a string. Python doesn?t have a ' - '"char"\n' + '*char*\n' ' type; instead, every code point in the string is ' 'represented\n' ' as a string object with length "1". The built-in ' @@ -12320,6 +12337,10 @@ ' gives the precise instruction (this is an index into the\n' ' bytecode string of the code object).\n' '\n' + ' Accessing "f_code" raises an auditing event ' + '"object.__getattr__"\n' + ' with arguments "obj" and ""f_code"".\n' + '\n' ' Special writable attributes: "f_trace", if not "None", is a\n' ' function called for various events during code execution ' '(this\n' @@ -12403,6 +12424,9 @@ ' the exception occurred in a "try" statement with no matching\n' ' except clause or with a finally clause.\n' '\n' + ' Accessing "tb_frame" raises an auditing event\n' + ' "object.__getattr__" with arguments "obj" and ""tb_frame"".\n' + '\n' ' Special writable attribute: "tb_next" is the next level in ' 'the\n' ' stack trace (towards the frame where the exception occurred), ' diff --git a/Misc/NEWS.d/3.9.5.rst b/Misc/NEWS.d/3.9.5.rst new file mode 100644 index 00000000000000..7404f70d947f5b --- /dev/null +++ b/Misc/NEWS.d/3.9.5.rst @@ -0,0 +1,473 @@ +.. bpo: 43434 +.. date: 2021-05-02-17-50-23 +.. nonce: cy7xz6 +.. release date: 2021-05-03 +.. section: Security + +Creating a :class:`sqlite3.Connection` object now also produces a +``sqlite3.connect`` :ref:`auditing event `. Previously this event +was only produced by :func:`sqlite3.connect` calls. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43882 +.. date: 2021-04-25-07-46-37 +.. nonce: Jpwx85 +.. section: Security + +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. + +.. + +.. bpo: 43472 +.. date: 2021-04-21-22-53-31 +.. nonce: gjLBTb +.. section: Security + +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. + +.. + +.. bpo: 36384 +.. date: 2021-03-30-16-29-51 +.. nonce: sCAmLs +.. section: Security + +:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address +strings. Leading zeros are ambiguous and interpreted as octal notation by +some libraries. For example the legacy function :func:`socket.inet_aton` +treats leading zeros as octal notatation. glibc implementation of modern +:func:`~socket.inet_pton` does not accept any leading zeros. For a while the +:mod:`ipaddress` module used to accept ambiguous leading zeros. + +.. + +.. bpo: 43075 +.. date: 2021-01-31-05-28-14 +.. nonce: DoAXqO +.. section: Security + +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. + +.. + +.. bpo: 42800 +.. date: 2021-01-09-17-07-36 +.. nonce: _dtZvW +.. section: Security + +Audit hooks are now fired for frame.f_code, traceback.tb_frame, and +generator code/frame attribute access. + +.. + +.. bpo: 43105 +.. date: 2021-03-31-20-35-11 +.. nonce: PBVmHm +.. section: Core and Builtins + +Importlib now resolves relative paths when creating module spec objects from +file locations. + +.. + +.. bpo: 42924 +.. date: 2021-01-13-14-06-01 +.. nonce: _WS1Ok +.. section: Core and Builtins + +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). + +.. + +.. bpo: 43993 +.. date: 2021-04-30-19-23-45 +.. nonce: T7_yoq +.. section: Library + +Update bundled pip to 21.1.1. + +.. + +.. bpo: 43937 +.. date: 2021-04-25-13-34-13 +.. nonce: isx95l +.. section: Library + +Fixed the :mod:`turtle` module working with non-default root window. + +.. + +.. bpo: 43930 +.. date: 2021-04-24-14-23-07 +.. nonce: R7ah0m +.. section: Library + +Update bundled pip to 21.1 and setuptools to 56.0.0 + +.. + +.. bpo: 43920 +.. date: 2021-04-23-11-54-38 +.. nonce: cJMQ2D +.. section: Library + +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. + +.. + +.. bpo: 43607 +.. date: 2021-04-22-22-39-58 +.. nonce: 7IYDkG +.. section: Library + +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. + +.. + +.. bpo: 43284 +.. date: 2021-04-21-14-50-57 +.. nonce: 2QZn2T +.. section: Library + +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. + +.. + +.. bpo: 42248 +.. date: 2021-04-11-21-10-57 +.. nonce: pedB1E +.. section: Library + +[Enum] ensure exceptions raised in ``_missing__`` are released + +.. + +.. bpo: 43799 +.. date: 2021-04-10-11-35-50 +.. nonce: 1iV4pX +.. section: Library + +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. + +.. + +.. bpo: 43794 +.. date: 2021-04-09-16-14-22 +.. nonce: -1XPDH +.. section: Library + +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) + +.. + +.. bpo: 43789 +.. date: 2021-04-09-14-08-03 +.. nonce: eaHlAm +.. section: Library + +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. + +.. + +.. bpo: 43788 +.. date: 2021-04-09-12-08-01 +.. nonce: YsvInM +.. section: Library + +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. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-51-19 +.. nonce: LwGy8R +.. section: Library + +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. + +.. + +.. bpo: 43534 +.. date: 2021-03-18-15-46-08 +.. nonce: vPE9Us +.. section: Library + +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. + +.. + +.. bpo: 43522 +.. date: 2021-03-16-22-37-32 +.. nonce: dhNwOu +.. section: Library + +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. +OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. + +.. + +.. bpo: 42967 +.. date: 2021-03-11-00-31-41 +.. nonce: 2PeQRw +.. section: Library + +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``. + +.. + +.. bpo: 43176 +.. date: 2021-02-09-07-24-29 +.. nonce: bocNQn +.. section: Library + +Fixed processing of a dataclass that inherits from a frozen dataclass with +no fields. It is now correctly detected as an error. + +.. + +.. bpo: 41735 +.. date: 2020-09-07-21-40-07 +.. nonce: NKqGKy +.. section: Library + +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. + +.. + +.. bpo: 36470 +.. date: 2020-06-13-23-33-32 +.. nonce: oi6Kdb +.. section: Library + +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. + +.. + +.. bpo: 32745 +.. date: 2018-08-09-23-47-10 +.. nonce: iQi9hI +.. section: Library + +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. + +.. + +.. bpo: 43959 +.. date: 2021-04-27-22-22-22 +.. nonce: n2261q +.. section: Documentation + +The documentation on the PyContextVar C-API was clarified. + +.. + +.. bpo: 43938 +.. date: 2021-04-25-22-44-27 +.. nonce: nC660q +.. section: Documentation + +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. + +.. + +.. bpo: 43755 +.. date: 2021-04-06-14-55-45 +.. nonce: 1m0fGq +.. section: Documentation + +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. + +.. + +.. bpo: 43739 +.. date: 2021-04-06-07-05-49 +.. nonce: L4HjiX +.. section: Documentation + +Fixing the example code in Doc/extending/extending.rst to declare and +initialize the pmodule variable to be of the right type. + +.. + +.. bpo: 43961 +.. date: 2021-04-28-13-21-52 +.. nonce: gNchls +.. section: Tests + +Fix test_logging.test_namer_rotator_inheritance() on Windows: use +:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. + +.. + +.. bpo: 43842 +.. date: 2021-04-16-14-07-40 +.. nonce: w60GAH +.. section: Tests + +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. + +.. + +.. bpo: 43811 +.. date: 2021-04-12-11-14-28 +.. nonce: vGNbnD +.. section: Tests + +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. + +.. + +.. bpo: 43791 +.. date: 2021-04-09-15-10-38 +.. nonce: 4KxiXK +.. section: Tests + +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. + +.. + +.. bpo: 35306 +.. date: 2021-04-22-20-39-49 +.. nonce: F0Cg6X +.. section: Windows + +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. + +.. + +.. bpo: 38822 +.. date: 2021-04-22-19-49-20 +.. nonce: jgdPmq +.. section: Windows + +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`. + +.. + +.. bpo: 26227 +.. date: 2021-04-21-23-37-34 +.. nonce: QMY_eA +.. section: Windows + +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. + +.. + +.. bpo: 40432 +.. date: 2021-04-20-23-07-22 +.. nonce: 9OFpoq +.. section: Windows + +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. + +.. + +.. bpo: 43745 +.. date: 2021-04-06-12-27-33 +.. nonce: rdKNda +.. section: Windows + +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-34-33 +.. nonce: AsYnVX +.. section: Windows + +Upgrade Windows installer to use SQLite 3.35.5. + +.. + +.. bpo: 42119 +.. date: 2021-05-02-21-03-27 +.. nonce: Y7BSX_ +.. section: macOS + +Fix check for macOS SDK paths when building Python. Narrow search to match +contents of SDKs, namely only files in ``/System/Library``, +``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, +anything under ``/System`` was assumed to be in an SDK which causes problems +with the new file system layout in 10.15+ where user file systems may appear +to be mounted under ``/System``. Paths in ``/Library`` were also +incorrectly treated as SDK locations. + +.. + +.. bpo: 44009 +.. date: 2021-05-02-03-45-30 +.. nonce: uvhmlh +.. section: macOS + +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-32-23 +.. nonce: 1ZRcV9 +.. section: macOS + +Update macOS installer to use SQLite 3.35.4. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-52-07 +.. nonce: HSyaKH +.. section: IDLE + +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. 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 deleted file mode 100644 index 33fbb5235ddb66..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-14-06-01.bpo-42924._WS1Ok.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index dd4c18661ec0b8..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importlib now resolves relative paths when creating module spec objects from -file locations. 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 deleted file mode 100644 index 9f8d3625e79618..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 53cba0b47d6d3b..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index dcf252e21bb9e0..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update dataclasses documentation to express that FrozenInstanceError is -derived from AttributeError. 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 deleted file mode 100644 index ba23ffd577b3d4..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst +++ /dev/null @@ -1 +0,0 @@ -The documentation on the PyContextVar C-API was clarified. 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 deleted file mode 100644 index 105ec9281f0051..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst +++ /dev/null @@ -1,2 +0,0 @@ -IDLE dialog windows are now recognized as dialogs by window managers on -macOS and X Window. diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst deleted file mode 100644 index e6a60fe8da140b..00000000000000 --- a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: -embedded null characters would cause a :exc:`ValueError` to be raised. Patch -by Zackery Spytz. 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 deleted file mode 100644 index 9b6ab994f3b6a3..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch -by Claudiu Popa. 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 deleted file mode 100644 index 9e36435a364eaf..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-07-21-40-07.bpo-41735.NKqGKy.rst +++ /dev/null @@ -1 +0,0 @@ -Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. 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 deleted file mode 100644 index 016514d9c3346c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. 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 deleted file mode 100644 index f8ad3eaaedd785..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst +++ /dev/null @@ -1,3 +0,0 @@ -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``. 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 deleted file mode 100644 index a17e1b44637383..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index 7f2e5a46add039..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient -window working on behalf of the canvas 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 deleted file mode 100644 index 7916d2248b231d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`tkinter` 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-09-12-08-01.bpo-43788.YsvInM.rst b/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst deleted file mode 100644 index ff76256472c6ec..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1c0852946214d2..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 64894bdc017e53..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst +++ /dev/null @@ -1 +0,0 @@ -Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) 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 deleted file mode 100644 index bd79519015c7a9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 0722d35a37a1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst +++ /dev/null @@ -1 +0,0 @@ -[Enum] ensure exceptions raised in ``_missing__`` are released 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 deleted file mode 100644 index 7e41016015efed..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index fa62846acaa984..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL -paths. 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 deleted file mode 100644 index 28ff0fb3afa9d3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 7dac21f3d9b197..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file 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 deleted file mode 100644 index cb4d90b723d1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the :mod:`turtle` module working with non-default root window. diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst deleted file mode 100644 index c9d2c458eee75c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1.1. \ No newline at end of file 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 deleted file mode 100644 index d01c0c3073a503..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst +++ /dev/null @@ -1 +0,0 @@ -Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. 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 deleted file mode 100644 index 1c9f727e965fb8..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst +++ /dev/null @@ -1 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst deleted file mode 100644 index f956cde948ec57..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst +++ /dev/null @@ -1,6 +0,0 @@ -:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address -strings. Leading zeros are ambiguous and interpreted as octal notation by -some libraries. For example the legacy function :func:`socket.inet_aton` -treats leading zeros as octal notatation. glibc implementation of modern -:func:`~socket.inet_pton` does not accept any leading zeros. For a while -the :mod:`ipaddress` module used to accept ambiguous leading zeros. 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 deleted file mode 100644 index e38dc169def96e..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst +++ /dev/null @@ -1,3 +0,0 @@ -Ensures interpreter-level audit hooks receive the -``cpython.PyInterpreterState_New`` event when called through the -``_xxsubinterpreters`` module. 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 deleted file mode 100644 index a326d079dff4a4..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst deleted file mode 100644 index 28b7fc53853405..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst +++ /dev/null @@ -1,4 +0,0 @@ -Creating a :class:`sqlite3.Connection` object now also produces -a ``sqlite3.connect`` :ref:`auditing event `. -Previously this event was only produced by :func:`sqlite3.connect` -calls. Patch by Erlend E. Aasland. 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 deleted file mode 100644 index 964ae5abb3d880..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst +++ /dev/null @@ -1,2 +0,0 @@ -OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests -are failing with TLSV1_ALERT_INTERNAL_ERROR. 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 deleted file mode 100644 index d4c7066013332c..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up -testing. 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 deleted file mode 100644 index 5b4a120eb86371..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index e56572f5170998..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_logging.test_namer_rotator_inheritance() on Windows: use -:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. 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 deleted file mode 100644 index 93da1b6dec8e3b..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst +++ /dev/null @@ -1 +0,0 @@ -Upgrade Windows installer to use SQLite 3.35.5. 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 deleted file mode 100644 index 8ec498d11ea938..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst +++ /dev/null @@ -1,2 +0,0 @@ -Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were -mislabelled and actually included 1.1.1i again. 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 deleted file mode 100644 index 6f8ce00bf99ecc..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d6826fb39706bd..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed decoding of host names in :func:`socket.gethostbyaddr` and -:func:`socket.gethostbyname_ex`. 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 deleted file mode 100644 index 072a96989c3d04..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index af41b3ceacb648..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-35306.F0Cg6X.rst +++ /dev/null @@ -1,2 +0,0 @@ -Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an -invalid filename. 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 deleted file mode 100644 index 39f15370688161..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer to use SQLite 3.35.4. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst deleted file mode 100644 index f9f11c8ae6a793..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst +++ /dev/null @@ -1,4 +0,0 @@ -Provide "python3.x-intel64" executable to allow reliably forcing macOS -universal2 framework builds to run under Rosetta 2 Intel-64 emulation on -Apple Silicon Macs. This can be useful for testing or when universal2 -wheels are not yet available. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst deleted file mode 100644 index 7dd67a527eb009..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst +++ /dev/null @@ -1,7 +0,0 @@ -Fix check for macOS SDK paths when building Python. Narrow search to match -contents of SDKs, namely only files in ``/System/Library``, -``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, -anything under ``/System`` was assumed to be in an SDK which causes problems -with the new file system layout in 10.15+ where user file systems may appear -to be mounted under ``/System``. Paths in ``/Library`` were also -incorrectly treated as SDK locations. diff --git a/README.rst b/README.rst index f62e3b3664fad2..b94eda93a8ac8a 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.9.4 +This is Python version 3.9.5 ============================ .. image:: https://travis-ci.org/python/cpython.svg?branch=3.9 From webhook-mailer at python.org Mon May 3 14:27:28 2021 From: webhook-mailer at python.org (ambv) Date: Mon, 03 May 2021 18:27:28 -0000 Subject: [Python-checkins] Post 3.9.5 Message-ID: https://github.com/python/cpython/commit/bf124244f0595fb3b4f969a31644b7d110de41ef commit: bf124244f0595fb3b4f969a31644b7d110de41ef branch: 3.9 author: ?ukasz Langa committer: ambv date: 2021-05-03T20:26:51+02:00 summary: Post 3.9.5 files: M Include/patchlevel.h diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 32ce11654c082..40b75a655ee2d 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.9.5" +#define PY_VERSION "3.9.5+" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. From webhook-mailer at python.org Mon May 3 15:09:07 2021 From: webhook-mailer at python.org (orsenthil) Date: Mon, 03 May 2021 19:09:07 -0000 Subject: [Python-checkins] [3.9] bpo-43882 Remove the newline, and tab early. From query and fragments. (#25853) Message-ID: https://github.com/python/cpython/commit/8a595744e696a0fb92dccc5d4e45da41571270a1 commit: 8a595744e696a0fb92dccc5d4e45da41571270a1 branch: 3.9 author: Senthil Kumaran committer: orsenthil date: 2021-05-03T12:08:59-07:00 summary: [3.9] bpo-43882 Remove the newline, and tab early. From query and fragments. (#25853) * Remove the newline, and tab early. From query and fragments. files: 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 67341fecef94cd..31943f357f49f3 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -614,32 +614,40 @@ def test_urlsplit_attributes(self): 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" + url = "http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, "query=something") + self.assertEqual(p.fragment, "fragment") 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") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") # Remove ASCII tabs and newlines from input as bytes. - url = b"http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + url = b"http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, b"query=something") + self.assertEqual(p.fragment, b"fragment") 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") + self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # with scheme as cache-key + url = "http://www.python.org/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "ht\ntp" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") def test_attributes_bad_port(self): """Check handling of invalid ports.""" diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index c11c695a741c8a..b7965fe3d2b195 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -456,6 +456,11 @@ def urlsplit(url, scheme='', allow_fragments=True): """ url, scheme, _coerce_result = _coerce_args(url, scheme) + + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + scheme = scheme.replace(b, "") + allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) @@ -472,9 +477,6 @@ 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 From webhook-mailer at python.org Mon May 3 15:27:55 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 19:27:55 -0000 Subject: [Python-checkins] Remove Enum warnings from test_httpservers (GH-25844) Message-ID: https://github.com/python/cpython/commit/d3b9134ebb40bdb01ff52a37515c7c96970c9a0b commit: d3b9134ebb40bdb01ff52a37515c7c96970c9a0b branch: master author: Shreyan Avigyan committer: pablogsal date: 2021-05-03T20:27:47+01:00 summary: Remove Enum warnings from test_httpservers (GH-25844) files: M Lib/test/test_httpservers.py diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 12574a6025190..6b17817b22bf0 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -259,7 +259,7 @@ def test_send_error(self): for code in (HTTPStatus.NO_CONTENT, HTTPStatus.NOT_MODIFIED, HTTPStatus.PROCESSING, HTTPStatus.RESET_CONTENT, HTTPStatus.SWITCHING_PROTOCOLS): - self.con.request('SEND_ERROR', '/{}'.format(code)) + self.con.request('SEND_ERROR', '/{:d}'.format(code)) res = self.con.getresponse() self.assertEqual(code, res.status) self.assertEqual(None, res.getheader('Content-Length')) @@ -276,7 +276,7 @@ def test_head_via_send_error(self): for code in (HTTPStatus.OK, HTTPStatus.NO_CONTENT, HTTPStatus.NOT_MODIFIED, HTTPStatus.RESET_CONTENT, HTTPStatus.SWITCHING_PROTOCOLS): - self.con.request('HEAD', '/{}'.format(code)) + self.con.request('HEAD', '/{:d}'.format(code)) res = self.con.getresponse() self.assertEqual(code, res.status) if code == HTTPStatus.OK: From webhook-mailer at python.org Mon May 3 15:58:48 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 19:58:48 -0000 Subject: [Python-checkins] [3.7] bpo-41561: Add workaround for Ubuntu's custom security level (GH-24915) (GH-24928) Message-ID: https://github.com/python/cpython/commit/64be96ae1f85ce6b3bca4328576cf62d73f77b2a commit: 64be96ae1f85ce6b3bca4328576cf62d73f77b2a branch: 3.7 author: Christian Heimes committer: ned-deily date: 2021-05-03T15:58:38-04:00 summary: [3.7] bpo-41561: Add workaround for Ubuntu's custom security level (GH-24915) (GH-24928) Ubuntu 20.04 comes with a patched OpenSSL 1.1.1. Default security level 2 blocks TLS 1.0 and 1.1 connections. Regular OpenSSL 1.1.1 builds allow TLS 1.0 and 1.1 on security level 2. See: See: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/1899878 See: https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/1917625 Signed-off-by: Christian Heimes . (cherry picked from commit f6c6b5821bff815bdc810de53992fd1fbdb2edd4) Co-authored-by: Christian Heimes files: A Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst M .github/workflows/build.yml M Lib/test/test_ssl.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e60d315de48c81..4678b2d1187a67 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -73,7 +73,7 @@ jobs: build_ubuntu: name: 'Ubuntu' - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 needs: check_source if: needs.check_source.outputs.run_tests == 'true' env: diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 1018259603f93e..a7ec6c322ee463 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -142,6 +142,27 @@ def data_file(*name): OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0) OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0) +# Ubuntu has patched OpenSSL and changed behavior of security level 2 +# see https://bugs.python.org/issue41561#msg389003 +def is_ubuntu(): + try: + # Assume that any references of "ubuntu" implies Ubuntu-like distro + # The workaround is not required for 18.04, but doesn't hurt either. + with open("/etc/os-release", encoding="utf-8") as f: + return "ubuntu" in f.read() + except FileNotFoundError: + return False + +if 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: + ctx.set_ciphers("@SECLEVEL=1:ALL") +else: + def seclevel_workaround(*ctxs): + pass + def has_tls_protocol(protocol): """Check if a TLS protocol is available and enabled @@ -2778,6 +2799,8 @@ def try_protocol_combo(server_protocol, client_protocol, expect_success, if client_context.protocol == ssl.PROTOCOL_TLS: client_context.set_ciphers("ALL") + seclevel_workaround(server_context, client_context) + for ctx in (client_context, server_context): ctx.verify_mode = certsreqs ctx.load_cert_chain(SIGNED_CERTFILE) @@ -2820,6 +2843,7 @@ def test_echo(self): 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) @@ -3825,6 +3849,7 @@ def test_min_max_version_tlsv1_1(self): client_context.maximum_version = ssl.TLSVersion.TLSv1_2 server_context.minimum_version = ssl.TLSVersion.TLSv1 server_context.maximum_version = ssl.TLSVersion.TLSv1_1 + seclevel_workaround(client_context, server_context) with ThreadedEchoServer(context=server_context) as server: with client_context.wrap_socket(socket.socket(), @@ -3841,6 +3866,8 @@ def test_min_max_version_mismatch(self): server_context.maximum_version = ssl.TLSVersion.TLSv1_2 client_context.minimum_version = ssl.TLSVersion.TLSv1 client_context.maximum_version = ssl.TLSVersion.TLSv1 + seclevel_workaround(client_context, server_context) + with ThreadedEchoServer(context=server_context) as server: with client_context.wrap_socket(socket.socket(), server_hostname=hostname) as s: @@ -3855,6 +3882,8 @@ def test_min_max_version_sslv3(self): server_context.minimum_version = ssl.TLSVersion.SSLv3 client_context.minimum_version = ssl.TLSVersion.SSLv3 client_context.maximum_version = ssl.TLSVersion.SSLv3 + seclevel_workaround(client_context, server_context) + with ThreadedEchoServer(context=server_context) as server: with client_context.wrap_socket(socket.socket(), server_hostname=hostname) as s: 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 new file mode 100644 index 00000000000000..214350729bff6c --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-03-18-10-34-42.bpo-41561.pDg4w-.rst @@ -0,0 +1 @@ +Add workaround for Ubuntu's custom OpenSSL security level policy. From webhook-mailer at python.org Mon May 3 16:26:26 2021 From: webhook-mailer at python.org (ned-deily) Date: Mon, 03 May 2021 20:26:26 -0000 Subject: [Python-checkins] bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) (GH-25858) Message-ID: https://github.com/python/cpython/commit/512742d554f2c10e9a273855d87a68f5ee93ed29 commit: 512742d554f2c10e9a273855d87a68f5ee93ed29 branch: 3.7 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-03T16:26:18-04:00 summary: bpo-41561: Fix testing with OpenSSL 1.0.2 (GH-25355) (GH-25858) 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 a7ec6c322ee46..f691b2820a46d 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -157,7 +157,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 May 3 16:29:15 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 20:29:15 -0000 Subject: [Python-checkins] Python 3.11.0a0 Message-ID: https://github.com/python/cpython/commit/bb3e0c240bc60fe08d332ff5955d54197f79751c commit: bb3e0c240bc60fe08d332ff5955d54197f79751c branch: master author: Pablo Galindo committer: pablogsal date: 2021-05-03T21:25:35+01:00 summary: Python 3.11.0a0 files: M Doc/tutorial/interpreter.rst M Doc/tutorial/stdlib.rst M Doc/tutorial/stdlib2.rst M Include/patchlevel.h M README.rst M configure.ac diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst index d2733a9968fb1..d7f300d93b021 100644 --- a/Doc/tutorial/interpreter.rst +++ b/Doc/tutorial/interpreter.rst @@ -10,13 +10,13 @@ Using the Python Interpreter Invoking the Interpreter ======================== -The Python interpreter is usually installed as :file:`/usr/local/bin/python3.10` +The Python interpreter is usually installed as :file:`/usr/local/bin/python3.11` on those machines where it is available; putting :file:`/usr/local/bin` in your Unix shell's search path makes it possible to start it by typing the command: .. code-block:: text - python3.10 + python3.11 to the shell. [#]_ Since the choice of the directory where the interpreter lives is an installation option, other places are possible; check with your local @@ -24,7 +24,7 @@ Python guru or system administrator. (E.g., :file:`/usr/local/python` is a popular alternative location.) On Windows machines where you have installed Python from the :ref:`Microsoft Store -`, the :file:`python3.10` command will be available. If you have +`, the :file:`python3.11` command will be available. If you have the :ref:`py.exe launcher ` installed, you can use the :file:`py` command. See :ref:`setting-envvars` for other ways to launch Python. @@ -97,9 +97,9 @@ before printing the first prompt: .. code-block:: shell-session - $ python3.10 - Python 3.10 (default, June 4 2019, 09:25:04) - [GCC 4.8.2] on linux + $ python3.11 + Python 3.11 (default, April 4 2021, 09:25:04) + [GCC 10.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> diff --git a/Doc/tutorial/stdlib.rst b/Doc/tutorial/stdlib.rst index f33265cd2b0eb..bad750424c8e8 100644 --- a/Doc/tutorial/stdlib.rst +++ b/Doc/tutorial/stdlib.rst @@ -15,7 +15,7 @@ operating system:: >>> import os >>> os.getcwd() # Return the current working directory - 'C:\\Python310' + 'C:\\Python311' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdir today') # Run the command mkdir in the system shell 0 diff --git a/Doc/tutorial/stdlib2.rst b/Doc/tutorial/stdlib2.rst index 298034d3b4844..69ec0d4727c0b 100644 --- a/Doc/tutorial/stdlib2.rst +++ b/Doc/tutorial/stdlib2.rst @@ -278,7 +278,7 @@ applications include caching objects that are expensive to create:: Traceback (most recent call last): File "", line 1, in d['primary'] # entry was automatically removed - File "C:/python310/lib/weakref.py", line 46, in __getitem__ + File "C:/python311/lib/weakref.py", line 46, in __getitem__ o = self.data[key]() KeyError: 'primary' diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 0a29562e313b3..f37c4d48e3760 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -17,13 +17,13 @@ /* Version parsed out into numeric values */ /*--start constants--*/ #define PY_MAJOR_VERSION 3 -#define PY_MINOR_VERSION 10 +#define PY_MINOR_VERSION 11 #define PY_MICRO_VERSION 0 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 7 +#define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.10.0a7+" +#define PY_VERSION "3.11.0a0" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/README.rst b/README.rst index 18d6e6a96f937..165cb1d9f396a 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.10.0 alpha 7 +This is Python version 3.11.0 alpha 1 ===================================== .. image:: https://travis-ci.com/python/cpython.svg?branch=master diff --git a/configure.ac b/configure.ac index 366ab2c84ae07..4fc269a730929 100644 --- a/configure.ac +++ b/configure.ac @@ -6,7 +6,7 @@ dnl Python's configure script requires autoconf 2.69 and autoconf-archive. dnl # Set VERSION so we only need to edit in one place (i.e., here) -m4_define(PYTHON_VERSION, 3.10) +m4_define(PYTHON_VERSION, 3.11) AC_PREREQ([2.69]) From webhook-mailer at python.org Mon May 3 16:29:15 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 20:29:15 -0000 Subject: [Python-checkins] Python 3.10.0b1 Message-ID: https://github.com/python/cpython/commit/ba4217537c8a9f316921b8e3468bec86a9cab5f6 commit: ba4217537c8a9f316921b8e3468bec86a9cab5f6 branch: 3.10 author: Pablo Galindo committer: pablogsal date: 2021-05-03T20:34:56+01:00 summary: Python 3.10.0b1 files: A Misc/NEWS.d/3.10.0b1.rst D Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst D Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst D Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst D Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst D Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst D Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst D Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst D Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst D Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst D Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst D Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst D Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst D Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst D Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst D Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst D Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst D Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst D Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst D Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst D Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst D Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst D Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst D Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst D Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst D Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst D Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst D Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst D Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst D Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst D Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst D Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst D Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst D Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst D Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst D Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst D Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst D Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst D Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst D Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst D Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst D Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst D Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst D Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst D Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst D Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst D Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst D Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst D Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst D Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst D Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst D Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst D Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst D Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst D Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst D Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst D Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst D Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst D Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst D Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst D Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst D Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst D Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst D Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst D Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst D Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst D Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst D Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst D Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst D Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst D Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst D Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst D Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst D Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst D Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst D Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst D Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst D Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst D Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst D Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst D Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst D Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst D Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst D Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst D Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst D Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst D Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst D Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst D Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst D Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst D Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst D Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst D Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst D Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst D Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst D Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst D Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst D Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst D Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst D Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst D Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst D Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst D Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst D Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst D Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst D Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst D Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst D Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst D Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst D Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst D Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst D Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst D Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst D Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst D Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst D Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst D Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst D Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst D Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst D Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst D Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst D Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst D Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst D Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst D Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst D Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst D Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst D Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst D Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst D Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst D Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst D Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst D Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst D Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst D Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst D Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.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 0a29562e313b3..3368bc61246df 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -19,11 +19,11 @@ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 10 #define PY_MICRO_VERSION 0 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 7 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_BETA +#define PY_RELEASE_SERIAL 1 /* Version as a string */ -#define PY_VERSION "3.10.0a7+" +#define PY_VERSION "3.10.0b1" /*--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 83e1a975ec78b..74f7d9cf183f5 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 Apr 5 17:39:41 2021 +# Autogenerated by Sphinx on Mon May 3 20:34:17 2021 topics = {'assert': 'The "assert" statement\n' '**********************\n' '\n' @@ -988,9 +988,9 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A ' - 'descriptor can define\n' - 'any combination of "__get__()", "__set__()" and ' + 'on which descriptor methods are defined. A descriptor ' + 'can define any\n' + 'combination of "__get__()", "__set__()" and ' '"__delete__()". If it\n' 'does not define "__get__()", then accessing the ' 'attribute will return\n' @@ -1360,6 +1360,10 @@ 'through their "__code__" attribute. See also the ' '"code" module.\n' '\n' + 'Accessing "__code__" raises an auditing event ' + '"object.__getattr__"\n' + 'with arguments "obj" and ""__code__"".\n' + '\n' 'A code object can be executed or evaluated by passing ' 'it (instead of a\n' 'source string) to the "exec()" or "eval()" built-in ' @@ -2694,7 +2698,7 @@ ' subject_expr ::= star_named_expression "," ' 'star_named_expressions?\n' ' | named_expression\n' - " case_block ::= 'case' patterns [guard] ':' block\n" + ' case_block ::= \'case\' patterns [guard] ":" block\n' '\n' 'Note:\n' '\n' @@ -3073,7 +3077,7 @@ 'additional\n' 'syntax. Syntax:\n' '\n' - " group_pattern ::= '(' pattern ')'\n" + ' group_pattern ::= "(" pattern ")"\n' '\n' 'In simple terms "(P)" has the same effect as "P".\n' '\n' @@ -3293,7 +3297,9 @@ ' For a number of built-in types (specified below), a single\n' ' positional subpattern is accepted which will match the ' 'entire\n' - ' subject; for these types no keyword patterns are accepted.\n' + ' subject; for these types keyword patterns also work as for ' + 'other\n' + ' types.\n' '\n' ' If only keyword patterns are present, they are processed as\n' ' follows, one by one:\n' @@ -3330,9 +3336,9 @@ '\n' ' * If this raises an exception, the exception bubbles up.\n' '\n' - ' * If the returned value is not a list or tuple, the ' - 'conversion\n' - ' fails and "TypeError" is raised.\n' + ' * If the returned value is not a tuple, the conversion ' + 'fails and\n' + ' "TypeError" is raised.\n' '\n' ' * If there are more positional patterns than\n' ' "len(cls.__match_args__)", "TypeError" is raised.\n' @@ -3426,7 +3432,6 @@ ' decorators ::= decorator+\n' ' decorator ::= "@" assignment_expression ' 'NEWLINE\n' - ' dotted_name ::= identifier ("." identifier)*\n' ' parameter_list ::= defparameter ("," ' 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n' ' | parameter_list_no_posonly\n' @@ -3526,7 +3531,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -3538,8 +3543,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -3552,11 +3563,20 @@ 'parameter list. These annotations can be any valid Python ' 'expression.\n' 'The presence of annotations does not change the semantics of a\n' - 'function. The annotation values are available as string values ' - 'in a\n' + 'function. The annotation values are available as values of a\n' 'dictionary keyed by the parameters? names in the ' '"__annotations__"\n' - 'attribute of the function object.\n' + 'attribute of the function object. If the "annotations" import ' + 'from\n' + '"__future__" is used, annotations are preserved as strings at ' + 'runtime\n' + 'which enables postponed evaluation. Otherwise, they are ' + 'evaluated\n' + 'when the function definition is executed. In this case ' + 'annotations\n' + 'may be evaluated in a different order than they appear in the ' + 'source\n' + 'code.\n' '\n' 'It is also possible to create anonymous functions (functions not ' 'bound\n' @@ -6562,7 +6582,6 @@ ' decorators ::= decorator+\n' ' decorator ::= "@" assignment_expression ' 'NEWLINE\n' - ' dotted_name ::= identifier ("." identifier)*\n' ' parameter_list ::= defparameter ("," ' 'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n' ' | parameter_list_no_posonly\n' @@ -6662,7 +6681,7 @@ 'Calls.\n' 'A function call always assigns values to all parameters ' 'mentioned in\n' - 'the parameter list, either from position arguments, from ' + 'the parameter list, either from positional arguments, from ' 'keyword\n' 'arguments, or from default values. If the form ?"*identifier"? ' 'is\n' @@ -6674,8 +6693,14 @@ 'new\n' 'empty mapping of the same type. Parameters after ?"*"? or\n' '?"*identifier"? are keyword-only parameters and may only be ' - 'passed\n' - 'used keyword arguments.\n' + 'passed by\n' + 'keyword arguments. Parameters before ?"/"? are positional-only\n' + 'parameters and may only be passed by positional arguments.\n' + '\n' + 'Changed in version 3.8: The "/" function parameter syntax may be ' + 'used\n' + 'to indicate positional-only parameters. See **PEP 570** for ' + 'details.\n' '\n' 'Parameters may have an *annotation* of the form ?": ' 'expression"?\n' @@ -6688,11 +6713,20 @@ 'parameter list. These annotations can be any valid Python ' 'expression.\n' 'The presence of annotations does not change the semantics of a\n' - 'function. The annotation values are available as string values ' - 'in a\n' + 'function. The annotation values are available as values of a\n' 'dictionary keyed by the parameters? names in the ' '"__annotations__"\n' - 'attribute of the function object.\n' + 'attribute of the function object. If the "annotations" import ' + 'from\n' + '"__future__" is used, annotations are preserved as strings at ' + 'runtime\n' + 'which enables postponed evaluation. Otherwise, they are ' + 'evaluated\n' + 'when the function definition is executed. In this case ' + 'annotations\n' + 'may be evaluated in a different order than they appear in the ' + 'source\n' + 'code.\n' '\n' 'It is also possible to create anonymous functions (functions not ' 'bound\n' @@ -7395,10 +7429,7 @@ 'lambda': 'Lambdas\n' '*******\n' '\n' - ' lambda_expr ::= "lambda" [parameter_list] ":" ' - 'expression\n' - ' lambda_expr_nocond ::= "lambda" [parameter_list] ":" ' - 'expression_nocond\n' + ' lambda_expr ::= "lambda" [parameter_list] ":" expression\n' '\n' 'Lambda expressions (sometimes called lambda forms) are used to ' 'create\n' @@ -8009,8 +8040,8 @@ '\n' 'The following table summarizes the operator precedence ' 'in Python, from\n' - 'lowest precedence (least binding) to highest precedence ' - '(most\n' + 'highest precedence (most binding) to lowest precedence ' + '(least\n' 'binding). Operators in the same box have the same ' 'precedence. Unless\n' 'the syntax is explicitly given, operators are binary. ' @@ -8029,71 +8060,71 @@ '| Operator | ' 'Description |\n' '|=================================================|=======================================|\n' - '| ":=" | ' - 'Assignment expression |\n' - '+-------------------------------------------------+---------------------------------------+\n' - '| "lambda" | ' - 'Lambda expression |\n' + '| "(expressions...)", "[expressions...]", "{key: | ' + 'Binding or parenthesized expression, |\n' + '| value...}", "{expressions...}" | list ' + 'display, dictionary display, set |\n' + '| | ' + 'display |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "if" ? "else" | ' - 'Conditional expression |\n' + '| "x[index]", "x[index:index]", | ' + 'Subscription, slicing, call, |\n' + '| "x(arguments...)", "x.attribute" | ' + 'attribute reference |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "or" | ' - 'Boolean OR |\n' + '| "await" "x" | ' + 'Await expression |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "and" | ' - 'Boolean AND |\n' + '| "**" | ' + 'Exponentiation [5] |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "not" "x" | ' - 'Boolean NOT |\n' + '| "+x", "-x", "~x" | ' + 'Positive, negative, bitwise NOT |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "in", "not in", "is", "is not", "<", "<=", ">", | ' - 'Comparisons, including membership |\n' - '| ">=", "!=", "==" | ' - 'tests and identity tests |\n' + '| "*", "@", "/", "//", "%" | ' + 'Multiplication, matrix |\n' + '| | ' + 'multiplication, division, floor |\n' + '| | ' + 'division, remainder [6] |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "|" | ' - 'Bitwise OR |\n' + '| "+", "-" | ' + 'Addition and subtraction |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "^" | ' - 'Bitwise XOR |\n' + '| "<<", ">>" | ' + 'Shifts |\n' '+-------------------------------------------------+---------------------------------------+\n' '| "&" | ' 'Bitwise AND |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "<<", ">>" | ' - 'Shifts |\n' + '| "^" | ' + 'Bitwise XOR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "+", "-" | ' - 'Addition and subtraction |\n' + '| "|" | ' + 'Bitwise OR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "*", "@", "/", "//", "%" | ' - 'Multiplication, matrix |\n' - '| | ' - 'multiplication, division, floor |\n' - '| | ' - 'division, remainder [5] |\n' + '| "in", "not in", "is", "is not", "<", "<=", ">", | ' + 'Comparisons, including membership |\n' + '| ">=", "!=", "==" | ' + 'tests and identity tests |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "+x", "-x", "~x" | ' - 'Positive, negative, bitwise NOT |\n' + '| "not" "x" | ' + 'Boolean NOT |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "**" | ' - 'Exponentiation [6] |\n' + '| "and" | ' + 'Boolean AND |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "await" "x" | ' - 'Await expression |\n' + '| "or" | ' + 'Boolean OR |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "x[index]", "x[index:index]", | ' - 'Subscription, slicing, call, |\n' - '| "x(arguments...)", "x.attribute" | ' - 'attribute reference |\n' + '| "if" ? "else" | ' + 'Conditional expression |\n' '+-------------------------------------------------+---------------------------------------+\n' - '| "(expressions...)", "[expressions...]", "{key: | ' - 'Binding or parenthesized expression, |\n' - '| value...}", "{expressions...}" | list ' - 'display, dictionary display, set |\n' - '| | ' - 'display |\n' + '| "lambda" | ' + 'Lambda expression |\n' + '+-------------------------------------------------+---------------------------------------+\n' + '| ":=" | ' + 'Assignment expression |\n' '+-------------------------------------------------+---------------------------------------+\n' '\n' '-[ Footnotes ]-\n' @@ -8174,14 +8205,14 @@ 'Check their\n' ' documentation for more info.\n' '\n' - '[5] The "%" operator is also used for string formatting; ' - 'the same\n' - ' precedence applies.\n' - '\n' - '[6] The power operator "**" binds less tightly than an ' + '[5] The power operator "**" binds less tightly than an ' 'arithmetic or\n' ' bitwise unary operator on its right, that is, ' - '"2**-1" is "0.5".\n', + '"2**-1" is "0.5".\n' + '\n' + '[6] The "%" operator is also used for string formatting; ' + 'the same\n' + ' precedence applies.\n', 'pass': 'The "pass" statement\n' '********************\n' '\n' @@ -8266,12 +8297,18 @@ '\n' 'The "from" clause is used for exception chaining: if given, the ' 'second\n' - '*expression* must be another exception class or instance, which ' - 'will\n' - 'then be attached to the raised exception as the "__cause__" ' - 'attribute\n' - '(which is writable). If the raised exception is not handled, both\n' - 'exceptions will be printed:\n' + '*expression* must be another exception class or instance. If the\n' + 'second expression is an exception instance, it will be attached to ' + 'the\n' + 'raised exception as the "__cause__" attribute (which is writable). ' + 'If\n' + 'the expression is an exception class, the class will be ' + 'instantiated\n' + 'and the resulting exception instance will be attached to the ' + 'raised\n' + 'exception as the "__cause__" attribute. If the raised exception is ' + 'not\n' + 'handled, both exceptions will be printed:\n' '\n' ' >>> try:\n' ' ... print(1 / 0)\n' @@ -9613,10 +9650,10 @@ '\n' 'For instance bindings, the precedence of descriptor ' 'invocation depends\n' - 'on the which descriptor methods are defined. A descriptor ' - 'can define\n' - 'any combination of "__get__()", "__set__()" and ' - '"__delete__()". If it\n' + 'on which descriptor methods are defined. A descriptor can ' + 'define any\n' + 'combination of "__get__()", "__set__()" and "__delete__()". ' + 'If it\n' 'does not define "__get__()", then accessing the attribute ' 'will return\n' 'the descriptor object itself unless there is a value in the ' @@ -10677,17 +10714,16 @@ '\n' 'object.__match_args__\n' '\n' - ' This class variable can be assigned a tuple or list of ' - 'strings.\n' - ' When this class is used in a class pattern with ' - 'positional\n' - ' arguments, each positional argument will be converted ' - 'into a\n' - ' keyword argument, using the corresponding value in ' - '*__match_args__*\n' - ' as the keyword. The absence of this attribute is ' - 'equivalent to\n' - ' setting it to "()".\n' + ' This class variable can be assigned a tuple of strings. ' + 'When this\n' + ' class is used in a class pattern with positional ' + 'arguments, each\n' + ' positional argument will be converted into a keyword ' + 'argument,\n' + ' using the corresponding value in *__match_args__* as the ' + 'keyword.\n' + ' The absence of this attribute is equivalent to setting it ' + 'to "()".\n' '\n' 'For example, if "MyClass.__match_args__" is "("left", ' '"center",\n' @@ -12680,7 +12716,13 @@ '| |\n' ' | | and "\'return\'" for the ' 'return | |\n' - ' | | annotation, if provided. ' + ' | | annotation, if provided. For ' + '| |\n' + ' | | more information on working ' + '| |\n' + ' | | with this attribute, see ' + '| |\n' + ' | | Annotations Best Practices. ' '| |\n' ' ' '+---------------------------+---------------------------------+-------------+\n' @@ -12905,20 +12947,34 @@ ' Attribute assignment updates the module?s namespace dictionary,\n' ' e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n' '\n' - ' Predefined (writable) attributes: "__name__" is the module?s ' - 'name;\n' - ' "__doc__" is the module?s documentation string, or "None" if\n' - ' unavailable; "__annotations__" (optional) is a dictionary\n' - ' containing *variable annotations* collected during module body\n' - ' execution; "__file__" is the pathname of the file from which ' + ' Predefined (writable) attributes:\n' + '\n' + ' "__name__"\n' + ' The module?s name.\n' + '\n' + ' "__doc__"\n' + ' The module?s documentation string, or "None" if ' + 'unavailable.\n' + '\n' + ' "__file__"\n' + ' The pathname of the file from which the module was loaded, ' + 'if\n' + ' it was loaded from a file. The "__file__" attribute may ' + 'be\n' + ' missing for certain types of modules, such as C modules ' + 'that\n' + ' are statically linked into the interpreter. For ' + 'extension\n' + ' modules loaded dynamically from a shared library, it?s ' 'the\n' - ' module was loaded, if it was loaded from a file. The "__file__"\n' - ' attribute may be missing for certain types of modules, such as ' - 'C\n' - ' modules that are statically linked into the interpreter; for\n' - ' extension modules loaded dynamically from a shared library, it ' - 'is\n' - ' the pathname of the shared library file.\n' + ' pathname of the shared library file.\n' + '\n' + ' "__annotations__"\n' + ' A dictionary containing *variable annotations* collected\n' + ' during module body execution. For best practices on ' + 'working\n' + ' with "__annotations__", please see Annotations Best\n' + ' Practices.\n' '\n' ' Special read-only attribute: "__dict__" is the module?s ' 'namespace\n' @@ -12976,20 +13032,31 @@ 'instance\n' ' (see below).\n' '\n' - ' Special attributes: "__name__" is the class name; "__module__" ' - 'is\n' - ' the module name in which the class was defined; "__dict__" is ' - 'the\n' - ' dictionary containing the class?s namespace; "__bases__" is a ' - 'tuple\n' - ' containing the base classes, in the order of their occurrence ' - 'in\n' - ' the base class list; "__doc__" is the class?s documentation ' - 'string,\n' - ' or "None" if undefined; "__annotations__" (optional) is a\n' - ' dictionary containing *variable annotations* collected during ' - 'class\n' - ' body execution.\n' + ' Special attributes:\n' + '\n' + ' "__name__"\n' + ' The class name.\n' + '\n' + ' "__module__"\n' + ' The name of the module in which the class was defined.\n' + '\n' + ' "__dict__"\n' + ' The dictionary containing the class?s namespace.\n' + '\n' + ' "__bases__"\n' + ' A tuple containing the base classes, in the order of ' + 'their\n' + ' occurrence in the base class list.\n' + '\n' + ' "__doc__"\n' + ' The class?s documentation string, or "None" if undefined.\n' + '\n' + ' "__annotations__"\n' + ' A dictionary containing *variable annotations* collected\n' + ' during class body execution. For best practices on ' + 'working\n' + ' with "__annotations__", please see Annotations Best\n' + ' Practices.\n' '\n' 'Class instances\n' ' A class instance is created by calling a class object (see ' @@ -13150,6 +13217,10 @@ ' gives the precise instruction (this is an index into the\n' ' bytecode string of the code object).\n' '\n' + ' Accessing "f_code" raises an auditing event ' + '"object.__getattr__"\n' + ' with arguments "obj" and ""f_code"".\n' + '\n' ' Special writable attributes: "f_trace", if not "None", is a\n' ' function called for various events during code execution ' '(this\n' @@ -13233,6 +13304,9 @@ ' the exception occurred in a "try" statement with no matching\n' ' except clause or with a finally clause.\n' '\n' + ' Accessing "tb_frame" raises an auditing event\n' + ' "object.__getattr__" with arguments "obj" and ""tb_frame"".\n' + '\n' ' Special writable attribute: "tb_next" is the next level in ' 'the\n' ' stack trace (towards the frame where the exception occurred), ' @@ -13283,9 +13357,8 @@ ' object actually returned is the wrapped object, which is not\n' ' subject to any further transformation. Static method objects ' 'are\n' - ' not themselves callable, although the objects they wrap ' - 'usually\n' - ' are. Static method objects are created by the built-in\n' + ' also callable. Static method objects are created by the ' + 'built-in\n' ' "staticmethod()" constructor.\n' '\n' ' Class method objects\n' diff --git a/Misc/NEWS.d/3.10.0b1.rst b/Misc/NEWS.d/3.10.0b1.rst new file mode 100644 index 0000000000000..a0dac135a3a60 --- /dev/null +++ b/Misc/NEWS.d/3.10.0b1.rst @@ -0,0 +1,1807 @@ +.. bpo: 43434 +.. date: 2021-05-02-17-50-23 +.. nonce: cy7xz6 +.. release date: 2021-05-03 +.. section: Security + +Creating :class:`sqlite3.Connection` objects now also produces +``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events +`. Previously these events were only produced by +:func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43998 +.. date: 2021-05-01-13-13-40 +.. nonce: xhmWD7 +.. section: Security + +The :mod:`ssl` module sets more secure cipher suites defaults. Ciphers +without forward secrecy and with SHA-1 MAC are disabled by default. Security +level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of +security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS +1.2. Settings are based on Hynek Schlawack's research. + +.. + +.. bpo: 43882 +.. date: 2021-04-25-07-46-37 +.. nonce: Jpwx85 +.. section: Security + +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. + +.. + +.. bpo: 43472 +.. date: 2021-04-21-22-53-31 +.. nonce: gjLBTb +.. section: Security + +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. + +.. + +.. bpo: 43362 +.. date: 2021-04-18-00-56-44 +.. nonce: __5aiP +.. section: Security + +Fix invalid free in _sha3 module. The issue was introduced in 3.10.0a1. +Python 3.9 and earlier are not affected. + +.. + +.. bpo: 43762 +.. date: 2021-04-07-12-57-41 +.. nonce: 7lMtpT +.. section: Security + +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. + +.. + +.. bpo: 43756 +.. date: 2021-04-06-18-07-48 +.. nonce: DLBNqQ +.. section: Security + +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`. + +.. + +.. bpo: 36384 +.. date: 2021-03-30-16-29-51 +.. nonce: sCAmLs +.. section: Security + +:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address +strings. Leading zeros are ambiguous and interpreted as octal notation by +some libraries. For example the legacy function :func:`socket.inet_aton` +treats leading zeros as octal notatation. glibc implementation of modern +:func:`~socket.inet_pton` does not accept any leading zeros. For a while the +:mod:`ipaddress` module used to accept ambiguous leading zeros. + +.. + +.. bpo: 43075 +.. date: 2021-01-31-05-28-14 +.. nonce: DoAXqO +.. section: Security + +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. + +.. + +.. bpo: 42800 +.. date: 2021-01-09-17-07-36 +.. nonce: _dtZvW +.. section: Security + +Audit hooks are now fired for frame.f_code, traceback.tb_frame, and +generator code/frame attribute access. + +.. + +.. bpo: 37363 +.. date: 2020-07-04-22-14-46 +.. nonce: NDjHNw +.. section: Security + +Add audit events to the :mod:`http.client` module. + +.. + +.. bpo: 43977 +.. date: 2021-05-02-11-59-00 +.. nonce: R0hSDo +.. section: Core and Builtins + +Prevent classes being both a sequence and a mapping when pattern matching. + +.. + +.. bpo: 43977 +.. date: 2021-04-29-17-40-25 +.. nonce: FrQhge +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43892 +.. date: 2021-04-29-16-00-28 +.. nonce: WXIehI +.. section: Core and Builtins + +Restore proper validation of complex literal value patterns when parsing +:keyword:`!match` blocks. + +.. + +.. bpo: 43933 +.. date: 2021-04-29-13-49-57 +.. nonce: TueFdQ +.. section: Core and Builtins + +Set frame.f_lineno to the line number of the 'with' kweyword when executing +the call to ``__exit__``. + +.. + +.. bpo: 43933 +.. date: 2021-04-29-13-11-44 +.. nonce: mvoV6O +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43963 +.. date: 2021-04-28-01-23-38 +.. nonce: u5Y6bS +.. section: Core and Builtins + +Importing the :mod:`_signal` module in a subinterpreter has no longer side +effects. + +.. + +.. bpo: 42739 +.. date: 2021-04-27-10-59-10 +.. nonce: PrVkKM +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43908 +.. date: 2021-04-26-21-20-41 +.. nonce: 2L51nO +.. section: Core and Builtins + +Make :mod:`re` types immutable. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43908 +.. date: 2021-04-26-20-59-17 +.. nonce: -COW4- +.. section: Core and Builtins + +Make the :class:`array.array` type immutable. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43901 +.. date: 2021-04-25-22-50-47 +.. nonce: oKjG5E +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43892 +.. date: 2021-04-25-08-35-11 +.. nonce: hr5Ke2 +.. section: Core and Builtins + +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. + +.. + +.. bpo: 42725 +.. date: 2021-04-25-05-40-51 +.. nonce: WGloYm +.. section: Core and Builtins + +Usage of ``await``/``yield``/``yield from`` and named expressions within an +annotation is now forbidden when PEP 563 is activated. + +.. + +.. bpo: 43754 +.. date: 2021-04-24-16-40-23 +.. nonce: 9SzHWG +.. section: Core and Builtins + +When performing structural pattern matching (:pep:`634`), captured names are +now left unbound until the *entire* pattern has matched successfully. + +.. + +.. bpo: 42737 +.. date: 2021-04-22-22-48-30 +.. nonce: lsJ7pD +.. section: Core and Builtins + +Annotations for complex targets (everything beside simple names) no longer +cause any runtime effects with ``from __future__ import annotations``. + +.. + +.. bpo: 43914 +.. date: 2021-04-22-19-09-58 +.. nonce: 0Ik1AM +.. section: Core and Builtins + +: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. + +.. + +.. bpo: 38605 +.. date: 2021-04-20-22-17-47 +.. nonce: 9eeCNZ +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43475 +.. date: 2021-04-20-20-10-46 +.. nonce: oV8Mbs +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43859 +.. date: 2021-04-16-01-26-57 +.. nonce: QfqjFL +.. section: Core and Builtins + +Improve the error message for :exc:`IndentationError` exceptions. Patch by +Pablo Galindo + +.. + +.. bpo: 41323 +.. date: 2021-04-15-10-19-59 +.. nonce: nsvpSg +.. section: Core and Builtins + +Constant tuple folding in bytecode optimizer now reuses tuple in constant +table. + +.. + +.. bpo: 43846 +.. date: 2021-04-14-13-53-08 +.. nonce: 2jO97c +.. section: Core and Builtins + +Data stack usage is much reduced for large literal and call expressions. + +.. + +.. bpo: 38530 +.. date: 2021-04-14-03-53-06 +.. nonce: rNI_G1 +.. section: Core and Builtins + +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 + +.. + +.. bpo: 43823 +.. date: 2021-04-13-03-06-09 +.. nonce: xpuHBi +.. section: Core and Builtins + +Improve syntax errors for invalid dictionary literals. Patch by Pablo +Galindo. + +.. + +.. bpo: 43822 +.. date: 2021-04-13-02-32-18 +.. nonce: lej0OO +.. section: Core and Builtins + +Improve syntax errors in the parser for missing commas between expressions. +Patch by Pablo Galindo. + +.. + +.. bpo: 43798 +.. date: 2021-04-10-00-01-43 +.. nonce: p_nJFM +.. section: Core and Builtins + +:class:`ast.alias` nodes now include source location metadata attributes +e.g. lineno, col_offset. + +.. + +.. bpo: 43797 +.. date: 2021-04-09-19-12-48 +.. nonce: HfRqNP +.. section: Core and Builtins + +Improve ``SyntaxError`` error messages for invalid comparisons. Patch by +Pablo Galindo. + +.. + +.. bpo: 43760 +.. date: 2021-04-08-12-20-29 +.. nonce: tBIsD8 +.. section: Core and Builtins + +Move the flag for checking whether tracing is enabled to the C stack, from +the heap. Should speed up dispatch in the interpreter. + +.. + +.. bpo: 43682 +.. date: 2021-04-08-01-06-22 +.. nonce: eUn4p5 +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43751 +.. date: 2021-04-07-18-00-05 +.. nonce: 8fHsqQ +.. section: Core and Builtins + +Fixed a bug where ``anext(ait, default)`` would erroneously return None. + +.. + +.. bpo: 42128 +.. date: 2021-04-05-17-38-08 +.. nonce: 1uVeGK +.. section: Core and Builtins + +:data:`~object.__match_args__` is no longer allowed to be a list. + +.. + +.. bpo: 43683 +.. date: 2021-04-01-12-30-30 +.. nonce: AjxOx2 +.. section: Core and Builtins + +Add GEN_START opcode. Marks start of generator, including async, or +coroutine and handles sending values to a newly created generator or +coroutine. + +.. + +.. bpo: 43105 +.. date: 2021-03-31-20-35-11 +.. nonce: PBVmHm +.. section: Core and Builtins + +Importlib now resolves relative paths when creating module spec objects from +file locations. + +.. + +.. bpo: 43682 +.. date: 2021-03-31-16-32-57 +.. nonce: VSF3vg +.. section: Core and Builtins + +Static methods (:func:`@staticmethod `) are now callable as +regular functions. Patch by Victor Stinner. + +.. + +.. bpo: 42609 +.. date: 2020-12-12-14-28-31 +.. nonce: Qcd54b +.. section: Core and Builtins + +Prevented crashes in the AST validator and optimizer when compiling some +absurdly long expressions like ``"+0"*1000000``. :exc:`RecursionError` is +now raised instead. + +.. + +.. bpo: 38530 +.. date: 2019-10-27-20-20-07 +.. nonce: ZyoDNn +.. section: Core and Builtins + +When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer +suggestions of similar attribute names in the object that the exception was +raised from. Patch by Pablo Galindo + +.. + +.. bpo: 44015 +.. date: 2021-05-03-03-03-49 +.. nonce: V5936k +.. section: Library + +In @dataclass(), raise a TypeError if KW_ONLY is specified more than once. + +.. + +.. bpo: 25478 +.. date: 2021-05-02-19-17-20 +.. nonce: AwlwdA +.. section: Library + +Added a *total()* method to collections.Counter() to compute the sum of the +counts. + +.. + +.. bpo: 43733 +.. date: 2021-05-01-22-59-20 +.. nonce: gJWwEQ +.. section: Library + +Change :class:`netrc.netrc` to use UTF-8 encoding before using locale +encoding. + +.. + +.. bpo: 43979 +.. date: 2021-05-01-01-36-51 +.. nonce: 43oJ9L +.. section: Library + +Removed an unnecessary list comprehension before looping from +:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee +Na. + +.. + +.. bpo: 43993 +.. date: 2021-04-30-19-23-45 +.. nonce: T7_yoq +.. section: Library + +Update bundled pip to 21.1.1. + +.. + +.. bpo: 43957 +.. date: 2021-04-27-12-13-51 +.. nonce: 6EaPD- +.. section: Library + +[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. + +.. + +.. bpo: 42904 +.. date: 2021-04-26-23-39-47 +.. nonce: ejjsyR +.. section: Library + +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. + +.. + +.. bpo: 43945 +.. date: 2021-04-26-20-52-16 +.. nonce: NgERXO +.. section: Library + +[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum +member, not the member's value, will be used for format() calls. + +.. + +.. bpo: 41139 +.. date: 2021-04-26-17-47-48 +.. nonce: ROhn1k +.. section: Library + +Deprecate undocumented ``cgi.log()`` API. + +.. + +.. bpo: 43937 +.. date: 2021-04-25-13-34-13 +.. nonce: isx95l +.. section: Library + +Fixed the :mod:`turtle` module working with non-default root window. + +.. + +.. bpo: 43930 +.. date: 2021-04-24-14-23-07 +.. nonce: R7ah0m +.. section: Library + +Update bundled pip to 21.1 and setuptools to 56.0.0 + +.. + +.. bpo: 43907 +.. date: 2021-04-23-20-57-20 +.. nonce: 3RJEjv +.. section: Library + +Fix a bug in the pure-Python pickle implementation when using protocol 5, +where bytearray instances that occur several time in the pickled object +graph would incorrectly unpickle into repeated copies of the bytearray +object. + +.. + +.. bpo: 43926 +.. date: 2021-04-23-17-48-55 +.. nonce: HMUlGU +.. section: Library + +In ``importlib.metadata``, provide a uniform interface to ``Description``, +allow for any field to be encoded with multiline values, remove continuation +lines from multiline values, and add a ``.json`` property for easy access to +the PEP 566 JSON-compatible form. Sync with ``importlib_metadata 4.0``. + +.. + +.. bpo: 43920 +.. date: 2021-04-23-11-54-38 +.. nonce: cJMQ2D +.. section: Library + +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. + +.. + +.. bpo: 43607 +.. date: 2021-04-22-22-39-58 +.. nonce: 7IYDkG +.. section: Library + +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. + +.. + +.. bpo: 43817 +.. date: 2021-04-22-04-12-13 +.. nonce: FQ-XlH +.. section: Library + +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. + +.. + +.. bpo: 43284 +.. date: 2021-04-21-14-50-57 +.. nonce: 2QZn2T +.. section: Library + +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. + +.. + +.. bpo: 42854 +.. date: 2021-04-19-03-54-29 +.. nonce: Y4M7Tv +.. section: Library + +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. + +.. + +.. bpo: 42333 +.. date: 2021-04-17-19-31-17 +.. nonce: cgbtZO +.. section: Library + +Port ``_ssl`` extension module to multiphase initialization. + +.. + +.. bpo: 43880 +.. date: 2021-04-17-13-53-33 +.. nonce: -fC2JD +.. section: Library + +: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. + +.. + +.. bpo: 41559 +.. date: 2021-04-17-10-49-57 +.. nonce: caIwt9 +.. section: Library + +: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. + +.. + +.. bpo: 43867 +.. date: 2021-04-16-16-46-44 +.. nonce: xT9QjF +.. section: Library + +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). + +.. + +.. bpo: 40443 +.. date: 2021-04-16-02-03-00 +.. nonce: Io6FHL +.. section: Library + +Remove unused imports: pyclbr no longer uses copy, and typing no longer uses +ast. Patch by Victor Stinner. + +.. + +.. bpo: 43820 +.. date: 2021-04-12-18-01-10 +.. nonce: YkqYW4 +.. section: Library + +Remove an unneeded copy of the namespace passed to +dataclasses.make_dataclass(). + +.. + +.. bpo: 43787 +.. date: 2021-04-12-15-15-50 +.. nonce: wCy_Wd +.. section: Library + +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. + +.. + +.. bpo: 43680 +.. date: 2021-04-12-11-20-34 +.. nonce: SR0Epv +.. section: Library + +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(). + +.. + +.. bpo: 43680 +.. date: 2021-04-12-09-57-37 +.. nonce: o1zEk_ +.. section: Library + +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. + +.. + +.. bpo: 41515 +.. date: 2021-04-12-06-01-10 +.. nonce: YaVReb +.. section: Library + +Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due to synthetic +modules that don't appear in ``sys.modules``. + +.. + +.. bpo: 43776 +.. date: 2021-04-12-00-00-00 +.. nonce: p14y7a +.. section: Library + +When :class:`subprocess.Popen` args are provided as a string or as +:class:`pathlib.Path`, the Popen instance repr now shows the right thing. + +.. + +.. bpo: 42248 +.. date: 2021-04-11-21-10-57 +.. nonce: pedB1E +.. section: Library + +[Enum] ensure exceptions raised in ``_missing__`` are released + +.. + +.. bpo: 43744 +.. date: 2021-04-11-20-52-32 +.. nonce: uf0E68 +.. section: Library + +fix issue with enum member name matching the start of a private variable +name + +.. + +.. bpo: 43772 +.. date: 2021-04-10-19-14-49 +.. nonce: Bxq0zQ +.. section: Library + +Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle Zijlstra. + +.. + +.. bpo: 43764 +.. date: 2021-04-10-18-23-09 +.. nonce: Le5KJp +.. section: Library + +Add match_args parameter to @dataclass decorator to allow suppression of +__match_args__ generation. + +.. + +.. bpo: 43799 +.. date: 2021-04-10-11-35-50 +.. nonce: 1iV4pX +.. section: Library + +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. + +.. + +.. bpo: 43478 +.. date: 2021-04-10-03-30-36 +.. nonce: iZcBTq +.. section: Library + +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. + +.. + +.. bpo: 43794 +.. date: 2021-04-09-16-14-22 +.. nonce: -1XPDH +.. section: Library + +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) + +.. + +.. bpo: 43785 +.. date: 2021-04-09-14-51-58 +.. nonce: 1mM5xE +.. section: Library + +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. + +.. + +.. bpo: 43789 +.. date: 2021-04-09-14-08-03 +.. nonce: eaHlAm +.. section: Library + +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. + +.. + +.. bpo: 43788 +.. date: 2021-04-09-12-08-01 +.. nonce: YsvInM +.. section: Library + +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. + +.. + +.. bpo: 43766 +.. date: 2021-04-09-00-16-22 +.. nonce: nYNQP0 +.. section: Library + +Implement :pep:`647` in the :mod:`typing` module by adding +:data:`TypeGuard`. + +.. + +.. bpo: 25264 +.. date: 2021-04-08-22-11-27 +.. nonce: b33fa0 +.. section: Library + +: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. + +.. + +.. bpo: 43780 +.. date: 2021-04-08-20-04-46 +.. nonce: hUOgCh +.. section: Library + +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. + +.. + +.. bpo: 47383 +.. date: 2021-04-08-19-32-26 +.. nonce: YI1hdL +.. section: Library + +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. + +.. + +.. bpo: 43731 +.. date: 2021-04-08-15-19-20 +.. nonce: nnVd3h +.. section: Library + +Add an ``encoding`` parameter :func:`logging.fileConfig()`. + +.. + +.. bpo: 43712 +.. date: 2021-04-08-12-25-08 +.. nonce: f8WXCX +.. section: Library + +Add ``encoding`` and ``errors`` parameters to :func:`fileinput.input` and +:class:`fileinput.FileInput`. + +.. + +.. bpo: 38659 +.. date: 2021-04-08-11-47-31 +.. nonce: r_HFnU +.. section: Library + +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``. + +.. + +.. bpo: 43764 +.. date: 2021-04-08-09-59-20 +.. nonce: tHjO60 +.. section: Library + +Fix an issue where :data:`~object.__match_args__` generation could fail for +some :mod:`dataclasses`. + +.. + +.. bpo: 43752 +.. date: 2021-04-06-21-18-29 +.. nonce: K7qmAF +.. section: Library + +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. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-51-19 +.. nonce: LwGy8R +.. section: Library + +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. + +.. + +.. bpo: 43723 +.. date: 2021-04-03-18-03-44 +.. nonce: uBhBZS +.. section: Library + +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. + +.. + +.. bpo: 2135 +.. date: 2021-04-03-15-24-59 +.. nonce: xmDAYJ +.. section: Library + +Deprecate find_module() and find_loader() implementations in importlib and +zipimport. + +.. + +.. bpo: 43534 +.. date: 2021-03-18-15-46-08 +.. nonce: vPE9Us +.. section: Library + +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. + +.. + +.. bpo: 43532 +.. date: 2021-03-17-19-06-45 +.. nonce: W2Ntnm +.. section: Library + +Add the ability to specify keyword-only fields to dataclasses. These fields +will become keyword-only arguments to the generated __init__. + +.. + +.. bpo: 43522 +.. date: 2021-03-16-22-37-32 +.. nonce: dhNwOu +.. section: Library + +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. +OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. + +.. + +.. bpo: 8978 +.. date: 2021-03-13-14-02-07 +.. nonce: CRxG-O +.. section: Library + +Improve error message for :func:`tarfile.open` when :mod:`lzma` / :mod:`bz2` +are unavailable. Patch by Anthony Sottile. + +.. + +.. bpo: 42967 +.. date: 2021-03-11-00-31-41 +.. nonce: 2PeQRw +.. section: Library + +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``. + +.. + +.. bpo: 43296 +.. date: 2021-03-01-13-01-33 +.. nonce: p_gU6T +.. section: Library + +Improve :mod:`sqlite3` error handling: ``sqlite3_value_blob()`` errors that +set ``SQLITE_NOMEM`` now raise :exc:`MemoryError`. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43312 +.. date: 2021-02-25-14-43-59 +.. nonce: 6dg9_2 +.. section: Library + +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. + +.. + +.. bpo: 43265 +.. date: 2021-02-19-22-24-33 +.. nonce: MyAzCH +.. section: Library + +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. + +.. + +.. bpo: 41282 +.. date: 2021-02-16-13-18-38 +.. nonce: GK9a0l +.. section: Library + +Install schemes in :mod:`distutils.command.install` are now loaded from +:mod:`sysconfig`. + +.. + +.. bpo: 41282 +.. date: 2021-02-15-12-52-23 +.. nonce: SenEje +.. section: Library + +:mod:`distutils.sysconfig` has been merged to :mod:`sysconfig`. + +.. + +.. bpo: 43176 +.. date: 2021-02-09-07-24-29 +.. nonce: bocNQn +.. section: Library + +Fixed processing of a dataclass that inherits from a frozen dataclass with +no fields. It is now correctly detected as an error. + +.. + +.. bpo: 43080 +.. date: 2021-01-31-00-23-13 +.. nonce: -fDg4Q +.. section: Library + +:mod:`pprint` now has support for :class:`dataclasses.dataclass`. Patch by +Lewis Gaul. + +.. + +.. bpo: 39950 +.. date: 2021-01-22-00-15-37 +.. nonce: NzLVaR +.. section: Library + +Add `pathlib.Path.hardlink_to()` method that supersedes `link_to()`. The new +method has the same argument order as `symlink_to()`. + +.. + +.. bpo: 42904 +.. date: 2021-01-12-23-17-02 +.. nonce: -4qkTD +.. section: Library + +:func:`typing.get_type_hints` now checks the local namespace of a class when +evaluating :pep:`563` annotations inside said class. + +.. + +.. bpo: 42269 +.. date: 2021-01-08-22-32-13 +.. nonce: W5v8z4 +.. section: Library + +Add ``slots`` parameter to ``dataclasses.dataclass`` decorator to +automatically generate ``__slots__`` for class. Patch provided by Yurii +Karabas. + +.. + +.. bpo: 39529 +.. date: 2020-12-06-20-21-16 +.. nonce: 9Zrg43 +.. section: Library + +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`. + +.. + +.. bpo: 18369 +.. date: 2020-11-19-09-52-24 +.. nonce: qzvYH2 +.. section: Library + +Certificate and PrivateKey classes were added to the ssl module. +Certificates and keys can now be loaded from memory buffer, too. + +.. + +.. bpo: 41486 +.. date: 2020-10-16-15-34-30 +.. nonce: Mu9Iit +.. section: Library + +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. + +.. + +.. bpo: 31870 +.. date: 2020-09-15-23-44-07 +.. nonce: nVwd38 +.. section: Library + +The :func:`ssl.get_server_certificate` function now has a *timeout* +parameter. + +.. + +.. bpo: 41735 +.. date: 2020-09-07-11-15-15 +.. nonce: NKqGKy +.. section: Library + +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. + +.. + +.. bpo: 36470 +.. date: 2020-06-13-23-33-32 +.. nonce: oi6Kdb +.. section: Library + +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. + +.. + +.. bpo: 40849 +.. date: 2020-06-02-21-32-33 +.. nonce: zpeKx3 +.. section: Library + +Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag + +.. + +.. bpo: 35114 +.. date: 2020-05-17-14-10-24 +.. nonce: uLIHfn +.. section: Library + +:func:`ssl.RAND_status` now returns a boolean value (as documented) instead +of ``1`` or ``0``. + +.. + +.. bpo: 39906 +.. date: 2020-03-30-00-13-27 +.. nonce: eaR3fN +.. section: Library + +: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. + +.. + +.. bpo: 39899 +.. date: 2020-03-09-20-36-07 +.. nonce: 9adF3E +.. section: Library + +: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. + +.. + +.. bpo: 36076 +.. date: 2019-10-16-17-21-53 +.. nonce: FGeQQT +.. section: Library + +Added SNI support to :func:`ssl.get_server_certificate`. + +.. + +.. bpo: 38490 +.. date: 2019-10-16-08-08-14 +.. nonce: QbDXEF +.. section: Library + +Covariance, Pearson's correlation, and simple linear regression +functionality was added to statistics module. Patch by Tymoteusz Wo?od?ko. + +.. + +.. bpo: 33731 +.. date: 2019-08-14-13-19-50 +.. nonce: 9esS0d +.. section: Library + +Provide a locale.localize() function, which converts a normalized number +string into a locale format. + +.. + +.. bpo: 32745 +.. date: 2018-08-09-23-47-10 +.. nonce: iQi9hI +.. section: Library + +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. + +.. + +.. bpo: 43987 +.. date: 2021-04-30-04-27-02 +.. nonce: 1DftVa +.. section: Documentation + +Add "Annotations Best Practices" document as a new HOWTO. + +.. + +.. bpo: 43977 +.. date: 2021-04-29-15-06-03 +.. nonce: K5aSl1 +.. section: Documentation + +Document the new :const:`Py_TPFLAGS_MAPPING` and +:const:`Py_TPFLAGS_SEQUENCE` type flags. + +.. + +.. bpo: 43959 +.. date: 2021-04-27-22-22-22 +.. nonce: n2261q +.. section: Documentation + +The documentation on the PyContextVar C-API was clarified. + +.. + +.. bpo: 43938 +.. date: 2021-04-25-22-44-27 +.. nonce: nC660q +.. section: Documentation + +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. + +.. + +.. bpo: 43778 +.. date: 2021-04-08-22-42-02 +.. nonce: MszRnY +.. section: Documentation + +Fix the Sphinx glossary_search extension: create the _static/ sub-directory +if it doesn't exist. + +.. + +.. bpo: 43755 +.. date: 2021-04-06-14-55-45 +.. nonce: 1m0fGq +.. section: Documentation + +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. + +.. + +.. bpo: 43739 +.. date: 2021-04-06-07-05-49 +.. nonce: L4HjiX +.. section: Documentation + +Fixing the example code in Doc/extending/extending.rst to declare and +initialize the pmodule variable to be of the right type. + +.. + +.. bpo: 43961 +.. date: 2021-04-28-13-21-52 +.. nonce: gNchls +.. section: Tests + +Fix test_logging.test_namer_rotator_inheritance() on Windows: use +:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. + +.. + +.. bpo: 43842 +.. date: 2021-04-16-14-07-40 +.. nonce: w60GAH +.. section: Tests + +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. + +.. + +.. bpo: 43843 +.. date: 2021-04-14-13-22-44 +.. nonce: ruIQKD +.. section: Tests + +: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. + +.. + +.. bpo: 43811 +.. date: 2021-04-12-11-14-28 +.. nonce: vGNbnD +.. section: Tests + +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. + +.. + +.. bpo: 43791 +.. date: 2021-04-09-15-10-38 +.. nonce: 4KxiXK +.. section: Tests + +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. + +.. + +.. bpo: 43567 +.. date: 2021-03-31-19-50-01 +.. nonce: vd0a-p +.. section: Build + +Improved generated code refresh (AST/tokens/opcodes/keywords) on Windows. + +.. + +.. bpo: 43669 +.. date: 2021-03-30-14-19-39 +.. nonce: lWMUYx +.. section: Build + +Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or newer. + +.. + +.. bpo: 35306 +.. date: 2021-04-22-21-37-41 +.. nonce: 10kSR- +.. section: Windows + +Adds additional arguments to :func:`os.startfile` function. + +.. + +.. bpo: 43538 +.. date: 2021-04-22-20-39-49 +.. nonce: F0Cg6X +.. section: Windows + +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. + +.. + +.. bpo: 38822 +.. date: 2021-04-22-19-49-20 +.. nonce: jgdPmq +.. section: Windows + +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`. + +.. + +.. bpo: 26227 +.. date: 2021-04-21-23-37-34 +.. nonce: QMY_eA +.. section: Windows + +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. + +.. + +.. bpo: 40432 +.. date: 2021-04-20-23-07-22 +.. nonce: 9OFpoq +.. section: Windows + +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. + +.. + +.. bpo: 43745 +.. date: 2021-04-06-12-27-33 +.. nonce: rdKNda +.. section: Windows + +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. + +.. + +.. bpo: 43652 +.. date: 2021-04-03-18-54-31 +.. nonce: gNmfVN +.. section: Windows + +Update Tcl and Tk to 8.6.11 in Windows installer. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-34-33 +.. nonce: AsYnVX +.. section: Windows + +Upgrade Windows installer to use SQLite 3.35.5. + +.. + +.. bpo: 30555 +.. date: 2017-12-16-12-23-51 +.. nonce: 3ybjly +.. section: Windows + +Fix ``WindowsConsoleIO`` errors in the presence of fd redirection. Patch by +Segev Finer. + +.. + +.. bpo: 42119 +.. date: 2021-05-02-21-03-27 +.. nonce: Y7BSX_ +.. section: macOS + +Fix check for macOS SDK paths when building Python. Narrow search to match +contents of SDKs, namely only files in ``/System/Library``, +``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, +anything under ``/System`` was assumed to be in an SDK which causes problems +with the new file system layout in 10.15+ where user file systems may appear +to be mounted under ``/System``. Paths in ``/Library`` were also +incorrectly treated as SDK locations. + +.. + +.. bpo: 43568 +.. date: 2021-05-02-19-50-52 +.. nonce: AeLNBd +.. section: macOS + +Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 + +.. + +.. bpo: 44009 +.. date: 2021-05-02-03-45-30 +.. nonce: uvhmlh +.. section: macOS + +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. + +.. + +.. bpo: 43851 +.. date: 2021-04-15-01-20-45 +.. nonce: sDI60Y +.. section: macOS + +Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-32-23 +.. nonce: 1ZRcV9 +.. section: macOS + +Update macOS installer to use SQLite 3.35.4. + +.. + +.. bpo: 42235 +.. date: 2020-11-01-17-37-16 +.. nonce: A97_BN +.. section: macOS + +``Mac/BuildScript/build-installer.py`` will now use "--enable-optimizations" +and ``--with-lto`` when building on macOS 10.15 or later. + +.. + +.. bpo: 37903 +.. date: 2021-05-02-20-25-53 +.. nonce: VQ6VTU +.. section: IDLE + +Add mouse actions to the shell sidebar. Left click and optional drag +selects one or more lines, as with the editor line number sidebar. Right +click after selecting raises a context menu with 'copy with prompts'. This +zips together prompts from the sidebar with lines from the selected text. + +.. + +.. bpo: 43981 +.. date: 2021-04-30-17-59-56 +.. nonce: 3EFl1H +.. section: IDLE + +Fix reference leak in test_squeezer. Patch by Pablo Galindo + +.. + +.. bpo: 37892 +.. date: 2021-04-29-02-40-41 +.. nonce: bgW2fk +.. section: IDLE + +Indent IDLE Shell input with spaces instead of tabs + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-52-07 +.. nonce: HSyaKH +.. section: IDLE + +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. + +.. + +.. bpo: 37903 +.. date: 2019-08-24-23-49-36 +.. nonce: 4xjast +.. section: IDLE + +IDLE's shell now shows prompts in a separate side-bar. + +.. + +.. bpo: 43916 +.. date: 2021-04-29-17-35-48 +.. nonce: wvWt23 +.. section: C API + +Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow +creating type instances. Patch by Victor Stinner. + +.. + +.. bpo: 43774 +.. date: 2021-04-29-10-17-21 +.. nonce: 5MGfgN +.. section: C API + +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). + +.. + +.. bpo: 43962 +.. date: 2021-04-28-13-13-07 +.. nonce: 9Jzs5X +.. section: C API + +_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. + +.. + +.. bpo: 28254 +.. date: 2021-04-28-12-33-44 +.. nonce: a2561e +.. section: C API + +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. + +.. + +.. bpo: 43908 +.. date: 2021-04-22-10-46-40 +.. nonce: Co3YhZ +.. section: C API + +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. + +.. + +.. bpo: 43795 +.. date: 2021-04-20-15-06-29 +.. nonce: y0IP4c +.. section: C API + +:c:func:`PyMem_Calloc` is now available in the limited C API +(``Py_LIMITED_API``). + +.. + +.. bpo: 43868 +.. date: 2021-04-16-18-15-56 +.. nonce: twQ7KH +.. section: C API + +: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. + +.. + +.. bpo: 43795 +.. date: 2021-04-09-18-19-07 +.. nonce: l0yobT +.. section: C API + +Stable ABI and limited API definitions are generated from a central manifest +(:pep:`652`). + +.. + +.. bpo: 43753 +.. date: 2021-04-06-20-52-44 +.. nonce: xUsHp1 +.. section: C API + +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/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 deleted file mode 100644 index 48c74813daa90..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst +++ /dev/null @@ -1 +0,0 @@ -Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or newer. 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 deleted file mode 100644 index 062662f6bceaf..0000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst +++ /dev/null @@ -1 +0,0 @@ -Improved generated code refresh (AST/tokens/opcodes/keywords) on Windows. 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 deleted file mode 100644 index f0eac4cf8e737..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst +++ /dev/null @@ -1,6 +0,0 @@ -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/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 deleted file mode 100644 index 5153c33677718..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst +++ /dev/null @@ -1,2 +0,0 @@ -Stable ABI and limited API definitions are generated from a central manifest -(:pep:`652`). 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 deleted file mode 100644 index 50888b8b37ab8..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index 1dee6e2d69a1b..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst +++ /dev/null @@ -1,2 +0,0 @@ -:c:func:`PyMem_Calloc` is now available in the limited C API -(``Py_LIMITED_API``). 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 deleted file mode 100644 index 0413c20a1b6b2..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 015acc9803d47..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 32164162f90ad..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst +++ /dev/null @@ -1,5 +0,0 @@ -_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/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 deleted file mode 100644 index 9664b552717bb..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index 0cec8103645e3..0000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow -creating type instances. Patch by Victor Stinner. 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 deleted file mode 100644 index 0bd2fa6544882..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst +++ /dev/null @@ -1,3 +0,0 @@ -When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer -suggestions of similar attribute names in the object that the exception was -raised from. Patch by Pablo Galindo 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 deleted file mode 100644 index d2b0c641b2ecc..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 1ad949389a1f6..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Static methods (:func:`@staticmethod `) are now callable as -regular functions. Patch by Victor Stinner. 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 deleted file mode 100644 index dd4c18661ec0b..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importlib now resolves relative paths when creating module spec objects from -file locations. 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 deleted file mode 100644 index 6e29998a49912..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index b87c97cc08d25..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst +++ /dev/null @@ -1 +0,0 @@ -:data:`~object.__match_args__` is no longer allowed to be a list. 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 deleted file mode 100644 index 75951ae794d10..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed a bug where ``anext(ait, default)`` would erroneously return None. \ No newline at end of file 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 deleted file mode 100644 index ab5873edbd70f..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index e6612103d807e..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 2c10bb6ddc8c3..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve ``SyntaxError`` error messages for invalid comparisons. Patch by -Pablo Galindo. 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 deleted file mode 100644 index f6ab5dd410f28..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst +++ /dev/null @@ -1 +0,0 @@ -:class:`ast.alias` nodes now include source location metadata attributes e.g. lineno, col_offset. 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 deleted file mode 100644 index f0e1c2f35a186..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve syntax errors in the parser for missing commas between expressions. -Patch by Pablo Galindo. 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 deleted file mode 100644 index 96cf8eee16b7e..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve syntax errors for invalid dictionary literals. Patch by Pablo -Galindo. 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 deleted file mode 100644 index ca175e7bebd9e..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 220690cd81374..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst +++ /dev/null @@ -1 +0,0 @@ -Data stack usage is much reduced for large literal and call expressions. 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 deleted file mode 100644 index b14299e77ebd5..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Constant tuple folding in bytecode optimizer now reuses tuple in constant -table. 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 deleted file mode 100644 index c91f85b4338ab..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve the error message for :exc:`IndentationError` exceptions. Patch by -Pablo Galindo 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 deleted file mode 100644 index 73ed0222ba3b0..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d289424fda395..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index ce6747cb1d5d7..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index e55db436896af..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Annotations for complex targets (everything beside simple names) no longer -cause any runtime effects with ``from __future__ import annotations``. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst deleted file mode 100644 index 54556fa299814..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst +++ /dev/null @@ -1,2 +0,0 @@ -When performing structural pattern matching (:pep:`634`), captured names are -now left unbound until the *entire* pattern has matched successfully. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst deleted file mode 100644 index c9ea706e98266..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Usage of ``await``/``yield``/``yield from`` and named expressions within an -annotation is now forbidden when PEP 563 is activated. 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 deleted file mode 100644 index 69be1b243c7be..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index 2ab93d1f756f6..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 07303b99d1f95..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Make the :class:`array.array` type immutable. Patch by -Erlend E. Aasland. 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 deleted file mode 100644 index 1709351726f96..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Make :mod:`re` types immutable. Patch by -Erlend E. Aasland. 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 deleted file mode 100644 index b59f3e1b6ccc5..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1f8904338f26c..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importing the :mod:`_signal` module in a subinterpreter has no longer side -effects. 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 deleted file mode 100644 index 8d11a8cb3dab3..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d442f303edc07..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Set frame.f_lineno to the line number of the 'with' kweyword when executing -the call to ``__exit__``. 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 deleted file mode 100644 index f2a3dc90e556f..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst +++ /dev/null @@ -1,2 +0,0 @@ -Restore proper validation of complex literal value patterns when parsing -:keyword:`!match` blocks. 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 deleted file mode 100644 index 038d7390852ba..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst deleted file mode 100644 index 95aacaf5fa2c3..0000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst +++ /dev/null @@ -1 +0,0 @@ -Prevent classes being both a sequence and a mapping when pattern matching. 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 deleted file mode 100644 index 9f8d3625e7961..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 53cba0b47d6d3..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 86dc286f83ce9..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix the Sphinx glossary_search extension: create the _static/ sub-directory -if it doesn't exist. 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 deleted file mode 100644 index dcf252e21bb9e..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update dataclasses documentation to express that FrozenInstanceError is -derived from AttributeError. 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 deleted file mode 100644 index ba23ffd577b3d..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst +++ /dev/null @@ -1 +0,0 @@ -The documentation on the PyContextVar C-API was clarified. diff --git a/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst b/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst deleted file mode 100644 index 20b5fd7ab86fa..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document the new :const:`Py_TPFLAGS_MAPPING` and -:const:`Py_TPFLAGS_SEQUENCE` type flags. diff --git a/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst b/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst deleted file mode 100644 index 158259e3ab378..0000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst +++ /dev/null @@ -1 +0,0 @@ -Add "Annotations Best Practices" document as a new HOWTO. 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 deleted file mode 100644 index 56b50e2e91e46..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst +++ /dev/null @@ -1 +0,0 @@ -IDLE's shell now shows prompts in a separate side-bar. 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 deleted file mode 100644 index 105ec9281f005..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst +++ /dev/null @@ -1,2 +0,0 @@ -IDLE dialog windows are now recognized as dialogs by window managers on -macOS and X Window. 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 deleted file mode 100644 index c8bb84bb40041..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst +++ /dev/null @@ -1 +0,0 @@ -Indent IDLE Shell input with spaces instead of tabs 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 deleted file mode 100644 index 10eb8b01d13a4..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst +++ /dev/null @@ -1 +0,0 @@ -Fix reference leak in test_squeezer. Patch by Pablo Galindo \ No newline at end of file diff --git a/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst b/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst deleted file mode 100644 index 28b11e60f0fb3..0000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst +++ /dev/null @@ -1,4 +0,0 @@ -Add mouse actions to the shell sidebar. Left click and optional drag -selects one or more lines, as with the editor line number sidebar. Right -click after selecting raises a context menu with 'copy with prompts'. This -zips together prompts from the sidebar with lines from the selected text. diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst deleted file mode 100644 index e6a60fe8da140..0000000000000 --- a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: -embedded null characters would cause a :exc:`ValueError` to be raised. Patch -by Zackery Spytz. 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 deleted file mode 100644 index 2fedb0696c326..0000000000000 --- a/Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst +++ /dev/null @@ -1,2 +0,0 @@ -Provide a locale.localize() function, which converts a normalized number string -into a locale format. 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 deleted file mode 100644 index 82b9e33be0e30..0000000000000 --- a/Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 7e9bc4e461e06..0000000000000 --- a/Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst +++ /dev/null @@ -1 +0,0 @@ -Added SNI support to :func:`ssl.get_server_certificate`. 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 deleted file mode 100644 index 5239553d51c67..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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. 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 deleted file mode 100644 index dacefb73d93dd..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst +++ /dev/null @@ -1 +0,0 @@ -: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 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 deleted file mode 100644 index e1d57f597bd46..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`ssl.RAND_status` now returns a boolean value (as documented) instead -of ``1`` or ``0``. 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 deleted file mode 100644 index 032a65d9963b7..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst +++ /dev/null @@ -1 +0,0 @@ -Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag 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 deleted file mode 100644 index 9b6ab994f3b6a..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch -by Claudiu Popa. 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 deleted file mode 100644 index 9e36435a364ea..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst +++ /dev/null @@ -1 +0,0 @@ -Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. 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 deleted file mode 100644 index 6adf456d2d6cc..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst +++ /dev/null @@ -1,2 +0,0 @@ -The :func:`ssl.get_server_certificate` function now has a *timeout* -parameter. 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 deleted file mode 100644 index 75de9f672ea5d..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1b97afbd2c40f..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst +++ /dev/null @@ -1,2 +0,0 @@ -Certificate and PrivateKey classes were added to the ssl module. -Certificates and keys can now be loaded from memory buffer, too. 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 deleted file mode 100644 index bb1fd82c99e36..0000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst +++ /dev/null @@ -1,9 +0,0 @@ -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/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 deleted file mode 100644 index 595f8733d0eab..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst +++ /dev/null @@ -1,3 +0,0 @@ -Add ``slots`` parameter to ``dataclasses.dataclass`` decorator to -automatically generate ``__slots__`` for class. Patch provided by Yurii -Karabas. 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 deleted file mode 100644 index ef4b4e56fbebc..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`typing.get_type_hints` now checks the local namespace of a class when -evaluating :pep:`563` annotations inside said class. 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 deleted file mode 100644 index 33b8acf9c18fb..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add `pathlib.Path.hardlink_to()` method that supersedes `link_to()`. The new -method has the same argument order as `symlink_to()`. 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 deleted file mode 100644 index aa59b901739b4..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst +++ /dev/null @@ -1 +0,0 @@ -:mod:`pprint` now has support for :class:`dataclasses.dataclass`. Patch by Lewis Gaul. \ No newline at end of file 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 deleted file mode 100644 index 016514d9c3346..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. 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 deleted file mode 100644 index 95ac1831dbf2d..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst +++ /dev/null @@ -1 +0,0 @@ -:mod:`distutils.sysconfig` has been merged to :mod:`sysconfig`. 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 deleted file mode 100644 index eefebcfe1ba7c..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst +++ /dev/null @@ -1,2 +0,0 @@ -Install schemes in :mod:`distutils.command.install` are now loaded from -:mod:`sysconfig`. 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 deleted file mode 100644 index 3e7f34ea5649d..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index b8def9ceee64c..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 741dfcd705ebd..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index f8ad3eaaedd78..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst +++ /dev/null @@ -1,3 +0,0 @@ -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``. 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 deleted file mode 100644 index 2da8874dc7f34..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve error message for :func:`tarfile.open` when :mod:`lzma` / :mod:`bz2` -are unavailable. Patch by Anthony Sottile. 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 deleted file mode 100644 index a17e1b4463738..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index 11ea5f916d173..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add the ability to specify keyword-only fields to dataclasses. These fields -will become keyword-only arguments to the generated __init__. 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 deleted file mode 100644 index 7f2e5a46add03..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient -window working on behalf of the canvas window. 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 deleted file mode 100644 index 33e5cf4d208b9..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Deprecate find_module() and find_loader() implementations in importlib and -zipimport. 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 deleted file mode 100644 index 27cf7aa716273..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst +++ /dev/null @@ -1,19 +0,0 @@ -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. 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 deleted file mode 100644 index 7916d2248b231..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`tkinter` 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-06-21-18-29.bpo-43752.K7qmAF.rst b/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst deleted file mode 100644 index ef4b9539a8055..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 838dd0200f1d6..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix an issue where :data:`~object.__match_args__` generation could fail for -some :mod:`dataclasses`. 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``. 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 deleted file mode 100644 index d11df0d102700..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add ``encoding`` and ``errors`` parameters to :func:`fileinput.input` and -:class:`fileinput.FileInput`. 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 deleted file mode 100644 index e5309c92fddba..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst +++ /dev/null @@ -1 +0,0 @@ -Add an ``encoding`` parameter :func:`logging.fileConfig()`. 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 deleted file mode 100644 index 8b680065ea7c3..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 3adbe50512bed..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 593846ec15c5b..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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. 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 deleted file mode 100644 index 4f039a7cebbf6..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst +++ /dev/null @@ -1,2 +0,0 @@ -Implement :pep:`647` in the :mod:`typing` module by adding -:data:`TypeGuard`. 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 deleted file mode 100644 index ff76256472c6e..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1c0852946214d..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index b4ed5e51e2247..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index 64894bdc017e5..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst +++ /dev/null @@ -1 +0,0 @@ -Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) 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 deleted file mode 100644 index 12a03d79e72e0..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index bd79519015c7a..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 555aad06e32ca..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add match_args parameter to @dataclass decorator to allow suppression of -__match_args__ generation. 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 deleted file mode 100644 index 648357b3faa74..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle Zijlstra. 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 deleted file mode 100644 index 7fd74be87664e..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst +++ /dev/null @@ -1,2 +0,0 @@ -fix issue with enum member name matching the start of a private variable -name 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 deleted file mode 100644 index 0722d35a37a1f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst +++ /dev/null @@ -1 +0,0 @@ -[Enum] ensure exceptions raised in ``_missing__`` are released 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 deleted file mode 100644 index 51bc791f10d31..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index aef5c1791dfea..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due to -synthetic modules that don't appear in ``sys.modules``. 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 deleted file mode 100644 index cb561ae586a98..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst +++ /dev/null @@ -1,6 +0,0 @@ -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/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 deleted file mode 100644 index e4ddb96491b57..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst +++ /dev/null @@ -1,6 +0,0 @@ -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(). 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 deleted file mode 100644 index 9b8d945cbb8a8..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 2c870ac8b97de..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst +++ /dev/null @@ -1,2 +0,0 @@ -Remove an unneeded copy of the namespace passed to -dataclasses.make_dataclass(). 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 deleted file mode 100644 index f5672e6bd7bf5..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst +++ /dev/null @@ -1,2 +0,0 @@ -Remove unused imports: pyclbr no longer uses copy, and typing no longer uses -ast. Patch by Victor Stinner. 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 deleted file mode 100644 index 1ec914e5ee9d0..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst +++ /dev/null @@ -1,3 +0,0 @@ -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). 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 deleted file mode 100644 index 11db42350eb7e..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst +++ /dev/null @@ -1,6 +0,0 @@ -: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/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 deleted file mode 100644 index b50680afc23fd..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index da2df1f614c10..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst +++ /dev/null @@ -1 +0,0 @@ -Port ``_ssl`` extension module to multiphase initialization. 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 deleted file mode 100644 index 3941fd85635f0..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 7e41016015efe..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index 36a6018bab253..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst +++ /dev/null @@ -1,11 +0,0 @@ -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. 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 deleted file mode 100644 index fa62846acaa98..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL -paths. 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 deleted file mode 100644 index 28ff0fb3afa9d..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst b/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst deleted file mode 100644 index 45f29a84cd599..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst +++ /dev/null @@ -1,4 +0,0 @@ -In ``importlib.metadata``, provide a uniform interface to ``Description``, -allow for any field to be encoded with multiline values, remove continuation -lines from multiline values, and add a ``.json`` property for easy access to -the PEP 566 JSON-compatible form. Sync with ``importlib_metadata 4.0``. diff --git a/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst b/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst deleted file mode 100644 index 7da3a1c3f7612..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst +++ /dev/null @@ -1,4 +0,0 @@ -Fix a bug in the pure-Python pickle implementation when using protocol 5, -where bytearray instances that occur several time in the pickled object -graph would incorrectly unpickle into repeated copies of the bytearray -object. 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 deleted file mode 100644 index 7dac21f3d9b19..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file 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 deleted file mode 100644 index cb4d90b723d1f..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the :mod:`turtle` module working with non-default root window. 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 deleted file mode 100644 index 5df8929891923..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst +++ /dev/null @@ -1 +0,0 @@ -Deprecate undocumented ``cgi.log()`` API. 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 deleted file mode 100644 index c01c200caa780..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst +++ /dev/null @@ -1,2 +0,0 @@ -[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum -member, not the member's value, will be used for format() calls. 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 deleted file mode 100644 index 632941ac36267..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst +++ /dev/null @@ -1,5 +0,0 @@ -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. 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 deleted file mode 100644 index c6d1ddef64ca3..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst +++ /dev/null @@ -1,4 +0,0 @@ -[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. diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst deleted file mode 100644 index c9d2c458eee75..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1.1. \ No newline at end of file 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 deleted file mode 100644 index d5d1caa3e5682..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst +++ /dev/null @@ -1,2 +0,0 @@ -Removed an unnecessary list comprehension before looping from -:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee Na. diff --git a/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst b/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst deleted file mode 100644 index 5ecd928b11834..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Change :class:`netrc.netrc` to use UTF-8 encoding before using locale -encoding. diff --git a/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst b/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst deleted file mode 100644 index 81d2724726dd0..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Added a *total()* method to collections.Counter() to compute the sum of the -counts. diff --git a/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst b/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst deleted file mode 100644 index 4c4f543fa0c2e..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst +++ /dev/null @@ -1 +0,0 @@ -In @dataclass(), raise a TypeError if KW_ONLY is specified more than once. 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 deleted file mode 100644 index 539084836dc4e..0000000000000 --- a/Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst +++ /dev/null @@ -1 +0,0 @@ -Add audit events to the :mod:`http.client` module. \ No newline at end of file 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 deleted file mode 100644 index d01c0c3073a50..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst +++ /dev/null @@ -1 +0,0 @@ -Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. 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 deleted file mode 100644 index 1c9f727e965fb..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst +++ /dev/null @@ -1 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst deleted file mode 100644 index f956cde948ec5..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst +++ /dev/null @@ -1,6 +0,0 @@ -:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address -strings. Leading zeros are ambiguous and interpreted as octal notation by -some libraries. For example the legacy function :func:`socket.inet_aton` -treats leading zeros as octal notatation. glibc implementation of modern -:func:`~socket.inet_pton` does not accept any leading zeros. For a while -the :mod:`ipaddress` module used to accept ambiguous leading zeros. 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 deleted file mode 100644 index e05fef2d5524f..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -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`. 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 deleted file mode 100644 index aa392656807e1..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 713a683bc8eb3..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index e38dc169def96..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst +++ /dev/null @@ -1,3 +0,0 @@ -Ensures interpreter-level audit hooks receive the -``cpython.PyInterpreterState_New`` event when called through the -``_xxsubinterpreters`` module. 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 deleted file mode 100644 index a326d079dff4a..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst b/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst deleted file mode 100644 index 6a40346128e18..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst +++ /dev/null @@ -1,5 +0,0 @@ -The :mod:`ssl` module sets more secure cipher suites defaults. Ciphers -without forward secrecy and with SHA-1 MAC are disabled by default. Security -level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of -security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS -1.2. Settings are based on Hynek Schlawack's research. diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst deleted file mode 100644 index b5a3f8d758749..0000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst +++ /dev/null @@ -1,4 +0,0 @@ -Creating :class:`sqlite3.Connection` objects now also produces -``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events -`. Previously these events were only produced by -:func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. 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 deleted file mode 100644 index 964ae5abb3d88..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst +++ /dev/null @@ -1,2 +0,0 @@ -OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests -are failing with TLSV1_ALERT_INTERNAL_ERROR. 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 deleted file mode 100644 index d4c7066013332..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up -testing. 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 deleted file mode 100644 index d1085ec2395b8..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst +++ /dev/null @@ -1,5 +0,0 @@ -: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. 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 deleted file mode 100644 index 5b4a120eb8637..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index e56572f517099..0000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_logging.test_namer_rotator_inheritance() on Windows: use -:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. 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 deleted file mode 100644 index 2b0c2219539e9..0000000000000 --- a/Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``WindowsConsoleIO`` errors in the presence of fd redirection. Patch by -Segev Finer. 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 deleted file mode 100644 index 93da1b6dec8e3..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst +++ /dev/null @@ -1 +0,0 @@ -Upgrade Windows installer to use SQLite 3.35.5. 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 deleted file mode 100644 index 0ef44e28a9a1d..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst +++ /dev/null @@ -1 +0,0 @@ -Update Tcl and Tk to 8.6.11 in Windows installer. 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 deleted file mode 100644 index 8ec498d11ea93..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst +++ /dev/null @@ -1,2 +0,0 @@ -Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were -mislabelled and actually included 1.1.1i again. 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 deleted file mode 100644 index 6f8ce00bf99ec..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d6826fb39706b..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed decoding of host names in :func:`socket.gethostbyaddr` and -:func:`socket.gethostbyname_ex`. 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 deleted file mode 100644 index 072a96989c3d0..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst deleted file mode 100644 index af41b3ceacb64..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst +++ /dev/null @@ -1,2 +0,0 @@ -Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an -invalid filename. 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 deleted file mode 100644 index f1ee2def32007..0000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst +++ /dev/null @@ -1 +0,0 @@ -Adds additional arguments to :func:`os.startfile` function. diff --git a/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst b/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst deleted file mode 100644 index eef4fcdaae3cf..0000000000000 --- a/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst +++ /dev/null @@ -1,2 +0,0 @@ -``Mac/BuildScript/build-installer.py`` will now use "--enable-optimizations" -and ``--with-lto`` when building on macOS 10.15 or later. 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 deleted file mode 100644 index 39f1537068816..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer to use SQLite 3.35.4. diff --git a/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst b/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst deleted file mode 100644 index 0febfb02315e8..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst +++ /dev/null @@ -1 +0,0 @@ -Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by Erlend E. Aasland. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst deleted file mode 100644 index f9f11c8ae6a79..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst +++ /dev/null @@ -1,4 +0,0 @@ -Provide "python3.x-intel64" executable to allow reliably forcing macOS -universal2 framework builds to run under Rosetta 2 Intel-64 emulation on -Apple Silicon Macs. This can be useful for testing or when universal2 -wheels are not yet available. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst deleted file mode 100644 index 3bc9b0b55bbd3..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst +++ /dev/null @@ -1 +0,0 @@ -Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst deleted file mode 100644 index 7dd67a527eb00..0000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst +++ /dev/null @@ -1,7 +0,0 @@ -Fix check for macOS SDK paths when building Python. Narrow search to match -contents of SDKs, namely only files in ``/System/Library``, -``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, -anything under ``/System`` was assumed to be in an SDK which causes problems -with the new file system layout in 10.15+ where user file systems may appear -to be mounted under ``/System``. Paths in ``/Library`` were also -incorrectly treated as SDK locations. diff --git a/README.rst b/README.rst index 18d6e6a96f937..0a37a86679a16 100644 --- a/README.rst +++ b/README.rst @@ -1,5 +1,5 @@ -This is Python version 3.10.0 alpha 7 -===================================== +This is Python version 3.10.0 beta 1 +==================================== .. image:: https://travis-ci.com/python/cpython.svg?branch=master :alt: CPython build status on Travis CI diff --git a/configure b/configure index e3e6dada20939..5559e6fb00741 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 @@ -793,6 +820,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -916,6 +944,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}' @@ -945,8 +974,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 ;; @@ -987,9 +1014,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" @@ -1013,9 +1040,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" @@ -1168,6 +1195,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=* \ @@ -1217,9 +1253,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" @@ -1233,9 +1269,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" @@ -1279,9 +1315,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}" ;; @@ -1297,7 +1333,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 @@ -1305,7 +1341,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. @@ -1361,7 +1397,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 @@ -1458,6 +1494,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] @@ -1655,9 +1692,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/ ;; @@ -1685,7 +1722,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 @@ -1693,7 +1731,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 @@ -1703,9 +1741,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 @@ -1722,14 +1760,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 @@ -1737,14 +1775,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 @@ -1766,7 +1805,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 @@ -1774,14 +1813,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 @@ -1797,14 +1837,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 @@ -1812,17 +1852,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 @@ -1837,101 +1878,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 @@ -1941,25 +1924,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 @@ -1970,37 +1954,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 @@ -2008,17 +1961,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; @@ -2026,12 +1980,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; @@ -2039,18 +1994,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 @@ -2069,7 +2025,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; @@ -2079,14 +2035,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; @@ -2096,9 +2053,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= @@ -2106,14 +2064,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; @@ -2123,14 +2081,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; @@ -2140,9 +2099,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= @@ -2150,14 +2110,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 @@ -2165,7 +2125,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; @@ -2175,12 +2135,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 ;; @@ -2190,12 +2151,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"); @@ -2223,9 +2184,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. @@ -2256,16 +2219,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. @@ -2283,47 +2239,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 @@ -2337,19 +2297,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 # ---------------------------------------------------- @@ -2358,16 +2321,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) @@ -2376,14 +2340,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) @@ -2392,29 +2357,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 @@ -2447,8 +2433,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 @@ -2483,7 +2473,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'" ;; @@ -2518,11 +2508,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 @@ -2533,8 +2525,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) ;; #( @@ -2558,7 +2550,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2566,14 +2558,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 @@ -2581,15 +2573,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 @@ -2597,8 +2589,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 && @@ -2612,63 +2604,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 @@ -2678,93 +2655,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 @@ -2786,11 +3182,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 @@ -2798,11 +3195,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 @@ -2814,11 +3215,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 @@ -2840,55 +3241,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;; @@ -2907,21 +3283,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;; @@ -2950,11 +3327,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 @@ -2962,11 +3340,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 @@ -2977,11 +3359,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 @@ -2992,8 +3374,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 @@ -3005,8 +3387,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 @@ -3040,28 +3422,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 @@ -3071,10 +3453,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) @@ -3106,7 +3489,7 @@ if test "${enable_universalsdk+set}" = set; then : esac -else +else $as_nop UNIVERSALSDK= enable_universalsdk= @@ -3115,11 +3498,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 @@ -3142,11 +3525,12 @@ 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" @@ -3154,22 +3538,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 @@ -3178,7 +3563,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) @@ -3267,7 +3653,7 @@ if test "${enable_framework+set}" = set; then : esac -else +else $as_nop PYTHONFRAMEWORK= PYTHONFRAMEWORKDIR=no-framework @@ -3302,9 +3688,7 @@ fi -cat >>confdefs.h <<_ACEOF -#define _PYTHONFRAMEWORK "${PYTHONFRAMEWORK}" -_ACEOF +printf "%s\n" "#define _PYTHONFRAMEWORK \"${PYTHONFRAMEWORK}\"" >>confdefs.h ##AC_ARG_WITH(dyld, @@ -3313,8 +3697,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 @@ -3364,8 +3748,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 @@ -3414,7 +3798,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/*) @@ -3422,7 +3806,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 @@ -3480,7 +3864,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 @@ -3488,11 +3872,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 @@ -3507,7 +3891,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 @@ -3571,8 +3955,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 @@ -3580,8 +3964,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++" @@ -3590,8 +3974,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++`" @@ -3600,6 +3984,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' @@ -3608,11 +4001,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 @@ -3620,11 +4014,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 @@ -3635,11 +4033,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 @@ -3648,11 +4046,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 @@ -3660,11 +4059,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 @@ -3675,11 +4078,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 @@ -3687,8 +4090,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 @@ -3701,11 +4104,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 @@ -3713,11 +4117,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 @@ -3728,11 +4136,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 @@ -3741,11 +4149,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 @@ -3754,15 +4163,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 @@ -3778,18 +4191,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 @@ -3800,11 +4213,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 @@ -3812,11 +4226,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 @@ -3827,11 +4245,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 @@ -3844,11 +4262,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 @@ -3856,11 +4275,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 @@ -3871,11 +4294,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 @@ -3887,34 +4310,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 @@ -3924,7 +4451,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 @@ -3932,7 +4459,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3944,9 +4471,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.*" @@ -3967,11 +4494,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, @@ -3988,7 +4516,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 @@ -4004,44 +4532,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 @@ -4055,15 +4585,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 @@ -4072,7 +4602,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; @@ -4084,8 +4614,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 @@ -4093,10 +4623,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 @@ -4104,39 +4634,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) { ; @@ -4150,11 +4681,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 @@ -4163,31 +4695,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 @@ -4197,29 +4730,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 @@ -4228,57 +4765,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 @@ -4293,94 +4833,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 @@ -4394,40 +4984,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 @@ -4439,10 +5025,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 @@ -4452,7 +5039,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 @@ -4464,29 +5052,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 @@ -4498,10 +5081,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 @@ -4511,11 +5095,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 @@ -4526,11 +5111,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 @@ -4538,10 +5124,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 @@ -4550,13 +5141,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 @@ -4584,16 +5175,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" @@ -4607,10 +5199,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 @@ -4619,13 +5216,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 @@ -4653,19 +5250,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 @@ -4680,15 +5278,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" @@ -4697,11 +5295,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. @@ -4711,11 +5310,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 @@ -4727,11 +5330,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 @@ -4740,11 +5343,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. @@ -4754,11 +5358,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 @@ -4770,11 +5378,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 @@ -4782,8 +5390,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 @@ -4795,11 +5403,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. @@ -4809,11 +5418,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 @@ -4825,11 +5438,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 @@ -4838,11 +5451,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. @@ -4852,11 +5466,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 @@ -4868,11 +5486,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 @@ -4880,8 +5498,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 @@ -4893,11 +5511,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. @@ -4907,11 +5526,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 @@ -4923,11 +5546,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 @@ -4936,11 +5559,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. @@ -4950,11 +5574,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 @@ -4966,11 +5594,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 @@ -4978,8 +5606,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 @@ -4991,11 +5619,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. @@ -5005,11 +5634,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 @@ -5021,11 +5654,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 @@ -5034,11 +5667,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. @@ -5048,11 +5682,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 @@ -5064,11 +5702,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 @@ -5076,8 +5714,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 @@ -5099,11 +5737,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 @@ -5111,11 +5750,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 @@ -5126,11 +5769,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 @@ -5143,11 +5786,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 @@ -5155,11 +5799,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 @@ -5170,11 +5818,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 @@ -5186,8 +5834,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 @@ -5201,12 +5849,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. @@ -5217,8 +5865,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 @@ -5388,8 +6036,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" @@ -5397,290 +6045,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 @@ -5728,11 +6287,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=;; @@ -5741,26 +6301,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 @@ -5773,14 +6333,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 @@ -5819,8 +6379,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)' @@ -5831,8 +6391,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. @@ -5840,16 +6400,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 @@ -5857,8 +6417,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` @@ -5869,13 +6429,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 @@ -5889,13 +6450,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 @@ -5906,27 +6468,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 @@ -5947,7 +6510,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*) @@ -6011,8 +6574,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 @@ -6020,11 +6583,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 @@ -6032,11 +6596,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 @@ -6047,11 +6615,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 @@ -6064,11 +6632,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 @@ -6076,11 +6645,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 @@ -6091,11 +6664,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 @@ -6107,8 +6680,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 @@ -6128,11 +6701,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 @@ -6140,11 +6714,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 @@ -6155,11 +6733,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 @@ -6172,11 +6750,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 @@ -6184,11 +6763,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 @@ -6199,11 +6782,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 @@ -6215,8 +6798,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 @@ -6241,7 +6824,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 @@ -6255,20 +6839,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/* ) ;; @@ -6278,13 +6867,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 @@ -6292,12 +6881,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 @@ -6313,7 +6902,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 @@ -6323,8 +6912,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. @@ -6334,25 +6923,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 @@ -6363,7 +6958,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 @@ -6373,8 +6968,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 @@ -6391,60 +6986,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 @@ -6453,39 +7051,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 @@ -6498,11 +7097,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" @@ -6510,29 +7110,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 @@ -6547,14 +7149,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 @@ -6577,25 +7179,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 @@ -6605,11 +7208,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. @@ -6619,11 +7223,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 @@ -6635,11 +7243,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 @@ -6648,11 +7256,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. @@ -6662,11 +7271,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 @@ -6678,11 +7291,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 @@ -6690,8 +7303,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 @@ -6714,8 +7327,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 @@ -6769,11 +7382,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. @@ -6783,11 +7397,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 @@ -6799,11 +7417,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 @@ -6812,11 +7430,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. @@ -6826,11 +7445,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 @@ -6842,11 +7465,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 @@ -6854,8 +7477,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 @@ -6880,8 +7503,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 @@ -7025,19 +7648,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) { ; @@ -7045,21 +7669,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 @@ -7070,20 +7695,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) { ; @@ -7091,7 +7717,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" @@ -7100,7 +7727,7 @@ if ac_fn_c_try_compile "$LINENO"; then : void f(int **x) {} int -main () +main (void) { double *x; f((int **) &x); ; @@ -7108,29 +7735,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" @@ -7143,20 +7771,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) { ; @@ -7164,22 +7793,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 @@ -7189,19 +7819,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) { ; @@ -7209,40 +7840,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) { ; @@ -7250,41 +7883,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) { ; @@ -7292,42 +7927,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) { ; @@ -7335,16 +7972,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" @@ -7365,22 +8003,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) { ; @@ -7388,40 +8027,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) { ; @@ -7429,40 +8070,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) { ; @@ -7470,21 +8113,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 @@ -7510,8 +8154,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 @@ -7521,8 +8165,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 LIPO_INTEL64_FLAGS="" @@ -7599,8 +8243,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 | \ @@ -7637,32 +8281,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 @@ -7708,14 +8353,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. */ @@ -7733,13 +8380,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 \ @@ -7749,8 +8397,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 @@ -7762,16 +8410,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. */ @@ -7789,9 +8439,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 \ @@ -7801,8 +8452,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 @@ -7812,16 +8463,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. */ @@ -7839,9 +8492,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 \ @@ -7851,8 +8505,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 @@ -7862,16 +8516,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. */ @@ -7889,9 +8545,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 \ @@ -7901,8 +8558,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 @@ -7910,8 +8567,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" @@ -7941,358 +8598,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 @@ -8300,24 +9301,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 @@ -8331,20 +9325,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 @@ -8353,20 +9342,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 @@ -8375,80 +9359,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. */ @@ -8461,7 +9466,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { makedev(0, 0) @@ -8470,24 +9475,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. */ @@ -8498,7 +9504,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { le64toh(1) @@ -8507,18 +9513,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 @@ -8534,15 +9541,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 @@ -8555,96 +9562,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 @@ -8655,17 +9687,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 @@ -8674,31 +9708,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 @@ -8707,33 +9741,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 @@ -8742,31 +9773,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 @@ -8775,31 +9806,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 @@ -8808,31 +9839,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 @@ -8841,31 +9872,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 @@ -8874,31 +9905,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 @@ -8907,31 +9938,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 @@ -8940,31 +9971,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 @@ -8973,33 +10004,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 @@ -9008,31 +10036,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 @@ -9041,31 +10069,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 @@ -9074,23 +10102,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 @@ -9100,7 +10127,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))]; @@ -9111,19 +10138,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 @@ -9131,17 +10159,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 @@ -9150,14 +10180,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 @@ -9165,17 +10193,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 @@ -9184,14 +10214,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 @@ -9199,22 +10227,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 @@ -9223,40 +10253,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 @@ -9265,12 +10294,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 @@ -9279,14 +10309,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 @@ -9300,15 +10328,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; ; @@ -9316,33 +10344,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 @@ -9351,14 +10382,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 @@ -9369,18 +10398,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 @@ -9389,47 +10420,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" @@ -9463,9 +10493,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. */ @@ -9480,9 +10511,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 \ @@ -9524,40 +10556,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 @@ -9571,8 +10603,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*) @@ -9585,15 +10617,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 @@ -9711,14 +10743,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 @@ -9749,12 +10781,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 @@ -9811,13 +10843,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 @@ -9829,8 +10861,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). @@ -9841,22 +10873,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 @@ -9865,43 +10898,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 @@ -9910,43 +10941,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 @@ -9955,33 +10984,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" @@ -9989,27 +11015,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 @@ -10020,28 +11046,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 @@ -10052,28 +11079,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 @@ -10084,27 +11112,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. */ @@ -10112,57 +11142,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 @@ -10171,32 +11204,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 @@ -10204,14 +11236,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, "") ; @@ -10219,48 +11251,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. */ @@ -10277,9 +11310,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 \ @@ -10289,32 +11323,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 ;; *) @@ -10322,9 +11357,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 @@ -10343,11 +11378,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) @@ -10356,80 +11392,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 @@ -10438,38 +11478,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 @@ -10478,47 +11518,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 @@ -10533,11 +11573,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. @@ -10547,11 +11588,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 @@ -10563,11 +11608,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 @@ -10576,11 +11621,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. @@ -10590,11 +11636,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 @@ -10606,11 +11656,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 @@ -10618,8 +11668,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 @@ -10631,39 +11681,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 @@ -10680,15 +11732,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 @@ -10701,28 +11753,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 @@ -10730,54 +11784,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" @@ -10797,11 +11854,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 @@ -10816,8 +11874,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. @@ -10826,7 +11884,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 @@ -10861,8 +11919,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. */ @@ -10873,25 +11931,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. */ @@ -10900,7 +11959,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) @@ -10908,27 +11967,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 @@ -10937,41 +11999,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 @@ -10980,41 +12042,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 @@ -11023,41 +12085,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 @@ -11066,35 +12128,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 @@ -11110,14 +12171,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 @@ -11126,30 +12188,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" @@ -11161,34 +12222,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. */ @@ -11206,9 +12269,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 \ @@ -11218,64 +12282,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. */ @@ -11283,38 +12344,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; @@ -11323,24 +12385,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 @@ -11352,8 +12415,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 @@ -11367,10 +12430,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) @@ -11383,13 +12447,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) @@ -11402,11 +12467,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) @@ -11435,12 +12501,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) @@ -11453,13 +12520,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) @@ -11472,12 +12540,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 @@ -11485,8 +12554,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 @@ -11505,72 +12574,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 @@ -11581,18 +12653,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 @@ -11604,18 +12677,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 @@ -11627,53 +12701,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; } @@ -11687,11 +12763,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. @@ -11701,11 +12778,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 @@ -11718,11 +12799,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 @@ -11730,7 +12811,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" @@ -11738,19 +12819,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 @@ -11762,23 +12844,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 @@ -11793,20 +12871,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 @@ -11814,282 +12892,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 (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 () +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. */ @@ -12097,27 +14208,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. */ @@ -12125,53 +14237,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. */ @@ -12183,28 +14297,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. */ @@ -12213,25 +14328,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 @@ -12239,44 +14355,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 @@ -12284,32 +14402,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 @@ -12318,109 +14438,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 @@ -12428,11 +14550,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 @@ -12443,11 +14569,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 @@ -12456,11 +14582,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 @@ -12469,37 +14596,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 @@ -12508,33 +14635,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" @@ -12546,14 +14670,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. */ @@ -12567,9 +14693,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 \ @@ -12578,31 +14705,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. */ @@ -12616,9 +14746,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 \ @@ -12627,20 +14758,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 @@ -12653,11 +14785,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 @@ -12666,32 +14799,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 @@ -12703,37 +14835,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. */ @@ -12743,29 +14876,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. */ @@ -12775,29 +14909,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. */ @@ -12807,42 +14942,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 @@ -12851,38 +14988,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 @@ -12891,31 +15028,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 @@ -12924,22 +15060,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 @@ -12948,38 +15085,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 @@ -12988,31 +15125,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 @@ -13021,28 +15157,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" @@ -13052,70 +15214,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. */ @@ -13123,55 +15287,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. */ @@ -13179,53 +15346,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. */ @@ -13233,7 +15403,7 @@ if test "x$ac_cv_func_crypt_r" = xyes; then : #include int -main () +main (void) { struct crypt_data d; @@ -13243,31 +15413,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 @@ -13276,60 +15448,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 @@ -13338,56 +15510,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 @@ -13396,43 +15568,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. */ @@ -13445,7 +15616,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #endif int -main () +main (void) { makedev(major(0),minor(0)); @@ -13454,27 +15625,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. */ @@ -13484,37 +15656,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. */ @@ -13608,9 +15783,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 \ @@ -13621,8 +15797,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 @@ -13634,70 +15810,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; @@ -13706,18 +15854,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 @@ -13725,37 +15874,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 @@ -13764,86 +15911,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 @@ -13853,11 +15995,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 @@ -13866,11 +16007,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 @@ -13878,53 +16018,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. */ @@ -13933,96 +16074,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. */ @@ -14030,41 +16177,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; @@ -14074,30 +16223,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 @@ -14110,7 +16261,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 */ @@ -14138,7 +16289,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; @@ -14154,75 +16305,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. */ @@ -14237,28 +16391,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. */ @@ -14266,35 +16421,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; @@ -14302,29 +16458,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 @@ -14333,7 +16491,7 @@ $as_echo_n "checking gethostbyname_r with 6 args... " >&6; } # include int -main () +main (void) { char *name; @@ -14348,29 +16506,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; @@ -14385,29 +16544,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; @@ -14420,43 +16580,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 @@ -14472,14 +16629,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 @@ -14488,33 +16647,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" @@ -14530,49 +16686,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 @@ -14580,13 +16738,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"); @@ -14595,19 +16753,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 @@ -14615,11 +16774,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 @@ -14631,7 +16791,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 @@ -14647,15 +16808,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) ;; @@ -14672,12 +16833,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. @@ -14687,7 +16848,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 @@ -14701,13 +16862,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; @@ -14718,29 +16879,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; @@ -14751,19 +16913,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 @@ -14772,14 +16935,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. */ @@ -14803,9 +16967,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 \ @@ -14813,12 +16978,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 @@ -14829,63 +16994,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 -done +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 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" "round" "ac_cv_func_round" +if test "x$ac_cv_func_round" = xyes +then : + printf "%s\n" "#define HAVE_ROUND 1" >>confdefs.h fi -done +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 -ac_fn_c_check_decl "$LINENO" "isinf" "ac_cv_have_decl_isinf" "#include -" -if test "x$ac_cv_have_decl_isinf" = xyes; then : +fi + +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 @@ -14893,14 +17120,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. */ @@ -14922,9 +17151,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 \ @@ -14934,24 +17164,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. */ @@ -14977,9 +17209,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 \ @@ -14989,110 +17222,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 ;; @@ -15103,36 +17321,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 @@ -15140,18 +17356,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 @@ -15160,20 +17378,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. */ @@ -15183,38 +17399,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. */ @@ -15226,9 +17445,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 \ @@ -15237,24 +17457,24 @@ 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 case $ac_sys_system/$ac_sys_release in @@ -15266,7 +17486,7 @@ SunOS/*) # 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 +printf "%s\n" "#define HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION 1" >>confdefs.h fi fi @@ -15274,11 +17494,12 @@ $as_echo "#define HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION 1" >>confdefs.h 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; } -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 @@ -15289,7 +17510,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. @@ -15313,7 +17535,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 @@ -15322,7 +17544,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 \ @@ -15334,7 +17556,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. */ @@ -15342,7 +17565,7 @@ if ac_fn_c_try_compile "$LINENO"; then : #include int -main () +main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian @@ -15352,14 +17575,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). @@ -15368,7 +17592,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 @@ -15378,14 +17602,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 @@ -15395,31 +17620,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]; @@ -15427,14 +17654,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 @@ -15447,13 +17675,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. */ @@ -15469,9 +17697,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 \ @@ -15480,17 +17709,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 ;; #( *) @@ -15515,15 +17744,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 @@ -15531,20 +17760,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. @@ -15563,11 +17790,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 @@ -15575,17 +17803,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 @@ -15601,37 +17829,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. */ @@ -15641,9 +17872,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 \ @@ -15652,27 +17884,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"); @@ -15684,29 +17917,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 @@ -15721,7 +17956,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) @@ -15735,8 +17970,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" @@ -15750,22 +17985,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 @@ -15775,20 +18008,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 @@ -15796,14 +18029,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 @@ -15811,21 +18044,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 @@ -15834,44 +18068,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 @@ -15880,44 +18114,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 @@ -15926,44 +18160,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 @@ -15972,39 +18206,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 @@ -16012,20 +18245,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 @@ -16034,33 +18268,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 @@ -16069,15 +18302,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. */ @@ -16092,9 +18327,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 \ @@ -16103,23 +18339,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. */ @@ -16143,9 +18381,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 \ @@ -16154,25 +18393,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. */ @@ -16240,9 +18481,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 \ @@ -16251,26 +18493,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; @@ -16280,34 +18523,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; @@ -16317,20 +18562,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 @@ -16340,50 +18586,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; @@ -16393,21 +18635,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 @@ -16415,11 +18658,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. */ @@ -16427,7 +18671,7 @@ else #include int -main () +main (void) { WINDOW *w; @@ -16437,32 +18681,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 @@ -16473,104 +18718,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 @@ -16581,26 +18830,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 @@ -16611,26 +18861,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 @@ -16641,26 +18892,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 @@ -16671,26 +18923,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 @@ -16701,26 +18954,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 @@ -16731,26 +18985,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 @@ -16761,46 +19016,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 @@ -16809,22 +19066,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 @@ -16833,15 +19092,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 @@ -16850,15 +19110,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. */ @@ -16898,9 +19160,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 \ @@ -16908,11 +19171,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 @@ -16925,23 +19188,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. */ @@ -16955,9 +19221,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 \ @@ -16966,57 +19233,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. */ @@ -17032,9 +19302,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 \ @@ -17043,18 +19314,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 @@ -17068,26 +19339,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) { @@ -17095,28 +19366,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. */ @@ -17136,9 +19409,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 \ @@ -17146,11 +19420,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 @@ -17160,13 +19434,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. */ @@ -17187,9 +19462,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 \ @@ -17197,11 +19473,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 ;; @@ -17209,8 +19485,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. */ @@ -17227,26 +19503,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. */ @@ -17260,31 +19537,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 @@ -17298,13 +19577,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. */ @@ -17318,25 +19597,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. */ @@ -17356,26 +19636,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. */ @@ -17393,19 +19674,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 @@ -17413,11 +19695,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. */ @@ -17425,67 +19708,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} @@ -17495,17 +19775,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" @@ -17516,7 +19797,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) @@ -17526,18 +19808,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 @@ -17545,11 +19828,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 @@ -17560,11 +19847,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 @@ -17573,11 +19860,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 @@ -17585,11 +19873,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 @@ -17600,11 +19892,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 @@ -17612,8 +19904,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 @@ -17647,19 +19939,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 @@ -17670,8 +19962,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 @@ -17685,27 +19977,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" @@ -17717,13 +20010,14 @@ rm -f core conftest.err conftest.$ac_objext \ # 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 @@ -17734,54 +20028,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 @@ -17790,13 +20084,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) @@ -17806,20 +20101,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 @@ -17827,48 +20118,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)' @@ -17885,21 +20178,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 @@ -17936,8 +20230,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) ;; #( @@ -17967,15 +20261,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 @@ -17989,8 +20283,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 @@ -18007,7 +20301,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" @@ -18024,8 +20318,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 @@ -18048,14 +20342,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 ;; #( @@ -18065,46 +20361,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 || @@ -18113,13 +20409,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 #(( @@ -18128,8 +20417,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 @@ -18141,30 +20434,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] @@ -18177,13 +20450,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. @@ -18210,18 +20484,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 @@ -18233,12 +20509,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` @@ -18269,7 +20546,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 @@ -18291,6 +20568,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*) @@ -18304,6 +20585,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 @@ -18345,7 +20632,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" @@ -18354,7 +20641,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 @@ -18417,7 +20704,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 @@ -18475,14 +20762,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." @@ -18521,15 +20810,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'" @@ -18537,7 +20826,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;; @@ -18546,7 +20835,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=: ;; @@ -18574,7 +20863,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 "\$@" @@ -18588,7 +20877,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 @@ -18622,8 +20911,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 @@ -18959,7 +21248,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 @@ -18967,17 +21256,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 @@ -18994,7 +21283,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 @@ -19018,9 +21307,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/ ;; @@ -19082,8 +21371,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=' @@ -19127,9 +21416,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" @@ -19145,20 +21434,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 @@ -19204,8 +21493,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 @@ -19229,3 +21518,4 @@ if test "$Py_OPT" = 'false' -a "$Py_DEBUG" != 'true'; then echo "" >&6 echo "" >&6 fi + From webhook-mailer at python.org Mon May 3 18:37:07 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 22:37:07 -0000 Subject: [Python-checkins] Update CI files to account for the master -> main rename (GH-25860) Message-ID: https://github.com/python/cpython/commit/2fc857a5721a5b42bcb696c9cae1bbcc82a91b17 commit: 2fc857a5721a5b42bcb696c9cae1bbcc82a91b17 branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-03T23:36:55+01:00 summary: Update CI files to account for the master -> main rename (GH-25860) files: M .azure-pipelines/ci.yml M .azure-pipelines/pr.yml M .github/CONTRIBUTING.rst M .github/PULL_REQUEST_TEMPLATE.md M .github/workflows/build.yml M .github/workflows/build_msi.yml M .github/workflows/doc.yml M .travis.yml M PC/pyconfig.h M README.rst M aclocal.m4 M config.guess M config.sub M configure M install-sh diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml index 0fe754bb071ea..b2ce9e75df64f 100644 --- a/.azure-pipelines/ci.yml +++ b/.azure-pipelines/ci.yml @@ -1,7 +1,7 @@ variables: coverage: false -trigger: ['master', '3.9', '3.8', '3.7'] +trigger: ['main', '3.9', '3.8', '3.7'] jobs: - job: Prebuild diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml index 2d32e6d49bcc0..9360d37baec68 100644 --- a/.azure-pipelines/pr.yml +++ b/.azure-pipelines/pr.yml @@ -1,7 +1,7 @@ variables: coverage: false -pr: ['master', '3.9', '3.8', '3.7'] +pr: ['main', '3.9', '3.8', '3.7'] jobs: - job: Prebuild diff --git a/.github/CONTRIBUTING.rst b/.github/CONTRIBUTING.rst index a81935d3c9da7..2ac148e3965b9 100644 --- a/.github/CONTRIBUTING.rst +++ b/.github/CONTRIBUTING.rst @@ -4,7 +4,7 @@ Contributing to Python Build Status ------------ -- master +- main + `Stable buildbots `_ diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2731c0e8e5503..79ceb175c28f4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -16,7 +16,7 @@ Most PRs will require an issue number. Trivial changes, like fixing a typo, do n # Backport Pull Request title -If this is a backport PR (PR made against branches other than `master`), +If this is a backport PR (PR made against branches other than `main`), please ensure that the PR title is in the following format: ``` @@ -25,6 +25,6 @@ please ensure that the PR title is in the following format: Where: [X.Y] is the branch name, e.g. [3.6]. -GH-NNNN refers to the PR number from `master`. +GH-NNNN refers to the PR number from `main`. --> diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 41200bb957e47..baa15f39baa9c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,13 +6,13 @@ name: Tests on: push: branches: - - master + - main - 3.9 - 3.8 - 3.7 pull_request: branches: - - master + - main - 3.9 - 3.8 - 3.7 diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml index 182eb7ce57167..074f70df4e7a6 100644 --- a/.github/workflows/build_msi.yml +++ b/.github/workflows/build_msi.yml @@ -3,7 +3,7 @@ name: TestsMSI on: push: branches: - - master + - main - 3.9 - 3.8 - 3.7 @@ -11,7 +11,7 @@ on: - 'Tools/msi/**' pull_request: branches: - - master + - main - 3.9 - 3.8 - 3.7 diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 8924fc992e25e..2f2aea5de4812 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -3,7 +3,7 @@ name: Docs on: #push: # branches: - # - master + # - main # - 3.9 # - 3.8 # - 3.7 @@ -11,7 +11,7 @@ on: # - 'Doc/**' pull_request: branches: - - master + - main - 3.9 - 3.8 - 3.7 diff --git a/.travis.yml b/.travis.yml index 1112a0b266227..c92404559a7d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ env: branches: only: - - master + - main - /^\d\.\d+$/ - buildbot-custom diff --git a/PC/pyconfig.h b/PC/pyconfig.h index 103e647ac8321..012a89aab2bc8 100644 --- a/PC/pyconfig.h +++ b/PC/pyconfig.h @@ -268,11 +268,11 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ file in their Makefile (other compilers are generally taken care of by distutils.) */ # if defined(_DEBUG) -# pragma comment(lib,"python310_d.lib") +# pragma comment(lib,"python311_d.lib") # elif defined(Py_LIMITED_API) # pragma comment(lib,"python3.lib") # else -# pragma comment(lib,"python310.lib") +# pragma comment(lib,"python311.lib") # endif /* _DEBUG */ # endif /* _MSC_VER */ # endif /* Py_BUILD_CORE */ diff --git a/README.rst b/README.rst index 165cb1d9f396a..f5a0addd043f6 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ This is Python version 3.11.0 alpha 1 ===================================== -.. image:: https://travis-ci.com/python/cpython.svg?branch=master +.. image:: https://travis-ci.com/python/cpython.svg?branch=main :alt: CPython build status on Travis CI :target: https://travis-ci.com/python/cpython @@ -9,9 +9,9 @@ This is Python version 3.11.0 alpha 1 :alt: CPython build status on GitHub Actions :target: https://github.com/python/cpython/actions -.. image:: https://dev.azure.com/python/cpython/_apis/build/status/Azure%20Pipelines%20CI?branchName=master +.. image:: https://dev.azure.com/python/cpython/_apis/build/status/Azure%20Pipelines%20CI?branchName=main :alt: CPython build status on Azure DevOps - :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=master + :target: https://dev.azure.com/python/cpython/_build/latest?definitionId=4&branchName=main .. image:: https://img.shields.io/badge/discourse-join_chat-brightgreen.svg :alt: Python Discourse chat @@ -75,10 +75,10 @@ dependencies for various Linux distributions and macOS. On macOS, there are additional configure and build options related to macOS framework and universal builds. Refer to `Mac/README.rst -`_. +`_. On Windows, see `PCbuild/readme.txt -`_. +`_. If you wish, you can create a subdirectory and invoke configure from there. For example:: @@ -139,9 +139,9 @@ What's New We have a comprehensive overview of the changes in the `What's New in Python 3.10 `_ document. For a more detailed change log, read `Misc/NEWS -`_, but a full +`_, but a full accounting of changes can only be gleaned from the `commit history -`_. +`_. If you want to install multiple versions of Python, see the section below entitled "Installing multiple versions". @@ -159,7 +159,7 @@ is primarily for documentation authors, translators, and people with special formatting requirements. For information about building Python's documentation, refer to `Doc/README.rst -`_. +`_. Converting From Python 2.x to 3.x @@ -255,7 +255,7 @@ rights reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum. All rights reserved. -See the `LICENSE `_ for +See the `LICENSE `_ for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES. diff --git a/aclocal.m4 b/aclocal.m4 index f497f28768506..1133004b86a21 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2020 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -275,347 +275,3 @@ AC_DEFUN([AX_CHECK_OPENSSL], [ AC_SUBST([OPENSSL_LDFLAGS]) ]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 11 (pkg-config-0.29.1) - -dnl Copyright ? 2004 Scott James Remnant . -dnl Copyright ? 2012-2015 Dan Nicholson -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl As a special exception to the GNU General Public License, if you -dnl distribute this file as part of a program that contains a -dnl configuration script generated by Autoconf, you may include it under -dnl the same distribution terms that you use for the rest of that -dnl program. - -dnl PKG_PREREQ(MIN-VERSION) -dnl ----------------------- -dnl Since: 0.29 -dnl -dnl Verify that the version of the pkg-config macros are at least -dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's -dnl installed version of pkg-config, this checks the developer's version -dnl of pkg.m4 when generating configure. -dnl -dnl To ensure that this macro is defined, also add: -dnl m4_ifndef([PKG_PREREQ], -dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) -dnl -dnl See the "Since" comment for each macro you use to see what version -dnl of the macros you require. -m4_defun([PKG_PREREQ], -[m4_define([PKG_MACROS_VERSION], [0.29.1]) -m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, - [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) -])dnl PKG_PREREQ - -dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) -dnl ---------------------------------- -dnl Since: 0.16 -dnl -dnl Search for the pkg-config tool and set the PKG_CONFIG variable to -dnl first found in the path. Checks that the version of pkg-config found -dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is -dnl used since that's the first version where most current features of -dnl pkg-config existed. -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) -m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])dnl PKG_PROG_PKG_CONFIG - -dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------------------------------- -dnl Since: 0.18 -dnl -dnl Check to see whether a particular set of modules exists. Similar to -dnl PKG_CHECK_MODULES(), but does not set variables or print errors. -dnl -dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -dnl only at the first occurence in configure.ac, so if the first place -dnl it's called might be skipped (such as if it is within an "if", you -dnl have to call PKG_CHECK_EXISTS manually -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -dnl --------------------------------------------- -dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting -dnl pkg_failed based on the result. -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes ], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])dnl _PKG_CONFIG - -dnl _PKG_SHORT_ERRORS_SUPPORTED -dnl --------------------------- -dnl Internal check to see if pkg-config supports short errors. -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])dnl _PKG_SHORT_ERRORS_SUPPORTED - - -dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl -------------------------------------------------------------- -dnl Since: 0.4.0 -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES might not happen, you should be sure to include an -dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT])[]dnl - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see .])[]dnl - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])dnl PKG_CHECK_MODULES - - -dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -dnl [ACTION-IF-NOT-FOUND]) -dnl --------------------------------------------------------------------- -dnl Since: 0.29 -dnl -dnl Checks for existence of MODULES and gathers its build flags with -dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags -dnl and VARIABLE-PREFIX_LIBS from --libs. -dnl -dnl Note that if there is a possibility the first call to -dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to -dnl include an explicit call to PKG_PROG_PKG_CONFIG in your -dnl configure.ac. -AC_DEFUN([PKG_CHECK_MODULES_STATIC], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -_save_PKG_CONFIG=$PKG_CONFIG -PKG_CONFIG="$PKG_CONFIG --static" -PKG_CHECK_MODULES($@) -PKG_CONFIG=$_save_PKG_CONFIG[]dnl -])dnl PKG_CHECK_MODULES_STATIC - - -dnl PKG_INSTALLDIR([DIRECTORY]) -dnl ------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable pkgconfigdir as the location where a module -dnl should install pkg-config .pc files. By default the directory is -dnl $libdir/pkgconfig, but the default can be changed by passing -dnl DIRECTORY. The user can override through the --with-pkgconfigdir -dnl parameter. -AC_DEFUN([PKG_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([pkgconfigdir], - [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, - [with_pkgconfigdir=]pkg_default) -AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_INSTALLDIR - - -dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) -dnl -------------------------------- -dnl Since: 0.27 -dnl -dnl Substitutes the variable noarch_pkgconfigdir as the location where a -dnl module should install arch-independent pkg-config .pc files. By -dnl default the directory is $datadir/pkgconfig, but the default can be -dnl changed by passing DIRECTORY. The user can override through the -dnl --with-noarch-pkgconfigdir parameter. -AC_DEFUN([PKG_NOARCH_INSTALLDIR], -[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) -m4_pushdef([pkg_description], - [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) -AC_ARG_WITH([noarch-pkgconfigdir], - [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, - [with_noarch_pkgconfigdir=]pkg_default) -AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) -m4_popdef([pkg_default]) -m4_popdef([pkg_description]) -])dnl PKG_NOARCH_INSTALLDIR - - -dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -dnl ------------------------------------------- -dnl Since: 0.28 -dnl -dnl Retrieves the value of the pkg-config variable for the given module. -AC_DEFUN([PKG_CHECK_VAR], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl - -_PKG_CONFIG([$1], [variable="][$3]["], [$2]) -AS_VAR_COPY([$1], [pkg_cv_][$1]) - -AS_VAR_IF([$1], [""], [$5], [$4])dnl -])dnl PKG_CHECK_VAR - -dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------ -dnl -dnl Prepare a "--with-" configure option using the lowercase -dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and -dnl PKG_CHECK_MODULES in a single macro. -AC_DEFUN([PKG_WITH_MODULES], -[ -m4_pushdef([with_arg], m4_tolower([$1])) - -m4_pushdef([description], - [m4_default([$5], [build with ]with_arg[ support])]) - -m4_pushdef([def_arg], [m4_default([$6], [auto])]) -m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) -m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) - -m4_case(def_arg, - [yes],[m4_pushdef([with_without], [--without-]with_arg)], - [m4_pushdef([with_without],[--with-]with_arg)]) - -AC_ARG_WITH(with_arg, - AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, - [AS_TR_SH([with_]with_arg)=def_arg]) - -AS_CASE([$AS_TR_SH([with_]with_arg)], - [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], - [auto],[PKG_CHECK_MODULES([$1],[$2], - [m4_n([def_action_if_found]) $3], - [m4_n([def_action_if_not_found]) $4])]) - -m4_popdef([with_arg]) -m4_popdef([description]) -m4_popdef([def_arg]) - -])dnl PKG_WITH_MODULES - -dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ----------------------------------------------- -dnl -dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES -dnl check._[VARIABLE-PREFIX] is exported as make variable. -AC_DEFUN([PKG_HAVE_WITH_MODULES], -[ -PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) - -AM_CONDITIONAL([HAVE_][$1], - [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) -])dnl PKG_HAVE_WITH_MODULES - -dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, -dnl [DESCRIPTION], [DEFAULT]) -dnl ------------------------------------------------------ -dnl -dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after -dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make -dnl and preprocessor variable. -AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], -[ -PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) - -AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], - [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) -])dnl PKG_HAVE_DEFINE_WITH_MODULES - diff --git a/config.guess b/config.guess index 256083a70d359..1972fda8eb05d 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2018-03-08' +timestamp='2021-01-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,12 +27,12 @@ timestamp='2018-03-08' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,8 +84,6 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a @@ -96,66 +94,82 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi at noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval "$set_cc_for_build" + set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu fi ;; esac @@ -174,20 +188,20 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ - echo unknown)` + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)) case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; @@ -199,7 +213,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval "$set_cc_for_build" + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -218,7 +232,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; esac # The OS release @@ -231,24 +245,24 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in release='-gnu' ;; *) - release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) @@ -260,6 +274,9 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; @@ -269,26 +286,29 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; @@ -326,7 +346,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -360,7 +380,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then + if test "$( (/bin/universe) 2>/dev/null)" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd @@ -373,28 +393,28 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in + case $(/usr/bin/uname -p) in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null @@ -402,30 +422,30 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case "$(/usr/bin/arch -k)" in Series*|S4*) - UNAME_RELEASE=`uname -v` + UNAME_RELEASE=$(uname -v) ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + case "$(/bin/arch)" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; @@ -482,7 +502,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ @@ -505,8 +525,8 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && - dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`"$dummy" "$dummyarg"` && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; @@ -533,11 +553,11 @@ EOF exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then echo m88k-dg-dgux"$UNAME_RELEASE" else @@ -561,17 +581,17 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi @@ -579,7 +599,7 @@ EOF exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include @@ -591,7 +611,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") then echo "$SYSTEM_NAME" else @@ -604,15 +624,15 @@ EOF fi exit ;; *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi @@ -640,14 +660,14 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 @@ -659,8 +679,8 @@ EOF esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" + if test "$HP_ARCH" = ""; then + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE @@ -694,13 +714,13 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then - eval "$set_cc_for_build" + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -722,11 +742,11 @@ EOF echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval "$set_cc_for_build" + set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int @@ -752,7 +772,7 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; @@ -772,7 +792,7 @@ EOF echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then + if test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 @@ -821,14 +841,14 @@ EOF echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -840,15 +860,26 @@ EOF *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf + fi + exit ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=$(/usr/bin/uname -p) case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin @@ -881,21 +912,21 @@ EOF echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -905,7 +936,7 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -922,7 +953,7 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then @@ -964,6 +995,9 @@ EOF k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; @@ -971,23 +1005,51 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -1006,7 +1068,7 @@ EOF exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; @@ -1024,7 +1086,7 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) @@ -1046,7 +1108,17 @@ EOF echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -1086,7 +1158,7 @@ EOF echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) - UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else @@ -1095,19 +1167,19 @@ EOF exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in + case $(/bin/uname -X | grep "^Machine") in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 @@ -1157,7 +1229,7 @@ EOF 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1168,7 +1240,7 @@ EOF NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1201,7 +1273,7 @@ EOF exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv @@ -1235,7 +1307,7 @@ EOF echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then + if test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" @@ -1283,44 +1355,48 @@ EOF *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc @@ -1358,6 +1434,7 @@ EOF # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. + # shellcheck disable=SC2154 if test "$cputype" = 386; then UNAME_MACHINE=i386 else @@ -1387,10 +1464,10 @@ EOF echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1400,13 +1477,13 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros + *:AROS:*:*) + echo "$UNAME_MACHINE"-unknown-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx @@ -1414,8 +1491,148 @@ EOF amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; esac +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in @@ -1435,9 +1652,15 @@ This script (version $timestamp), has failed to recognize the operating system you are using. If your script is old, overwrite *all* copies of config.guess and config.sub with the latest versions from: - https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess + https://git.savannah.gnu.org/cgit/config.git/plain/config.guess and - https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + https://git.savannah.gnu.org/cgit/config.git/plain/config.sub +EOF + +year=$(echo $timestamp | sed 's,-.*,,') +# shellcheck disable=SC2003 +if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then + cat >&2 </dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` +uname -m = $( (uname -m) 2>/dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 diff --git a/config.sub b/config.sub index ba37cf99e26b9..63c1f1c8b5e2d 100755 --- a/config.sub +++ b/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2018-04-24' +timestamp='2021-01-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ timestamp='2018-04-24' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,7 +50,7 @@ timestamp='2018-04-24' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2018 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,7 +89,7 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) @@ -110,1227 +110,1169 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -lynx*) - os=-lynxos + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -psos*) - os=-psos + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | armv[78][arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper | csky \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - m9s12z | m68hcs12z | hcs12z | s12z) - basic_machine=s12z-unknown - os=-none + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx + cpu=m68k + vendor=motorola ;; dpx2*) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=solaris2 ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - vsta) - basic_machine=i386-unknown - os=-vsta + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos + cpu=m68000 + vendor=convergent ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv + cpu=mips + vendor=sony + basic_os=newsos ;; next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem + cpu=np1 + vendor=gould ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc + cpu=m68k + vendor=tti ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + pc532) + cpu=ns32k + vendor=pc532 ;; pn) - basic_machine=pn-gould + cpu=pn + vendor=gould ;; - power) basic_machine=power-ibm + power) + cpu=power + vendor=ibm ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown + ps2) + cpu=i386 + vendor=ibm ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + rm[46]00) + cpu=mips + vendor=siemens ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown + rtpc | rtpc-*) + cpu=romp + vendor=ibm ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + sde) + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - ps2) - basic_machine=i386-ibm + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - pw32) - basic_machine=i586-unknown - os=-pw32 + tower | tower-32) + cpu=m68k + vendor=ncr ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - rdos32) - basic_machine=i386-pc - os=-rdos + w65) + cpu=w65 + vendor=wdc ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - rm[46]00) - basic_machine=mips-siemens + none) + cpu=none + vendor=none ;; - rtpc | rtpc-*) - basic_machine=romp-ibm + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - s390 | s390-*) - basic_machine=s390-ibm + leon-*|leon[3-9]-*) + cpu=sparc + vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; - s390x | s390x-*) - basic_machine=s390x-ibm + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1338,203 +1280,213 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') + ;; + os2-emx) + kernel=os2 + os=$(echo $basic_os | sed -e 's|os2-emx|emx|') + ;; + nto-qnx*) + kernel=nto + os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1547,254 +1499,357 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; *-next) - os=-nextstep + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - -os400*) + s390-* | s390x-*) vendor=ibm ;; - -ptx*) + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo "$basic_machine$os" +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: diff --git a/configure b/configure index e3e6dada20939..dc62f1ec51fc5 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /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.69 for python 3.11. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='python' PACKAGE_TARNAME='python' -PACKAGE_VERSION='3.10' -PACKAGE_STRING='python 3.10' +PACKAGE_VERSION='3.11' +PACKAGE_STRING='python 3.11' PACKAGE_BUGREPORT='https://bugs.python.org/' PACKAGE_URL='' @@ -630,6 +630,7 @@ OPENSSL_RPATH OPENSSL_LDFLAGS OPENSSL_LIBS OPENSSL_INCLUDES +PKG_CONFIG ENSUREPIP SRCDIRS THREADHEADERS @@ -661,9 +662,6 @@ DTRACE TCLTK_LIBS TCLTK_INCLUDES LIBFFI_INCLUDEDIR -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG TZPATH SHLIBS CFLAGSFORSHARED @@ -793,6 +791,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -874,10 +873,7 @@ LDFLAGS LIBS CPPFLAGS CPP -PROFILE_TASK -PKG_CONFIG -PKG_CONFIG_PATH -PKG_CONFIG_LIBDIR' +PROFILE_TASK' # Initialize some variables set by options. @@ -916,6 +912,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}' @@ -1168,6 +1165,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=* \ @@ -1305,7 +1311,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. @@ -1418,7 +1424,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures python 3.10 to adapt to many kinds of systems. +\`configure' configures python 3.11 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1458,6 +1464,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] @@ -1483,7 +1490,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of python 3.10:";; + short | recursive ) echo "Configuration of python 3.11:";; esac cat <<\_ACEOF @@ -1630,11 +1637,6 @@ Some influential environment variables: CPP C preprocessor PROFILE_TASK Python args for PGO generation task - PKG_CONFIG path to pkg-config utility - PKG_CONFIG_PATH - directories to add to pkg-config's search path - PKG_CONFIG_LIBDIR - path overriding pkg-config's built-in search path Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1702,7 +1704,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -python configure 3.10 +python configure 3.11 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2411,7 +2413,7 @@ 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 +It was created by python $as_me 3.11, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3031,7 +3033,7 @@ rm confdefs.h mv confdefs.h.new confdefs.h -VERSION=3.10 +VERSION=3.11 # Version number of Python's own shared library file. @@ -10522,126 +10524,7 @@ $as_echo "no" >&6; } fi - - - - - - - -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 - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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_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 - done -IFS=$as_save_IFS - - ;; -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; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -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 - 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. - ;; - *) - 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_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 - done -IFS=$as_save_IFS - - ;; -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; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - 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;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -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; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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; } - PKG_CONFIG="" - fi -fi +PKG_PROG_PKG_CONFIG # Check for use of the system expat library { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-system-expat" >&5 @@ -18416,7 +18299,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by python $as_me 3.10, which was +This file was extended by python $as_me 3.11, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18478,7 +18361,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -python config.status 3.10 +python config.status 3.11 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/install-sh b/install-sh index 8175c640fe628..ec298b5374027 100755 --- a/install-sh +++ b/install-sh @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2018-03-11.20; # UTC +scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -69,6 +69,11 @@ posix_mkdir= # Desired mode of installed file. mode=0755 +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= @@ -99,18 +104,28 @@ Options: --version display version info and exit. -c (ignored) - -C install only if different (preserve the last data modification time) + -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG + +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. + +If -S is not specified, no backups are attempted. + +Email bug reports to bug-automake at gnu.org. +Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do @@ -137,8 +152,13 @@ while test $# -ne 0; do -o) chowncmd="$chownprog $2" shift;; + -p) cpprog="$cpprog -p";; + -s) stripcmd=$stripprog;; + -S) backupsuffix="$2" + shift;; + -t) is_target_a_directory=always dst_arg=$2 @@ -255,6 +275,10 @@ do dstdir=$dst test -d "$dstdir" dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command @@ -301,22 +325,6 @@ do if test $dstdir_status != 0; then case $posix_mkdir in '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then @@ -326,52 +334,49 @@ do fi posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; esac if @@ -382,7 +387,7 @@ do then : else - # The umask is ridiculous, or mkdir does not conform to POSIX, + # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. @@ -411,7 +416,7 @@ do prefixes= else if $posix_mkdir; then - (umask=$mkdir_umask && + (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 @@ -451,7 +456,18 @@ do trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # @@ -477,6 +493,13 @@ do then rm -f "$dsttmp" else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || @@ -491,9 +514,9 @@ do # file should still install successfully. { test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || + $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 From webhook-mailer at python.org Mon May 3 19:11:43 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 03 May 2021 23:11:43 -0000 Subject: [Python-checkins] bpo-44018: random.seed() no longer mutates its inputs (GH-25856) Message-ID: https://github.com/python/cpython/commit/b05352e4c2f25b292fb7de0ab927e74415bc2dd8 commit: b05352e4c2f25b292fb7de0ab927e74415bc2dd8 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-03T16:11:35-07:00 summary: bpo-44018: random.seed() no longer mutates its inputs (GH-25856) files: A Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst M Lib/random.py M Lib/test/test_random.py diff --git a/Lib/random.py b/Lib/random.py index 3a835aef0bc1d..1310a2d9d0e07 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -154,8 +154,7 @@ def seed(self, a=None, version=2): elif version == 2 and isinstance(a, (str, bytes, bytearray)): if isinstance(a, str): a = a.encode() - a += _sha512(a).digest() - a = int.from_bytes(a, 'big') + a = int.from_bytes(a + _sha512(a).digest(), 'big') elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): _warn('Seeding based on hashing is deprecated\n' diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 66908868a6e9e..5354eddab6958 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -57,6 +57,11 @@ def __hash__(self): self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) self.assertRaises(TypeError, type(self.gen), []) + def test_seed_no_mutate_bug_44018(self): + a = bytearray(b'1234') + self.gen.seed(a) + self.assertEqual(a, bytearray(b'1234')) + @unittest.mock.patch('random._urandom') # os.urandom def test_seed_when_randomness_source_not_found(self, urandom_mock): # Random.seed() uses time.time() when an operating system specific diff --git a/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst new file mode 100644 index 0000000000000..87c7d83a7f35c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst @@ -0,0 +1 @@ +random.seed() no longer mutates bytearray inputs. From webhook-mailer at python.org Mon May 3 19:28:56 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 03 May 2021 23:28:56 -0000 Subject: [Python-checkins] Correct the version of the first alpha in the README.rst (GH-25862) Message-ID: https://github.com/python/cpython/commit/0aaf13a7140f411c2f1e7b206e1331ad8589ebed commit: 0aaf13a7140f411c2f1e7b206e1331ad8589ebed branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-04T00:28:47+01:00 summary: Correct the version of the first alpha in the README.rst (GH-25862) files: M README.rst diff --git a/README.rst b/README.rst index f5a0addd043f6..58cf6abba975b 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.11.0 alpha 1 +This is Python version 3.11.0 alpha 0 ===================================== .. image:: https://travis-ci.com/python/cpython.svg?branch=main From webhook-mailer at python.org Mon May 3 19:36:18 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 03 May 2021 23:36:18 -0000 Subject: [Python-checkins] bpo-44018: random.seed() no longer mutates its inputs (GH-25856) (GH-25864) Message-ID: https://github.com/python/cpython/commit/e733e9951d0116e9af66b66772e708412d7f5280 commit: e733e9951d0116e9af66b66772e708412d7f5280 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-03T16:36:14-07:00 summary: bpo-44018: random.seed() no longer mutates its inputs (GH-25856) (GH-25864) files: A Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst M Lib/random.py M Lib/test/test_random.py diff --git a/Lib/random.py b/Lib/random.py index 53252764a5b5d..1d4b5eb36f178 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -152,8 +152,7 @@ def seed(self, a=None, version=2): elif version == 2 and isinstance(a, (str, bytes, bytearray)): if isinstance(a, str): a = a.encode() - a += _sha512(a).digest() - a = int.from_bytes(a, 'big') + a = int.from_bytes(a + _sha512(a).digest(), 'big') elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): _warn('Seeding based on hashing is deprecated\n' diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 15a68418bdd86..0fa3a090cab98 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -57,6 +57,11 @@ def __hash__(self): self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) self.assertRaises(TypeError, type(self.gen), []) + def test_seed_no_mutate_bug_44018(self): + a = bytearray(b'1234') + self.gen.seed(a) + self.assertEqual(a, bytearray(b'1234')) + @unittest.mock.patch('random._urandom') # os.urandom def test_seed_when_randomness_source_not_found(self, urandom_mock): # Random.seed() uses time.time() when an operating system specific diff --git a/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst new file mode 100644 index 0000000000000..87c7d83a7f35c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst @@ -0,0 +1 @@ +random.seed() no longer mutates bytearray inputs. From webhook-mailer at python.org Mon May 3 20:32:50 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 04 May 2021 00:32:50 -0000 Subject: [Python-checkins] bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) Message-ID: https://github.com/python/cpython/commit/9142088e7454a392b69a627863b235ecc32aea54 commit: 9142088e7454a392b69a627863b235ecc32aea54 branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-04T01:32:46+01:00 summary: bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst M Lib/test/test_exceptions.py M Parser/pegen.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index bc0404ea4b04d5..3c427fed561183 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -210,7 +210,7 @@ def testSyntaxErrorOffset(self): check('x = "a', 1, 5) check('lambda x: x = 2', 1, 1) check('f{a + b + c}', 1, 2) - check('[file for str(file) in []\n])', 1, 11) + check('[file for str(file) in []\n])', 2, 2) check('[\nfile\nfor str(file)\nin\n[]\n]', 3, 5) check('[file for\n str(file) in []]', 2, 2) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst new file mode 100644 index 00000000000000..b8815cddf4e2c1 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst @@ -0,0 +1,2 @@ +The parser will prioritize tokenizer errors over custom syntax errors when +raising exceptions. Patch by Pablo Galindo. diff --git a/Parser/pegen.c b/Parser/pegen.c index e32b2710dbda26..6080cec1489ed8 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1283,6 +1283,9 @@ _PyPegen_run_parser(Parser *p) reset_parser_state(p); _PyPegen_parse(p); if (PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_SyntaxError)) { + _PyPegen_check_tokenizer_errors(p); + } return NULL; } if (p->fill == 0) { From webhook-mailer at python.org Mon May 3 20:47:59 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 04 May 2021 00:47:59 -0000 Subject: [Python-checkins] Update CI files to build the 3.10 branch Message-ID: https://github.com/python/cpython/commit/4d58730a3ade8dff09619ec8a7a01ef01bff99d1 commit: 4d58730a3ade8dff09619ec8a7a01ef01bff99d1 branch: 3.10 author: Pablo Galindo committer: pablogsal date: 2021-05-04T01:47:28+01:00 summary: Update CI files to build the 3.10 branch files: M .azure-pipelines/ci.yml M .azure-pipelines/pr.yml M .github/workflows/build.yml M .github/workflows/build_msi.yml M .github/workflows/doc.yml diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml index 0fe754bb071ea3..fd7b9c6f635ff6 100644 --- a/.azure-pipelines/ci.yml +++ b/.azure-pipelines/ci.yml @@ -1,7 +1,7 @@ variables: coverage: false -trigger: ['master', '3.9', '3.8', '3.7'] +trigger: ['master', '3.10', '3.9', '3.8', '3.7'] jobs: - job: Prebuild diff --git a/.azure-pipelines/pr.yml b/.azure-pipelines/pr.yml index 2d32e6d49bcc0e..a5840b73c8cb11 100644 --- a/.azure-pipelines/pr.yml +++ b/.azure-pipelines/pr.yml @@ -1,7 +1,7 @@ variables: coverage: false -pr: ['master', '3.9', '3.8', '3.7'] +pr: ['master', '3.10', '3.9', '3.8', '3.7'] jobs: - job: Prebuild diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 41200bb957e47c..adcadd55f2ed1e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,12 +7,14 @@ on: push: branches: - master + - 3.10 - 3.9 - 3.8 - 3.7 pull_request: branches: - master + - 3.10 - 3.9 - 3.8 - 3.7 diff --git a/.github/workflows/build_msi.yml b/.github/workflows/build_msi.yml index 182eb7ce571671..28ce06f3cf4e08 100644 --- a/.github/workflows/build_msi.yml +++ b/.github/workflows/build_msi.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - 3.10 - 3.9 - 3.8 - 3.7 @@ -12,6 +13,7 @@ on: pull_request: branches: - master + - 3.10 - 3.9 - 3.8 - 3.7 diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 8924fc992e25e6..4426238b9d9fa0 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -12,6 +12,7 @@ on: pull_request: branches: - master + - 3.10 - 3.9 - 3.8 - 3.7 From webhook-mailer at python.org Mon May 3 21:06:52 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 01:06:52 -0000 Subject: [Python-checkins] bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) Message-ID: https://github.com/python/cpython/commit/756b7b9248885d65c2b3b9f1c5a8f66aa2e8de7a commit: 756b7b9248885d65c2b3b9f1c5a8f66aa2e8de7a branch: 3.10 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-05-03T18:06:45-07:00 summary: bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) (cherry picked from commit 9142088e7454a392b69a627863b235ecc32aea54) Co-authored-by: Pablo Galindo files: A Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst M Lib/test/test_exceptions.py M Parser/pegen.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index bc0404ea4b04d5..3c427fed561183 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -210,7 +210,7 @@ def testSyntaxErrorOffset(self): check('x = "a', 1, 5) check('lambda x: x = 2', 1, 1) check('f{a + b + c}', 1, 2) - check('[file for str(file) in []\n])', 1, 11) + check('[file for str(file) in []\n])', 2, 2) check('[\nfile\nfor str(file)\nin\n[]\n]', 3, 5) check('[file for\n str(file) in []]', 2, 2) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst new file mode 100644 index 00000000000000..b8815cddf4e2c1 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-04-01-01-04.bpo-43822.9VeCg0.rst @@ -0,0 +1,2 @@ +The parser will prioritize tokenizer errors over custom syntax errors when +raising exceptions. Patch by Pablo Galindo. diff --git a/Parser/pegen.c b/Parser/pegen.c index e32b2710dbda26..6080cec1489ed8 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1283,6 +1283,9 @@ _PyPegen_run_parser(Parser *p) reset_parser_state(p); _PyPegen_parse(p); if (PyErr_Occurred()) { + if (PyErr_ExceptionMatches(PyExc_SyntaxError)) { + _PyPegen_check_tokenizer_errors(p); + } return NULL; } if (p->fill == 0) { From webhook-mailer at python.org Mon May 3 21:07:47 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 01:07:47 -0000 Subject: [Python-checkins] bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) Message-ID: https://github.com/python/cpython/commit/d1ff838d1091853ed6f56bc1573606dc0d74a691 commit: d1ff838d1091853ed6f56bc1573606dc0d74a691 branch: 3.10 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-05-03T18:07:43-07:00 summary: bpo-43822: Prioritize tokenizer errors over custom syntax errors when raising parser exceptions (GH-25866) (cherry picked from commit 9142088e7454a392b69a627863b235ecc32aea54) Co-authored-by: Pablo Galindo files: From webhook-mailer at python.org Mon May 3 21:09:38 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 01:09:38 -0000 Subject: [Python-checkins] build(deps): bump actions/upload-artifact from v2.2.2 to v2.2.3 (#25772) Message-ID: https://github.com/python/cpython/commit/e68e3b7e53c8101401ae3383a9810e7b34584ad8 commit: e68e3b7e53c8101401ae3383a9810e7b34584ad8 branch: main author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> committer: ambv date: 2021-05-04T03:09:34+02:00 summary: build(deps): bump actions/upload-artifact from v2.2.2 to v2.2.3 (#25772) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from v2.2.2 to v2.2.3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v2.2.2...ee69f02b3dfdecd58bb31b4d133da38ba6fe3700) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> files: M .github/workflows/doc.yml diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml index 2f2aea5de4812..3fcdcbc97f253 100644 --- a/.github/workflows/doc.yml +++ b/.github/workflows/doc.yml @@ -38,7 +38,7 @@ jobs: - name: 'Build documentation' 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 + uses: actions/upload-artifact at v2.2.3 with: name: doc-html path: Doc/build/html From webhook-mailer at python.org Mon May 3 21:09:55 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 01:09:55 -0000 Subject: [Python-checkins] build(deps): bump actions/cache from v2.1.4 to v2.1.5 (#25773) Message-ID: https://github.com/python/cpython/commit/d783ce789dd0688700a5ee3a4c7afdbecf3bf726 commit: d783ce789dd0688700a5ee3a4c7afdbecf3bf726 branch: main author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> committer: ambv date: 2021-05-04T03:09:51+02:00 summary: build(deps): bump actions/cache from v2.1.4 to v2.1.5 (#25773) Bumps [actions/cache](https://github.com/actions/cache) from v2.1.4 to v2.1.5. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.4...1a9e2138d905efd099035b49d8b7a3888c653ca8) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> files: M .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index baa15f39baa9c..4be3dc68420f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -148,7 +148,7 @@ jobs: 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 + uses: actions/cache at v2.1.5 with: path: ./multissl/openssl/${{ env.OPENSSL_VER }} key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} @@ -196,7 +196,7 @@ jobs: 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 + uses: actions/cache at v2.1.5 with: path: ./multissl/openssl/${{ env.OPENSSL_VER }} key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }} From webhook-mailer at python.org Mon May 3 21:15:19 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 04 May 2021 01:15:19 -0000 Subject: [Python-checkins] Add CI step to check changes in the exported ABI (GH-25868) Message-ID: https://github.com/python/cpython/commit/b86ac4c352b783861ee49a8a7d41acf0c60bac30 commit: b86ac4c352b783861ee49a8a7d41acf0c60bac30 branch: 3.10 author: Pablo Galindo committer: pablogsal date: 2021-05-04T02:15:11+01:00 summary: Add CI step to check changes in the exported ABI (GH-25868) files: A Doc/data/python3.10.abi M .github/workflows/build.yml M Makefile.pre.in diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index adcadd55f2ed1e..b51007461affae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,28 @@ jobs: 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: + 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.10.abi b/Doc/data/python3.10.abi new file mode 100644 index 00000000000000..dbd5ba133c8020 --- /dev/null +++ b/Doc/data/python3.10.abi @@ -0,0 +1,15722 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Makefile.pre.in b/Makefile.pre.in index 92cc48657a2af0..9c5268a044f050 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 regen-limited-abi: all $(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/stable_abi.py --generate-all $(srcdir)/Misc/stable_abi.txt From webhook-mailer at python.org Mon May 3 21:44:38 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 04 May 2021 01:44:38 -0000 Subject: [Python-checkins] fix enum and backslash warnings (GH-25861) Message-ID: https://github.com/python/cpython/commit/652bcd9f9cd2ed89b5fa958f8456556aa43b48cc commit: 652bcd9f9cd2ed89b5fa958f8456556aa43b48cc branch: main author: Ethan Furman committer: ethanfurman date: 2021-05-03T18:44:30-07:00 summary: fix enum and backslash warnings (GH-25861) - Enum warning in test_faulthandler - backslash warning in test_ipaddress files: M Lib/test/test_faulthandler.py M Lib/test/test_ipaddress.py diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 648624482e555..29a70857930c1 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -663,7 +663,7 @@ def check_register(self, filename=False, all_threads=False, import sys all_threads = {all_threads} - signum = {signum} + signum = {signum:d} unregister = {unregister} chain = {chain} filename = {filename!r} diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index cdd9880c3c17f..90559ce1242c5 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -97,7 +97,7 @@ class CommonTestMixin_v4(CommonTestMixin): def test_leading_zeros(self): # bpo-36384: no leading zeros to avoid ambiguity with octal notation - msg = "Leading zeros are not permitted in '\d+'" + msg = "Leading zeros are not permitted in '\\d+'" addresses = [ "000.000.000.000", "192.168.000.001", From webhook-mailer at python.org Mon May 3 22:17:32 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 04 May 2021 02:17:32 -0000 Subject: [Python-checkins] fix enum and backslash warnings (GH-25861) (GH-25871) Message-ID: https://github.com/python/cpython/commit/d194e1eb93e0ab47b63190eeae0dd6dde63ea34d commit: d194e1eb93e0ab47b63190eeae0dd6dde63ea34d branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ethanfurman date: 2021-05-03T19:17:23-07:00 summary: fix enum and backslash warnings (GH-25861) (GH-25871) - Enum warning in test_faulthandler - backslash warning in test_ipaddress (cherry picked from commit 652bcd9f9cd2ed89b5fa958f8456556aa43b48cc) Co-authored-by: Ethan Furman Co-authored-by: Ethan Furman files: M Lib/test/test_faulthandler.py M Lib/test/test_ipaddress.py diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index 648624482e555..29a70857930c1 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -663,7 +663,7 @@ def check_register(self, filename=False, all_threads=False, import sys all_threads = {all_threads} - signum = {signum} + signum = {signum:d} unregister = {unregister} chain = {chain} filename = {filename!r} diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index cdd9880c3c17f..90559ce1242c5 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -97,7 +97,7 @@ class CommonTestMixin_v4(CommonTestMixin): def test_leading_zeros(self): # bpo-36384: no leading zeros to avoid ambiguity with octal notation - msg = "Leading zeros are not permitted in '\d+'" + msg = "Leading zeros are not permitted in '\\d+'" addresses = [ "000.000.000.000", "192.168.000.001", From webhook-mailer at python.org Mon May 3 22:45:37 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 04 May 2021 02:45:37 -0000 Subject: [Python-checkins] bpo-44018: random.seed() no longer mutates its inputs (GH-25856) (GH-25872) Message-ID: https://github.com/python/cpython/commit/2995bff4269d274c0a3abfd45dc33b28f0c3e25f commit: 2995bff4269d274c0a3abfd45dc33b28f0c3e25f branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-03T19:45:30-07:00 summary: bpo-44018: random.seed() no longer mutates its inputs (GH-25856) (GH-25872) files: A Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst M Lib/random.py M Lib/test/test_random.py diff --git a/Lib/random.py b/Lib/random.py index 3a835aef0bc1d4..1310a2d9d0e071 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -154,8 +154,7 @@ def seed(self, a=None, version=2): elif version == 2 and isinstance(a, (str, bytes, bytearray)): if isinstance(a, str): a = a.encode() - a += _sha512(a).digest() - a = int.from_bytes(a, 'big') + a = int.from_bytes(a + _sha512(a).digest(), 'big') elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): _warn('Seeding based on hashing is deprecated\n' diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 66908868a6e9ef..5354eddab6958e 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -57,6 +57,11 @@ def __hash__(self): self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) self.assertRaises(TypeError, type(self.gen), []) + def test_seed_no_mutate_bug_44018(self): + a = bytearray(b'1234') + self.gen.seed(a) + self.assertEqual(a, bytearray(b'1234')) + @unittest.mock.patch('random._urandom') # os.urandom def test_seed_when_randomness_source_not_found(self, urandom_mock): # Random.seed() uses time.time() when an operating system specific diff --git a/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst new file mode 100644 index 00000000000000..87c7d83a7f35c5 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-10-07-43.bpo-44018.VDyW8f.rst @@ -0,0 +1 @@ +random.seed() no longer mutates bytearray inputs. From webhook-mailer at python.org Mon May 3 23:19:50 2021 From: webhook-mailer at python.org (ethanfurman) Date: Tue, 04 May 2021 03:19:50 -0000 Subject: [Python-checkins] fix enum.property reference in docs (GH-25875) Message-ID: https://github.com/python/cpython/commit/6fee0835cb00677acd341751f831ca1af128f4c9 commit: 6fee0835cb00677acd341751f831ca1af128f4c9 branch: main author: Jelle Zijlstra committer: ethanfurman date: 2021-05-03T20:19:46-07:00 summary: fix enum.property reference in docs (GH-25875) files: M Doc/library/enum.rst diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index b5f9c2f08b1873..466d95941468af 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -108,7 +108,7 @@ Module Contents :class:`Enum` class decorator to apply the appropriate global `__repr__`, and export its members into the global name space. - :func:`property` + :func:`.property` Allows :class:`Enum` members to have attributes without conflicting with other members' names. From webhook-mailer at python.org Tue May 4 02:48:33 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 06:48:33 -0000 Subject: [Python-checkins] update docstring for `win_getpass` to reflect code changes (GH-24967) Message-ID: https://github.com/python/cpython/commit/d4222ea6b0bb3cf7d40f23b370dc9eea5f9b7004 commit: d4222ea6b0bb3cf7d40f23b370dc9eea5f9b7004 branch: main author: J?rgen Gmach committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-03T23:48:29-07:00 summary: update docstring for `win_getpass` to reflect code changes (GH-24967) The code was updated in https://github.com/python/cpython/commit/0ec88b33d093db00ec68b220247681354a650f0c but the docstring was left untouched. => updated the docstring to reflect the code changes files: M Lib/getpass.py diff --git a/Lib/getpass.py b/Lib/getpass.py index 6911f41d1f205..6970d8adfbab3 100644 --- a/Lib/getpass.py +++ b/Lib/getpass.py @@ -95,7 +95,7 @@ def unix_getpass(prompt='Password: ', stream=None): def win_getpass(prompt='Password: ', stream=None): - """Prompt for password with echo off, using Windows getch().""" + """Prompt for password with echo off, using Windows getwch().""" if sys.stdin is not sys.__stdin__: return fallback_getpass(prompt, stream) From webhook-mailer at python.org Tue May 4 03:08:13 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 07:08:13 -0000 Subject: [Python-checkins] update docstring for `win_getpass` to reflect code changes (GH-24967) Message-ID: https://github.com/python/cpython/commit/20380df6d819977882ed7d62784f207319f90865 commit: 20380df6d819977882ed7d62784f207319f90865 branch: 3.10 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-05-04T00:08:09-07:00 summary: update docstring for `win_getpass` to reflect code changes (GH-24967) The code was updated in https://github.com/python/cpython/commit/0ec88b33d093db00ec68b220247681354a650f0c but the docstring was left untouched. => updated the docstring to reflect the code changes (cherry picked from commit d4222ea6b0bb3cf7d40f23b370dc9eea5f9b7004) Co-authored-by: J?rgen Gmach files: M Lib/getpass.py diff --git a/Lib/getpass.py b/Lib/getpass.py index 6911f41d1f205..6970d8adfbab3 100644 --- a/Lib/getpass.py +++ b/Lib/getpass.py @@ -95,7 +95,7 @@ def unix_getpass(prompt='Password: ', stream=None): def win_getpass(prompt='Password: ', stream=None): - """Prompt for password with echo off, using Windows getch().""" + """Prompt for password with echo off, using Windows getwch().""" if sys.stdin is not sys.__stdin__: return fallback_getpass(prompt, stream) From webhook-mailer at python.org Tue May 4 03:10:38 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 07:10:38 -0000 Subject: [Python-checkins] update docstring for `win_getpass` to reflect code changes (GH-24967) Message-ID: https://github.com/python/cpython/commit/7ec94cdd1f98b19ea790c7b27f39234e6bf704cc commit: 7ec94cdd1f98b19ea790c7b27f39234e6bf704cc 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-05-04T00:10:32-07:00 summary: update docstring for `win_getpass` to reflect code changes (GH-24967) The code was updated in https://github.com/python/cpython/commit/0ec88b33d093db00ec68b220247681354a650f0c but the docstring was left untouched. => updated the docstring to reflect the code changes (cherry picked from commit d4222ea6b0bb3cf7d40f23b370dc9eea5f9b7004) Co-authored-by: J?rgen Gmach files: M Lib/getpass.py diff --git a/Lib/getpass.py b/Lib/getpass.py index 6911f41d1f205..6970d8adfbab3 100644 --- a/Lib/getpass.py +++ b/Lib/getpass.py @@ -95,7 +95,7 @@ def unix_getpass(prompt='Password: ', stream=None): def win_getpass(prompt='Password: ', stream=None): - """Prompt for password with echo off, using Windows getch().""" + """Prompt for password with echo off, using Windows getwch().""" if sys.stdin is not sys.__stdin__: return fallback_getpass(prompt, stream) From webhook-mailer at python.org Tue May 4 04:37:00 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 08:37:00 -0000 Subject: [Python-checkins] bpo-43666: Lib/_aix_support.py routines may fail in a WPAR environment (GH-25095) Message-ID: https://github.com/python/cpython/commit/5017cde20ed1d163a55d95b34ca452d83771a581 commit: 5017cde20ed1d163a55d95b34ca452d83771a581 branch: main author: Michael Felt committer: ambv date: 2021-05-04T10:36:50+02:00 summary: bpo-43666: Lib/_aix_support.py routines may fail in a WPAR environment (GH-25095) Since WPAR and LPAR both have a builddate for teh fileset bos.rte The name of the fileset checked is modified. To prevent a similiar situation (no builddate in ODM) a value sufficient for pep425 activity if retrieved buildate is zero or NULL Patch by M Felt. files: A Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst M Lib/_aix_support.py diff --git a/Lib/_aix_support.py b/Lib/_aix_support.py index 45504934063df8..d27a1e8735de30 100644 --- a/Lib/_aix_support.py +++ b/Lib/_aix_support.py @@ -15,8 +15,9 @@ def _aix_tag(vrtl, bd): # type: (List[int], int) -> str # Infer the ABI bitwidth from maxsize (assuming 64 bit as the default) _sz = 32 if sys.maxsize == (2**31-1) else 64 + _bd = bd if bd != 0 else 9988 # vrtl[version, release, technology_level] - return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], bd, _sz) + return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], _bd, _sz) # extract version, release and technology level from a VRMF string @@ -26,19 +27,20 @@ def _aix_vrtl(vrmf): return [int(v[-1]), int(r), int(tl)] -def _aix_bosmp64(): +def _aix_bos_rte(): # type: () -> Tuple[str, int] """ Return a Tuple[str, int] e.g., ['7.1.4.34', 1806] - The fileset bos.mp64 is the AIX kernel. It's VRMF and builddate - reflect the current ABI levels of the runtime environment. + The fileset bos.rte represents the current AIX run-time level. It's VRMF and + builddate reflect the current ABI levels of the runtime environment. + If no builddate is found give a value that will satisfy pep425 related queries """ - # We expect all AIX systems to have lslpp installed in this location - out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.mp64"]) + # All AIX systems to have lslpp installed in this location + out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"]) out = out.decode("utf-8") out = out.strip().split(":") # type: ignore - # Use str() and int() to help mypy see types - return (str(out[2]), int(out[-1])) + _bd = int(out[-1]) if out[-1] != '' else 9988 + return (str(out[2]), _bd) def aix_platform(): @@ -47,11 +49,11 @@ def aix_platform(): AIX filesets are identified by four decimal values: V.R.M.F. V (version) and R (release) can be retreived using ``uname`` Since 2007, starting with AIX 5.3 TL7, the M value has been - included with the fileset bos.mp64 and represents the Technology + included with the fileset bos.rte and represents the Technology Level (TL) of AIX. The F (Fix) value also increases, but is not relevant for comparing releases and binary compatibility. For binary compatibility the so-called builddate is needed. - Again, the builddate of an AIX release is associated with bos.mp64. + Again, the builddate of an AIX release is associated with bos.rte. AIX ABI compatibility is described as guaranteed at: https://www.ibm.com/\ support/knowledgecenter/en/ssw_aix_72/install/binary_compatability.html @@ -60,7 +62,7 @@ def aix_platform(): e.g., "aix-6107-1415-32" for AIX 6.1 TL7 bd 1415, 32-bit and, "aix-6107-1415-64" for AIX 6.1 TL7 bd 1415, 64-bit """ - vrmf, bd = _aix_bosmp64() + vrmf, bd = _aix_bos_rte() return _aix_tag(_aix_vrtl(vrmf), bd) @@ -79,7 +81,7 @@ def aix_buildtag(): Return the platform_tag of the system Python was built on. """ # AIX_BUILDDATE is defined by configure with: - # lslpp -Lcq bos.mp64 | awk -F: '{ print $NF }' + # lslpp -Lcq bos.rte | awk -F: '{ print $NF }' build_date = sysconfig.get_config_var("AIX_BUILDDATE") try: build_date = int(build_date) diff --git a/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst b/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst new file mode 100644 index 00000000000000..6a3432191d61ba --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst @@ -0,0 +1,6 @@ +AIX: `Lib/_aix_support.get_platform()` may fail in an AIX WPAR. +The fileset bos.rte appears to have a builddate in both LPAR and WPAR +so this fileset is queried rather than bos.mp64. +To prevent a similiar situation (no builddate in ODM) a value (9988) +sufficient for completing a build is provided. +Patch by M Felt. From webhook-mailer at python.org Tue May 4 04:54:17 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 08:54:17 -0000 Subject: [Python-checkins] bpo-44001: improve Literal documentation (GH-25877) Message-ID: https://github.com/python/cpython/commit/87109f4d85c93a870ee8aa0d2b394547d4636b17 commit: 87109f4d85c93a870ee8aa0d2b394547d4636b17 branch: main author: Jelle Zijlstra committer: ambv date: 2021-05-04T10:54:12+02:00 summary: bpo-44001: improve Literal documentation (GH-25877) files: M Doc/library/typing.rst M Doc/whatsnew/3.10.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 8b1ce34d98ec66..ba79bb7ed75ff7 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -799,10 +799,10 @@ These can be used as types in annotations using ``[]``, each having a unique syn .. versionadded:: 3.8 .. versionchanged:: 3.9.1 - ``Literal`` now de-duplicates parameters. Equality comparison of + ``Literal`` now de-duplicates parameters. Equality comparisons of ``Literal`` objects are no longer order dependent. ``Literal`` objects will now raise a :exc:`TypeError` exception during equality comparisons - if one of their parameters are not :term:`immutable`. + if one of their parameters are not :term:`hashable`. .. data:: ClassVar diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index eb452b07f55f61..3d5a188625811e 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1271,8 +1271,8 @@ and to match the behavior of static type checkers specified in the PEP. now ``False``. To support this change, the internally used type cache now supports differentiating types. 4. ``Literal`` objects will now raise a :exc:`TypeError` exception during - equality comparisons if one of their parameters are not :term:`immutable`. - Note that declaring ``Literal`` with mutable parameters will not throw + equality comparisons if any of their parameters are not :term:`hashable`. + Note that declaring ``Literal`` with unhashable parameters will not throw an error:: >>> from typing import Literal diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 772fb5a3fe7458..f1725e7df02204 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1494,7 +1494,7 @@ and to match the behavior of static type checkers specified in the PEP. now ``False``. To support this change, the internally used type cache now supports differentiating types. 4. ``Literal`` objects will now raise a :exc:`TypeError` exception during - equality comparisons if one of their parameters are not :term:`immutable`. + equality comparisons if any of their parameters are not :term:`hashable`. Note that declaring ``Literal`` with mutable parameters will not throw an error:: From webhook-mailer at python.org Tue May 4 04:55:44 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 08:55:44 -0000 Subject: [Python-checkins] bpo-40465: Remove random module features deprecated in 3.9 (GH-25874) Message-ID: https://github.com/python/cpython/commit/70a071d9e1d65f8c168b4b96a18c86d5230789c5 commit: 70a071d9e1d65f8c168b4b96a18c86d5230789c5 branch: main author: Raymond Hettinger committer: ambv date: 2021-05-04T10:55:40+02:00 summary: bpo-40465: Remove random module features deprecated in 3.9 (GH-25874) files: A Misc/NEWS.d/next/Library/2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst M Doc/library/random.rst M Lib/random.py M Lib/test/test_random.py diff --git a/Doc/library/random.rst b/Doc/library/random.rst index e924127d8b828..e444f9573246a 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -86,8 +86,8 @@ Bookkeeping functions .. versionchanged:: 3.2 Moved to the version 2 scheme which uses all of the bits in a string seed. - .. deprecated:: 3.9 - In the future, the *seed* must be one of the following types: + .. versionchanged:: 3.11 + The *seed* must be one of the following types: *NoneType*, :class:`int`, :class:`float`, :class:`str`, :class:`bytes`, or :class:`bytearray`. @@ -208,13 +208,10 @@ Functions for sequences Raises a :exc:`ValueError` if all weights are zero. -.. function:: shuffle(x[, random]) +.. function:: shuffle(x) Shuffle the sequence *x* in place. - The optional argument *random* is a 0-argument function returning a random - float in [0.0, 1.0); by default, this is the function :func:`.random`. - To shuffle an immutable sequence and return a new shuffled list, use ``sample(x, k=len(x))`` instead. @@ -230,8 +227,8 @@ Functions for sequences .. function:: sample(population, k, *, counts=None) - Return a *k* length list of unique elements chosen from the population sequence - or set. Used for random sampling without replacement. + Return a *k* length list of unique elements chosen from the population + sequence. Used for random sampling without replacement. Returns a new list containing elements from the population while leaving the original population unchanged. The resulting list is in selection order so that @@ -257,11 +254,10 @@ Functions for sequences .. versionchanged:: 3.9 Added the *counts* parameter. - .. deprecated:: 3.9 - In the future, the *population* must be a sequence. Instances of - :class:`set` are no longer supported. The set must first be converted - to a :class:`list` or :class:`tuple`, preferably in a deterministic - order so that the sample is reproducible. + .. versionchanged:: 3.11 + + The *population* must be a sequence. Automatic conversion of sets + to lists is longer supported. .. _real-valued-distributions: diff --git a/Lib/random.py b/Lib/random.py index 1310a2d9d0e07..38c4a540522b3 100644 --- a/Lib/random.py +++ b/Lib/random.py @@ -157,12 +157,8 @@ def seed(self, a=None, version=2): a = int.from_bytes(a + _sha512(a).digest(), 'big') elif not isinstance(a, (type(None), int, float, str, bytes, bytearray)): - _warn('Seeding based on hashing is deprecated\n' - 'since Python 3.9 and will be removed in a subsequent ' - 'version. The only \n' - 'supported seed types are: None, ' - 'int, float, str, bytes, and bytearray.', - DeprecationWarning, 2) + raise TypeError('The only supported seed types are: None,\n' + 'int, float, str, bytes, and bytearray.') super().seed(a) self.gauss_next = None @@ -377,34 +373,17 @@ def choice(self, seq): # raises IndexError if seq is empty return seq[self._randbelow(len(seq))] - def shuffle(self, x, random=None): - """Shuffle list x in place, and return None. - - Optional argument random is a 0-argument function returning a - random float in [0.0, 1.0); if it is the default None, the - standard random.random will be used. - - """ + def shuffle(self, x): + """Shuffle list x in place, and return None.""" - if random is None: - randbelow = self._randbelow - for i in reversed(range(1, len(x))): - # pick an element in x[:i+1] with which to exchange x[i] - j = randbelow(i + 1) - x[i], x[j] = x[j], x[i] - else: - _warn('The *random* parameter to shuffle() has been deprecated\n' - 'since Python 3.9 and will be removed in a subsequent ' - 'version.', - DeprecationWarning, 2) - floor = _floor - for i in reversed(range(1, len(x))): - # pick an element in x[:i+1] with which to exchange x[i] - j = floor(random() * (i + 1)) - x[i], x[j] = x[j], x[i] + randbelow = self._randbelow + for i in reversed(range(1, len(x))): + # pick an element in x[:i+1] with which to exchange x[i] + j = randbelow(i + 1) + x[i], x[j] = x[j], x[i] def sample(self, population, k, *, counts=None): - """Chooses k unique random elements from a population sequence or set. + """Chooses k unique random elements from a population sequence. Returns a new list containing elements from the population while leaving the original population unchanged. The resulting list is @@ -457,13 +436,8 @@ def sample(self, population, k, *, counts=None): # causing them to eat more entropy than necessary. if not isinstance(population, _Sequence): - if isinstance(population, _Set): - _warn('Sampling from a set deprecated\n' - 'since Python 3.9 and will be removed in a subsequent version.', - DeprecationWarning, 2) - population = tuple(population) - else: - raise TypeError("Population must be a sequence. For dicts or sets, use sorted(d).") + raise TypeError("Population must be a sequence. " + "For dicts or sets, use sorted(d).") n = len(population) if counts is not None: cum_counts = list(_accumulate(counts)) diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index 5354eddab6958..c2dd50b981bb2 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -48,12 +48,11 @@ def __hash__(self): self.gen.seed(arg) for arg in [1+2j, tuple('abc'), MySeed()]: - with self.assertWarns(DeprecationWarning): + with self.assertRaises(TypeError): self.gen.seed(arg) for arg in [list(range(3)), dict(one=1)]: - with self.assertWarns(DeprecationWarning): - self.assertRaises(TypeError, self.gen.seed, arg) + self.assertRaises(TypeError, self.gen.seed, arg) self.assertRaises(TypeError, self.gen.seed, 1, 2, 3, 4) self.assertRaises(TypeError, type(self.gen), []) @@ -105,15 +104,6 @@ def test_shuffle(self): self.assertTrue(lst != shuffled_lst) self.assertRaises(TypeError, shuffle, (1, 2, 3)) - def test_shuffle_random_argument(self): - # Test random argument to shuffle. - shuffle = self.gen.shuffle - mock_random = unittest.mock.Mock(return_value=0.5) - seq = bytearray(b'abcdefghijk') - with self.assertWarns(DeprecationWarning): - shuffle(seq, mock_random) - mock_random.assert_called_with() - def test_choice(self): choice = self.gen.choice with self.assertRaises(IndexError): @@ -164,7 +154,7 @@ def test_sample_on_dicts(self): self.assertRaises(TypeError, self.gen.sample, dict.fromkeys('abcdef'), 2) def test_sample_on_sets(self): - with self.assertWarns(DeprecationWarning): + with self.assertRaises(TypeError): population = {10, 20, 30, 40, 50, 60, 70} self.gen.sample(population, k=5) diff --git a/Misc/NEWS.d/next/Library/2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst b/Misc/NEWS.d/next/Library/2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst new file mode 100644 index 0000000000000..b8b63debdbc19 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-03-19-59-14.bpo-40465.1tB4Y0.rst @@ -0,0 +1 @@ +Remove random module features deprecated in Python 3.9. From webhook-mailer at python.org Tue May 4 05:00:34 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:00:34 -0000 Subject: [Python-checkins] bpo-44025: Clarify when '_' is a keyword. (#25873) Message-ID: https://github.com/python/cpython/commit/3b200b2aa648fcc8a2673871807c1463afe00195 commit: 3b200b2aa648fcc8a2673871807c1463afe00195 branch: main author: Terry Jan Reedy committer: ambv date: 2021-05-04T11:00:29+02:00 summary: bpo-44025: Clarify when '_' is a keyword. (#25873) In match statements, in case patterns and nowhere else. Co-authored-by: Jelle Zijlstra files: A Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 96bd9b028d5044..77400a8d8504f3 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -797,7 +797,7 @@ Syntax: capture_pattern: !'_' NAME A single underscore ``_`` is not a capture pattern (this is what ``!'_'`` -expresses). And is instead treated as a :token:`wildcard_pattern`. +expresses). It is instead treated as a :token:`wildcard_pattern`. In a given pattern, a given name can only be bound once. E.g. ``case x, x: ...`` is invalid while ``case [x] | x: ...`` is allowed. @@ -820,7 +820,9 @@ and binds no name. Syntax: .. productionlist:: python-grammar wildcard_pattern: '_' -``_`` is a :ref:`soft keyword `. +``_`` is a :ref:`soft keyword ` within any pattern, +but only within patterns. It is an identifier, as usual, even within +``match`` headers, ``guards``, and ``case`` blocks. In simple terms, ``_`` will always succeed. diff --git a/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst b/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst new file mode 100644 index 00000000000000..1432236a32f63f --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst @@ -0,0 +1 @@ +Clarify when '_' in match statements is a keyword, and when not. From webhook-mailer at python.org Tue May 4 05:00:52 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:00:52 -0000 Subject: [Python-checkins] bpo-43666: Lib/_aix_support.py routines may fail in a WPAR environment (GH-25095) (#25880) Message-ID: https://github.com/python/cpython/commit/7a92beea2cb13db3e42d39b169e124fa3b89dc36 commit: 7a92beea2cb13db3e42d39b169e124fa3b89dc36 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T11:00:47+02:00 summary: bpo-43666: Lib/_aix_support.py routines may fail in a WPAR environment (GH-25095) (#25880) Since WPAR and LPAR both have a builddate for teh fileset bos.rte The name of the fileset checked is modified. To prevent a similiar situation (no builddate in ODM) a value sufficient for pep425 activity if retrieved buildate is zero or NULL Patch by M Felt. (cherry picked from commit 5017cde20ed1d163a55d95b34ca452d83771a581) Co-authored-by: Michael Felt files: A Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst M Lib/_aix_support.py diff --git a/Lib/_aix_support.py b/Lib/_aix_support.py index 45504934063df..d27a1e8735de3 100644 --- a/Lib/_aix_support.py +++ b/Lib/_aix_support.py @@ -15,8 +15,9 @@ def _aix_tag(vrtl, bd): # type: (List[int], int) -> str # Infer the ABI bitwidth from maxsize (assuming 64 bit as the default) _sz = 32 if sys.maxsize == (2**31-1) else 64 + _bd = bd if bd != 0 else 9988 # vrtl[version, release, technology_level] - return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], bd, _sz) + return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], _bd, _sz) # extract version, release and technology level from a VRMF string @@ -26,19 +27,20 @@ def _aix_vrtl(vrmf): return [int(v[-1]), int(r), int(tl)] -def _aix_bosmp64(): +def _aix_bos_rte(): # type: () -> Tuple[str, int] """ Return a Tuple[str, int] e.g., ['7.1.4.34', 1806] - The fileset bos.mp64 is the AIX kernel. It's VRMF and builddate - reflect the current ABI levels of the runtime environment. + The fileset bos.rte represents the current AIX run-time level. It's VRMF and + builddate reflect the current ABI levels of the runtime environment. + If no builddate is found give a value that will satisfy pep425 related queries """ - # We expect all AIX systems to have lslpp installed in this location - out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.mp64"]) + # All AIX systems to have lslpp installed in this location + out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"]) out = out.decode("utf-8") out = out.strip().split(":") # type: ignore - # Use str() and int() to help mypy see types - return (str(out[2]), int(out[-1])) + _bd = int(out[-1]) if out[-1] != '' else 9988 + return (str(out[2]), _bd) def aix_platform(): @@ -47,11 +49,11 @@ def aix_platform(): AIX filesets are identified by four decimal values: V.R.M.F. V (version) and R (release) can be retreived using ``uname`` Since 2007, starting with AIX 5.3 TL7, the M value has been - included with the fileset bos.mp64 and represents the Technology + included with the fileset bos.rte and represents the Technology Level (TL) of AIX. The F (Fix) value also increases, but is not relevant for comparing releases and binary compatibility. For binary compatibility the so-called builddate is needed. - Again, the builddate of an AIX release is associated with bos.mp64. + Again, the builddate of an AIX release is associated with bos.rte. AIX ABI compatibility is described as guaranteed at: https://www.ibm.com/\ support/knowledgecenter/en/ssw_aix_72/install/binary_compatability.html @@ -60,7 +62,7 @@ def aix_platform(): e.g., "aix-6107-1415-32" for AIX 6.1 TL7 bd 1415, 32-bit and, "aix-6107-1415-64" for AIX 6.1 TL7 bd 1415, 64-bit """ - vrmf, bd = _aix_bosmp64() + vrmf, bd = _aix_bos_rte() return _aix_tag(_aix_vrtl(vrmf), bd) @@ -79,7 +81,7 @@ def aix_buildtag(): Return the platform_tag of the system Python was built on. """ # AIX_BUILDDATE is defined by configure with: - # lslpp -Lcq bos.mp64 | awk -F: '{ print $NF }' + # lslpp -Lcq bos.rte | awk -F: '{ print $NF }' build_date = sysconfig.get_config_var("AIX_BUILDDATE") try: build_date = int(build_date) diff --git a/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst b/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst new file mode 100644 index 0000000000000..6a3432191d61b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-30-08-39-08.bpo-43666.m72tlH.rst @@ -0,0 +1,6 @@ +AIX: `Lib/_aix_support.get_platform()` may fail in an AIX WPAR. +The fileset bos.rte appears to have a builddate in both LPAR and WPAR +so this fileset is queried rather than bos.mp64. +To prevent a similiar situation (no builddate in ODM) a value (9988) +sufficient for completing a build is provided. +Patch by M Felt. From webhook-mailer at python.org Tue May 4 05:17:39 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:17:39 -0000 Subject: [Python-checkins] bpo-44001: improve Literal documentation (GH-25877) (#25882) Message-ID: https://github.com/python/cpython/commit/2046fb35e4e0986523bd0f6214fc318a414c8b97 commit: 2046fb35e4e0986523bd0f6214fc318a414c8b97 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T11:17:35+02:00 summary: bpo-44001: improve Literal documentation (GH-25877) (#25882) (cherry picked from commit 87109f4d85c93a870ee8aa0d2b394547d4636b17) Co-authored-by: Jelle Zijlstra files: M Doc/library/typing.rst M Doc/whatsnew/3.10.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index 8b1ce34d98ec66..ba79bb7ed75ff7 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -799,10 +799,10 @@ These can be used as types in annotations using ``[]``, each having a unique syn .. versionadded:: 3.8 .. versionchanged:: 3.9.1 - ``Literal`` now de-duplicates parameters. Equality comparison of + ``Literal`` now de-duplicates parameters. Equality comparisons of ``Literal`` objects are no longer order dependent. ``Literal`` objects will now raise a :exc:`TypeError` exception during equality comparisons - if one of their parameters are not :term:`immutable`. + if one of their parameters are not :term:`hashable`. .. data:: ClassVar diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index eb452b07f55f61..3d5a188625811e 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1271,8 +1271,8 @@ and to match the behavior of static type checkers specified in the PEP. now ``False``. To support this change, the internally used type cache now supports differentiating types. 4. ``Literal`` objects will now raise a :exc:`TypeError` exception during - equality comparisons if one of their parameters are not :term:`immutable`. - Note that declaring ``Literal`` with mutable parameters will not throw + equality comparisons if any of their parameters are not :term:`hashable`. + Note that declaring ``Literal`` with unhashable parameters will not throw an error:: >>> from typing import Literal diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 772fb5a3fe7458..f1725e7df02204 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1494,7 +1494,7 @@ and to match the behavior of static type checkers specified in the PEP. now ``False``. To support this change, the internally used type cache now supports differentiating types. 4. ``Literal`` objects will now raise a :exc:`TypeError` exception during - equality comparisons if one of their parameters are not :term:`immutable`. + equality comparisons if any of their parameters are not :term:`hashable`. Note that declaring ``Literal`` with mutable parameters will not throw an error:: From webhook-mailer at python.org Tue May 4 05:19:27 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:19:27 -0000 Subject: [Python-checkins] Copyedits to 3.10 What's New (#25787) Message-ID: https://github.com/python/cpython/commit/f6d7abc6e72294c5573709cca78ae252e03ebe3d commit: f6d7abc6e72294c5573709cca78ae252e03ebe3d branch: main author: Jelle Zijlstra committer: ambv date: 2021-05-04T11:19:23+02:00 summary: Copyedits to 3.10 What's New (#25787) Co-authored-by: Dominic Davis-Foster files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 3d5a188625811..b6166f7acdb08 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -42,7 +42,7 @@ module. (Contributed by P.Y. Developer in :issue:`12345`.) - This saves the maintainer the effort of going through the Mercurial log + This saves the maintainer the effort of going through the git log when researching a change. This article explains the new features in Python 3.10, compared to 3.9. @@ -143,7 +143,7 @@ For instance, consider the following code (notice the unclosed '{'): 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, some_other_code = foo() -previous versions of the interpreter reported confusing places as the location of +Previous versions of the interpreter reported confusing places as the location of the syntax error: .. code-block:: python @@ -153,7 +153,7 @@ the syntax error: ^ SyntaxError: invalid syntax -but in Python3.10 a more informative error is emitted: +but in Python 3.10 a more informative error is emitted: .. code-block:: python @@ -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`.) -:exc:`SyntaxError` exceptions raised by the intepreter will now highlight the +:exc:`SyntaxError` exceptions raised by the interpreter 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): @@ -194,7 +194,7 @@ now Python 3.10 will display the exception as: ^^^^^^^^^^^^^^^^^^^^ SyntaxError: Generator expression must be parenthesized -This improvement has been contributed by Pablo Galindo in :issue:`43914`. +This improvement was 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: @@ -408,7 +408,7 @@ in C, Java or JavaScript (and many other languages). Often the switch statement is used for comparison of an object/expression with case statements containing literals. -More powerful examples of pattern matching can be found in languages, such as +More powerful examples of pattern matching can be found in languages such as Scala and Elixir. With structural pattern matching, the approach is "declarative" and explicitly states the conditions (the patterns) for data to match. @@ -649,7 +649,7 @@ platforms, omitting ``encoding`` option when opening UTF-8 files with open("data.json") as f: data = json.load(f) -To find this type of bug, optional ``EncodingWarning`` is added. +To find this type of bug, an optional ``EncodingWarning`` is added. It is emitted when :data:`sys.flags.warn_default_encoding ` is true and locale-specific default encoding is used. @@ -824,7 +824,7 @@ Improved Modules asyncio ------- -Added missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` +Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` method. (Contributed by Alex Gr?nholm in :issue:`41332`.) @@ -904,7 +904,7 @@ they are provided by the underlying curses library. dataclasses ----------- -Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator. +Add ``slots`` parameter in :func:`dataclasses.dataclass` decorator. (Contributed by Yurii Karabas in :issue:`42269`) .. _distutils-deprecated: @@ -953,7 +953,7 @@ Add :class:`enum.StrEnum` for enums where all members are strings. fileinput --------- -Added *encoding* and *errors* parameters in :func:`fileinput.input` and +Add *encoding* and *errors* parameters in :func:`fileinput.input` and :class:`fileinput.FileInput`. (Contributed by Inada Naoki in :issue:`43712`.) @@ -964,13 +964,13 @@ when *mode* is "r" and file is compressed, like uncompressed files. gc -- -Added audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and +Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and :func:`gc.get_referents`. (Contributed by Pablo Galindo in :issue:`43439`.) glob ---- -Added the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and +Add the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and :func:`~glob.iglob` which allow to specify the root directory for searching. (Contributed by Serhiy Storchaka in :issue:`38144`.) @@ -1039,7 +1039,7 @@ inspect When a module does not define ``__loader__``, fall back to ``__spec__.loader``. (Contributed by Brett Cannon in :issue:`42133`.) -Added :func:`inspect.get_annotations`, which safely computes the annotations +Add :func:`inspect.get_annotations`, which safely computes the annotations defined on an object. It works around the quirks of accessing the annotations on various types of objects, and makes very few assumptions about the object it examines. :func:`inspect.get_annotations` can also correctly un-stringize @@ -1048,7 +1048,7 @@ best practice for accessing the annotations dict defined on any Python object; for more information on best practices for working with annotations, please see :ref:`annotations-howto`. Relatedly, :func:`inspect.signature`, -:func:`inspect.Signature.from_callable`, and ``inspect.Signature.from_function`` +:func:`inspect.Signature.from_callable`, and :func:`inspect.Signature.from_function` now call :func:`inspect.get_annotations` to retrieve annotations. This means :func:`inspect.signature` and :func:`inspect.Signature.from_callable` can also now un-stringize stringized annotations. @@ -1063,33 +1063,33 @@ When a module does not define ``__loader__``, fall back to ``__spec__.loader``. os -- -Added :func:`os.cpu_count()` support for VxWorks RTOS. +Add :func:`os.cpu_count()` support for VxWorks RTOS. (Contributed by Peixing Xin in :issue:`41440`.) -Added a new function :func:`os.eventfd` and related helpers to wrap the +Add a new function :func:`os.eventfd` and related helpers to wrap the ``eventfd2`` syscall on Linux. (Contributed by Christian Heimes in :issue:`41001`.) -Added :func:`os.splice()` that allows to move data between two file +Add :func:`os.splice()` that allows to move data between two file descriptors without copying between kernel address space and user address space, where one of the file descriptors must refer to a pipe. (Contributed by Pablo Galindo in :issue:`41625`.) -Added :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` +Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` and :data:`~os.O_NOFOLLOW_ANY` for macOS. (Contributed by Dong-hee Na in :issue:`43106`.) pathlib ------- -Added slice support to :attr:`PurePath.parents `. +Add slice support to :attr:`PurePath.parents `. (Contributed by Joshua Cannon in :issue:`35498`) -Added negative indexing support to :attr:`PurePath.parents +Add negative indexing support to :attr:`PurePath.parents `. (Contributed by Yaroslav Pankovych in :issue:`21041`) -Added :meth:`Path.hardlink_to ` method that +Add :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`.) @@ -1097,7 +1097,7 @@ order as :meth:`~pathlib.Path.symlink_to`. platform -------- -Added :func:`platform.freedesktop_os_release()` to retrieve operation system +Add :func:`platform.freedesktop_os_release()` to retrieve operation system identification from `freedesktop.org os-release `_ standard file. (Contributed by Christian Heimes in :issue:`28468`) @@ -1111,13 +1111,13 @@ pprint py_compile ---------- -Added ``--quiet`` option to command-line interface of :mod:`py_compile`. +Add ``--quiet`` option to command-line interface of :mod:`py_compile`. (Contributed by Gregory Schevchenko in :issue:`38731`.) pyclbr ------ -Added an ``end_lineno`` attribute to the ``Function`` and ``Class`` +Add an ``end_lineno`` attribute to the ``Function`` and ``Class`` objects in the tree returned by :func:`pyclbr.readline` and :func:`pyclbr.readline_ex`. It matches the existing (start) ``lineno``. (Contributed by Aviral Srivastava in :issue:`38307`.) @@ -1132,7 +1132,7 @@ instead of :mod:`pickle` protocol ``3`` when creating shelves. statistics ---------- -Added :func:`~statistics.covariance`, Pearson's +Add :func:`~statistics.covariance`, Pearson's :func:`~statistics.correlation`, and simple :func:`~statistics.linear_regression` functions. (Contributed by Tymoteusz Wo?od?ko in :issue:`38490`.) @@ -1149,7 +1149,7 @@ socket The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. (Contributed by Christian Heimes in :issue:`42413`.) -Added option to create MPTCP sockets with ``IPPROTO_MPTCP`` +Add option to create MPTCP sockets with ``IPPROTO_MPTCP`` (Contributed by Rui Cunha in :issue:`43571`.) ssl @@ -1229,7 +1229,7 @@ simulate (the default is still :data:`signal.SIGINT`). threading --------- -Added :func:`threading.gettrace` and :func:`threading.getprofile` to +Add :func:`threading.gettrace` and :func:`threading.getprofile` to retrieve the functions set by :func:`threading.settrace` and :func:`threading.setprofile` respectively. (Contributed by Mario Corchero in :issue:`42251`.) @@ -1251,7 +1251,7 @@ as a positional-only argument. types ----- -Reintroduced the :data:`types.EllipsisType`, :data:`types.NoneType` +Reintroduce the :data:`types.EllipsisType`, :data:`types.NoneType` and :data:`types.NotImplementedType` classes, providing a new set of types readily interpretable by type checkers. (Contributed by Bas van Beek in :issue:`41810`.) @@ -1355,12 +1355,12 @@ Optimizations * 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 + ``_compression.DecompressReader`` class. bz2 decompression is now 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`) * When using stringized annotations, annotations dicts for functions are no longer - created when the function is created. Instead, they're stored as a tuple of + created when the function is created. Instead, they are stored as a tuple of strings, and the function object lazily converts this into the annotations dict on demand. This optimization cuts the CPU time needed to define an annotated function by half. @@ -1371,13 +1371,13 @@ Optimizations algorithm to avoid quadratic behavior on long strings. (Contributed by Dennis Sweeney in :issue:`41972`) -* Added micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup +* Add micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup 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`) + on average. (Contributed by Dino Viehland in :issue:`43452`) -* Following built-in functions now support the faster :pep:`590` vectorcall calling convention: +* The 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`) + (Contributed by Dong-hee Na and Jeroen Demeyer 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 @@ -1492,11 +1492,11 @@ 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_event_loop` now emits a deprecation warning if there is + no running event loop. In the 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 + or :class:`~asyncio.Task` objects now emit 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`, @@ -1509,7 +1509,7 @@ Deprecated deprecated, scheduled for removal in Python 3.12. Its use is strongly discouraged by the SQLite3 documentation. See `the SQLite3 docs `_ for more details. - If shared cache must be used, open the database in URI mode using the + If a shared cache must be used, open the database in URI mode using the ``cache=shared`` query parameter. (Contributed by Erlend E. Aasland in :issue:`24464`.) @@ -1553,7 +1553,7 @@ Removed * The ``ParserBase.error()`` method from the private and undocumented ``_markupbase`` module has been removed. :class:`html.parser.HTMLParser` is the only subclass of - ``ParserBase`` and its ``error()`` implementation has already been removed in + ``ParserBase`` and its ``error()`` implementation was already removed in Python 3.5. (Contributed by Berker Peksag in :issue:`31844`.) @@ -1646,7 +1646,7 @@ Changes in the Python API :doc:`high-level API <../library/asyncio-api-index>` following deprecation in Python 3.8. - A coroutine that currently look like this:: + A coroutine that currently looks like this:: async def foo(loop): await asyncio.sleep(1, loop=loop) @@ -1695,7 +1695,7 @@ Build Changes * The :mod:`atexit` module must now always be built as a built-in module. (Contributed by Victor Stinner in :issue:`42639`.) -* Added :option:`--disable-test-modules` option to the ``configure`` script: +* Add :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`.) @@ -1759,15 +1759,15 @@ New Features sending value into iterator without raising ``StopIteration`` exception. (Contributed by Vladimir Matveev in :issue:`41756`.) -* Added :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. +* Add :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. (Contributed by Alex Gaynor in :issue:`41784`.) -* Added :c:func:`PyModule_AddObjectRef` function: similar to +* Add :c:func:`PyModule_AddObjectRef` function: similar to :c:func:`PyModule_AddObject` but don't steal a reference to the value on success. (Contributed by Victor Stinner in :issue:`1635741`.) -* Added :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the +* Add :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the reference count of an object and return the object. (Contributed by Victor Stinner in :issue:`42262`.) @@ -1787,7 +1787,7 @@ New Features object is an instance of :class:`set` but not an instance of a subtype. (Contributed by Pablo Galindo in :issue:`43277`.) -* Added :c:func:`PyErr_SetInterruptEx` which allows passing a signal number +* Add :c:func:`PyErr_SetInterruptEx` which allows passing a signal number to simulate. (Contributed by Antoine Pitrou in :issue:`43356`.) @@ -1812,7 +1812,7 @@ 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: +* Add new functions to control the garbage collector from C code: :c:func:`PyGC_Enable()`, :c:func:`PyGC_Disable()`, :c:func:`PyGC_IsEnabled()`. From webhook-mailer at python.org Tue May 4 05:30:08 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:30:08 -0000 Subject: [Python-checkins] bpo-38352: Add to typing.__all__ (#25821) Message-ID: https://github.com/python/cpython/commit/b11557973476963f7c0fd0041eac175bc0d4c514 commit: b11557973476963f7c0fd0041eac175bc0d4c514 branch: main author: Jelle Zijlstra committer: ambv date: 2021-05-04T11:29:49+02:00 summary: bpo-38352: Add to typing.__all__ (#25821) This adds IO, TextIO, BinaryIO, Match, and Pattern. Co-authored-by: ?ukasz Langa Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst M Lib/typing.py diff --git a/Lib/typing.py b/Lib/typing.py index ff964343c5336..301a47745d837 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -99,6 +99,13 @@ 'NamedTuple', # Not really a type. 'TypedDict', # Not really a type. 'Generator', + + # Other concrete types. + 'BinaryIO', + 'IO', + 'Match', + 'Pattern', + 'TextIO', # One-off things. 'AnyStr', diff --git a/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst new file mode 100644 index 0000000000000..bf8fe758f3570 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst @@ -0,0 +1,2 @@ +Add ``IO``, ``BinaryIO``, ``TextIO``, ``Match``, and ``Pattern`` to +``typing.__all__``. Patch by Jelle Zijlstra. From webhook-mailer at python.org Tue May 4 05:51:46 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 09:51:46 -0000 Subject: [Python-checkins] bpo-38352: Add to typing.__all__ (GH-25821) (#25884) Message-ID: https://github.com/python/cpython/commit/e1bcc88a502aa0239b6bcc4da3fe024307fd27f4 commit: e1bcc88a502aa0239b6bcc4da3fe024307fd27f4 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T11:51:33+02:00 summary: bpo-38352: Add to typing.__all__ (GH-25821) (#25884) This adds IO, TextIO, BinaryIO, Match, and Pattern. Co-authored-by: ?ukasz Langa Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> (cherry picked from commit b11557973476963f7c0fd0041eac175bc0d4c514) Co-authored-by: Jelle Zijlstra files: A Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst M Lib/typing.py diff --git a/Lib/typing.py b/Lib/typing.py index ff964343c5336..301a47745d837 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -99,6 +99,13 @@ 'NamedTuple', # Not really a type. 'TypedDict', # Not really a type. 'Generator', + + # Other concrete types. + 'BinaryIO', + 'IO', + 'Match', + 'Pattern', + 'TextIO', # One-off things. 'AnyStr', diff --git a/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst new file mode 100644 index 0000000000000..bf8fe758f3570 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst @@ -0,0 +1,2 @@ +Add ``IO``, ``BinaryIO``, ``TextIO``, ``Match``, and ``Pattern`` to +``typing.__all__``. Patch by Jelle Zijlstra. From webhook-mailer at python.org Tue May 4 06:02:53 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 10:02:53 -0000 Subject: [Python-checkins] bpo-38352: Add to typing.__all__ (GH-25821) (#25885) Message-ID: https://github.com/python/cpython/commit/00726e51ade10c7e3535811eb700418725244230 commit: 00726e51ade10c7e3535811eb700418725244230 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T12:02:49+02:00 summary: bpo-38352: Add to typing.__all__ (GH-25821) (#25885) This adds IO, TextIO, BinaryIO, Match, and Pattern. Co-authored-by: ?ukasz Langa Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> (cherry picked from commit b11557973476963f7c0fd0041eac175bc0d4c514) Co-authored-by: Jelle Zijlstra files: A Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst M Lib/typing.py diff --git a/Lib/typing.py b/Lib/typing.py index 3556b8adb8190..123fbc2c45010 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -95,6 +95,13 @@ 'NamedTuple', # Not really a type. 'TypedDict', # Not really a type. 'Generator', + + # Other concrete types. + 'BinaryIO', + 'IO', + 'Match', + 'Pattern', + 'TextIO', # One-off things. 'AnyStr', diff --git a/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst new file mode 100644 index 0000000000000..bf8fe758f3570 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-02-13-54-25.bpo-38352.N9MlhV.rst @@ -0,0 +1,2 @@ +Add ``IO``, ``BinaryIO``, ``TextIO``, ``Match``, and ``Pattern`` to +``typing.__all__``. Patch by Jelle Zijlstra. From webhook-mailer at python.org Tue May 4 07:04:58 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 11:04:58 -0000 Subject: [Python-checkins] Copyedits to 3.10 What's New (GH-25787) (#25883) Message-ID: https://github.com/python/cpython/commit/aa0ce1615f48742591535579d81c0ada1083a33e commit: aa0ce1615f48742591535579d81c0ada1083a33e branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T13:04:46+02:00 summary: Copyedits to 3.10 What's New (GH-25787) (#25883) Co-authored-by: Dominic Davis-Foster (cherry picked from commit f6d7abc6e72294c5573709cca78ae252e03ebe3d) Co-authored-by: Jelle Zijlstra files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 3d5a188625811..b6166f7acdb08 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -42,7 +42,7 @@ module. (Contributed by P.Y. Developer in :issue:`12345`.) - This saves the maintainer the effort of going through the Mercurial log + This saves the maintainer the effort of going through the git log when researching a change. This article explains the new features in Python 3.10, compared to 3.9. @@ -143,7 +143,7 @@ For instance, consider the following code (notice the unclosed '{'): 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, some_other_code = foo() -previous versions of the interpreter reported confusing places as the location of +Previous versions of the interpreter reported confusing places as the location of the syntax error: .. code-block:: python @@ -153,7 +153,7 @@ the syntax error: ^ SyntaxError: invalid syntax -but in Python3.10 a more informative error is emitted: +but in Python 3.10 a more informative error is emitted: .. code-block:: python @@ -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`.) -:exc:`SyntaxError` exceptions raised by the intepreter will now highlight the +:exc:`SyntaxError` exceptions raised by the interpreter 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): @@ -194,7 +194,7 @@ now Python 3.10 will display the exception as: ^^^^^^^^^^^^^^^^^^^^ SyntaxError: Generator expression must be parenthesized -This improvement has been contributed by Pablo Galindo in :issue:`43914`. +This improvement was 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: @@ -408,7 +408,7 @@ in C, Java or JavaScript (and many other languages). Often the switch statement is used for comparison of an object/expression with case statements containing literals. -More powerful examples of pattern matching can be found in languages, such as +More powerful examples of pattern matching can be found in languages such as Scala and Elixir. With structural pattern matching, the approach is "declarative" and explicitly states the conditions (the patterns) for data to match. @@ -649,7 +649,7 @@ platforms, omitting ``encoding`` option when opening UTF-8 files with open("data.json") as f: data = json.load(f) -To find this type of bug, optional ``EncodingWarning`` is added. +To find this type of bug, an optional ``EncodingWarning`` is added. It is emitted when :data:`sys.flags.warn_default_encoding ` is true and locale-specific default encoding is used. @@ -824,7 +824,7 @@ Improved Modules asyncio ------- -Added missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` +Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` method. (Contributed by Alex Gr?nholm in :issue:`41332`.) @@ -904,7 +904,7 @@ they are provided by the underlying curses library. dataclasses ----------- -Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator. +Add ``slots`` parameter in :func:`dataclasses.dataclass` decorator. (Contributed by Yurii Karabas in :issue:`42269`) .. _distutils-deprecated: @@ -953,7 +953,7 @@ Add :class:`enum.StrEnum` for enums where all members are strings. fileinput --------- -Added *encoding* and *errors* parameters in :func:`fileinput.input` and +Add *encoding* and *errors* parameters in :func:`fileinput.input` and :class:`fileinput.FileInput`. (Contributed by Inada Naoki in :issue:`43712`.) @@ -964,13 +964,13 @@ when *mode* is "r" and file is compressed, like uncompressed files. gc -- -Added audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and +Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and :func:`gc.get_referents`. (Contributed by Pablo Galindo in :issue:`43439`.) glob ---- -Added the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and +Add the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and :func:`~glob.iglob` which allow to specify the root directory for searching. (Contributed by Serhiy Storchaka in :issue:`38144`.) @@ -1039,7 +1039,7 @@ inspect When a module does not define ``__loader__``, fall back to ``__spec__.loader``. (Contributed by Brett Cannon in :issue:`42133`.) -Added :func:`inspect.get_annotations`, which safely computes the annotations +Add :func:`inspect.get_annotations`, which safely computes the annotations defined on an object. It works around the quirks of accessing the annotations on various types of objects, and makes very few assumptions about the object it examines. :func:`inspect.get_annotations` can also correctly un-stringize @@ -1048,7 +1048,7 @@ best practice for accessing the annotations dict defined on any Python object; for more information on best practices for working with annotations, please see :ref:`annotations-howto`. Relatedly, :func:`inspect.signature`, -:func:`inspect.Signature.from_callable`, and ``inspect.Signature.from_function`` +:func:`inspect.Signature.from_callable`, and :func:`inspect.Signature.from_function` now call :func:`inspect.get_annotations` to retrieve annotations. This means :func:`inspect.signature` and :func:`inspect.Signature.from_callable` can also now un-stringize stringized annotations. @@ -1063,33 +1063,33 @@ When a module does not define ``__loader__``, fall back to ``__spec__.loader``. os -- -Added :func:`os.cpu_count()` support for VxWorks RTOS. +Add :func:`os.cpu_count()` support for VxWorks RTOS. (Contributed by Peixing Xin in :issue:`41440`.) -Added a new function :func:`os.eventfd` and related helpers to wrap the +Add a new function :func:`os.eventfd` and related helpers to wrap the ``eventfd2`` syscall on Linux. (Contributed by Christian Heimes in :issue:`41001`.) -Added :func:`os.splice()` that allows to move data between two file +Add :func:`os.splice()` that allows to move data between two file descriptors without copying between kernel address space and user address space, where one of the file descriptors must refer to a pipe. (Contributed by Pablo Galindo in :issue:`41625`.) -Added :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` +Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` and :data:`~os.O_NOFOLLOW_ANY` for macOS. (Contributed by Dong-hee Na in :issue:`43106`.) pathlib ------- -Added slice support to :attr:`PurePath.parents `. +Add slice support to :attr:`PurePath.parents `. (Contributed by Joshua Cannon in :issue:`35498`) -Added negative indexing support to :attr:`PurePath.parents +Add negative indexing support to :attr:`PurePath.parents `. (Contributed by Yaroslav Pankovych in :issue:`21041`) -Added :meth:`Path.hardlink_to ` method that +Add :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`.) @@ -1097,7 +1097,7 @@ order as :meth:`~pathlib.Path.symlink_to`. platform -------- -Added :func:`platform.freedesktop_os_release()` to retrieve operation system +Add :func:`platform.freedesktop_os_release()` to retrieve operation system identification from `freedesktop.org os-release `_ standard file. (Contributed by Christian Heimes in :issue:`28468`) @@ -1111,13 +1111,13 @@ pprint py_compile ---------- -Added ``--quiet`` option to command-line interface of :mod:`py_compile`. +Add ``--quiet`` option to command-line interface of :mod:`py_compile`. (Contributed by Gregory Schevchenko in :issue:`38731`.) pyclbr ------ -Added an ``end_lineno`` attribute to the ``Function`` and ``Class`` +Add an ``end_lineno`` attribute to the ``Function`` and ``Class`` objects in the tree returned by :func:`pyclbr.readline` and :func:`pyclbr.readline_ex`. It matches the existing (start) ``lineno``. (Contributed by Aviral Srivastava in :issue:`38307`.) @@ -1132,7 +1132,7 @@ instead of :mod:`pickle` protocol ``3`` when creating shelves. statistics ---------- -Added :func:`~statistics.covariance`, Pearson's +Add :func:`~statistics.covariance`, Pearson's :func:`~statistics.correlation`, and simple :func:`~statistics.linear_regression` functions. (Contributed by Tymoteusz Wo?od?ko in :issue:`38490`.) @@ -1149,7 +1149,7 @@ socket The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. (Contributed by Christian Heimes in :issue:`42413`.) -Added option to create MPTCP sockets with ``IPPROTO_MPTCP`` +Add option to create MPTCP sockets with ``IPPROTO_MPTCP`` (Contributed by Rui Cunha in :issue:`43571`.) ssl @@ -1229,7 +1229,7 @@ simulate (the default is still :data:`signal.SIGINT`). threading --------- -Added :func:`threading.gettrace` and :func:`threading.getprofile` to +Add :func:`threading.gettrace` and :func:`threading.getprofile` to retrieve the functions set by :func:`threading.settrace` and :func:`threading.setprofile` respectively. (Contributed by Mario Corchero in :issue:`42251`.) @@ -1251,7 +1251,7 @@ as a positional-only argument. types ----- -Reintroduced the :data:`types.EllipsisType`, :data:`types.NoneType` +Reintroduce the :data:`types.EllipsisType`, :data:`types.NoneType` and :data:`types.NotImplementedType` classes, providing a new set of types readily interpretable by type checkers. (Contributed by Bas van Beek in :issue:`41810`.) @@ -1355,12 +1355,12 @@ Optimizations * 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 + ``_compression.DecompressReader`` class. bz2 decompression is now 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`) * When using stringized annotations, annotations dicts for functions are no longer - created when the function is created. Instead, they're stored as a tuple of + created when the function is created. Instead, they are stored as a tuple of strings, and the function object lazily converts this into the annotations dict on demand. This optimization cuts the CPU time needed to define an annotated function by half. @@ -1371,13 +1371,13 @@ Optimizations algorithm to avoid quadratic behavior on long strings. (Contributed by Dennis Sweeney in :issue:`41972`) -* Added micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup +* Add micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup 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`) + on average. (Contributed by Dino Viehland in :issue:`43452`) -* Following built-in functions now support the faster :pep:`590` vectorcall calling convention: +* The 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`) + (Contributed by Dong-hee Na and Jeroen Demeyer 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 @@ -1492,11 +1492,11 @@ 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_event_loop` now emits a deprecation warning if there is + no running event loop. In the 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 + or :class:`~asyncio.Task` objects now emit 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`, @@ -1509,7 +1509,7 @@ Deprecated deprecated, scheduled for removal in Python 3.12. Its use is strongly discouraged by the SQLite3 documentation. See `the SQLite3 docs `_ for more details. - If shared cache must be used, open the database in URI mode using the + If a shared cache must be used, open the database in URI mode using the ``cache=shared`` query parameter. (Contributed by Erlend E. Aasland in :issue:`24464`.) @@ -1553,7 +1553,7 @@ Removed * The ``ParserBase.error()`` method from the private and undocumented ``_markupbase`` module has been removed. :class:`html.parser.HTMLParser` is the only subclass of - ``ParserBase`` and its ``error()`` implementation has already been removed in + ``ParserBase`` and its ``error()`` implementation was already removed in Python 3.5. (Contributed by Berker Peksag in :issue:`31844`.) @@ -1646,7 +1646,7 @@ Changes in the Python API :doc:`high-level API <../library/asyncio-api-index>` following deprecation in Python 3.8. - A coroutine that currently look like this:: + A coroutine that currently looks like this:: async def foo(loop): await asyncio.sleep(1, loop=loop) @@ -1695,7 +1695,7 @@ Build Changes * The :mod:`atexit` module must now always be built as a built-in module. (Contributed by Victor Stinner in :issue:`42639`.) -* Added :option:`--disable-test-modules` option to the ``configure`` script: +* Add :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`.) @@ -1759,15 +1759,15 @@ New Features sending value into iterator without raising ``StopIteration`` exception. (Contributed by Vladimir Matveev in :issue:`41756`.) -* Added :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. +* Add :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. (Contributed by Alex Gaynor in :issue:`41784`.) -* Added :c:func:`PyModule_AddObjectRef` function: similar to +* Add :c:func:`PyModule_AddObjectRef` function: similar to :c:func:`PyModule_AddObject` but don't steal a reference to the value on success. (Contributed by Victor Stinner in :issue:`1635741`.) -* Added :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the +* Add :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the reference count of an object and return the object. (Contributed by Victor Stinner in :issue:`42262`.) @@ -1787,7 +1787,7 @@ New Features object is an instance of :class:`set` but not an instance of a subtype. (Contributed by Pablo Galindo in :issue:`43277`.) -* Added :c:func:`PyErr_SetInterruptEx` which allows passing a signal number +* Add :c:func:`PyErr_SetInterruptEx` which allows passing a signal number to simulate. (Contributed by Antoine Pitrou in :issue:`43356`.) @@ -1812,7 +1812,7 @@ 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: +* Add new functions to control the garbage collector from C code: :c:func:`PyGC_Enable()`, :c:func:`PyGC_Disable()`, :c:func:`PyGC_IsEnabled()`. From webhook-mailer at python.org Tue May 4 07:07:36 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 11:07:36 -0000 Subject: [Python-checkins] Add C-API tests (#25886) Message-ID: https://github.com/python/cpython/commit/2f5baa17504feb9a7613bac32fdceed4894434de commit: 2f5baa17504feb9a7613bac32fdceed4894434de branch: main author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: ambv date: 2021-05-04T13:07:31+02:00 summary: Add C-API tests (#25886) files: A Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst M Modules/_testcapimodule.c diff --git a/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst b/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst new file mode 100644 index 00000000000000..8457508237a888 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst @@ -0,0 +1,2 @@ +Add test to check that ``PyStructSequence_NewType`` accepts a +``PyStructSequence_Desc`` with ``doc`` field set to ``NULL``. diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 26ebacba642a4f..0a3040f703da97 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3860,6 +3860,25 @@ test_structseq_newtype_doesnt_leak(PyObject *Py_UNUSED(self), Py_RETURN_NONE; } +static PyObject * +test_structseq_newtype_null_descr_doc(PyObject *Py_UNUSED(self), + PyObject *Py_UNUSED(args)) +{ + PyStructSequence_Field descr_fields[1] = { + (PyStructSequence_Field){NULL, NULL} + }; + // Test specifically for NULL .doc field. + PyStructSequence_Desc descr = {"_testcapi.test_descr", NULL, &descr_fields[0], 0}; + + PyTypeObject* structseq_type = PyStructSequence_NewType(&descr); + assert(structseq_type != NULL); + assert(PyType_Check(structseq_type)); + assert(PyType_FastSubclass(structseq_type, Py_TPFLAGS_TUPLE_SUBCLASS)); + Py_DECREF(structseq_type); + + Py_RETURN_NONE; +} + static PyObject * test_incref_decref_API(PyObject *ob, PyObject *Py_UNUSED(ignored)) { @@ -5618,6 +5637,8 @@ static PyMethodDef TestMethods[] = { {"test_decref_doesnt_leak", test_decref_doesnt_leak, METH_NOARGS}, {"test_structseq_newtype_doesnt_leak", test_structseq_newtype_doesnt_leak, METH_NOARGS}, + {"test_structseq_newtype_null_descr_doc", + test_structseq_newtype_null_descr_doc, METH_NOARGS}, {"test_incref_decref_API", test_incref_decref_API, METH_NOARGS}, {"test_long_and_overflow", test_long_and_overflow, METH_NOARGS}, {"test_long_as_double", test_long_as_double, METH_NOARGS}, From webhook-mailer at python.org Tue May 4 07:36:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 11:36:58 -0000 Subject: [Python-checkins] bpo-44025: Clarify when '_' is a keyword. (GH-25873) Message-ID: https://github.com/python/cpython/commit/ae4f8574993c85f9dc6fe60e6a25d65f688705e6 commit: ae4f8574993c85f9dc6fe60e6a25d65f688705e6 branch: 3.10 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-05-04T04:36:50-07:00 summary: bpo-44025: Clarify when '_' is a keyword. (GH-25873) In match statements, in case patterns and nowhere else. Co-authored-by: Jelle Zijlstra (cherry picked from commit 3b200b2aa648fcc8a2673871807c1463afe00195) Co-authored-by: Terry Jan Reedy files: A Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 96bd9b028d5044..77400a8d8504f3 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -797,7 +797,7 @@ Syntax: capture_pattern: !'_' NAME A single underscore ``_`` is not a capture pattern (this is what ``!'_'`` -expresses). And is instead treated as a :token:`wildcard_pattern`. +expresses). It is instead treated as a :token:`wildcard_pattern`. In a given pattern, a given name can only be bound once. E.g. ``case x, x: ...`` is invalid while ``case [x] | x: ...`` is allowed. @@ -820,7 +820,9 @@ and binds no name. Syntax: .. productionlist:: python-grammar wildcard_pattern: '_' -``_`` is a :ref:`soft keyword `. +``_`` is a :ref:`soft keyword ` within any pattern, +but only within patterns. It is an identifier, as usual, even within +``match`` headers, ``guards``, and ``case`` blocks. In simple terms, ``_`` will always succeed. diff --git a/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst b/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst new file mode 100644 index 00000000000000..1432236a32f63f --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-03-22-08-08.bpo-44025.gcB7iP.rst @@ -0,0 +1 @@ +Clarify when '_' in match statements is a keyword, and when not. From webhook-mailer at python.org Tue May 4 08:30:10 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:30:10 -0000 Subject: [Python-checkins] Add C-API tests (GH-25886) (#25887) Message-ID: https://github.com/python/cpython/commit/912ef3f2481a30362bce339fd44aba990d046ae2 commit: 912ef3f2481a30362bce339fd44aba990d046ae2 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T14:29:56+02:00 summary: Add C-API tests (GH-25886) (#25887) (cherry picked from commit 2f5baa17504feb9a7613bac32fdceed4894434de) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst M Modules/_testcapimodule.c diff --git a/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst b/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst new file mode 100644 index 00000000000000..8457508237a888 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-05-04-18-10-57.bpo-42083.EMS2TK.rst @@ -0,0 +1,2 @@ +Add test to check that ``PyStructSequence_NewType`` accepts a +``PyStructSequence_Desc`` with ``doc`` field set to ``NULL``. diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 26ebacba642a4f..0a3040f703da97 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3860,6 +3860,25 @@ test_structseq_newtype_doesnt_leak(PyObject *Py_UNUSED(self), Py_RETURN_NONE; } +static PyObject * +test_structseq_newtype_null_descr_doc(PyObject *Py_UNUSED(self), + PyObject *Py_UNUSED(args)) +{ + PyStructSequence_Field descr_fields[1] = { + (PyStructSequence_Field){NULL, NULL} + }; + // Test specifically for NULL .doc field. + PyStructSequence_Desc descr = {"_testcapi.test_descr", NULL, &descr_fields[0], 0}; + + PyTypeObject* structseq_type = PyStructSequence_NewType(&descr); + assert(structseq_type != NULL); + assert(PyType_Check(structseq_type)); + assert(PyType_FastSubclass(structseq_type, Py_TPFLAGS_TUPLE_SUBCLASS)); + Py_DECREF(structseq_type); + + Py_RETURN_NONE; +} + static PyObject * test_incref_decref_API(PyObject *ob, PyObject *Py_UNUSED(ignored)) { @@ -5618,6 +5637,8 @@ static PyMethodDef TestMethods[] = { {"test_decref_doesnt_leak", test_decref_doesnt_leak, METH_NOARGS}, {"test_structseq_newtype_doesnt_leak", test_structseq_newtype_doesnt_leak, METH_NOARGS}, + {"test_structseq_newtype_null_descr_doc", + test_structseq_newtype_null_descr_doc, METH_NOARGS}, {"test_incref_decref_API", test_incref_decref_API, METH_NOARGS}, {"test_long_and_overflow", test_long_and_overflow, METH_NOARGS}, {"test_long_as_double", test_long_as_double, METH_NOARGS}, From webhook-mailer at python.org Tue May 4 08:34:24 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:34:24 -0000 Subject: [Python-checkins] Fix error in Enum documentation example code that was referring to the wrong enum. (#25837) Message-ID: https://github.com/python/cpython/commit/33d9bf298b7672c5a09f8c0d80af00a4ec383e4a commit: 33d9bf298b7672c5a09f8c0d80af00a4ec383e4a branch: main author: krisaoe committer: ambv date: 2021-05-04T14:34:14+02:00 summary: Fix error in Enum documentation example code that was referring to the wrong enum. (#25837) files: M Doc/howto/enum.rst diff --git a/Doc/howto/enum.rst b/Doc/howto/enum.rst index 9ece93e660504f..b0eea5560afce8 100644 --- a/Doc/howto/enum.rst +++ b/Doc/howto/enum.rst @@ -286,7 +286,7 @@ overridden:: ... EAST = auto() ... WEST = auto() ... - >>> [member.value for member in Color] + >>> [member.value for member in Ordinal] ['NORTH', 'SOUTH', 'EAST', 'WEST'] .. note:: From webhook-mailer at python.org Tue May 4 08:36:18 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:36:18 -0000 Subject: [Python-checkins] bpo-32822: Add finally with return/break/continue to the tutorial (#25600) Message-ID: https://github.com/python/cpython/commit/a0b9915a8be98427432e13d8eb2207a8b9824179 commit: a0b9915a8be98427432e13d8eb2207a8b9824179 branch: main author: Roberto Hueso committer: ambv date: 2021-05-04T14:36:01+02:00 summary: bpo-32822: Add finally with return/break/continue to the tutorial (#25600) This documents in the tutorial docs the behavior of a finally clause in case it should re-raise an exception but contains a return/break/continue statement. files: M Doc/tutorial/errors.rst M Misc/ACKS diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index 25bb4fc567b95..cd5fc878f9c94 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -405,6 +405,10 @@ points discuss more complex cases when an exception occurs: or :keyword:`!else` clause. Again, the exception is re-raised after the :keyword:`!finally` clause has been executed. +* If the :keyword:`!finally` clause executes a :keyword:`break`, + :keyword:`continue` or :keyword:`return` statement, exceptions are not + re-raised. + * If the :keyword:`!try` statement reaches a :keyword:`break`, :keyword:`continue` or :keyword:`return` statement, the :keyword:`!finally` clause will execute just prior to the diff --git a/Misc/ACKS b/Misc/ACKS index fb84c00622c31..9f861b374221d 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -778,6 +778,7 @@ Christian Hudon Beno?t Hudson Lawrence Hudson Michael Hudson +Roberto Hueso Gomez Jim Hugunin Greg Humphreys Chris Hunt From webhook-mailer at python.org Tue May 4 08:44:22 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:44:22 -0000 Subject: [Python-checkins] Fix error in Enum documentation example code that was referring to the wrong enum. (GH-25837) (#25891) Message-ID: https://github.com/python/cpython/commit/31debfa524a9522a02adc66eb00f0009d7413c8c commit: 31debfa524a9522a02adc66eb00f0009d7413c8c branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T14:44:14+02:00 summary: Fix error in Enum documentation example code that was referring to the wrong enum. (GH-25837) (#25891) (cherry picked from commit 33d9bf298b7672c5a09f8c0d80af00a4ec383e4a) Co-authored-by: krisaoe files: M Doc/howto/enum.rst diff --git a/Doc/howto/enum.rst b/Doc/howto/enum.rst index 9ece93e660504f..b0eea5560afce8 100644 --- a/Doc/howto/enum.rst +++ b/Doc/howto/enum.rst @@ -286,7 +286,7 @@ overridden:: ... EAST = auto() ... WEST = auto() ... - >>> [member.value for member in Color] + >>> [member.value for member in Ordinal] ['NORTH', 'SOUTH', 'EAST', 'WEST'] .. note:: From webhook-mailer at python.org Tue May 4 08:46:45 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:46:45 -0000 Subject: [Python-checkins] bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (#25249) Message-ID: https://github.com/python/cpython/commit/ada14995870abddc277addf57dd690a2af04c2da commit: ada14995870abddc277addf57dd690a2af04c2da branch: 3.7 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T14:46:40+02:00 summary: bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (#25249) 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 4f42919b09eaee..16b7e1c50985d1 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -946,7 +946,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 00000000000000..1c9f727e965fb8 --- /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 Tue May 4 08:47:49 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 12:47:49 -0000 Subject: [Python-checkins] bpo-42686: Enable SQLite math functions in Windows build (#24053) Message-ID: https://github.com/python/cpython/commit/b451bc8d7e5e5a1df46fbecb6cf50af942cc401e commit: b451bc8d7e5e5a1df46fbecb6cf50af942cc401e branch: main author: Erlend Egeberg Aasland committer: ambv date: 2021-05-04T14:47:44+02:00 summary: bpo-42686: Enable SQLite math functions in Windows build (#24053) files: A Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst M PCbuild/sqlite3.vcxproj diff --git a/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst b/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst new file mode 100644 index 00000000000000..2fcf6e946ec838 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst @@ -0,0 +1 @@ +Build :mod:`sqlite3` with math functions enabled. Patch by Erlend E. Aasland. diff --git a/PCbuild/sqlite3.vcxproj b/PCbuild/sqlite3.vcxproj index 39f10c5abd69de..e39e2d9c226ca1 100644 --- a/PCbuild/sqlite3.vcxproj +++ b/PCbuild/sqlite3.vcxproj @@ -98,7 +98,7 @@ $(sqlite3Dir);%(AdditionalIncludeDirectories) - SQLITE_ENABLE_JSON1;SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_ENABLE_RTREE;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions) + SQLITE_ENABLE_MATH_FUNCTIONS;SQLITE_ENABLE_JSON1;SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_ENABLE_RTREE;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions) Level1 From webhook-mailer at python.org Tue May 4 09:17:25 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 13:17:25 -0000 Subject: [Python-checkins] bpo-32822: Add finally with return/break/continue to the tutorial (GH-25600) (#25890) Message-ID: https://github.com/python/cpython/commit/91cb1e20e6a432b8b2c1b5db37b03c84b15384fa commit: 91cb1e20e6a432b8b2c1b5db37b03c84b15384fa branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T15:17:21+02:00 summary: bpo-32822: Add finally with return/break/continue to the tutorial (GH-25600) (#25890) This documents in the tutorial docs the behavior of a finally clause in case it should re-raise an exception but contains a return/break/continue statement. (cherry picked from commit a0b9915a8be98427432e13d8eb2207a8b9824179) Co-authored-by: Roberto Hueso files: M Doc/tutorial/errors.rst M Misc/ACKS diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index f72da5c3404484..7bb0b489899073 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -405,6 +405,10 @@ points discuss more complex cases when an exception occurs: or :keyword:`!else` clause. Again, the exception is re-raised after the :keyword:`!finally` clause has been executed. +* If the :keyword:`!finally` clause executes a :keyword:`break`, + :keyword:`continue` or :keyword:`return` statement, exceptions are not + re-raised. + * If the :keyword:`!try` statement reaches a :keyword:`break`, :keyword:`continue` or :keyword:`return` statement, the :keyword:`!finally` clause will execute just prior to the diff --git a/Misc/ACKS b/Misc/ACKS index 389c8e133f71bd..be45273362476e 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -766,6 +766,7 @@ Christian Hudon Beno?t Hudson Lawrence Hudson Michael Hudson +Roberto Hueso Gomez Jim Hugunin Greg Humphreys Chris Hunt From webhook-mailer at python.org Tue May 4 09:17:44 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 13:17:44 -0000 Subject: [Python-checkins] bpo-32822: Add finally with return/break/continue to the tutorial (GH-25600) (#25893) Message-ID: https://github.com/python/cpython/commit/8655521de8760e8a695bcce92937800c079ea2b2 commit: 8655521de8760e8a695bcce92937800c079ea2b2 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T15:17:40+02:00 summary: bpo-32822: Add finally with return/break/continue to the tutorial (GH-25600) (#25893) This documents in the tutorial docs the behavior of a finally clause in case it should re-raise an exception but contains a return/break/continue statement. (cherry picked from commit a0b9915a8be98427432e13d8eb2207a8b9824179) Co-authored-by: Roberto Hueso files: M Doc/tutorial/errors.rst M Misc/ACKS diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst index 25bb4fc567b95b..cd5fc878f9c946 100644 --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -405,6 +405,10 @@ points discuss more complex cases when an exception occurs: or :keyword:`!else` clause. Again, the exception is re-raised after the :keyword:`!finally` clause has been executed. +* If the :keyword:`!finally` clause executes a :keyword:`break`, + :keyword:`continue` or :keyword:`return` statement, exceptions are not + re-raised. + * If the :keyword:`!try` statement reaches a :keyword:`break`, :keyword:`continue` or :keyword:`return` statement, the :keyword:`!finally` clause will execute just prior to the diff --git a/Misc/ACKS b/Misc/ACKS index fb84c00622c314..9f861b374221dc 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -778,6 +778,7 @@ Christian Hudon Beno?t Hudson Lawrence Hudson Michael Hudson +Roberto Hueso Gomez Jim Hugunin Greg Humphreys Chris Hunt From webhook-mailer at python.org Tue May 4 09:19:03 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 04 May 2021 13:19:03 -0000 Subject: [Python-checkins] Fix typo in ast.py (GH-25740) Message-ID: https://github.com/python/cpython/commit/9ee8448243e776d2a07a9868e9795bbb2c828f9c commit: 9ee8448243e776d2a07a9868e9795bbb2c828f9c branch: main author: Ikko Ashimine committer: orsenthil date: 2021-05-04T06:18:58-07:00 summary: Fix typo in ast.py (GH-25740) parantheses -> parentheses files: M Lib/ast.py diff --git a/Lib/ast.py b/Lib/ast.py index 0c53e5c5712f5..66bcee8a252a0 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -1455,9 +1455,9 @@ def visit_Call(self, node): def visit_Subscript(self, node): def is_simple_tuple(slice_value): - # when unparsing a non-empty tuple, the parantheses can be safely + # when unparsing a non-empty tuple, the parentheses can be safely # omitted if there aren't any elements that explicitly requires - # parantheses (such as starred expressions). + # parentheses (such as starred expressions). return ( isinstance(slice_value, Tuple) and slice_value.elts From webhook-mailer at python.org Tue May 4 09:21:45 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 13:21:45 -0000 Subject: [Python-checkins] bpo-42686: Enable SQLite math functions in Windows build (GH-24053) (#25892) Message-ID: https://github.com/python/cpython/commit/4bb0a815ef2b683af75f43ab20d52eaffe78b436 commit: 4bb0a815ef2b683af75f43ab20d52eaffe78b436 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T15:21:40+02:00 summary: bpo-42686: Enable SQLite math functions in Windows build (GH-24053) (#25892) (cherry picked from commit b451bc8d7e5e5a1df46fbecb6cf50af942cc401e) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst M PCbuild/sqlite3.vcxproj diff --git a/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst b/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst new file mode 100644 index 00000000000000..2fcf6e946ec838 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2021-01-01-21-21-03.bpo-42686.G_f-TC.rst @@ -0,0 +1 @@ +Build :mod:`sqlite3` with math functions enabled. Patch by Erlend E. Aasland. diff --git a/PCbuild/sqlite3.vcxproj b/PCbuild/sqlite3.vcxproj index 39f10c5abd69de..e39e2d9c226ca1 100644 --- a/PCbuild/sqlite3.vcxproj +++ b/PCbuild/sqlite3.vcxproj @@ -98,7 +98,7 @@ $(sqlite3Dir);%(AdditionalIncludeDirectories) - SQLITE_ENABLE_JSON1;SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_ENABLE_RTREE;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions) + SQLITE_ENABLE_MATH_FUNCTIONS;SQLITE_ENABLE_JSON1;SQLITE_ENABLE_FTS4;SQLITE_ENABLE_FTS5;SQLITE_ENABLE_RTREE;SQLITE_API=__declspec(dllexport);%(PreprocessorDefinitions) Level1 From webhook-mailer at python.org Tue May 4 09:24:56 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 04 May 2021 13:24:56 -0000 Subject: [Python-checkins] fix enum.property reference in docs (GH-25875) (#25876) Message-ID: https://github.com/python/cpython/commit/377f3d43aa9b76a425ce5a853065d56290379a15 commit: 377f3d43aa9b76a425ce5a853065d56290379a15 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-04T06:24:46-07:00 summary: fix enum.property reference in docs (GH-25875) (#25876) (cherry picked from commit 6fee0835cb00677acd341751f831ca1af128f4c9) Co-authored-by: Jelle Zijlstra files: M Doc/library/enum.rst diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index b5f9c2f08b187..466d95941468a 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -108,7 +108,7 @@ Module Contents :class:`Enum` class decorator to apply the appropriate global `__repr__`, and export its members into the global name space. - :func:`property` + :func:`.property` Allows :class:`Enum` members to have attributes without conflicting with other members' names. From webhook-mailer at python.org Tue May 4 09:39:17 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 04 May 2021 13:39:17 -0000 Subject: [Python-checkins] Fix typo in ast.py (GH-25740) (GH-25894) Message-ID: https://github.com/python/cpython/commit/c3bf0bd4720f9e0cfed84867a3150c2503a27a33 commit: c3bf0bd4720f9e0cfed84867a3150c2503a27a33 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-04T06:39:08-07:00 summary: Fix typo in ast.py (GH-25740) (GH-25894) parantheses -> parentheses (cherry picked from commit 9ee8448243e776d2a07a9868e9795bbb2c828f9c) Co-authored-by: Ikko Ashimine Co-authored-by: Ikko Ashimine files: M Lib/ast.py diff --git a/Lib/ast.py b/Lib/ast.py index 5d32621841e4a..396eea18303ce 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -1448,9 +1448,9 @@ def visit_Call(self, node): def visit_Subscript(self, node): def is_simple_tuple(slice_value): - # when unparsing a non-empty tuple, the parantheses can be safely + # when unparsing a non-empty tuple, the parentheses can be safely # omitted if there aren't any elements that explicitly requires - # parantheses (such as starred expressions). + # parentheses (such as starred expressions). return ( isinstance(slice_value, Tuple) and slice_value.elts From webhook-mailer at python.org Tue May 4 09:39:25 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 13:39:25 -0000 Subject: [Python-checkins] Fix typo in ast.py (GH-25740) Message-ID: https://github.com/python/cpython/commit/62a983d866af69973c4a31ed8f11dc5e97171a4c commit: 62a983d866af69973c4a31ed8f11dc5e97171a4c branch: 3.10 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-05-04T06:39:16-07:00 summary: Fix typo in ast.py (GH-25740) parantheses -> parentheses (cherry picked from commit 9ee8448243e776d2a07a9868e9795bbb2c828f9c) Co-authored-by: Ikko Ashimine files: M Lib/ast.py diff --git a/Lib/ast.py b/Lib/ast.py index 0c53e5c5712f5..66bcee8a252a0 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -1455,9 +1455,9 @@ def visit_Call(self, node): def visit_Subscript(self, node): def is_simple_tuple(slice_value): - # when unparsing a non-empty tuple, the parantheses can be safely + # when unparsing a non-empty tuple, the parentheses can be safely # omitted if there aren't any elements that explicitly requires - # parantheses (such as starred expressions). + # parentheses (such as starred expressions). return ( isinstance(slice_value, Tuple) and slice_value.elts From webhook-mailer at python.org Tue May 4 09:48:34 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 13:48:34 -0000 Subject: [Python-checkins] closes bpo-43349: Fix tuning(7) manpage hyperlink. (GH-24680) (#25694) Message-ID: https://github.com/python/cpython/commit/4b90c8f17603e7ab4e4568cc8b9d5de4f8099973 commit: 4b90c8f17603e7ab4e4568cc8b9d5de4f8099973 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-04T15:48:24+02:00 summary: closes bpo-43349: Fix tuning(7) manpage hyperlink. (GH-24680) (#25694) (cherry picked from commit f4d7d46cb48aa3a1bf3c2c7e2d7d71cbf49dea69) Co-authored-by: Erlend Egeberg Aasland files: M Doc/library/resource.rst diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst index e4eac43642d14d..c8c1348b9ba77e 100644 --- a/Doc/library/resource.rst +++ b/Doc/library/resource.rst @@ -241,7 +241,9 @@ platform. The maximum size (in bytes) of the swap space that may be reserved or used by all of this user id's processes. This limit is enforced only if bit 1 of the vm.overcommit sysctl is set. - Please see :manpage:`tuning(7)` for a complete description of this sysctl. + Please see + `tuning(7) `__ + for a complete description of this sysctl. .. availability:: FreeBSD 9 or later. From webhook-mailer at python.org Tue May 4 10:07:21 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 14:07:21 -0000 Subject: [Python-checkins] [3.9] bpo-42083: Allow NULL doc in PyStructSequence_NewType (#25896) Message-ID: https://github.com/python/cpython/commit/ec18362f6a7fdc02f9f982872fc1006bca31627d commit: ec18362f6a7fdc02f9f982872fc1006bca31627d branch: 3.9 author: Petr Viktorin committer: ambv date: 2021-05-04T16:07:13+02:00 summary: [3.9] bpo-42083: Allow NULL doc in PyStructSequence_NewType (#25896) (cherry picked from commit 2f5baa17504feb9a7613bac32fdceed4894434de) Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> files: A Misc/NEWS.d/next/C API/2021-05-04-15-13-31.bpo-42083.ekXnbR.rst M Modules/_testcapimodule.c M Objects/structseq.c diff --git a/Misc/NEWS.d/next/C API/2021-05-04-15-13-31.bpo-42083.ekXnbR.rst b/Misc/NEWS.d/next/C API/2021-05-04-15-13-31.bpo-42083.ekXnbR.rst new file mode 100644 index 00000000000000..e83bab9c29599a --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-04-15-13-31.bpo-42083.ekXnbR.rst @@ -0,0 +1,2 @@ +Fix crash in :c:func:`PyStructSequence_NewType` when passed ``NULL`` in the +documentation string slot. diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 54c1e62a282414..f4e04e77636cfb 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -3731,6 +3731,25 @@ test_structseq_newtype_doesnt_leak(PyObject *Py_UNUSED(self), Py_RETURN_NONE; } +static PyObject * +test_structseq_newtype_null_descr_doc(PyObject *Py_UNUSED(self), + PyObject *Py_UNUSED(args)) +{ + PyStructSequence_Field descr_fields[1] = { + (PyStructSequence_Field){NULL, NULL} + }; + // Test specifically for NULL .doc field. + PyStructSequence_Desc descr = {"_testcapi.test_descr", NULL, &descr_fields[0], 0}; + + PyTypeObject* structseq_type = PyStructSequence_NewType(&descr); + assert(structseq_type != NULL); + assert(PyType_Check(structseq_type)); + assert(PyType_FastSubclass(structseq_type, Py_TPFLAGS_TUPLE_SUBCLASS)); + Py_DECREF(structseq_type); + + Py_RETURN_NONE; +} + static PyObject * test_incref_decref_API(PyObject *ob, PyObject *Py_UNUSED(ignored)) { @@ -5335,6 +5354,8 @@ static PyMethodDef TestMethods[] = { {"test_decref_doesnt_leak", test_decref_doesnt_leak, METH_NOARGS}, {"test_structseq_newtype_doesnt_leak", test_structseq_newtype_doesnt_leak, METH_NOARGS}, + {"test_structseq_newtype_null_descr_doc", + test_structseq_newtype_null_descr_doc, METH_NOARGS}, {"test_incref_decref_API", test_incref_decref_API, METH_NOARGS}, {"test_long_and_overflow", test_long_and_overflow, METH_NOARGS}, {"test_long_as_double", test_long_as_double, METH_NOARGS}, diff --git a/Objects/structseq.c b/Objects/structseq.c index b17b1f99a5bc62..5a493c91e875a8 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -467,12 +467,17 @@ PyStructSequence_NewType(PyStructSequence_Desc *desc) /* Initialize Slots */ slots[0] = (PyType_Slot){Py_tp_dealloc, (destructor)structseq_dealloc}; slots[1] = (PyType_Slot){Py_tp_repr, (reprfunc)structseq_repr}; - slots[2] = (PyType_Slot){Py_tp_doc, (void *)desc->doc}; - slots[3] = (PyType_Slot){Py_tp_methods, structseq_methods}; - slots[4] = (PyType_Slot){Py_tp_new, structseq_new}; - slots[5] = (PyType_Slot){Py_tp_members, members}; - slots[6] = (PyType_Slot){Py_tp_traverse, (traverseproc)structseq_traverse}; - slots[7] = (PyType_Slot){0, 0}; + slots[2] = (PyType_Slot){Py_tp_methods, structseq_methods}; + slots[3] = (PyType_Slot){Py_tp_new, structseq_new}; + slots[4] = (PyType_Slot){Py_tp_members, members}; + slots[5] = (PyType_Slot){Py_tp_traverse, (traverseproc)structseq_traverse}; + if (desc->doc) { + slots[6] = (PyType_Slot){Py_tp_doc, (void *)desc->doc}; + slots[7] = (PyType_Slot){0, 0}; + } + else { + slots[6] = (PyType_Slot){0, 0}; + } /* Initialize Spec */ /* The name in this PyType_Spec is statically allocated so it is */ From webhook-mailer at python.org Tue May 4 12:48:49 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 04 May 2021 16:48:49 -0000 Subject: [Python-checkins] [3.9] bpo-44001: improve Literal documentation (GH-25877). (#25897) Message-ID: https://github.com/python/cpython/commit/ab0a54adad8ddf488ccfb92970be9e4027673d19 commit: ab0a54adad8ddf488ccfb92970be9e4027673d19 branch: 3.9 author: Jelle Zijlstra committer: ambv date: 2021-05-04T18:48:41+02:00 summary: [3.9] bpo-44001: improve Literal documentation (GH-25877). (#25897) (cherry picked from commit 87109f4d85c93a870ee8aa0d2b394547d4636b17) Co-authored-by: Jelle Zijlstra files: M Doc/library/typing.rst M Doc/whatsnew/3.9.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index b136da00a070ad..06a8b813c2b44b 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -656,10 +656,10 @@ These can be used as types in annotations using ``[]``, each having a unique syn .. versionadded:: 3.8 .. versionchanged:: 3.9.1 - ``Literal`` now de-duplicates parameters. Equality comparison of + ``Literal`` now de-duplicates parameters. Equality comparisons of ``Literal`` objects are no longer order dependent. ``Literal`` objects will now raise a :exc:`TypeError` exception during equality comparisons - if one of their parameters are not :term:`immutable`. + if one of their parameters are not :term:`hashable`. .. data:: ClassVar diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index cb492e458c6daa..7f790e5bd7555e 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -1493,7 +1493,7 @@ and to match the behavior of static type checkers specified in the PEP. now ``False``. To support this change, the internally used type cache now supports differentiating types. 4. ``Literal`` objects will now raise a :exc:`TypeError` exception during - equality comparisons if one of their parameters are not :term:`immutable`. + equality comparisons if any of their parameters are not :term:`hashable`. Note that declaring ``Literal`` with mutable parameters will not throw an error:: From webhook-mailer at python.org Tue May 4 14:27:44 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 04 May 2021 18:27:44 -0000 Subject: [Python-checkins] Fix inconsistent fsum vs sum and fmean vs mean (GH-25898) Message-ID: https://github.com/python/cpython/commit/1add719516f49aacd260c44f9dcbd6af269fdb21 commit: 1add719516f49aacd260c44f9dcbd6af269fdb21 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-04T11:27:28-07:00 summary: Fix inconsistent fsum vs sum and fmean vs mean (GH-25898) files: M Lib/statistics.py diff --git a/Lib/statistics.py b/Lib/statistics.py index 673a162b3a79f..edb11c868c1c8 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -882,8 +882,8 @@ def covariance(x, y, /): 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) + xbar = fmean(x) + ybar = fmean(y) total = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) return total / (n - 1) @@ -956,7 +956,7 @@ def linear_regression(regressor, dependent_variable, /): slope = covariance(regressor, dependent_variable) / variance(regressor) except ZeroDivisionError: raise StatisticsError('regressor is constant') - intercept = mean(dependent_variable) - slope * mean(regressor) + intercept = fmean(dependent_variable) - slope * fmean(regressor) return LinearRegression(intercept=intercept, slope=slope) From webhook-mailer at python.org Tue May 4 14:55:40 2021 From: webhook-mailer at python.org (rhettinger) Date: Tue, 04 May 2021 18:55:40 -0000 Subject: [Python-checkins] Fix inconsistent fsum vs sum and fmean vs mean (GH-25898) (GH-25899) Message-ID: https://github.com/python/cpython/commit/af14e1df373c0a619c8ed3b02ebe44c1a90fd468 commit: af14e1df373c0a619c8ed3b02ebe44c1a90fd468 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-04T11:55:33-07:00 summary: Fix inconsistent fsum vs sum and fmean vs mean (GH-25898) (GH-25899) files: M Lib/statistics.py diff --git a/Lib/statistics.py b/Lib/statistics.py index 673a162b3a79f..edb11c868c1c8 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -882,8 +882,8 @@ def covariance(x, y, /): 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) + xbar = fmean(x) + ybar = fmean(y) total = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) return total / (n - 1) @@ -956,7 +956,7 @@ def linear_regression(regressor, dependent_variable, /): slope = covariance(regressor, dependent_variable) / variance(regressor) except ZeroDivisionError: raise StatisticsError('regressor is constant') - intercept = mean(dependent_variable) - slope * mean(regressor) + intercept = fmean(dependent_variable) - slope * fmean(regressor) return LinearRegression(intercept=intercept, slope=slope) From webhook-mailer at python.org Tue May 4 15:37:47 2021 From: webhook-mailer at python.org (JulienPalard) Date: Tue, 04 May 2021 19:37:47 -0000 Subject: [Python-checkins] Clarify rx parameter of compileall functions (#25857) Message-ID: https://github.com/python/cpython/commit/09490298d4485e9322edc6e1e8e15eb66c586164 commit: 09490298d4485e9322edc6e1e8e15eb66c586164 branch: main author: Jean-Abou-Samra <37271310+Jean-Abou-Samra at users.noreply.github.com> committer: JulienPalard date: 2021-05-04T21:37:39+02:00 summary: Clarify rx parameter of compileall functions (#25857) files: M Doc/library/compileall.rst diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst index 5c6e68f930475..de34664acb84a 100644 --- a/Doc/library/compileall.rst +++ b/Doc/library/compileall.rst @@ -166,9 +166,10 @@ Public functions If *force* is true, modules are re-compiled even if the timestamps are up to date. - If *rx* is given, its search method is called on the complete path to each + If *rx* is given, its ``search`` method is called on the complete path to each file considered for compilation, and if it returns a true value, the file - is skipped. + is skipped. This can be used to exclude files matching a regular expression, + given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are @@ -242,9 +243,10 @@ Public functions cases where the source file does not exist at the time the byte-code file is executed. - If *rx* is given, its search method is passed the full path name to the + If *rx* is given, its ``search`` method is passed the full path name to the file being compiled, and if it returns a true value, the file is not - compiled and ``True`` is returned. + compiled and ``True`` is returned. This can be used to exclude files matching + a regular expression, given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are From webhook-mailer at python.org Tue May 4 15:57:41 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 19:57:41 -0000 Subject: [Python-checkins] Clarify rx parameter of compileall functions (GH-25857) Message-ID: https://github.com/python/cpython/commit/5dffd79ee99a57443e02d9322daf03b0a1bc44c1 commit: 5dffd79ee99a57443e02d9322daf03b0a1bc44c1 branch: 3.10 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-05-04T12:57:35-07:00 summary: Clarify rx parameter of compileall functions (GH-25857) (cherry picked from commit 09490298d4485e9322edc6e1e8e15eb66c586164) Co-authored-by: Jean-Abou-Samra <37271310+Jean-Abou-Samra at users.noreply.github.com> files: M Doc/library/compileall.rst diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst index 5c6e68f930475..de34664acb84a 100644 --- a/Doc/library/compileall.rst +++ b/Doc/library/compileall.rst @@ -166,9 +166,10 @@ Public functions If *force* is true, modules are re-compiled even if the timestamps are up to date. - If *rx* is given, its search method is called on the complete path to each + If *rx* is given, its ``search`` method is called on the complete path to each file considered for compilation, and if it returns a true value, the file - is skipped. + is skipped. This can be used to exclude files matching a regular expression, + given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are @@ -242,9 +243,10 @@ Public functions cases where the source file does not exist at the time the byte-code file is executed. - If *rx* is given, its search method is passed the full path name to the + If *rx* is given, its ``search`` method is passed the full path name to the file being compiled, and if it returns a true value, the file is not - compiled and ``True`` is returned. + compiled and ``True`` is returned. This can be used to exclude files matching + a regular expression, given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are From webhook-mailer at python.org Tue May 4 15:59:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 19:59:58 -0000 Subject: [Python-checkins] Clarify rx parameter of compileall functions (GH-25857) Message-ID: https://github.com/python/cpython/commit/8faed45242f26e4e34009bf518c17119f103d069 commit: 8faed45242f26e4e34009bf518c17119f103d069 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-05-04T12:59:45-07:00 summary: Clarify rx parameter of compileall functions (GH-25857) (cherry picked from commit 09490298d4485e9322edc6e1e8e15eb66c586164) Co-authored-by: Jean-Abou-Samra <37271310+Jean-Abou-Samra at users.noreply.github.com> files: M Doc/library/compileall.rst diff --git a/Doc/library/compileall.rst b/Doc/library/compileall.rst index 5c6e68f930475..de34664acb84a 100644 --- a/Doc/library/compileall.rst +++ b/Doc/library/compileall.rst @@ -166,9 +166,10 @@ Public functions If *force* is true, modules are re-compiled even if the timestamps are up to date. - If *rx* is given, its search method is called on the complete path to each + If *rx* is given, its ``search`` method is called on the complete path to each file considered for compilation, and if it returns a true value, the file - is skipped. + is skipped. This can be used to exclude files matching a regular expression, + given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are @@ -242,9 +243,10 @@ Public functions cases where the source file does not exist at the time the byte-code file is executed. - If *rx* is given, its search method is passed the full path name to the + If *rx* is given, its ``search`` method is passed the full path name to the file being compiled, and if it returns a true value, the file is not - compiled and ``True`` is returned. + compiled and ``True`` is returned. This can be used to exclude files matching + a regular expression, given as a :ref:`re.Pattern ` object. If *quiet* is ``False`` or ``0`` (the default), the filenames and other information are printed to standard out. Set to ``1``, only errors are From webhook-mailer at python.org Tue May 4 16:37:21 2021 From: webhook-mailer at python.org (zware) Date: Tue, 04 May 2021 20:37:21 -0000 Subject: [Python-checkins] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) Message-ID: https://github.com/python/cpython/commit/355bae88822bee4de6092b63d69c5a5dad393a16 commit: 355bae88822bee4de6092b63d69c5a5dad393a16 branch: main author: karl ding committer: zware date: 2021-05-04T15:37:13-05:00 summary: bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) The address tuple for CAN_RAW no longer returns the address family after the introduction of CAN ISO-TP support in a30f6d45ac3. However, updating test_socket.CANTest.testSendFrame was missed as part of the change, so the test incorrectly attempts to index past the last tuple item to retrieve the address family. This removes the now-redundant check for equality against socket.AF_CAN, as the tuple will not contain the address family. files: M Lib/test/test_socket.py diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 3c45278748a94..828d1f3dcc670 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -224,7 +224,7 @@ class SocketCANTest(unittest.TestCase): the following commands: # modprobe vcan # ip link add dev vcan0 type vcan - # ifconfig vcan0 up + # ip link set up vcan0 """ interface = 'vcan0' bufsize = 128 @@ -2085,7 +2085,6 @@ def testSendFrame(self): cf, addr = self.s.recvfrom(self.bufsize) self.assertEqual(self.cf, cf) self.assertEqual(addr[0], self.interface) - self.assertEqual(addr[1], socket.AF_CAN) def _testSendFrame(self): self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05') From webhook-mailer at python.org Tue May 4 17:01:49 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 21:01:49 -0000 Subject: [Python-checkins] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) Message-ID: https://github.com/python/cpython/commit/7b4725a210bcfe3dc65f37cbada423cbd1e9f063 commit: 7b4725a210bcfe3dc65f37cbada423cbd1e9f063 branch: 3.10 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-05-04T14:01:42-07:00 summary: bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) The address tuple for CAN_RAW no longer returns the address family after the introduction of CAN ISO-TP support in a30f6d45ac3. However, updating test_socket.CANTest.testSendFrame was missed as part of the change, so the test incorrectly attempts to index past the last tuple item to retrieve the address family. This removes the now-redundant check for equality against socket.AF_CAN, as the tuple will not contain the address family. (cherry picked from commit 355bae88822bee4de6092b63d69c5a5dad393a16) Co-authored-by: karl ding files: M Lib/test/test_socket.py diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 3c45278748a94..828d1f3dcc670 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -224,7 +224,7 @@ class SocketCANTest(unittest.TestCase): the following commands: # modprobe vcan # ip link add dev vcan0 type vcan - # ifconfig vcan0 up + # ip link set up vcan0 """ interface = 'vcan0' bufsize = 128 @@ -2085,7 +2085,6 @@ def testSendFrame(self): cf, addr = self.s.recvfrom(self.bufsize) self.assertEqual(self.cf, cf) self.assertEqual(addr[0], self.interface) - self.assertEqual(addr[1], socket.AF_CAN) def _testSendFrame(self): self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05') From webhook-mailer at python.org Tue May 4 17:03:56 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 04 May 2021 21:03:56 -0000 Subject: [Python-checkins] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) Message-ID: https://github.com/python/cpython/commit/df99532a05e4cfba8d9835375d4a3830b84472ad commit: df99532a05e4cfba8d9835375d4a3830b84472ad 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-05-04T14:03:48-07:00 summary: bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) The address tuple for CAN_RAW no longer returns the address family after the introduction of CAN ISO-TP support in a30f6d45ac3. However, updating test_socket.CANTest.testSendFrame was missed as part of the change, so the test incorrectly attempts to index past the last tuple item to retrieve the address family. This removes the now-redundant check for equality against socket.AF_CAN, as the tuple will not contain the address family. (cherry picked from commit 355bae88822bee4de6092b63d69c5a5dad393a16) Co-authored-by: karl ding files: M Lib/test/test_socket.py diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index aefba4f397b10..595cae6b640f7 100755 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -222,7 +222,7 @@ class SocketCANTest(unittest.TestCase): the following commands: # modprobe vcan # ip link add dev vcan0 type vcan - # ifconfig vcan0 up + # ip link set up vcan0 """ interface = 'vcan0' bufsize = 128 @@ -2048,7 +2048,6 @@ def testSendFrame(self): cf, addr = self.s.recvfrom(self.bufsize) self.assertEqual(self.cf, cf) self.assertEqual(addr[0], self.interface) - self.assertEqual(addr[1], socket.AF_CAN) def _testSendFrame(self): self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05') From webhook-mailer at python.org Tue May 4 20:08:39 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 05 May 2021 00:08:39 -0000 Subject: [Python-checkins] bpo-40521: Convert deque freelist from global vars to instance vars (GH-25906) Message-ID: https://github.com/python/cpython/commit/6fdc4d37f3fdbc1bd51f841be6e5e4708a3b8798 commit: 6fdc4d37f3fdbc1bd51f841be6e5e4708a3b8798 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-04T17:08:31-07:00 summary: bpo-40521: Convert deque freelist from global vars to instance vars (GH-25906) files: M Lib/test/test_deque.py M Modules/_collectionsmodule.c diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index 93cc6ca4f44ec..f1a79373decda 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -740,8 +740,9 @@ class C(object): @support.cpython_only def test_sizeof(self): + MAXFREEBLOCKS = 16 BLOCKLEN = 64 - basesize = support.calcvobjsize('2P4nP') + basesize = support.calcvobjsize('2P5n%dPP' % MAXFREEBLOCKS) blocksize = struct.calcsize('P%dPP' % BLOCKLEN) self.assertEqual(object.__sizeof__(deque()), basesize) check = self.check_sizeof diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 9c8701af904ab..79c6b5752afa2 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -30,6 +30,7 @@ static PyTypeObject tuplegetter_type; #define BLOCKLEN 64 #define CENTER ((BLOCKLEN - 1) / 2) +#define MAXFREEBLOCKS 16 /* Data for deque objects is stored in a doubly-linked list of fixed * length blocks. This assures that appends or pops never move any @@ -92,6 +93,8 @@ typedef struct { Py_ssize_t rightindex; /* 0 <= rightindex < BLOCKLEN */ size_t state; /* incremented whenever the indices move */ Py_ssize_t maxlen; /* maxlen is -1 for unbounded deques */ + Py_ssize_t numfreeblocks; + block *freeblocks[MAXFREEBLOCKS]; PyObject *weakreflist; } dequeobject; @@ -123,16 +126,12 @@ static PyTypeObject deque_type; added at about the same rate as old blocks are being freed. */ -#define MAXFREEBLOCKS 16 -static Py_ssize_t numfreeblocks = 0; -static block *freeblocks[MAXFREEBLOCKS]; - -static block * -newblock(void) { +static inline block * +newblock(dequeobject *deque) { block *b; - if (numfreeblocks) { - numfreeblocks--; - return freeblocks[numfreeblocks]; + if (deque->numfreeblocks) { + deque->numfreeblocks--; + return deque->freeblocks[deque->numfreeblocks]; } b = PyMem_Malloc(sizeof(block)); if (b != NULL) { @@ -142,12 +141,12 @@ newblock(void) { return NULL; } -static void -freeblock(block *b) +static inline void +freeblock(dequeobject *deque, block *b) { - if (numfreeblocks < MAXFREEBLOCKS) { - freeblocks[numfreeblocks] = b; - numfreeblocks++; + if (deque->numfreeblocks < MAXFREEBLOCKS) { + deque->freeblocks[deque->numfreeblocks] = b; + deque->numfreeblocks++; } else { PyMem_Free(b); } @@ -164,7 +163,7 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) if (deque == NULL) return NULL; - b = newblock(); + b = newblock(deque); if (b == NULL) { Py_DECREF(deque); return NULL; @@ -180,6 +179,7 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds) deque->rightindex = CENTER; deque->state = 0; deque->maxlen = -1; + deque->numfreeblocks = 0; deque->weakreflist = NULL; return (PyObject *)deque; @@ -204,7 +204,7 @@ deque_pop(dequeobject *deque, PyObject *unused) if (Py_SIZE(deque)) { prevblock = deque->rightblock->leftlink; assert(deque->leftblock != deque->rightblock); - freeblock(deque->rightblock); + freeblock(deque, deque->rightblock); CHECK_NOT_END(prevblock); MARK_END(prevblock->rightlink); deque->rightblock = prevblock; @@ -242,7 +242,7 @@ deque_popleft(dequeobject *deque, PyObject *unused) if (Py_SIZE(deque)) { assert(deque->leftblock != deque->rightblock); prevblock = deque->leftblock->rightlink; - freeblock(deque->leftblock); + freeblock(deque, deque->leftblock); CHECK_NOT_END(prevblock); MARK_END(prevblock->leftlink); deque->leftblock = prevblock; @@ -278,7 +278,7 @@ static inline int deque_append_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(); + block *b = newblock(deque); if (b == NULL) return -1; b->leftlink = deque->rightblock; @@ -315,7 +315,7 @@ static inline int deque_appendleft_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen) { if (deque->leftindex == 0) { - block *b = newblock(); + block *b = newblock(deque); if (b == NULL) return -1; b->rightlink = deque->leftblock; @@ -584,7 +584,7 @@ deque_clear(dequeobject *deque) adversary could cause it to never terminate). */ - b = newblock(); + b = newblock(deque); if (b == NULL) { PyErr_Clear(); goto alternate_method; @@ -623,13 +623,13 @@ deque_clear(dequeobject *deque) itemptr = leftblock->data; limit = itemptr + m; n -= m; - freeblock(prevblock); + freeblock(deque, prevblock); } item = *(itemptr++); Py_DECREF(item); } CHECK_END(leftblock->rightlink); - freeblock(leftblock); + freeblock(deque, leftblock); return 0; alternate_method: @@ -679,7 +679,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n) deque->state++; for (i = 0 ; i < n-1 ; ) { if (deque->rightindex == BLOCKLEN - 1) { - block *b = newblock(); + block *b = newblock(deque); if (b == NULL) { Py_SET_SIZE(deque, Py_SIZE(deque) + i); return NULL; @@ -797,7 +797,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) while (n > 0) { if (leftindex == 0) { if (b == NULL) { - b = newblock(); + b = newblock(deque); if (b == NULL) goto done; } @@ -841,7 +841,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) while (n < 0) { if (rightindex == BLOCKLEN - 1) { if (b == NULL) { - b = newblock(); + b = newblock(deque); if (b == NULL) goto done; } @@ -885,7 +885,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n) rv = 0; done: if (b != NULL) - freeblock(b); + freeblock(deque, b); deque->leftblock = leftblock; deque->rightblock = rightblock; deque->leftindex = leftindex; @@ -1306,16 +1306,21 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) static void deque_dealloc(dequeobject *deque) { + Py_ssize_t i; + PyObject_GC_UnTrack(deque); if (deque->weakreflist != NULL) PyObject_ClearWeakRefs((PyObject *) deque); if (deque->leftblock != NULL) { deque_clear(deque); assert(deque->leftblock != NULL); - freeblock(deque->leftblock); + freeblock(deque, deque->leftblock); } deque->leftblock = NULL; deque->rightblock = NULL; + for (i=0 ; i < deque->numfreeblocks ; i++) { + PyMem_Free(deque->freeblocks[i]); + } Py_TYPE(deque)->tp_free(deque); } From webhook-mailer at python.org Tue May 4 23:41:32 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 05 May 2021 03:41:32 -0000 Subject: [Python-checkins] Eliminate duplicated assignment in _randommodule.c (GH-25904) Message-ID: https://github.com/python/cpython/commit/23362f8c301f72bbf261b56e1af93e8c52f5b6cf commit: 23362f8c301f72bbf261b56e1af93e8c52f5b6cf branch: main author: Brad Larsen committer: rhettinger date: 2021-05-04T20:41:11-07:00 summary: Eliminate duplicated assignment in _randommodule.c (GH-25904) files: M Modules/_randommodule.c diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index cae49a009cbcc..0137e34da650a 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -597,7 +597,7 @@ _random_exec(PyObject *module) } /* Look up and save int.__abs__, which is needed in random_seed(). */ - PyObject *longval = longval = PyLong_FromLong(0); + PyObject *longval = PyLong_FromLong(0); if (longval == NULL) { return -1; } From webhook-mailer at python.org Wed May 5 00:39:18 2021 From: webhook-mailer at python.org (rhettinger) Date: Wed, 05 May 2021 04:39:18 -0000 Subject: [Python-checkins] Eliminate duplicated assignment in _randommodule.c (GH-25904) (GH-25909) Message-ID: https://github.com/python/cpython/commit/b19ec7f9df5897755dae14e6f4c7fef2d3bb0406 commit: b19ec7f9df5897755dae14e6f4c7fef2d3bb0406 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-04T21:39:09-07:00 summary: Eliminate duplicated assignment in _randommodule.c (GH-25904) (GH-25909) files: M Modules/_randommodule.c diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index cae49a009cbcc8..0137e34da650a1 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -597,7 +597,7 @@ _random_exec(PyObject *module) } /* Look up and save int.__abs__, which is needed in random_seed(). */ - PyObject *longval = longval = PyLong_FromLong(0); + PyObject *longval = PyLong_FromLong(0); if (longval == NULL) { return -1; } From webhook-mailer at python.org Wed May 5 04:08:33 2021 From: webhook-mailer at python.org (matrixise) Date: Wed, 05 May 2021 08:08:33 -0000 Subject: [Python-checkins] bpo-44040: Update broken link in pathlib source (GH-25905) Message-ID: https://github.com/python/cpython/commit/96d5c7038b06e93d20822d28ed42a2183f876857 commit: 96d5c7038b06e93d20822d28ed42a2183f876857 branch: main author: Kevin Follstad committer: matrixise date: 2021-05-05T10:08:26+02:00 summary: bpo-44040: Update broken link in pathlib source (GH-25905) files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index cf40370c049a3..94e079fffef60 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1295,7 +1295,7 @@ def is_dir(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1312,7 +1312,7 @@ def is_file(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1363,7 +1363,7 @@ def is_block_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1379,7 +1379,7 @@ def is_char_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1395,7 +1395,7 @@ def is_fifo(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1411,7 +1411,7 @@ def is_socket(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path From webhook-mailer at python.org Wed May 5 04:53:59 2021 From: webhook-mailer at python.org (matrixise) Date: Wed, 05 May 2021 08:53:59 -0000 Subject: [Python-checkins] bpo-44040: Update broken link in pathlib source (GH-25905) (GH-25911) Message-ID: https://github.com/python/cpython/commit/bc8b93c9a9fd4faf942cdbaba3e1e0440c594e28 commit: bc8b93c9a9fd4faf942cdbaba3e1e0440c594e28 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: matrixise date: 2021-05-05T10:53:54+02:00 summary: bpo-44040: Update broken link in pathlib source (GH-25905) (GH-25911) (cherry picked from commit 96d5c7038b06e93d20822d28ed42a2183f876857) Co-authored-by: Kevin Follstad files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 756d389cfad378..60e2855ba1ea3e 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1431,7 +1431,7 @@ def is_dir(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1448,7 +1448,7 @@ def is_file(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1499,7 +1499,7 @@ def is_block_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1515,7 +1515,7 @@ def is_char_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1531,7 +1531,7 @@ def is_fifo(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1547,7 +1547,7 @@ def is_socket(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path From webhook-mailer at python.org Wed May 5 04:54:09 2021 From: webhook-mailer at python.org (matrixise) Date: Wed, 05 May 2021 08:54:09 -0000 Subject: [Python-checkins] bpo-44040: Update broken link in pathlib source (GH-25905) (GH-25910) Message-ID: https://github.com/python/cpython/commit/ce4fee210bb604726e5da0ff15952a60c2098f88 commit: ce4fee210bb604726e5da0ff15952a60c2098f88 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: matrixise date: 2021-05-05T10:54:05+02:00 summary: bpo-44040: Update broken link in pathlib source (GH-25905) (GH-25910) (cherry picked from commit 96d5c7038b06e93d20822d28ed42a2183f876857) Co-authored-by: Kevin Follstad files: M Lib/pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index cf40370c049a31..94e079fffef600 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1295,7 +1295,7 @@ def is_dir(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1312,7 +1312,7 @@ def is_file(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1363,7 +1363,7 @@ def is_block_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1379,7 +1379,7 @@ def is_char_device(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1395,7 +1395,7 @@ def is_fifo(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path @@ -1411,7 +1411,7 @@ def is_socket(self): if not _ignore_error(e): raise # Path doesn't exist or is a broken symlink - # (see https://bitbucket.org/pitrou/pathlib/issue/12/) + # (see http://web.archive.org/web/20200623061726/https://bitbucket.org/pitrou/pathlib/issues/12/ ) return False except ValueError: # Non-encodable path From webhook-mailer at python.org Wed May 5 13:08:24 2021 From: webhook-mailer at python.org (corona10) Date: Wed, 05 May 2021 17:08:24 -0000 Subject: [Python-checkins] typing: format patch with make patchcheck (GH-25919) Message-ID: https://github.com/python/cpython/commit/f4013eba41967e294a7ca5cf71d343b4be390d64 commit: f4013eba41967e294a7ca5cf71d343b4be390d64 branch: main author: Dong-hee Na committer: corona10 date: 2021-05-06T02:08:20+09:00 summary: typing: format patch with make patchcheck (GH-25919) files: M Lib/typing.py diff --git a/Lib/typing.py b/Lib/typing.py index 301a47745d837..a51452bfec357 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -99,7 +99,7 @@ 'NamedTuple', # Not really a type. 'TypedDict', # Not really a type. 'Generator', - + # Other concrete types. 'BinaryIO', 'IO', From webhook-mailer at python.org Wed May 5 13:25:38 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 05 May 2021 17:25:38 -0000 Subject: [Python-checkins] [3.8] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) (#25726) Message-ID: https://github.com/python/cpython/commit/515a7bc4e13645d0945b46a8e1d9102b918cd407 commit: 515a7bc4e13645d0945b46a8e1d9102b918cd407 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-05T19:25:29+02:00 summary: [3.8] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25595) (#25726) Co-authored-by: Gregory P. Smith Co-authored-by: Serhiy Storchaka (cherry picked from commit 76cd81d60310d65d01f9d7b48a8985d8ab89c8b4) Co-authored-by: Senthil Kumaran 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 fcad7076e6c77b..a6cfc5d3dc13a1 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.8.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) @@ -668,6 +675,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 @@ -691,3 +702,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 d2ec0dadbcb071..0f99130f5da8ac 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -612,6 +612,54 @@ 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, for http common case scenario. + url = "h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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, "query=something") + self.assertEqual(p.fragment, "fragment") + 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')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, for http common case scenario. + url = b"h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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"query=something") + self.assertEqual(p.fragment, b"fragment") + 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')/?query=something#fragment") + + # any scheme + url = "x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), "x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, any scheme. + url = b"x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), b"x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Unsafe bytes is not returned from urlparse cache. + # scheme is stored after parsing, sending an scheme with unsafe bytes *will not* return an unsafe scheme + url = "https://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "htt\nps" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "https") + self.assertEqual(p.geturl(), "https://www.python.org/javascript:alert('msg')/?query=something#fragment") + 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 36fd8fe2803e22..f0d9d4d803c4e3 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -77,6 +77,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 = {} @@ -414,6 +417,11 @@ def _checknetloc(netloc): raise ValueError("netloc '" + netloc + "' contains invalid " + "characters under NFKC normalization") +def _remove_unsafe_bytes_from_url(url): + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + return url + def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: :///?# @@ -421,6 +429,8 @@ def urlsplit(url, scheme='', allow_fragments=True): Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" url, scheme, _coerce_result = _coerce_args(url, scheme) + url = _remove_unsafe_bytes_from_url(url) + scheme = _remove_unsafe_bytes_from_url(scheme) allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) 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 Wed May 5 13:32:27 2021 From: webhook-mailer at python.org (encukou) Date: Wed, 05 May 2021 17:32:27 -0000 Subject: [Python-checkins] bpo-43795: Mark PyCodec_Unregister as a function, not data, in stable ABI (GH-25920) Message-ID: https://github.com/python/cpython/commit/cf86996a8e5965ff587040d0c2831c3132081a21 commit: cf86996a8e5965ff587040d0c2831c3132081a21 branch: main author: Petr Viktorin committer: encukou date: 2021-05-05T19:32:21+02:00 summary: bpo-43795: Mark PyCodec_Unregister as a function, not data, in stable ABI (GH-25920) files: A Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst M Misc/stable_abi.txt M PC/python3dll.c diff --git a/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst b/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst new file mode 100644 index 00000000000000..20a3823f1f01c0 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst @@ -0,0 +1,2 @@ +:c:func:`PyCodec_Unregister` is now properly exported as a function in the +Windows Stable ABI DLL. diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index 2a802bd5f4b831..a78bcb76b41df6 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2097,7 +2097,7 @@ function PyModule_AddObjectRef added 3.10 data Py_FileSystemDefaultEncodeErrors added 3.10 -data PyCodec_Unregister +function PyCodec_Unregister added 3.10 function PyErr_SetInterruptEx added 3.10 diff --git a/PC/python3dll.c b/PC/python3dll.c index 574d4dcad9f75b..200d1d14e294d1 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -156,6 +156,7 @@ EXPORT_FUNC(PyCodec_ReplaceErrors) EXPORT_FUNC(PyCodec_StreamReader) EXPORT_FUNC(PyCodec_StreamWriter) EXPORT_FUNC(PyCodec_StrictErrors) +EXPORT_FUNC(PyCodec_Unregister) EXPORT_FUNC(PyCodec_XMLCharRefReplaceErrors) EXPORT_FUNC(PyComplex_FromDoubles) EXPORT_FUNC(PyComplex_ImagAsDouble) @@ -734,7 +735,6 @@ 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) From webhook-mailer at python.org Wed May 5 13:33:22 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 05 May 2021 17:33:22 -0000 Subject: [Python-checkins] bpo-35753: Fix crash in doctest with unwrap-able functions (#22981) Message-ID: https://github.com/python/cpython/commit/565a31804c1139fe7886f38af3b3923653b0c1b3 commit: 565a31804c1139fe7886f38af3b3923653b0c1b3 branch: main author: Alfred Perlstein committer: ambv date: 2021-05-05T19:33:17+02:00 summary: bpo-35753: Fix crash in doctest with unwrap-able functions (#22981) Ignore objects that inspect.unwrap throws due to too many wrappers. This is a very rare case, however it can easily be surfaced when a module under doctest imports unitest.mock.call into its namespace. We simply skip any object that throws this exception. This should handle the majority of cases. files: A Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst M Lib/doctest.py M Lib/test/test_doctest.py diff --git a/Lib/doctest.py b/Lib/doctest.py index e95c333f48aad5..ba898f65403df1 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -973,6 +973,17 @@ def _from_module(self, module, object): else: raise ValueError("object must be a class or function") + def _is_routine(self, obj): + """ + Safely unwrap objects and determine if they are functions. + """ + maybe_routine = obj + try: + maybe_routine = inspect.unwrap(maybe_routine) + except ValueError: + pass + return inspect.isroutine(maybe_routine) + def _find(self, tests, obj, name, module, source_lines, globs, seen): """ Find tests for the given object and any contained objects, and @@ -995,9 +1006,9 @@ def _find(self, tests, obj, name, module, source_lines, globs, seen): if inspect.ismodule(obj) and self._recurse: for valname, val in obj.__dict__.items(): valname = '%s.%s' % (name, valname) + # Recurse to functions & classes. - if ((inspect.isroutine(inspect.unwrap(val)) - or inspect.isclass(val)) and + if ((self._is_routine(val) or inspect.isclass(val)) and self._from_module(module, val)): self._find(tests, val, valname, module, source_lines, globs, seen) diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 6f51b1bc4f0d1f..828a0ff56763a4 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -15,6 +15,7 @@ import unittest import tempfile import shutil +import types import contextlib # NOTE: There are some additional tests relating to interaction with @@ -443,7 +444,7 @@ def basics(): r""" >>> tests = finder.find(sample_func) >>> print(tests) # doctest: +ELLIPSIS - [] + [] The exact name depends on how test_doctest was invoked, so allow for leading path components. @@ -698,6 +699,18 @@ def non_Python_modules(): r""" class TestDocTestFinder(unittest.TestCase): + def test_issue35753(self): + # This import of `call` should trigger issue35753 when + # `support.run_doctest` is called due to unwrap failing, + # however with a patched doctest this should succeed. + from unittest.mock import call + dummy_module = types.ModuleType("dummy") + dummy_module.__dict__['inject_call'] = call + try: + support.run_doctest(dummy_module, verbosity=True) + except ValueError as e: + raise support.TestFailed("Doctest unwrap failed") from e + def test_empty_namespace_package(self): pkg_name = 'doctest_empty_pkg' with tempfile.TemporaryDirectory() as parent_dir: diff --git a/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst b/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst new file mode 100644 index 00000000000000..eddfc25906da9e --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst @@ -0,0 +1,2 @@ +Fix crash in doctest when doctest parses modules that include unwrappable +functions by skipping those functions. From webhook-mailer at python.org Wed May 5 14:01:45 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 05 May 2021 18:01:45 -0000 Subject: [Python-checkins] bpo-35753: Fix crash in doctest with unwrap-able functions (GH-22981) (#25926) Message-ID: https://github.com/python/cpython/commit/10d6f6bfd749c0e7da51a96f53ca326c336f7a00 commit: 10d6f6bfd749c0e7da51a96f53ca326c336f7a00 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-05T20:01:21+02:00 summary: bpo-35753: Fix crash in doctest with unwrap-able functions (GH-22981) (#25926) Ignore objects that inspect.unwrap throws due to too many wrappers. This is a very rare case, however it can easily be surfaced when a module under doctest imports unitest.mock.call into its namespace. We simply skip any object that throws this exception. This should handle the majority of cases. (cherry picked from commit 565a31804c1139fe7886f38af3b3923653b0c1b3) Co-authored-by: Alfred Perlstein files: A Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst M Lib/doctest.py M Lib/test/test_doctest.py diff --git a/Lib/doctest.py b/Lib/doctest.py index e95c333f48aad5..ba898f65403df1 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -973,6 +973,17 @@ def _from_module(self, module, object): else: raise ValueError("object must be a class or function") + def _is_routine(self, obj): + """ + Safely unwrap objects and determine if they are functions. + """ + maybe_routine = obj + try: + maybe_routine = inspect.unwrap(maybe_routine) + except ValueError: + pass + return inspect.isroutine(maybe_routine) + def _find(self, tests, obj, name, module, source_lines, globs, seen): """ Find tests for the given object and any contained objects, and @@ -995,9 +1006,9 @@ def _find(self, tests, obj, name, module, source_lines, globs, seen): if inspect.ismodule(obj) and self._recurse: for valname, val in obj.__dict__.items(): valname = '%s.%s' % (name, valname) + # Recurse to functions & classes. - if ((inspect.isroutine(inspect.unwrap(val)) - or inspect.isclass(val)) and + if ((self._is_routine(val) or inspect.isclass(val)) and self._from_module(module, val)): self._find(tests, val, valname, module, source_lines, globs, seen) diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 6f51b1bc4f0d1f..828a0ff56763a4 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -15,6 +15,7 @@ import unittest import tempfile import shutil +import types import contextlib # NOTE: There are some additional tests relating to interaction with @@ -443,7 +444,7 @@ def basics(): r""" >>> tests = finder.find(sample_func) >>> print(tests) # doctest: +ELLIPSIS - [] + [] The exact name depends on how test_doctest was invoked, so allow for leading path components. @@ -698,6 +699,18 @@ def non_Python_modules(): r""" class TestDocTestFinder(unittest.TestCase): + def test_issue35753(self): + # This import of `call` should trigger issue35753 when + # `support.run_doctest` is called due to unwrap failing, + # however with a patched doctest this should succeed. + from unittest.mock import call + dummy_module = types.ModuleType("dummy") + dummy_module.__dict__['inject_call'] = call + try: + support.run_doctest(dummy_module, verbosity=True) + except ValueError as e: + raise support.TestFailed("Doctest unwrap failed") from e + def test_empty_namespace_package(self): pkg_name = 'doctest_empty_pkg' with tempfile.TemporaryDirectory() as parent_dir: diff --git a/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst b/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst new file mode 100644 index 00000000000000..eddfc25906da9e --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2020-10-25-19-20-26.bpo-35753.2LT-hO.rst @@ -0,0 +1,2 @@ +Fix crash in doctest when doctest parses modules that include unwrappable +functions by skipping those functions. From webhook-mailer at python.org Wed May 5 14:15:34 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 05 May 2021 18:15:34 -0000 Subject: [Python-checkins] bpo-43795: Mark PyCodec_Unregister as a function, not data, in stable ABI (GH-25920) Message-ID: https://github.com/python/cpython/commit/8f3ef457ad286e73f272dadec8b98d2ea3a6ec72 commit: 8f3ef457ad286e73f272dadec8b98d2ea3a6ec72 branch: 3.10 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-05-05T11:15:25-07:00 summary: bpo-43795: Mark PyCodec_Unregister as a function, not data, in stable ABI (GH-25920) (cherry picked from commit cf86996a8e5965ff587040d0c2831c3132081a21) Co-authored-by: Petr Viktorin files: A Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst M Misc/stable_abi.txt M PC/python3dll.c diff --git a/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst b/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst new file mode 100644 index 00000000000000..20a3823f1f01c0 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-05-19-04-50.bpo-43795.9Ojj73.rst @@ -0,0 +1,2 @@ +:c:func:`PyCodec_Unregister` is now properly exported as a function in the +Windows Stable ABI DLL. diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index 2a802bd5f4b831..a78bcb76b41df6 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2097,7 +2097,7 @@ function PyModule_AddObjectRef added 3.10 data Py_FileSystemDefaultEncodeErrors added 3.10 -data PyCodec_Unregister +function PyCodec_Unregister added 3.10 function PyErr_SetInterruptEx added 3.10 diff --git a/PC/python3dll.c b/PC/python3dll.c index 574d4dcad9f75b..200d1d14e294d1 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -156,6 +156,7 @@ EXPORT_FUNC(PyCodec_ReplaceErrors) EXPORT_FUNC(PyCodec_StreamReader) EXPORT_FUNC(PyCodec_StreamWriter) EXPORT_FUNC(PyCodec_StrictErrors) +EXPORT_FUNC(PyCodec_Unregister) EXPORT_FUNC(PyCodec_XMLCharRefReplaceErrors) EXPORT_FUNC(PyComplex_FromDoubles) EXPORT_FUNC(PyComplex_ImagAsDouble) @@ -734,7 +735,6 @@ 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) From webhook-mailer at python.org Wed May 5 16:55:41 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 05 May 2021 20:55:41 -0000 Subject: [Python-checkins] bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) Message-ID: https://github.com/python/cpython/commit/da5c808fb50d34bc2e180d9481706072f33025da commit: da5c808fb50d34bc2e180d9481706072f33025da branch: main author: Gregory P. Smith committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-05T13:55:33-07:00 summary: bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) Contributed-By: Matthias Klose Automerge-Triggered-By: GH:tiran files: A Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst M Modules/_sha3/sha3module.c diff --git a/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst new file mode 100644 index 00000000000000..dd24474c2fde7e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst @@ -0,0 +1,2 @@ +The :mod:`hashlib` module no longer does unaligned memory accesses when +compiled for ARM platforms. diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index aba7f6d4b45c22..3974e0b6b47faa 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -64,6 +64,11 @@ #define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN #endif +/* Prevent bus errors on platforms requiring aligned accesses such ARM. */ +#if HAVE_ALIGNED_REQUIRED && !defined(NO_MISALIGNED_ACCESSES) +#define NO_MISALIGNED_ACCESSES +#endif + /* mangle names */ #define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb #define Keccak_HashFinal _PySHA3_Keccak_HashFinal From webhook-mailer at python.org Wed May 5 18:05:30 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 05 May 2021 22:05:30 -0000 Subject: [Python-checkins] bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) Message-ID: https://github.com/python/cpython/commit/3b2a45ff95a68acc8276b37678c98740a232f6d4 commit: 3b2a45ff95a68acc8276b37678c98740a232f6d4 branch: 3.10 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-05-05T15:05:22-07:00 summary: bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) Contributed-By: Matthias Klose Automerge-Triggered-By: GH:tiran (cherry picked from commit da5c808fb50d34bc2e180d9481706072f33025da) Co-authored-by: Gregory P. Smith files: A Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst M Modules/_sha3/sha3module.c diff --git a/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst new file mode 100644 index 00000000000000..dd24474c2fde7e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst @@ -0,0 +1,2 @@ +The :mod:`hashlib` module no longer does unaligned memory accesses when +compiled for ARM platforms. diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index aba7f6d4b45c22..3974e0b6b47faa 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -64,6 +64,11 @@ #define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN #endif +/* Prevent bus errors on platforms requiring aligned accesses such ARM. */ +#if HAVE_ALIGNED_REQUIRED && !defined(NO_MISALIGNED_ACCESSES) +#define NO_MISALIGNED_ACCESSES +#endif + /* mangle names */ #define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb #define Keccak_HashFinal _PySHA3_Keccak_HashFinal From webhook-mailer at python.org Wed May 5 18:43:02 2021 From: webhook-mailer at python.org (gpshead) Date: Wed, 05 May 2021 22:43:02 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) Message-ID: https://github.com/python/cpython/commit/47895e31b6f626bc6ce47d175fe9d43c1098909d commit: 47895e31b6f626bc6ce47d175fe9d43c1098909d branch: main author: Gen Xu committer: gpshead date: 2021-05-05T15:42:41-07:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index 4b1f692844474f..08cf2ed9b3716b 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -202,15 +202,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -222,6 +218,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -309,15 +318,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index db41e29a4b8394..e9272569ecc531 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1180,6 +1180,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1581,7 +1589,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity denylist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 00000000000000..cf6b63e3961558 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Wed May 5 18:50:13 2021 From: webhook-mailer at python.org (orsenthil) Date: Wed, 05 May 2021 22:50:13 -0000 Subject: [Python-checkins] bpo-43882 Remove the newline, and tab early. From query and fragments. (GH-25921) Message-ID: https://github.com/python/cpython/commit/985ac016373403e8ad41f8d563c4355ffa8d49ff commit: 985ac016373403e8ad41f8d563c4355ffa8d49ff branch: main author: Senthil Kumaran committer: orsenthil date: 2021-05-05T15:50:05-07:00 summary: bpo-43882 Remove the newline, and tab early. From query and fragments. (GH-25921) files: 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 67341fecef94cd..31943f357f49f3 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -614,32 +614,40 @@ def test_urlsplit_attributes(self): 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" + url = "http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, "query=something") + self.assertEqual(p.fragment, "fragment") 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") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") # Remove ASCII tabs and newlines from input as bytes. - url = b"http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + url = b"http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, b"query=something") + self.assertEqual(p.fragment, b"fragment") 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") + self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # with scheme as cache-key + url = "http://www.python.org/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "ht\ntp" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") def test_attributes_bad_port(self): """Check handling of invalid ports.""" diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 4249163f0edde7..b35997bc00ce16 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -456,6 +456,11 @@ def urlsplit(url, scheme='', allow_fragments=True): """ url, scheme, _coerce_result = _coerce_args(url, scheme) + + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + scheme = scheme.replace(b, "") + allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) @@ -472,9 +477,6 @@ 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 From webhook-mailer at python.org Wed May 5 19:04:47 2021 From: webhook-mailer at python.org (orsenthil) Date: Wed, 05 May 2021 23:04:47 -0000 Subject: [Python-checkins] bpo-43882 Remove the newline, and tab early. From query and fragments. (GH-25936) Message-ID: https://github.com/python/cpython/commit/24f1d1a8a2c4aa58a606b4b6d5fa4305a3b91705 commit: 24f1d1a8a2c4aa58a606b4b6d5fa4305a3b91705 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-05T16:04:38-07:00 summary: bpo-43882 Remove the newline, and tab early. From query and fragments. (GH-25936) (cherry picked from commit 985ac016373403e8ad41f8d563c4355ffa8d49ff) files: 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 67341fecef94cd..31943f357f49f3 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -614,32 +614,40 @@ def test_urlsplit_attributes(self): 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" + url = "http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, "query=something") + self.assertEqual(p.fragment, "fragment") 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") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") # Remove ASCII tabs and newlines from input as bytes. - url = b"http://www.python.org/java\nscript:\talert('msg\r\n')/#frag" + url = b"http\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" 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.query, b"query=something") + self.assertEqual(p.fragment, b"fragment") 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") + self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # with scheme as cache-key + url = "http://www.python.org/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "ht\ntp" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment") def test_attributes_bad_port(self): """Check handling of invalid ports.""" diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index 4249163f0edde7..b35997bc00ce16 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -456,6 +456,11 @@ def urlsplit(url, scheme='', allow_fragments=True): """ url, scheme, _coerce_result = _coerce_args(url, scheme) + + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + scheme = scheme.replace(b, "") + allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) @@ -472,9 +477,6 @@ 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 From webhook-mailer at python.org Wed May 5 19:06:01 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 05 May 2021 23:06:01 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) Message-ID: https://github.com/python/cpython/commit/ea9327036680acc92d9f89eaf6f6a54d2f8d78d9 commit: ea9327036680acc92d9f89eaf6f6a54d2f8d78d9 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-05-05T16:05:52-07:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith (cherry picked from commit 47895e31b6f626bc6ce47d175fe9d43c1098909d) Co-authored-by: Gen Xu files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index df417cf65e2043..975292505836e1 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -201,15 +201,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -221,6 +217,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -308,15 +317,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 0fe8ead3cef1e0..753590afffe624 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1005,6 +1005,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1406,7 +1414,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity blacklist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 00000000000000..cf6b63e3961558 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Wed May 5 19:14:37 2021 From: webhook-mailer at python.org (gpshead) Date: Wed, 05 May 2021 23:14:37 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25931) Message-ID: https://github.com/python/cpython/commit/60ba0b68470a584103e28958d91e93a6db37ec92 commit: 60ba0b68470a584103e28958d91e93a6db37ec92 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: gpshead date: 2021-05-05T16:14:28-07:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25931) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith (cherry picked from commit 47895e31b6f626bc6ce47d175fe9d43c1098909d) Co-authored-by: Gen Xu files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index 4b1f692844474f..08cf2ed9b3716b 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -202,15 +202,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -222,6 +218,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -309,15 +318,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index db41e29a4b8394..e9272569ecc531 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1180,6 +1180,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1581,7 +1589,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity denylist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 00000000000000..cf6b63e3961558 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Thu May 6 02:56:04 2021 From: webhook-mailer at python.org (tiran) Date: Thu, 06 May 2021 06:56:04 -0000 Subject: [Python-checkins] [3.9] bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) (GH-25928) Message-ID: https://github.com/python/cpython/commit/ce47addfb6f176fad053431b537b77a5f170765e commit: ce47addfb6f176fad053431b537b77a5f170765e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: tiran date: 2021-05-06T08:55:35+02:00 summary: [3.9] bpo-36515: Disable unaligned memory access in _sha3 on ARM (GH-25927) (GH-25928) Contributed-By: Matthias Klose Automerge-Triggered-By: GH:tiran (cherry picked from commit da5c808fb50d34bc2e180d9481706072f33025da) Co-authored-by: Gregory P. Smith Co-authored-by: Gregory P. Smith files: A Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst M Modules/_sha3/sha3module.c diff --git a/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst new file mode 100644 index 00000000000000..dd24474c2fde7e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-05-11-44-49.bpo-36515.uOSa3q.rst @@ -0,0 +1,2 @@ +The :mod:`hashlib` module no longer does unaligned memory accesses when +compiled for ARM platforms. diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c index c826b42df13f92..b6a7130dd86974 100644 --- a/Modules/_sha3/sha3module.c +++ b/Modules/_sha3/sha3module.c @@ -64,6 +64,11 @@ #define PLATFORM_BYTE_ORDER IS_BIG_ENDIAN #endif +/* Prevent bus errors on platforms requiring aligned accesses such ARM. */ +#if HAVE_ALIGNED_REQUIRED && !defined(NO_MISALIGNED_ACCESSES) +#define NO_MISALIGNED_ACCESSES +#endif + /* mangle names */ #define KeccakF1600_FastLoop_Absorb _PySHA3_KeccakF1600_FastLoop_Absorb #define Keccak_HashFinal _PySHA3_Keccak_HashFinal From webhook-mailer at python.org Thu May 6 04:52:36 2021 From: webhook-mailer at python.org (ambv) Date: Thu, 06 May 2021 08:52:36 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (#25933) Message-ID: https://github.com/python/cpython/commit/f396864ddfe914531b5856d7bf852808ebfc01ae commit: f396864ddfe914531b5856d7bf852808ebfc01ae branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-06T10:52:26+02:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (#25933) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith (cherry picked from commit 47895e31b6f626bc6ce47d175fe9d43c1098909d) Co-authored-by: Gen Xu files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index 20a25de855625f..a3c4d978b1d1c1 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -201,15 +201,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -221,6 +217,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -308,15 +317,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 3e423fd4e80bc2..862a0970315d8a 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1003,6 +1003,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1404,7 +1412,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity blacklist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 00000000000000..cf6b63e3961558 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Thu May 6 08:38:58 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 06 May 2021 12:38:58 -0000 Subject: [Python-checkins] Correct location for syntax error in try-except (GH-25939) Message-ID: https://github.com/python/cpython/commit/8d4b18429de504445a1338077e495090d91044b4 commit: 8d4b18429de504445a1338077e495090d91044b4 branch: 3.10 author: Mark Shannon committer: markshannon date: 2021-05-06T13:38:50+01:00 summary: Correct location for syntax error in try-except (GH-25939) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst M Lib/test/test_exceptions.py M Python/compile.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 3c427fed561183..1fe479fbe83092 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -218,7 +218,7 @@ def testSyntaxErrorOffset(self): check('class foo:return 1', 1, 11) check('def f():\n continue', 2, 3) check('def f():\n break', 2, 3) - check('try:\n pass\nexcept:\n pass\nexcept ValueError:\n pass', 2, 3) + check('try:\n pass\nexcept:\n pass\nexcept ValueError:\n pass', 3, 1) # Errors thrown by tokenizer.c check('(0x+1)', 1, 3) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst new file mode 100644 index 00000000000000..24a6581bebf327 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-06-12-43-04.bpo-44056.4LWcJW.rst @@ -0,0 +1,2 @@ +Syntax errors when default ``except`` is not the last ``except`` are +reported with the correct location. Patch by Mark Shannon. diff --git a/Python/compile.c b/Python/compile.c index 4fc8b38d978289..d6bcca1c02483d 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -3165,9 +3165,9 @@ compiler_try_except(struct compiler *c, stmt_ty s) for (i = 0; i < n; i++) { excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET( s->v.Try.handlers, i); + SET_LOC(c, handler); if (!handler->v.ExceptHandler.type && i < n-1) return compiler_error(c, "default 'except:' must be last"); - SET_LOC(c, handler); except = compiler_new_block(c); if (except == NULL) return 0; From webhook-mailer at python.org Thu May 6 10:11:00 2021 From: webhook-mailer at python.org (corona10) Date: Thu, 06 May 2021 14:11:00 -0000 Subject: [Python-checkins] bpo-44017: Update test_contextlib_async not to emit DeprecationWarn (GH-25918) Message-ID: https://github.com/python/cpython/commit/698e9a8211c46ed5dc93e5cd7026ea05dec2f373 commit: 698e9a8211c46ed5dc93e5cd7026ea05dec2f373 branch: main author: Dong-hee Na committer: corona10 date: 2021-05-06T23:10:52+09:00 summary: bpo-44017: Update test_contextlib_async not to emit DeprecationWarn (GH-25918) files: M Lib/test/test_contextlib_async.py M Lib/unittest/test/testmock/testasync.py diff --git a/Lib/test/test_contextlib_async.py b/Lib/test/test_contextlib_async.py index 290ef05b82a801..cbc82dfd8f8d07 100644 --- a/Lib/test/test_contextlib_async.py +++ b/Lib/test/test_contextlib_async.py @@ -369,16 +369,14 @@ class TestAsyncExitStack(TestBaseExitStack, unittest.TestCase): class SyncAsyncExitStack(AsyncExitStack): @staticmethod def run_coroutine(coro): - loop = asyncio.get_event_loop() - - f = asyncio.ensure_future(coro) - f.add_done_callback(lambda f: loop.stop()) + loop = asyncio.get_event_loop_policy().get_event_loop() + t = loop.create_task(coro) + t.add_done_callback(lambda f: loop.stop()) loop.run_forever() - exc = f.exception() - + exc = t.exception() if not exc: - return f.result() + return t.result() else: context = exc.__context__ diff --git a/Lib/unittest/test/testmock/testasync.py b/Lib/unittest/test/testmock/testasync.py index e1866a3492cb50..122e6956635d57 100644 --- a/Lib/unittest/test/testmock/testasync.py +++ b/Lib/unittest/test/testmock/testasync.py @@ -173,8 +173,7 @@ def foo(): pass def test_future_isfuture(self): loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - fut = asyncio.Future() + fut = loop.create_future() loop.stop() loop.close() mock = AsyncMock(fut) From webhook-mailer at python.org Thu May 6 10:30:30 2021 From: webhook-mailer at python.org (tiran) Date: Thu, 06 May 2021 14:30:30 -0000 Subject: [Python-checkins] bpo-38820: Test with OpenSSL 3.0.0-alpha16 (GH-25942) Message-ID: https://github.com/python/cpython/commit/e8525567dd325527e00b3c4ce7c4ce31ff3f1a8c commit: e8525567dd325527e00b3c4ce7c4ce31ff3f1a8c branch: main author: Christian Heimes committer: tiran date: 2021-05-06T16:30:12+02:00 summary: bpo-38820: Test with OpenSSL 3.0.0-alpha16 (GH-25942) Also use new make target to install FIPS provider. files: M .github/workflows/build.yml M Tools/ssl/multissltests.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4be3dc68420f31..d50696d4ff2882 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-alpha15] + openssl_ver: [1.1.1k, 3.0.0-alpha16] env: OPENSSL_VER: ${{ matrix.openssl_ver }} MULTISSL_DIR: ${{ github.workspace }}/multissl diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 24d70ac6e4015e..8d1132f4a95846 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -48,7 +48,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - "3.0.0-alpha15" + "3.0.0-alpha16" ] LIBRESSL_OLD_VERSIONS = [ @@ -143,23 +143,6 @@ help="Keep original sources for debugging." ) -OPENSSL_FIPS_CNF = """\ -openssl_conf = openssl_init - -.include {self.install_dir}/ssl/fipsinstall.cnf -# .include {self.install_dir}/ssl/openssl.cnf - -[openssl_init] -providers = provider_sect - -[provider_sect] -fips = fips_sect -default = default_sect - -[default_sect] -activate = 1 -""" - class AbstractBuilder(object): library = None @@ -304,12 +287,12 @@ def _unpack_src(self): log.info("Unpacking files to {}".format(self.build_dir)) tf.extractall(self.build_dir, members) - def _build_src(self): + def _build_src(self, config_args=()): """Now build openssl""" log.info("Running build in {}".format(self.build_dir)) cwd = self.build_dir cmd = [ - "./config", + "./config", *config_args, "shared", "--debug", "--prefix={}".format(self.install_dir) ] @@ -417,35 +400,19 @@ def _post_install(self): if self.version.startswith("3.0"): self._post_install_300() + def _build_src(self, config_args=()): + if self.version.startswith("3.0"): + config_args += ("enable-fips",) + super()._build_src(config_args) + def _post_install_300(self): # create ssl/ subdir with example configs - self._subprocess_call( - ["make", "-j1", "install_ssldirs"], - cwd=self.build_dir - ) # Install FIPS module - # https://wiki.openssl.org/index.php/OpenSSL_3.0#Completing_the_installation_of_the_FIPS_Module - fipsinstall_cnf = os.path.join( - self.install_dir, "ssl", "fipsinstall.cnf" - ) - openssl_fips_cnf = os.path.join( - self.install_dir, "ssl", "openssl-fips.cnf" - ) - fips_mod = os.path.join(self.lib_dir, "ossl-modules/fips.so") self._subprocess_call( - [ - 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" - ] + ["make", "-j1", "install_ssldirs", "install_fips"], + cwd=self.build_dir ) - with open(openssl_fips_cnf, "w") as f: - f.write(OPENSSL_FIPS_CNF.format(self=self)) + @property def short_version(self): """Short version for OpenSSL download URL""" From webhook-mailer at python.org Thu May 6 10:43:23 2021 From: webhook-mailer at python.org (rhettinger) Date: Thu, 06 May 2021 14:43:23 -0000 Subject: [Python-checkins] Eliminate duplicated calculations and unnecessary work for linear regression (GH-25922) Message-ID: https://github.com/python/cpython/commit/55b78ce3c4e23abe4f27bf16d7968f8851532e47 commit: 55b78ce3c4e23abe4f27bf16d7968f8851532e47 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-06T07:43:13-07:00 summary: Eliminate duplicated calculations and unnecessary work for linear regression (GH-25922) files: M Lib/statistics.py diff --git a/Lib/statistics.py b/Lib/statistics.py index edb11c868c1c8..db8c581068b7d 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -952,11 +952,16 @@ def linear_regression(regressor, dependent_variable, /): 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') + x, y = regressor, dependent_variable + xbar = fsum(x) / n + ybar = fsum(y) / n + sxy = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) + s2x = fsum((xi - xbar) ** 2.0 for xi in x) try: - slope = covariance(regressor, dependent_variable) / variance(regressor) + slope = sxy / s2x except ZeroDivisionError: raise StatisticsError('regressor is constant') - intercept = fmean(dependent_variable) - slope * fmean(regressor) + intercept = ybar - slope * xbar return LinearRegression(intercept=intercept, slope=slope) From webhook-mailer at python.org Thu May 6 10:53:20 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 14:53:20 -0000 Subject: [Python-checkins] bpo-38820: Test with OpenSSL 3.0.0-alpha16 (GH-25942) Message-ID: https://github.com/python/cpython/commit/f8778f96e8b2864093bc8b283598e82c0dd00133 commit: f8778f96e8b2864093bc8b283598e82c0dd00133 branch: 3.10 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-05-06T07:53:11-07:00 summary: bpo-38820: Test with OpenSSL 3.0.0-alpha16 (GH-25942) Also use new make target to install FIPS provider. (cherry picked from commit e8525567dd325527e00b3c4ce7c4ce31ff3f1a8c) Co-authored-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 b51007461affae..b7508bc9cf27f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -201,7 +201,7 @@ jobs: strategy: fail-fast: false matrix: - openssl_ver: [1.1.1k, 3.0.0-alpha15] + openssl_ver: [1.1.1k, 3.0.0-alpha16] env: OPENSSL_VER: ${{ matrix.openssl_ver }} MULTISSL_DIR: ${{ github.workspace }}/multissl diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index 24d70ac6e4015e..8d1132f4a95846 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -48,7 +48,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - "3.0.0-alpha15" + "3.0.0-alpha16" ] LIBRESSL_OLD_VERSIONS = [ @@ -143,23 +143,6 @@ help="Keep original sources for debugging." ) -OPENSSL_FIPS_CNF = """\ -openssl_conf = openssl_init - -.include {self.install_dir}/ssl/fipsinstall.cnf -# .include {self.install_dir}/ssl/openssl.cnf - -[openssl_init] -providers = provider_sect - -[provider_sect] -fips = fips_sect -default = default_sect - -[default_sect] -activate = 1 -""" - class AbstractBuilder(object): library = None @@ -304,12 +287,12 @@ def _unpack_src(self): log.info("Unpacking files to {}".format(self.build_dir)) tf.extractall(self.build_dir, members) - def _build_src(self): + def _build_src(self, config_args=()): """Now build openssl""" log.info("Running build in {}".format(self.build_dir)) cwd = self.build_dir cmd = [ - "./config", + "./config", *config_args, "shared", "--debug", "--prefix={}".format(self.install_dir) ] @@ -417,35 +400,19 @@ def _post_install(self): if self.version.startswith("3.0"): self._post_install_300() + def _build_src(self, config_args=()): + if self.version.startswith("3.0"): + config_args += ("enable-fips",) + super()._build_src(config_args) + def _post_install_300(self): # create ssl/ subdir with example configs - self._subprocess_call( - ["make", "-j1", "install_ssldirs"], - cwd=self.build_dir - ) # Install FIPS module - # https://wiki.openssl.org/index.php/OpenSSL_3.0#Completing_the_installation_of_the_FIPS_Module - fipsinstall_cnf = os.path.join( - self.install_dir, "ssl", "fipsinstall.cnf" - ) - openssl_fips_cnf = os.path.join( - self.install_dir, "ssl", "openssl-fips.cnf" - ) - fips_mod = os.path.join(self.lib_dir, "ossl-modules/fips.so") self._subprocess_call( - [ - 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" - ] + ["make", "-j1", "install_ssldirs", "install_fips"], + cwd=self.build_dir ) - with open(openssl_fips_cnf, "w") as f: - f.write(OPENSSL_FIPS_CNF.format(self=self)) + @property def short_version(self): """Short version for OpenSSL download URL""" From webhook-mailer at python.org Thu May 6 11:27:21 2021 From: webhook-mailer at python.org (rhettinger) Date: Thu, 06 May 2021 15:27:21 -0000 Subject: [Python-checkins] Eliminate duplicated calculations and unnecessary work for linear regression (GH-25922) (GH-25945) Message-ID: https://github.com/python/cpython/commit/8e3cb61da9981847d5ac846f32f817c8dbfbeef3 commit: 8e3cb61da9981847d5ac846f32f817c8dbfbeef3 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-06T08:26:55-07:00 summary: Eliminate duplicated calculations and unnecessary work for linear regression (GH-25922) (GH-25945) files: M Lib/statistics.py diff --git a/Lib/statistics.py b/Lib/statistics.py index edb11c868c1c8..db8c581068b7d 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -952,11 +952,16 @@ def linear_regression(regressor, dependent_variable, /): 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') + x, y = regressor, dependent_variable + xbar = fsum(x) / n + ybar = fsum(y) / n + sxy = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) + s2x = fsum((xi - xbar) ** 2.0 for xi in x) try: - slope = covariance(regressor, dependent_variable) / variance(regressor) + slope = sxy / s2x except ZeroDivisionError: raise StatisticsError('regressor is constant') - intercept = fmean(dependent_variable) - slope * fmean(regressor) + intercept = ybar - slope * xbar return LinearRegression(intercept=intercept, slope=slope) From webhook-mailer at python.org Thu May 6 12:52:46 2021 From: webhook-mailer at python.org (ned-deily) Date: Thu, 06 May 2021 16:52:46 -0000 Subject: [Python-checkins] [3.7] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25923) Message-ID: https://github.com/python/cpython/commit/f4dac7ec55477a6c5d965e594e74bd6bda786903 commit: f4dac7ec55477a6c5d965e594e74bd6bda786903 branch: 3.7 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-06T12:52:36-04:00 summary: [3.7] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs. (GH-25923) Co-authored-by: Gregory P. Smith Co-authored-by: Serhiy Storchaka (cherry picked from commit 76cd81d60310d65d01f9d7b48a8985d8ab89c8b4) Co-authored-by: Senthil Kumaran (cherry picked from commit 515a7bc4e13645d0945b46a8e1d9102b918cd407) Co-authored-by: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> 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 e79faf035b06b..aea6505904be4 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.7.11 + ASCII newline and tab characters are stripped from the URL. + +.. _WHATWG spec: https://url.spec.whatwg.org/#concept-basic-url-parser .. function:: urlunsplit(parts) @@ -660,6 +667,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 @@ -683,3 +694,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 e3088b2f39bd7..3509278a01694 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -612,6 +612,54 @@ 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, for http common case scenario. + url = "h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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, "query=something") + self.assertEqual(p.fragment, "fragment") + 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')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, for http common case scenario. + url = b"h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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"query=something") + self.assertEqual(p.fragment, b"fragment") + 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')/?query=something#fragment") + + # any scheme + url = "x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), "x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, any scheme. + url = b"x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), b"x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Unsafe bytes is not returned from urlparse cache. + # scheme is stored after parsing, sending an scheme with unsafe bytes *will not* return an unsafe scheme + url = "https://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "htt\nps" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "https") + self.assertEqual(p.geturl(), "https://www.python.org/javascript:alert('msg')/?query=something#fragment") + 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 e67d69db3614b..4f21ce784eee9 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -76,6 +76,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 = {} @@ -409,6 +412,11 @@ def _checknetloc(netloc): raise ValueError("netloc '" + netloc + "' contains invalid " + "characters under NFKC normalization") +def _remove_unsafe_bytes_from_url(url): + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + return url + def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: :///?# @@ -416,6 +424,8 @@ def urlsplit(url, scheme='', allow_fragments=True): Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" url, scheme, _coerce_result = _coerce_args(url, scheme) + url = _remove_unsafe_bytes_from_url(url) + scheme = _remove_unsafe_bytes_from_url(scheme) allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) 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 0000000000000..a326d079dff4a --- /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 May 6 12:56:09 2021 From: webhook-mailer at python.org (ned-deily) Date: Thu, 06 May 2021 16:56:09 -0000 Subject: [Python-checkins] [3.6] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs (GH-25924) Message-ID: https://github.com/python/cpython/commit/6c472d3a1d334d4eeb4a25eba7bf3b01611bf667 commit: 6c472d3a1d334d4eeb4a25eba7bf3b01611bf667 branch: 3.6 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-06T12:56:01-04:00 summary: [3.6] bpo-43882 - urllib.parse should sanitize urls containing ASCII newline and tabs (GH-25924) Co-authored-by: Gregory P. Smith Co-authored-by: Serhiy Storchaka (cherry picked from commit 76cd81d60310d65d01f9d7b48a8985d8ab89c8b4) Co-authored-by: Senthil Kumaran (cherry picked from commit 515a7bc4e13645d0945b46a8e1d9102b918cd407) Co-authored-by: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> 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 3c2e37ef2093a..b717d7cc05b2e 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -288,6 +288,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`. @@ -296,6 +299,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.6.14 + ASCII newline and tab characters are stripped from the URL. + +.. _WHATWG spec: https://url.spec.whatwg.org/#concept-basic-url-parser .. function:: urlunsplit(parts) @@ -633,6 +640,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 @@ -656,3 +667,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 e3088b2f39bd7..3509278a01694 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -612,6 +612,54 @@ 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, for http common case scenario. + url = "h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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, "query=something") + self.assertEqual(p.fragment, "fragment") + 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')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, for http common case scenario. + url = b"h\nttp://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + 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"query=something") + self.assertEqual(p.fragment, b"fragment") + 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')/?query=something#fragment") + + # any scheme + url = "x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), "x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Remove ASCII tabs and newlines from input as bytes, any scheme. + url = b"x-new-scheme\t://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + p = urllib.parse.urlsplit(url) + self.assertEqual(p.geturl(), b"x-new-scheme://www.python.org/javascript:alert('msg')/?query=something#fragment") + + # Unsafe bytes is not returned from urlparse cache. + # scheme is stored after parsing, sending an scheme with unsafe bytes *will not* return an unsafe scheme + url = "https://www.python\n.org\t/java\nscript:\talert('msg\r\n')/?query\n=\tsomething#frag\nment" + scheme = "htt\nps" + for _ in range(2): + p = urllib.parse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "https") + self.assertEqual(p.geturl(), "https://www.python.org/javascript:alert('msg')/?query=something#fragment") + 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 66056bf589bf6..ac6e7a9cee0b9 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -76,6 +76,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 = {} @@ -409,6 +412,11 @@ def _checknetloc(netloc): raise ValueError("netloc '" + netloc + "' contains invalid " + "characters under NFKC normalization") +def _remove_unsafe_bytes_from_url(url): + for b in _UNSAFE_URL_BYTES_TO_REMOVE: + url = url.replace(b, "") + return url + def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: :///?# @@ -416,6 +424,8 @@ def urlsplit(url, scheme='', allow_fragments=True): Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" url, scheme, _coerce_result = _coerce_args(url, scheme) + url = _remove_unsafe_bytes_from_url(url) + scheme = _remove_unsafe_bytes_from_url(scheme) allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) 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 0000000000000..a326d079dff4a --- /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 May 6 13:00:15 2021 From: webhook-mailer at python.org (ned-deily) Date: Thu, 06 May 2021 17:00:15 -0000 Subject: [Python-checkins] bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (GH-25250) Message-ID: https://github.com/python/cpython/commit/3fbe96123aeb66664fa547a8f6022efa2dc8788f commit: 3fbe96123aeb66664fa547a8f6022efa2dc8788f branch: 3.6 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-06T13:00:07-04:00 summary: bpo-43075: Fix ReDoS in urllib AbstractBasicAuthHandler (GH-24391) (GH-25250) 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 6624e04317ba2..56565405a7097 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -947,7 +947,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 Thu May 6 13:05:54 2021 From: webhook-mailer at python.org (ned-deily) Date: Thu, 06 May 2021 17:05:54 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25935) Message-ID: https://github.com/python/cpython/commit/f68d2d69f1da56c2aea1293ecf93ab69a6010ad7 commit: f68d2d69f1da56c2aea1293ecf93ab69a6010ad7 branch: 3.6 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-06T13:05:37-04:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25935) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith (cherry picked from commit 47895e31b6f626bc6ce47d175fe9d43c1098909d) Co-authored-by: Gen Xu files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index 53581eca20587..07e675fac5981 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -205,15 +205,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -225,6 +221,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -312,15 +321,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 03e049b13fd21..0db287507c7bf 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -971,6 +971,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1377,7 +1385,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity blacklist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 0000000000000..cf6b63e396155 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Thu May 6 13:10:21 2021 From: webhook-mailer at python.org (ned-deily) Date: Thu, 06 May 2021 17:10:21 -0000 Subject: [Python-checkins] bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25934) Message-ID: https://github.com/python/cpython/commit/078b146f062d212919d0ba25e34e658a8234aa63 commit: 078b146f062d212919d0ba25e34e658a8234aa63 branch: 3.7 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ned-deily date: 2021-05-06T13:10:13-04:00 summary: bpo-44022: Fix http client infinite line reading (DoS) after a HTTP 100 Continue (GH-25916) (GH-25934) Fixes http.client potential denial of service where it could get stuck reading lines from a malicious server after a 100 Continue response. Co-authored-by: Gregory P. Smith (cherry picked from commit 47895e31b6f626bc6ce47d175fe9d43c1098909d) Co-authored-by: Gen Xu files: A Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst M Lib/http/client.py M Lib/test/test_httplib.py diff --git a/Lib/http/client.py b/Lib/http/client.py index 04cd8f7d84986..b756f607d344e 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -204,15 +204,11 @@ def getallmatchingheaders(self, name): lst.append(line) return lst -def parse_headers(fp, _class=HTTPMessage): - """Parses only RFC2822 headers from a file pointer. - - email Parser wants to see strings rather than bytes. - But a TextIOWrapper around self.rfile would buffer too many bytes - from the stream, bytes which we later need to read as bytes. - So we read the correct bytes here, as bytes, for email Parser - to parse. +def _read_headers(fp): + """Reads potential header lines into a list from a file pointer. + Length of line is limited by _MAXLINE, and number of + headers is limited by _MAXHEADERS. """ headers = [] while True: @@ -224,6 +220,19 @@ def parse_headers(fp, _class=HTTPMessage): raise HTTPException("got more than %d headers" % _MAXHEADERS) if line in (b'\r\n', b'\n', b''): break + return headers + +def parse_headers(fp, _class=HTTPMessage): + """Parses only RFC2822 headers from a file pointer. + + email Parser wants to see strings rather than bytes. + But a TextIOWrapper around self.rfile would buffer too many bytes + from the stream, bytes which we later need to read as bytes. + So we read the correct bytes here, as bytes, for email Parser + to parse. + + """ + headers = _read_headers(fp) hstring = b''.join(headers).decode('iso-8859-1') return email.parser.Parser(_class=_class).parsestr(hstring) @@ -311,15 +320,10 @@ def begin(self): if status != CONTINUE: break # skip the header from the 100 response - while True: - skip = self.fp.readline(_MAXLINE + 1) - if len(skip) > _MAXLINE: - raise LineTooLong("header line") - skip = skip.strip() - if not skip: - break - if self.debuglevel > 0: - print("header:", skip) + skipped_headers = _read_headers(self.fp) + if self.debuglevel > 0: + print("headers:", skipped_headers) + del skipped_headers self.code = self.status = status self.reason = reason.strip() diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 3fa0691d3ad8f..8333aa0eeef6a 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -998,6 +998,14 @@ def test_overflowing_header_line(self): resp = client.HTTPResponse(FakeSocket(body)) self.assertRaises(client.LineTooLong, resp.begin) + def test_overflowing_header_limit_after_100(self): + body = ( + 'HTTP/1.1 100 OK\r\n' + 'r\n' * 32768 + ) + resp = client.HTTPResponse(FakeSocket(body)) + self.assertRaises(client.HTTPException, resp.begin) + def test_overflowing_chunked_line(self): body = ( 'HTTP/1.1 200 OK\r\n' @@ -1402,7 +1410,7 @@ def readline(self, limit): class OfflineTest(TestCase): def test_all(self): # Documented objects defined in the module should be in __all__ - expected = {"responses"} # White-list documented dict() object + expected = {"responses"} # Allowlist documented dict() object # HTTPMessage, parse_headers(), and the HTTP status code constants are # intentionally omitted for simplicity blacklist = {"HTTPMessage", "parse_headers"} diff --git a/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst new file mode 100644 index 0000000000000..cf6b63e396155 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2021-05-05-17-37-04.bpo-44022.bS3XJ9.rst @@ -0,0 +1,2 @@ +mod:`http.client` now avoids infinitely reading potential HTTP headers after a +``100 Continue`` status response from the server. From webhook-mailer at python.org Thu May 6 15:01:22 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 19:01:22 -0000 Subject: [Python-checkins] bpo-44059: Register the SerenityOS Browser in the webbrowser module (GH-25947) Message-ID: https://github.com/python/cpython/commit/329a47f0524e9d3f43f1e28c4f9e7c088662c030 commit: 329a47f0524e9d3f43f1e28c4f9e7c088662c030 branch: main author: Linus Groh committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-06T12:01:12-07:00 summary: bpo-44059: Register the SerenityOS Browser in the webbrowser module (GH-25947) Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst M Lib/webbrowser.py M Misc/ACKS diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 6023c1e13841d2..e980497450d66c 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -532,6 +532,10 @@ def register_standard_browsers(): # OS X can use below Unix support (but we prefer using the OS X # specific stuff) + if sys.platform == "serenityos": + # SerenityOS webbrowser, simply called "Browser". + register("Browser", None, BackgroundBrowser("Browser")) + if sys.platform[:3] == "win": # First try to use the default Windows browser register("windows-default", WindowsDefault) diff --git a/Misc/ACKS b/Misc/ACKS index 9f861b374221dc..480a486a24c0b0 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -641,6 +641,7 @@ Andrea Griffini Duncan Grisby Olivier Grisel Fabian Groffen +Linus Groh Eric Groo Daniel Andrade Groppe Dag Gruneau diff --git a/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst b/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst new file mode 100644 index 00000000000000..f734bdb0bce09f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst @@ -0,0 +1 @@ +Register the SerenityOS Browser in the :mod:`webbrowser` module. From webhook-mailer at python.org Thu May 6 15:25:58 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 06 May 2021 19:25:58 -0000 Subject: [Python-checkins] bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) Message-ID: https://github.com/python/cpython/commit/fb427255614fc1f740e7785554c1da8ca39116c2 commit: fb427255614fc1f740e7785554c1da8ca39116c2 branch: main author: Stephen Rosen committer: orsenthil date: 2021-05-06T12:25:52-07:00 summary: bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) * Set content-length for simple http server 301s When http.server.SimpleHTTPRequestHandler sends a 301 (Moved Permanently) due to a missing file, it does not set a Content-Length of 0. Unfortunately, certain clients can be left waiting for the connection to be closed in this circumstance, even though no body will be sent. At time of writing, both curl and Firefox demonstrate this behavior. * Test Content-Length on simple http server redirect When serving a redirect, the SimpleHTTPRequestHandler will now send `Content-Length: 0`. Several tests for http.server already cover various behaviors and checks including redirection. This change only adds one check for the expected Content-Length on the simplest case for a redirect. * Add news entry for SimpleHTTPRequestHandler fix * Clarify the specific kind of 301 Co-authored-by: Senthil Kumaran files: A Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst M Lib/http/server.py M Lib/test/test_httpservers.py diff --git a/Lib/http/server.py b/Lib/http/server.py index 94f730ed3445be..e985dfd5640086 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -689,6 +689,7 @@ def send_head(self): parts[3], parts[4]) new_url = urllib.parse.urlunsplit(new_parts) self.send_header("Location", new_url) + self.send_header("Content-Length", "0") self.end_headers() return None for index in "index.html", "index.htm": diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 6b17817b22bf05..cb0a3aa9e40451 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -428,6 +428,7 @@ def test_get(self): self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url) self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) + self.assertEqual(response.getheader("Content-Length"), "0") response = self.request(self.base_url + '/?hi=2') self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url + '?hi=1') diff --git a/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst new file mode 100644 index 00000000000000..3d67b885bab105 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst @@ -0,0 +1,3 @@ +When :class:`http.server.SimpleHTTPRequestHandler` sends a +``301 (Moved Permanently)`` for a directory path not ending with `/`, add a +``Content-Length: 0`` header. This improves the behavior for certain clients. From webhook-mailer at python.org Thu May 6 15:27:33 2021 From: webhook-mailer at python.org (orsenthil) Date: Thu, 06 May 2021 19:27:33 -0000 Subject: [Python-checkins] docs: clearly document that ":#X" string formatting results in "0X..." (GH-25941) Message-ID: https://github.com/python/cpython/commit/92ceb1c8402422412fcbb98ca19448677c667c3c commit: 92ceb1c8402422412fcbb98ca19448677c667c3c branch: main author: Tal Einat <532281+taleinat at users.noreply.github.com> committer: orsenthil date: 2021-05-06T12:27:29-07:00 summary: docs: clearly document that ":#X" string formatting results in "0X..." (GH-25941) * clearly document that ":#X" string formatting results in "0X..." * put back the "serial comma" files: M Doc/library/string.rst diff --git a/Doc/library/string.rst b/Doc/library/string.rst index d935419f7b75e7..b27782f8d8e9b4 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -386,8 +386,8 @@ The ``'#'`` option causes the "alternate form" to be used for the conversion. The alternate form is defined differently for different types. This option is only valid for integer, float and complex types. For integers, when binary, octal, or hexadecimal output -is used, this option adds the prefix respective ``'0b'``, ``'0o'``, or -``'0x'`` to the output value. For float and complex the +is used, this option adds the respective prefix ``'0b'``, ``'0o'``, +``'0x'``, or ``'0X'`` to the output value. For float and complex the alternate form causes the result of the conversion to always contain a decimal-point character, even if no digits follow it. Normally, a decimal-point character appears in the result of these conversions @@ -467,6 +467,8 @@ The available integer presentation types are: +---------+----------------------------------------------------------+ | ``'X'`` | Hex format. Outputs the number in base 16, using | | | upper-case letters for the digits above 9. | + | | In case ``'#'`` is specified, the prefix ``'0x'`` will | + | | be upper-cased to ``'0X'`` as well. | +---------+----------------------------------------------------------+ | ``'n'`` | Number. This is the same as ``'d'``, except that it uses | | | the current locale setting to insert the appropriate | From webhook-mailer at python.org Thu May 6 15:46:16 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 19:46:16 -0000 Subject: [Python-checkins] docs: clearly document that ":GH-X" string formatting results in "0X..." (GH-25941) Message-ID: https://github.com/python/cpython/commit/34fc6dd8fd2d9d6e60b0917f8a24cc5d63a03016 commit: 34fc6dd8fd2d9d6e60b0917f8a24cc5d63a03016 branch: 3.10 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-05-06T12:46:08-07:00 summary: docs: clearly document that ":GH-X" string formatting results in "0X..." (GH-25941) * clearly document that ":GH-X" string formatting results in "0X..." * put back the "serial comma" (cherry picked from commit 92ceb1c8402422412fcbb98ca19448677c667c3c) Co-authored-by: Tal Einat <532281+taleinat at users.noreply.github.com> files: M Doc/library/string.rst diff --git a/Doc/library/string.rst b/Doc/library/string.rst index d935419f7b75e7..b27782f8d8e9b4 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -386,8 +386,8 @@ The ``'#'`` option causes the "alternate form" to be used for the conversion. The alternate form is defined differently for different types. This option is only valid for integer, float and complex types. For integers, when binary, octal, or hexadecimal output -is used, this option adds the prefix respective ``'0b'``, ``'0o'``, or -``'0x'`` to the output value. For float and complex the +is used, this option adds the respective prefix ``'0b'``, ``'0o'``, +``'0x'``, or ``'0X'`` to the output value. For float and complex the alternate form causes the result of the conversion to always contain a decimal-point character, even if no digits follow it. Normally, a decimal-point character appears in the result of these conversions @@ -467,6 +467,8 @@ The available integer presentation types are: +---------+----------------------------------------------------------+ | ``'X'`` | Hex format. Outputs the number in base 16, using | | | upper-case letters for the digits above 9. | + | | In case ``'#'`` is specified, the prefix ``'0x'`` will | + | | be upper-cased to ``'0X'`` as well. | +---------+----------------------------------------------------------+ | ``'n'`` | Number. This is the same as ``'d'``, except that it uses | | | the current locale setting to insert the appropriate | From webhook-mailer at python.org Thu May 6 15:48:43 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 19:48:43 -0000 Subject: [Python-checkins] bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) Message-ID: https://github.com/python/cpython/commit/058f9b27d3838f04bbb313074941e9f9946a33bc commit: 058f9b27d3838f04bbb313074941e9f9946a33bc branch: 3.10 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-05-06T12:48:36-07:00 summary: bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) * Set content-length for simple http server 301s When http.server.SimpleHTTPRequestHandler sends a 301 (Moved Permanently) due to a missing file, it does not set a Content-Length of 0. Unfortunately, certain clients can be left waiting for the connection to be closed in this circumstance, even though no body will be sent. At time of writing, both curl and Firefox demonstrate this behavior. * Test Content-Length on simple http server redirect When serving a redirect, the SimpleHTTPRequestHandler will now send `Content-Length: 0`. Several tests for http.server already cover various behaviors and checks including redirection. This change only adds one check for the expected Content-Length on the simplest case for a redirect. * Add news entry for SimpleHTTPRequestHandler fix * Clarify the specific kind of 301 Co-authored-by: Senthil Kumaran (cherry picked from commit fb427255614fc1f740e7785554c1da8ca39116c2) Co-authored-by: Stephen Rosen files: A Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst M Lib/http/server.py M Lib/test/test_httpservers.py diff --git a/Lib/http/server.py b/Lib/http/server.py index 94f730ed3445be..e985dfd5640086 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -689,6 +689,7 @@ def send_head(self): parts[3], parts[4]) new_url = urllib.parse.urlunsplit(new_parts) self.send_header("Location", new_url) + self.send_header("Content-Length", "0") self.end_headers() return None for index in "index.html", "index.htm": diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 6b17817b22bf05..cb0a3aa9e40451 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -428,6 +428,7 @@ def test_get(self): self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url) self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) + self.assertEqual(response.getheader("Content-Length"), "0") response = self.request(self.base_url + '/?hi=2') self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url + '?hi=1') diff --git a/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst new file mode 100644 index 00000000000000..3d67b885bab105 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst @@ -0,0 +1,3 @@ +When :class:`http.server.SimpleHTTPRequestHandler` sends a +``301 (Moved Permanently)`` for a directory path not ending with `/`, add a +``Content-Length: 0`` header. This improves the behavior for certain clients. From webhook-mailer at python.org Thu May 6 15:49:30 2021 From: webhook-mailer at python.org (gpshead) Date: Thu, 06 May 2021 19:49:30 -0000 Subject: [Python-checkins] bpo-44059: Register the SerenityOS Browser in the webbrowser module (GH-25947) (GH-25950) Message-ID: https://github.com/python/cpython/commit/fbefdaf92e40134c43142c182f7c5bfe406e4c2b commit: fbefdaf92e40134c43142c182f7c5bfe406e4c2b branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: gpshead date: 2021-05-06T12:49:26-07:00 summary: bpo-44059: Register the SerenityOS Browser in the webbrowser module (GH-25947) (GH-25950) (cherry picked from commit 329a47f0524e9d3f43f1e28c4f9e7c088662c030) Co-authored-by: Linus Groh files: A Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst M Lib/webbrowser.py M Misc/ACKS diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 6023c1e13841d..e980497450d66 100755 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -532,6 +532,10 @@ def register_standard_browsers(): # OS X can use below Unix support (but we prefer using the OS X # specific stuff) + if sys.platform == "serenityos": + # SerenityOS webbrowser, simply called "Browser". + register("Browser", None, BackgroundBrowser("Browser")) + if sys.platform[:3] == "win": # First try to use the default Windows browser register("windows-default", WindowsDefault) diff --git a/Misc/ACKS b/Misc/ACKS index 9f861b374221d..480a486a24c0b 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -641,6 +641,7 @@ Andrea Griffini Duncan Grisby Olivier Grisel Fabian Groffen +Linus Groh Eric Groo Daniel Andrade Groppe Dag Gruneau diff --git a/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst b/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst new file mode 100644 index 0000000000000..f734bdb0bce09 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-06-16-01-55.bpo-44059.GF5r6O.rst @@ -0,0 +1 @@ +Register the SerenityOS Browser in the :mod:`webbrowser` module. From webhook-mailer at python.org Thu May 6 15:51:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 19:51:03 -0000 Subject: [Python-checkins] bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) Message-ID: https://github.com/python/cpython/commit/b391b9b9255697ce6028bb4e7a99c18080aa991c commit: b391b9b9255697ce6028bb4e7a99c18080aa991c 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-05-06T12:50:54-07:00 summary: bpo-43972: Set content-length to 0 for http.server.SimpleHTTPRequestHandler 301s (GH-25705) * Set content-length for simple http server 301s When http.server.SimpleHTTPRequestHandler sends a 301 (Moved Permanently) due to a missing file, it does not set a Content-Length of 0. Unfortunately, certain clients can be left waiting for the connection to be closed in this circumstance, even though no body will be sent. At time of writing, both curl and Firefox demonstrate this behavior. * Test Content-Length on simple http server redirect When serving a redirect, the SimpleHTTPRequestHandler will now send `Content-Length: 0`. Several tests for http.server already cover various behaviors and checks including redirection. This change only adds one check for the expected Content-Length on the simplest case for a redirect. * Add news entry for SimpleHTTPRequestHandler fix * Clarify the specific kind of 301 Co-authored-by: Senthil Kumaran (cherry picked from commit fb427255614fc1f740e7785554c1da8ca39116c2) Co-authored-by: Stephen Rosen files: A Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst M Lib/http/server.py M Lib/test/test_httpservers.py diff --git a/Lib/http/server.py b/Lib/http/server.py index def05f46be4f91..d7cce20432ead4 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -689,6 +689,7 @@ def send_head(self): parts[3], parts[4]) new_url = urllib.parse.urlunsplit(new_parts) self.send_header("Location", new_url) + self.send_header("Content-Length", "0") self.end_headers() return None for index in "index.html", "index.htm": diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 8df0b5251f1ae3..b33fedaafc5a00 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -426,6 +426,7 @@ def test_get(self): self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url) self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) + self.assertEqual(response.getheader("Content-Length"), "0") response = self.request(self.base_url + '/?hi=2') self.check_status_and_reason(response, HTTPStatus.OK) response = self.request(self.base_url + '?hi=1') diff --git a/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst new file mode 100644 index 00000000000000..3d67b885bab105 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-30-16-58-24.bpo-43972.Y2r9lg.rst @@ -0,0 +1,3 @@ +When :class:`http.server.SimpleHTTPRequestHandler` sends a +``301 (Moved Permanently)`` for a directory path not ending with `/`, add a +``Content-Length: 0`` header. This improves the behavior for certain clients. From webhook-mailer at python.org Thu May 6 15:52:59 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 06 May 2021 19:52:59 -0000 Subject: [Python-checkins] docs: clearly document that ":GH-X" string formatting results in "0X..." (GH-25941) Message-ID: https://github.com/python/cpython/commit/1326f51bfc276102b7d011bedc1b759712e62a4a commit: 1326f51bfc276102b7d011bedc1b759712e62a4a 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-05-06T12:52:50-07:00 summary: docs: clearly document that ":GH-X" string formatting results in "0X..." (GH-25941) * clearly document that ":GH-X" string formatting results in "0X..." * put back the "serial comma" (cherry picked from commit 92ceb1c8402422412fcbb98ca19448677c667c3c) Co-authored-by: Tal Einat <532281+taleinat at users.noreply.github.com> files: M Doc/library/string.rst diff --git a/Doc/library/string.rst b/Doc/library/string.rst index e55884d28d6336..d1bdf4347de192 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -386,8 +386,8 @@ The ``'#'`` option causes the "alternate form" to be used for the conversion. The alternate form is defined differently for different types. This option is only valid for integer, float and complex types. For integers, when binary, octal, or hexadecimal output -is used, this option adds the prefix respective ``'0b'``, ``'0o'``, or -``'0x'`` to the output value. For float and complex the +is used, this option adds the respective prefix ``'0b'``, ``'0o'``, +``'0x'``, or ``'0X'`` to the output value. For float and complex the alternate form causes the result of the conversion to always contain a decimal-point character, even if no digits follow it. Normally, a decimal-point character appears in the result of these conversions @@ -463,6 +463,8 @@ The available integer presentation types are: +---------+----------------------------------------------------------+ | ``'X'`` | Hex format. Outputs the number in base 16, using | | | upper-case letters for the digits above 9. | + | | In case ``'#'`` is specified, the prefix ``'0x'`` will | + | | be upper-cased to ``'0X'`` as well. | +---------+----------------------------------------------------------+ | ``'n'`` | Number. This is the same as ``'d'``, except that it uses | | | the current locale setting to insert the appropriate | From webhook-mailer at python.org Thu May 6 17:52:50 2021 From: webhook-mailer at python.org (ericvsmith) Date: Thu, 06 May 2021 21:52:50 -0000 Subject: [Python-checkins] Fix minor grammar problems in dataclasses documentation (GH-25948) Message-ID: https://github.com/python/cpython/commit/ee8e7c2fa950f88ba2c33035bea7aed7aaf0cb77 commit: ee8e7c2fa950f88ba2c33035bea7aed7aaf0cb77 branch: main author: Scott Noyes committer: ericvsmith date: 2021-05-06T17:52:46-04:00 summary: Fix minor grammar problems in dataclasses documentation (GH-25948) Some missing words; some odd word choices. files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 64540b3e963b52..f06763f94fd396 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -17,7 +17,7 @@ adding generated :term:`special method`\s such as :meth:`__init__` and in :pep:`557`. The member variables to use in these generated methods are defined -using :pep:`526` type annotations. For example this code:: +using :pep:`526` type annotations. For example, this code:: from dataclasses import dataclass @@ -31,7 +31,7 @@ using :pep:`526` type annotations. For example this code:: def total_cost(self) -> float: return self.unit_price * self.quantity_on_hand -Will add, among other things, a :meth:`__init__` that looks like:: +will add, among other things, a :meth:`__init__` that looks like:: def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name @@ -52,7 +52,7 @@ Module contents :term:`special method`\s to classes, as described below. The :func:`dataclass` decorator examines the class to find - ``field``\s. A ``field`` is defined as class variable that has a + ``field``\s. A ``field`` is defined as a class variable that has a :term:`type annotation `. With two exceptions described below, nothing in :func:`dataclass` examines the type specified in the variable annotation. @@ -62,8 +62,8 @@ Module contents The :func:`dataclass` decorator will add various "dunder" methods to the class, described below. If any of the added methods already - exist on the class, the behavior depends on the parameter, as documented - below. The decorator returns the same class that is called on; no new + exist in the class, the behavior depends on the parameter, as documented + below. The decorator returns the same class that it is called on; no new class is created. If :func:`dataclass` is used just as a simple decorator with no parameters, @@ -202,7 +202,7 @@ Module contents def __init__(self, a: int, b: int = 0): :exc:`TypeError` will be raised if a field without a default value - follows a field with a default value. This is true either when this + follows a field with a default value. This is true whether this occurs in a single class, or as a result of class inheritance. .. function:: field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING): @@ -395,7 +395,7 @@ Module contents .. function:: replace(instance, /, **changes) - Creates a new object of the same type of ``instance``, replacing + Creates a new object of the same type as ``instance``, replacing fields with values from ``changes``. If ``instance`` is not a Data Class, raises :exc:`TypeError`. If values in ``changes`` do not specify fields, raises :exc:`TypeError`. From webhook-mailer at python.org Thu May 6 17:54:36 2021 From: webhook-mailer at python.org (ericvsmith) Date: Thu, 06 May 2021 21:54:36 -0000 Subject: [Python-checkins] Fix minor grammar problems in dataclasses documentation (GH-25948) (GH-25958) Message-ID: https://github.com/python/cpython/commit/ba5076f34ba3ad5252e29b55727c5c95576e7310 commit: ba5076f34ba3ad5252e29b55727c5c95576e7310 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-06T17:54:32-04:00 summary: Fix minor grammar problems in dataclasses documentation (GH-25948) (GH-25958) Some missing words; some odd word choices. (cherry picked from commit ee8e7c2fa950f88ba2c33035bea7aed7aaf0cb77) Co-authored-by: Scott Noyes Co-authored-by: Scott Noyes files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 64540b3e963b5..f06763f94fd39 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -17,7 +17,7 @@ adding generated :term:`special method`\s such as :meth:`__init__` and in :pep:`557`. The member variables to use in these generated methods are defined -using :pep:`526` type annotations. For example this code:: +using :pep:`526` type annotations. For example, this code:: from dataclasses import dataclass @@ -31,7 +31,7 @@ using :pep:`526` type annotations. For example this code:: def total_cost(self) -> float: return self.unit_price * self.quantity_on_hand -Will add, among other things, a :meth:`__init__` that looks like:: +will add, among other things, a :meth:`__init__` that looks like:: def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name @@ -52,7 +52,7 @@ Module contents :term:`special method`\s to classes, as described below. The :func:`dataclass` decorator examines the class to find - ``field``\s. A ``field`` is defined as class variable that has a + ``field``\s. A ``field`` is defined as a class variable that has a :term:`type annotation `. With two exceptions described below, nothing in :func:`dataclass` examines the type specified in the variable annotation. @@ -62,8 +62,8 @@ Module contents The :func:`dataclass` decorator will add various "dunder" methods to the class, described below. If any of the added methods already - exist on the class, the behavior depends on the parameter, as documented - below. The decorator returns the same class that is called on; no new + exist in the class, the behavior depends on the parameter, as documented + below. The decorator returns the same class that it is called on; no new class is created. If :func:`dataclass` is used just as a simple decorator with no parameters, @@ -202,7 +202,7 @@ Module contents def __init__(self, a: int, b: int = 0): :exc:`TypeError` will be raised if a field without a default value - follows a field with a default value. This is true either when this + follows a field with a default value. This is true whether this occurs in a single class, or as a result of class inheritance. .. function:: field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING): @@ -395,7 +395,7 @@ Module contents .. function:: replace(instance, /, **changes) - Creates a new object of the same type of ``instance``, replacing + Creates a new object of the same type as ``instance``, replacing fields with values from ``changes``. If ``instance`` is not a Data Class, raises :exc:`TypeError`. If values in ``changes`` do not specify fields, raises :exc:`TypeError`. From webhook-mailer at python.org Thu May 6 17:55:03 2021 From: webhook-mailer at python.org (ericvsmith) Date: Thu, 06 May 2021 21:55:03 -0000 Subject: [Python-checkins] Fix minor grammar problems in dataclasses documentation (GH-25948) (#25959) Message-ID: https://github.com/python/cpython/commit/7424105a02bbc209e032752636bae30ccb556402 commit: 7424105a02bbc209e032752636bae30ccb556402 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-06T17:54:58-04:00 summary: Fix minor grammar problems in dataclasses documentation (GH-25948) (#25959) Some missing words; some odd word choices. (cherry picked from commit ee8e7c2fa950f88ba2c33035bea7aed7aaf0cb77) Co-authored-by: Scott Noyes Co-authored-by: Scott Noyes files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index 8711191500c60..de5a8e1200ff3 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -17,7 +17,7 @@ adding generated :term:`special method`\s such as :meth:`__init__` and in :pep:`557`. The member variables to use in these generated methods are defined -using :pep:`526` type annotations. For example this code:: +using :pep:`526` type annotations. For example, this code:: from dataclasses import dataclass @@ -31,7 +31,7 @@ using :pep:`526` type annotations. For example this code:: def total_cost(self) -> float: return self.unit_price * self.quantity_on_hand -Will add, among other things, a :meth:`__init__` that looks like:: +will add, among other things, a :meth:`__init__` that looks like:: def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0): self.name = name @@ -52,7 +52,7 @@ Module-level decorators, classes, and functions :term:`special method`\s to classes, as described below. The :func:`dataclass` decorator examines the class to find - ``field``\s. A ``field`` is defined as class variable that has a + ``field``\s. A ``field`` is defined as a class variable that has a :term:`type annotation `. With two exceptions described below, nothing in :func:`dataclass` examines the type specified in the variable annotation. @@ -62,8 +62,8 @@ Module-level decorators, classes, and functions The :func:`dataclass` decorator will add various "dunder" methods to the class, described below. If any of the added methods already - exist on the class, the behavior depends on the parameter, as documented - below. The decorator returns the same class that is called on; no new + exist in the class, the behavior depends on the parameter, as documented + below. The decorator returns the same class that it is called on; no new class is created. If :func:`dataclass` is used just as a simple decorator with no parameters, @@ -175,7 +175,7 @@ Module-level decorators, classes, and functions def __init__(self, a: int, b: int = 0): :exc:`TypeError` will be raised if a field without a default value - follows a field with a default value. This is true either when this + follows a field with a default value. This is true whether this occurs in a single class, or as a result of class inheritance. .. function:: field(*, default=MISSING, default_factory=MISSING, repr=True, hash=None, init=True, compare=True, metadata=None) @@ -361,7 +361,7 @@ Module-level decorators, classes, and functions .. function:: replace(instance, /, **changes) - Creates a new object of the same type of ``instance``, replacing + Creates a new object of the same type as ``instance``, replacing fields with values from ``changes``. If ``instance`` is not a Data Class, raises :exc:`TypeError`. If values in ``changes`` do not specify fields, raises :exc:`TypeError`. From webhook-mailer at python.org Thu May 6 22:57:13 2021 From: webhook-mailer at python.org (methane) Date: Fri, 07 May 2021 02:57:13 -0000 Subject: [Python-checkins] bpo-40943: Fix skipitem() didn't raise SystemError (GH-25937) Message-ID: https://github.com/python/cpython/commit/4ebf4a6bfad4afcbab3baf9c0159c7767e2a64c0 commit: 4ebf4a6bfad4afcbab3baf9c0159c7767e2a64c0 branch: main author: Inada Naoki committer: methane date: 2021-05-07T11:56:48+09:00 summary: bpo-40943: Fix skipitem() didn't raise SystemError (GH-25937) `convertitem()` raises `SystemError` when '#' is used without `PY_SSIZE_T_CLEAN`. This commit makes `skipitem()` raise it too. files: M Lib/test/test_getargs2.py M Modules/_testcapimodule.c M Python/getargs.c diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py index c67e6f51a2346..e0db9e40e650b 100644 --- a/Lib/test/test_getargs2.py +++ b/Lib/test/test_getargs2.py @@ -874,6 +874,13 @@ def test_s_hash(self): self.assertRaises(TypeError, getargs_s_hash, memoryview(b'memoryview')) self.assertRaises(TypeError, getargs_s_hash, None) + def test_s_hash_int(self): + # "s#" without PY_SSIZE_T_CLEAN defined. + from _testcapi import getargs_s_hash_int + self.assertRaises(SystemError, getargs_s_hash_int, "abc") + self.assertRaises(SystemError, getargs_s_hash_int, x=42) + # getargs_s_hash_int() don't raise SystemError because skipitem() is not called. + def test_z(self): from _testcapi import getargs_z self.assertEqual(getargs_z('abc\xe9'), b'abc\xc3\xa9') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 0a3040f703da9..d926ad8f87a7a 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -5455,9 +5455,6 @@ pynumber_tobase(PyObject *module, PyObject *args) } -static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *); - - static PyObject* test_set_type_size(PyObject *self, PyObject *Py_UNUSED(ignored)) { @@ -5596,6 +5593,8 @@ test_fatal_error(PyObject *self, PyObject *args) } +static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *); +static PyObject *getargs_s_hash_int(PyObject *, PyObject *, PyObject*); static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -5703,6 +5702,8 @@ static PyMethodDef TestMethods[] = { {"getargs_s", getargs_s, METH_VARARGS}, {"getargs_s_star", getargs_s_star, METH_VARARGS}, {"getargs_s_hash", getargs_s_hash, METH_VARARGS}, + {"getargs_s_hash_int", (PyCFunction)(void(*)(void))getargs_s_hash_int, + METH_VARARGS|METH_KEYWORDS}, {"getargs_z", getargs_z, METH_VARARGS}, {"getargs_z_star", getargs_z_star, METH_VARARGS}, {"getargs_z_hash", getargs_z_hash, METH_VARARGS}, @@ -7375,3 +7376,19 @@ test_buildvalue_issue38913(PyObject *self, PyObject *Py_UNUSED(ignored)) Py_RETURN_NONE; } + +#undef PyArg_ParseTupleAndKeywords +PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, + const char *, char **, ...); + +static PyObject * +getargs_s_hash_int(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *keywords[] = {"", "x", NULL}; + const char *s; + int len; + int i = 0; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s#i", keywords, &s, &len, &i)) + return NULL; + Py_RETURN_NONE; +} diff --git a/Python/getargs.c b/Python/getargs.c index b85b575a147fe..d5e083509efef 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -2532,15 +2532,12 @@ skipitem(const char **p_format, va_list *p_va, int flags) } if (*format == '#') { if (p_va != NULL) { - if (flags & FLAG_SIZE_T) - (void) va_arg(*p_va, Py_ssize_t *); - else { - if (PyErr_WarnEx(PyExc_DeprecationWarning, - "PY_SSIZE_T_CLEAN will be required for '#' formats", 1)) { - return NULL; - } - (void) va_arg(*p_va, int *); + if (!(flags & FLAG_SIZE_T)) { + PyErr_SetString(PyExc_SystemError, + "PY_SSIZE_T_CLEAN macro must be defined for '#' formats"); + return NULL; } + (void) va_arg(*p_va, Py_ssize_t *); } format++; } else if ((c == 's' || c == 'z' || c == 'y' || c == 'w') From webhook-mailer at python.org Thu May 6 23:18:46 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 07 May 2021 03:18:46 -0000 Subject: [Python-checkins] bpo-40943: Fix skipitem() didn't raise SystemError (GH-25937) Message-ID: https://github.com/python/cpython/commit/569ca81adf0be92be8752f6cc6492117f9ef3c0b commit: 569ca81adf0be92be8752f6cc6492117f9ef3c0b branch: 3.10 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-05-06T20:18:42-07:00 summary: bpo-40943: Fix skipitem() didn't raise SystemError (GH-25937) `convertitem()` raises `SystemError` when 'GH-' is used without `PY_SSIZE_T_CLEAN`. This commit makes `skipitem()` raise it too. (cherry picked from commit 4ebf4a6bfad4afcbab3baf9c0159c7767e2a64c0) Co-authored-by: Inada Naoki files: M Lib/test/test_getargs2.py M Modules/_testcapimodule.c M Python/getargs.c diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py index c67e6f51a23464..e0db9e40e650b6 100644 --- a/Lib/test/test_getargs2.py +++ b/Lib/test/test_getargs2.py @@ -874,6 +874,13 @@ def test_s_hash(self): self.assertRaises(TypeError, getargs_s_hash, memoryview(b'memoryview')) self.assertRaises(TypeError, getargs_s_hash, None) + def test_s_hash_int(self): + # "s#" without PY_SSIZE_T_CLEAN defined. + from _testcapi import getargs_s_hash_int + self.assertRaises(SystemError, getargs_s_hash_int, "abc") + self.assertRaises(SystemError, getargs_s_hash_int, x=42) + # getargs_s_hash_int() don't raise SystemError because skipitem() is not called. + def test_z(self): from _testcapi import getargs_z self.assertEqual(getargs_z('abc\xe9'), b'abc\xc3\xa9') diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index 0a3040f703da97..d926ad8f87a7a4 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -5455,9 +5455,6 @@ pynumber_tobase(PyObject *module, PyObject *args) } -static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *); - - static PyObject* test_set_type_size(PyObject *self, PyObject *Py_UNUSED(ignored)) { @@ -5596,6 +5593,8 @@ test_fatal_error(PyObject *self, PyObject *args) } +static PyObject *test_buildvalue_issue38913(PyObject *, PyObject *); +static PyObject *getargs_s_hash_int(PyObject *, PyObject *, PyObject*); static PyMethodDef TestMethods[] = { {"raise_exception", raise_exception, METH_VARARGS}, @@ -5703,6 +5702,8 @@ static PyMethodDef TestMethods[] = { {"getargs_s", getargs_s, METH_VARARGS}, {"getargs_s_star", getargs_s_star, METH_VARARGS}, {"getargs_s_hash", getargs_s_hash, METH_VARARGS}, + {"getargs_s_hash_int", (PyCFunction)(void(*)(void))getargs_s_hash_int, + METH_VARARGS|METH_KEYWORDS}, {"getargs_z", getargs_z, METH_VARARGS}, {"getargs_z_star", getargs_z_star, METH_VARARGS}, {"getargs_z_hash", getargs_z_hash, METH_VARARGS}, @@ -7375,3 +7376,19 @@ test_buildvalue_issue38913(PyObject *self, PyObject *Py_UNUSED(ignored)) Py_RETURN_NONE; } + +#undef PyArg_ParseTupleAndKeywords +PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, + const char *, char **, ...); + +static PyObject * +getargs_s_hash_int(PyObject *self, PyObject *args, PyObject *kwargs) +{ + static char *keywords[] = {"", "x", NULL}; + const char *s; + int len; + int i = 0; + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|s#i", keywords, &s, &len, &i)) + return NULL; + Py_RETURN_NONE; +} diff --git a/Python/getargs.c b/Python/getargs.c index b85b575a147fe6..d5e083509efefc 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -2532,15 +2532,12 @@ skipitem(const char **p_format, va_list *p_va, int flags) } if (*format == '#') { if (p_va != NULL) { - if (flags & FLAG_SIZE_T) - (void) va_arg(*p_va, Py_ssize_t *); - else { - if (PyErr_WarnEx(PyExc_DeprecationWarning, - "PY_SSIZE_T_CLEAN will be required for '#' formats", 1)) { - return NULL; - } - (void) va_arg(*p_va, int *); + if (!(flags & FLAG_SIZE_T)) { + PyErr_SetString(PyExc_SystemError, + "PY_SSIZE_T_CLEAN macro must be defined for '#' formats"); + return NULL; } + (void) va_arg(*p_va, Py_ssize_t *); } format++; } else if ((c == 's' || c == 'z' || c == 'y' || c == 'w') From webhook-mailer at python.org Fri May 7 02:58:56 2021 From: webhook-mailer at python.org (methane) Date: Fri, 07 May 2021 06:58:56 -0000 Subject: [Python-checkins] bpo-44029: Remove Py_UNICODE APIs (GH-25881) Message-ID: https://github.com/python/cpython/commit/9ad8f109ac037ac088e09dcd2da523322c5caf34 commit: 9ad8f109ac037ac088e09dcd2da523322c5caf34 branch: main author: Inada Naoki committer: methane date: 2021-05-07T15:58:29+09:00 summary: bpo-44029: Remove Py_UNICODE APIs (GH-25881) Remove deprecated `Py_UNICODE` APIs: `PyUnicode_Encode`, `PyUnicode_EncodeUTF7`, `PyUnicode_EncodeUTF8`, `PyUnicode_EncodeUTF16`, `PyUnicode_EncodeUTF32`, `PyUnicode_EncodeLatin1`, `PyUnicode_EncodeMBCS`, `PyUnicode_EncodeDecimal`, `PyUnicode_EncodeRawUnicodeEscape`, `PyUnicode_EncodeCharmap`, `PyUnicode_EncodeUnicodeEscape`, `PyUnicode_TransformDecimalToASCII`, `PyUnicode_TranslateCharmap`, `PyUnicodeEncodeError_Create`, `PyUnicodeTranslateError_Create`. See :pep:`393` and :pep:`624` for reference. files: A Misc/NEWS.d/next/C API/2021-05-04-17-43-39.bpo-44029.ayX4PR.rst M Doc/c-api/exceptions.rst M Doc/c-api/unicode.rst M Doc/data/refcounts.dat M Include/cpython/pyerrors.h M Include/cpython/unicodeobject.h M Lib/test/test_unicode.py M Modules/_pickle.c M Modules/_testcapimodule.c M Objects/exceptions.c M Objects/unicodeobject.c diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 21c508dc30ae22..525a773b7c768f 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -675,27 +675,6 @@ The following functions are used to create and modify Unicode exceptions from C. *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are UTF-8 encoded strings. -.. c:function:: PyObject* PyUnicodeEncodeError_Create(const char *encoding, const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason) - - Create a :class:`UnicodeEncodeError` object with the attributes *encoding*, - *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are - UTF-8 encoded strings. - - .. deprecated:: 3.3 3.11 - - ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to - ``PyObject_CallFunction(PyExc_UnicodeEncodeError, "sOnns", ...)``. - -.. c:function:: PyObject* PyUnicodeTranslateError_Create(const Py_UNICODE *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason) - - Create a :class:`UnicodeTranslateError` object with the attributes *object*, - *length*, *start*, *end* and *reason*. *reason* is a UTF-8 encoded string. - - .. deprecated:: 3.3 3.11 - - ``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to - ``PyObject_CallFunction(PyExc_UnicodeTranslateError, "Onns", ...)``. - .. c:function:: PyObject* PyUnicodeDecodeError_GetEncoding(PyObject *exc) PyObject* PyUnicodeEncodeError_GetEncoding(PyObject *exc) diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index 8d4eef87db9fb6..8322d3da76dca4 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -719,17 +719,6 @@ Extension modules can continue using them, as they will not be removed in Python :c:func:`PyUnicode_ReadChar` or similar new APIs. -.. c:function:: PyObject* PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, Py_ssize_t size) - - Create a Unicode object by replacing all decimal digits in - :c:type:`Py_UNICODE` buffer of the given *size* by ASCII digits 0--9 - according to their decimal value. Return ``NULL`` if an exception occurs. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`Py_UNICODE_TODECIMAL`. - - .. c:function:: Py_UNICODE* PyUnicode_AsUnicodeAndSize(PyObject *unicode, Py_ssize_t *size) Like :c:func:`PyUnicode_AsUnicode`, but also saves the :c:func:`Py_UNICODE` @@ -1038,20 +1027,6 @@ These are the generic codec APIs: the codec. -.. c:function:: PyObject* PyUnicode_Encode(const Py_UNICODE *s, Py_ssize_t size, \ - const char *encoding, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* and return a Python - bytes object. *encoding* and *errors* have the same meaning as the - parameters of the same name in the Unicode :meth:`~str.encode` method. The codec - to be used is looked up using the Python codec registry. Return ``NULL`` if an - exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsEncodedString`. - - UTF-8 Codecs """""""""""" @@ -1114,18 +1089,6 @@ These are the UTF-8 codec APIs: The return type is now ``const char *`` rather of ``char *``. -.. c:function:: PyObject* PyUnicode_EncodeUTF8(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* using UTF-8 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF8String`, :c:func:`PyUnicode_AsUTF8AndSize` or - :c:func:`PyUnicode_AsEncodedString`. - - UTF-32 Codecs """"""""""""" @@ -1176,29 +1139,6 @@ These are the UTF-32 codec APIs: Return ``NULL`` if an exception was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUTF32(const Py_UNICODE *s, Py_ssize_t size, \ - const char *errors, int byteorder) - - Return a Python bytes object holding the UTF-32 encoded value of the Unicode - data in *s*. Output is written according to the following byte order:: - - byteorder == -1: little endian - byteorder == 0: native byte order (writes a BOM mark) - byteorder == 1: big endian - - If byteorder is ``0``, the output string will always start with the Unicode BOM - mark (U+FEFF). In the other two modes, no BOM mark is prepended. - - If ``Py_UNICODE_WIDE`` is not defined, surrogate pairs will be output - as a single code point. - - Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF32String` or :c:func:`PyUnicode_AsEncodedString`. - - UTF-16 Codecs """"""""""""" @@ -1250,30 +1190,6 @@ These are the UTF-16 codec APIs: Return ``NULL`` if an exception was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUTF16(const Py_UNICODE *s, Py_ssize_t size, \ - const char *errors, int byteorder) - - Return a Python bytes object holding the UTF-16 encoded value of the Unicode - data in *s*. Output is written according to the following byte order:: - - byteorder == -1: little endian - byteorder == 0: native byte order (writes a BOM mark) - byteorder == 1: big endian - - If byteorder is ``0``, the output string will always start with the Unicode BOM - mark (U+FEFF). In the other two modes, no BOM mark is prepended. - - If ``Py_UNICODE_WIDE`` is defined, a single :c:type:`Py_UNICODE` value may get - represented as a surrogate pair. If it is not defined, each :c:type:`Py_UNICODE` - values is interpreted as a UCS-2 character. - - Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUTF16String` or :c:func:`PyUnicode_AsEncodedString`. - - UTF-7 Codecs """""""""""" @@ -1295,23 +1211,6 @@ These are the UTF-7 codec APIs: bytes that have been decoded will be stored in *consumed*. -.. c:function:: PyObject* PyUnicode_EncodeUTF7(const Py_UNICODE *s, Py_ssize_t size, \ - int base64SetO, int base64WhiteSpace, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given size using UTF-7 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - If *base64SetO* is nonzero, "Set O" (punctuation that has no otherwise - special meaning) will be encoded in base-64. If *base64WhiteSpace* is - nonzero, whitespace will be encoded in base-64. Both are set to zero for the - Python "utf-7" codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsEncodedString`. - - Unicode-Escape Codecs """"""""""""""""""""" @@ -1332,16 +1231,6 @@ These are the "Unicode Escape" codec APIs: raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, Py_ssize_t size) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Unicode-Escape and - return a bytes object. Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsUnicodeEscapeString`. - - Raw-Unicode-Escape Codecs """"""""""""""""""""""""" @@ -1362,18 +1251,6 @@ These are the "Raw Unicode Escape" codec APIs: was raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, \ - Py_ssize_t size) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Raw-Unicode-Escape - and return a bytes object. Return ``NULL`` if an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsRawUnicodeEscapeString` or - :c:func:`PyUnicode_AsEncodedString`. - - Latin-1 Codecs """""""""""""" @@ -1394,18 +1271,6 @@ ordinals and only these are accepted by the codecs during encoding. raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeLatin1(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Latin-1 and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsLatin1String` or - :c:func:`PyUnicode_AsEncodedString`. - - ASCII Codecs """""""""""" @@ -1426,18 +1291,6 @@ codes generate errors. raised by the codec. -.. c:function:: PyObject* PyUnicode_EncodeASCII(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using ASCII and - return a Python bytes object. Return ``NULL`` if an exception was raised by - the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsASCIIString` or - :c:func:`PyUnicode_AsEncodedString`. - - Character Map Codecs """""""""""""""""""" @@ -1477,19 +1330,6 @@ These are the mapping codec APIs: ``None`` are treated as "undefined mapping" and cause an error. -.. c:function:: PyObject* PyUnicode_EncodeCharmap(const Py_UNICODE *s, Py_ssize_t size, \ - PyObject *mapping, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using the given - *mapping* object and return the result as a bytes object. Return ``NULL`` if - an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsCharmapString` or - :c:func:`PyUnicode_AsEncodedString`. - - The following codec API is special in that maps Unicode to Unicode. .. c:function:: PyObject* PyUnicode_Translate(PyObject *str, PyObject *table, const char *errors) @@ -1509,19 +1349,6 @@ The following codec API is special in that maps Unicode to Unicode. use the default error handling. -.. c:function:: PyObject* PyUnicode_TranslateCharmap(const Py_UNICODE *s, Py_ssize_t size, \ - PyObject *mapping, const char *errors) - - Translate a :c:type:`Py_UNICODE` buffer of the given *size* by applying a - character *mapping* table to it and return the resulting Unicode object. - Return ``NULL`` when an exception was raised by the codec. - - .. deprecated-removed:: 3.3 3.11 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_Translate`. or :ref:`generic codec based API - ` - - MBCS codecs for Windows """"""""""""""""""""""" @@ -1561,18 +1388,6 @@ the user settings on the machine running the codec. .. versionadded:: 3.3 -.. c:function:: PyObject* PyUnicode_EncodeMBCS(const Py_UNICODE *s, Py_ssize_t size, const char *errors) - - Encode the :c:type:`Py_UNICODE` buffer of the given *size* using MBCS and return - a Python bytes object. Return ``NULL`` if an exception was raised by the - codec. - - .. deprecated-removed:: 3.3 4.0 - Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using - :c:func:`PyUnicode_AsMBCSString`, :c:func:`PyUnicode_EncodeCodePage` or - :c:func:`PyUnicode_AsEncodedString`. - - Methods & Slots """"""""""""""" diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat index 505f1203dd1bdd..f3aacb8ed8ed0d 100644 --- a/Doc/data/refcounts.dat +++ b/Doc/data/refcounts.dat @@ -2427,10 +2427,6 @@ PyUnicode_FromUnicode:Py_ssize_t:size:: PyUnicode_AsUnicode:Py_UNICODE*::: PyUnicode_AsUnicode:PyObject*:unicode:0: -PyUnicode_TransformDecimalToASCII:PyObject*::+1: -PyUnicode_TransformDecimalToASCII:Py_UNICODE*:s:: -PyUnicode_TransformDecimalToASCII:Py_ssize_t:size:: - PyUnicode_AsUnicodeAndSize:Py_UNICODE*::: PyUnicode_AsUnicodeAndSize:PyObject*:unicode:0: PyUnicode_AsUnicodeAndSize:Py_ssize_t*:size:: @@ -2478,12 +2474,6 @@ PyUnicode_DecodeUTF8Stateful:Py_ssize_t:size:: PyUnicode_DecodeUTF8Stateful:const char*:errors:: PyUnicode_DecodeUTF8Stateful:Py_ssize_t*:consumed:: -PyUnicode_Encode:PyObject*::+1: -PyUnicode_Encode:const Py_UNICODE*:s:: -PyUnicode_Encode:Py_ssize_t:size:: -PyUnicode_Encode:const char*:encoding:: -PyUnicode_Encode:const char*:errors:: - PyUnicode_AsEncodedString:PyObject*::+1: PyUnicode_AsEncodedString:PyObject*:unicode:0: PyUnicode_AsEncodedString:const char*:encoding:: @@ -2500,23 +2490,11 @@ PyUnicode_DecodeUTF7Stateful:Py_ssize_t:size:: PyUnicode_DecodeUTF7Stateful:const char*:errors:: PyUnicode_DecodeUTF7Stateful:Py_ssize_t*:consumed:: -PyUnicode_EncodeUTF7:PyObject*::+1: -PyUnicode_EncodeUTF7:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF7:Py_ssize_t:size:: -PyUnicode_EncodeUTF7:int:base64SetO:: -PyUnicode_EncodeUTF7:int:base64WhiteSpace:: -PyUnicode_EncodeUTF7:const char*:errors:: - PyUnicode_DecodeUTF8:PyObject*::+1: PyUnicode_DecodeUTF8:const char*:s:: PyUnicode_DecodeUTF8:Py_ssize_t:size:: PyUnicode_DecodeUTF8:const char*:errors:: -PyUnicode_EncodeUTF8:PyObject*::+1: -PyUnicode_EncodeUTF8:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF8:Py_ssize_t:size:: -PyUnicode_EncodeUTF8:const char*:errors:: - PyUnicode_AsUTF8String:PyObject*::+1: PyUnicode_AsUTF8String:PyObject*:unicode:0: @@ -2533,12 +2511,6 @@ PyUnicode_DecodeUTF16:Py_ssize_t:size:: PyUnicode_DecodeUTF16:const char*:errors:: PyUnicode_DecodeUTF16:int*:byteorder:: -PyUnicode_EncodeUTF16:PyObject*::+1: -PyUnicode_EncodeUTF16:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF16:Py_ssize_t:size:: -PyUnicode_EncodeUTF16:const char*:errors:: -PyUnicode_EncodeUTF16:int:byteorder:: - PyUnicode_AsUTF16String:PyObject*::+1: PyUnicode_AsUTF16String:PyObject*:unicode:0: @@ -2558,21 +2530,11 @@ PyUnicode_DecodeUTF32Stateful:Py_ssize_t*:consumed:: PyUnicode_AsUTF32String:PyObject*::+1: PyUnicode_AsUTF32String:PyObject*:unicode:0: -PyUnicode_EncodeUTF32:PyObject*::+1: -PyUnicode_EncodeUTF32:const Py_UNICODE*:s:: -PyUnicode_EncodeUTF32:Py_ssize_t:size:: -PyUnicode_EncodeUTF32:const char*:errors:: -PyUnicode_EncodeUTF32:int:byteorder:: - PyUnicode_DecodeUnicodeEscape:PyObject*::+1: PyUnicode_DecodeUnicodeEscape:const char*:s:: PyUnicode_DecodeUnicodeEscape:Py_ssize_t:size:: PyUnicode_DecodeUnicodeEscape:const char*:errors:: -PyUnicode_EncodeUnicodeEscape:PyObject*::+1: -PyUnicode_EncodeUnicodeEscape:const Py_UNICODE*:s:: -PyUnicode_EncodeUnicodeEscape:Py_ssize_t:size:: - PyUnicode_AsUnicodeEscapeString:PyObject*::+1: PyUnicode_AsUnicodeEscapeString:PyObject*:unicode:0: @@ -2581,10 +2543,6 @@ PyUnicode_DecodeRawUnicodeEscape:const char*:s:: PyUnicode_DecodeRawUnicodeEscape:Py_ssize_t:size:: PyUnicode_DecodeRawUnicodeEscape:const char*:errors:: -PyUnicode_EncodeRawUnicodeEscape:PyObject*::+1: -PyUnicode_EncodeRawUnicodeEscape:const Py_UNICODE*:s:: -PyUnicode_EncodeRawUnicodeEscape:Py_ssize_t:size:: - PyUnicode_AsRawUnicodeEscapeString:PyObject*::+1: PyUnicode_AsRawUnicodeEscapeString:PyObject*:unicode:0: @@ -2593,11 +2551,6 @@ PyUnicode_DecodeLatin1:const char*:s:: PyUnicode_DecodeLatin1:Py_ssize_t:size:: PyUnicode_DecodeLatin1:const char*:errors:: -PyUnicode_EncodeLatin1:PyObject*::+1: -PyUnicode_EncodeLatin1:const Py_UNICODE*:s:: -PyUnicode_EncodeLatin1:Py_ssize_t:size:: -PyUnicode_EncodeLatin1:const char*:errors:: - PyUnicode_AsLatin1String:PyObject*::+1: PyUnicode_AsLatin1String:PyObject*:unicode:0: @@ -2606,11 +2559,6 @@ PyUnicode_DecodeASCII:const char*:s:: PyUnicode_DecodeASCII:Py_ssize_t:size:: PyUnicode_DecodeASCII:const char*:errors:: -PyUnicode_EncodeASCII:PyObject*::+1: -PyUnicode_EncodeASCII:const Py_UNICODE*:s:: -PyUnicode_EncodeASCII:Py_ssize_t:size:: -PyUnicode_EncodeASCII:const char*:errors:: - PyUnicode_AsASCIIString:PyObject*::+1: PyUnicode_AsASCIIString:PyObject*:unicode:0: @@ -2620,22 +2568,10 @@ PyUnicode_DecodeCharmap:Py_ssize_t:size:: PyUnicode_DecodeCharmap:PyObject*:mapping:0: PyUnicode_DecodeCharmap:const char*:errors:: -PyUnicode_EncodeCharmap:PyObject*::+1: -PyUnicode_EncodeCharmap:const Py_UNICODE*:s:: -PyUnicode_EncodeCharmap:Py_ssize_t:size:: -PyUnicode_EncodeCharmap:PyObject*:mapping:0: -PyUnicode_EncodeCharmap:const char*:errors:: - PyUnicode_AsCharmapString:PyObject*::+1: PyUnicode_AsCharmapString:PyObject*:unicode:0: PyUnicode_AsCharmapString:PyObject*:mapping:0: -PyUnicode_TranslateCharmap:PyObject*::+1: -PyUnicode_TranslateCharmap:const Py_UNICODE*:s:: -PyUnicode_TranslateCharmap:Py_ssize_t:size:: -PyUnicode_TranslateCharmap:PyObject*:mapping:0: -PyUnicode_TranslateCharmap:const char*:errors:: - PyUnicode_DecodeMBCS:PyObject*::+1: PyUnicode_DecodeMBCS:const char*:s:: PyUnicode_DecodeMBCS:Py_ssize_t:size:: @@ -2652,11 +2588,6 @@ PyUnicode_EncodeCodePage:int:code_page:: PyUnicode_EncodeCodePage:PyObject*:unicode:0: PyUnicode_EncodeCodePage:const char*:errors:: -PyUnicode_EncodeMBCS:PyObject*::+1: -PyUnicode_EncodeMBCS:const Py_UNICODE*:s:: -PyUnicode_EncodeMBCS:Py_ssize_t:size:: -PyUnicode_EncodeMBCS:const char*:errors:: - PyUnicode_AsMBCSString:PyObject*::+1: PyUnicode_AsMBCSString:PyObject*:unicode:0: @@ -2891,21 +2822,6 @@ PyUnicodeDecodeError_SetStart:int::: PyUnicodeDecodeError_SetStart:PyObject*:exc:0: PyUnicodeDecodeError_SetStart:Py_ssize_t:start:: -PyUnicodeEncodeError_Create:PyObject*::+1: -PyUnicodeEncodeError_Create:const char*:encoding:: -PyUnicodeEncodeError_Create:const Py_UNICODE*:object:: -PyUnicodeEncodeError_Create:Py_ssize_t:length:: -PyUnicodeEncodeError_Create:Py_ssize_t:start:: -PyUnicodeEncodeError_Create:Py_ssize_t:end:: -PyUnicodeEncodeError_Create:const char*:reason:: - -PyUnicodeTranslateError_Create:PyObject*::+1: -PyUnicodeTranslateError_Create:const Py_UNICODE*:object:: -PyUnicodeTranslateError_Create:Py_ssize_t:length:: -PyUnicodeTranslateError_Create:Py_ssize_t:start:: -PyUnicodeTranslateError_Create:Py_ssize_t:end:: -PyUnicodeTranslateError_Create:const char*:reason:: - PyWeakref_Check:int::: PyWeakref_Check:PyObject*:ob:: diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index 5e57129c3b82cf..37aede0f6044f5 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -161,30 +161,6 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); -/* Create a UnicodeEncodeError object. - * - * TODO: This API will be removed in Python 3.11. - */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( - const char *encoding, /* UTF-8 encoded string */ - const Py_UNICODE *object, - Py_ssize_t length, - Py_ssize_t start, - Py_ssize_t end, - const char *reason /* UTF-8 encoded string */ - ); - -/* Create a UnicodeTranslateError object. - * - * TODO: This API will be removed in Python 3.11. - */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( - const Py_UNICODE *object, - Py_ssize_t length, - Py_ssize_t start, - Py_ssize_t end, - const char *reason /* UTF-8 encoded string */ - ); PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create( PyObject *object, Py_ssize_t start, diff --git a/Include/cpython/unicodeobject.h b/Include/cpython/unicodeobject.h index 30bf994cda35be..95b76cecd6f4f2 100644 --- a/Include/cpython/unicodeobject.h +++ b/Include/cpython/unicodeobject.h @@ -743,27 +743,8 @@ PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); #define _PyUnicode_AsString PyUnicode_AsUTF8 -/* --- Generic Codecs ----------------------------------------------------- */ - -/* Encodes a Py_UNICODE buffer of the given size and returns a - Python string object. */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_Encode( - const Py_UNICODE *s, /* Unicode char buffer */ - Py_ssize_t size, /* number of Py_UNICODE chars to encode */ - const char *encoding, /* encoding */ - const char *errors /* error handling */ - ); - /* --- UTF-7 Codecs ------------------------------------------------------- */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* number of Py_UNICODE chars to encode */ - int base64SetO, /* Encode RFC2152 Set O characters in base64 */ - int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */ - const char *errors /* error handling */ - ); - PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF7( PyObject *unicode, /* Unicode object */ int base64SetO, /* Encode RFC2152 Set O characters in base64 */ @@ -777,21 +758,8 @@ PyAPI_FUNC(PyObject*) _PyUnicode_AsUTF8String( PyObject *unicode, const char *errors); -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* number of Py_UNICODE chars to encode */ - const char *errors /* error handling */ - ); - /* --- UTF-32 Codecs ------------------------------------------------------ */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF32( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* number of Py_UNICODE chars to encode */ - const char *errors, /* error handling */ - int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ - ); - PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( PyObject *object, /* Unicode object */ const char *errors, /* error handling */ @@ -813,19 +781,7 @@ PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF32( If byteorder is 0, the output string will always start with the Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is prepended. - - Note that Py_UNICODE data is being interpreted as UTF-16 reduced to - UCS-2. This trick makes it possible to add full UTF-16 capabilities - at a later point without compromising the APIs. - */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* number of Py_UNICODE chars to encode */ - const char *errors, /* error handling */ - int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ - ); - PyAPI_FUNC(PyObject*) _PyUnicode_EncodeUTF16( PyObject* unicode, /* Unicode object */ const char *errors, /* error handling */ @@ -845,60 +801,22 @@ PyAPI_FUNC(PyObject*) _PyUnicode_DecodeUnicodeEscape( string. */ ); -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length /* Number of Py_UNICODE chars to encode */ - ); - -/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */ - -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length /* Number of Py_UNICODE chars to encode */ - ); - /* --- Latin-1 Codecs ----------------------------------------------------- */ PyAPI_FUNC(PyObject*) _PyUnicode_AsLatin1String( PyObject* unicode, const char* errors); -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ - const char *errors /* error handling */ - ); - /* --- ASCII Codecs ------------------------------------------------------- */ PyAPI_FUNC(PyObject*) _PyUnicode_AsASCIIString( PyObject* unicode, const char* errors); -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ - const char *errors /* error handling */ - ); - /* --- Character Map Codecs ----------------------------------------------- */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ - PyObject *mapping, /* encoding mapping */ - const char *errors /* error handling */ - ); - -PyAPI_FUNC(PyObject*) _PyUnicode_EncodeCharmap( - PyObject *unicode, /* Unicode object */ - PyObject *mapping, /* encoding mapping */ - const char *errors /* error handling */ - ); - -/* Translate a Py_UNICODE buffer of the given length by applying a - character mapping table to it and return the resulting Unicode - object. +/* Translate an Unicode object by applying a character mapping table to + it and return the resulting Unicode object. The mapping table must map Unicode ordinal integers to Unicode strings, Unicode ordinal integers or None (causing deletion of the character). @@ -906,68 +824,15 @@ PyAPI_FUNC(PyObject*) _PyUnicode_EncodeCharmap( Mapping tables may be dictionaries or sequences. Unmapped character ordinals (ones which cause a LookupError) are left untouched and are copied as-is. - */ -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ - PyObject *table, /* Translate table */ - const char *errors /* error handling */ - ); - -/* --- MBCS codecs for Windows -------------------------------------------- */ - -#ifdef MS_WINDOWS -Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( - const Py_UNICODE *data, /* Unicode char buffer */ - Py_ssize_t length, /* number of Py_UNICODE chars to encode */ +PyAPI_FUNC(PyObject*) _PyUnicode_EncodeCharmap( + PyObject *unicode, /* Unicode object */ + PyObject *mapping, /* encoding mapping */ const char *errors /* error handling */ ); -#endif /* --- Decimal Encoder ---------------------------------------------------- */ -/* Takes a Unicode string holding a decimal value and writes it into - an output buffer using standard ASCII digit codes. - - The output buffer has to provide at least length+1 bytes of storage - area. The output string is 0-terminated. - - The encoder converts whitespace to ' ', decimal characters to their - corresponding ASCII digit and all other Latin-1 characters except - \0 as-is. Characters outside this range (Unicode ordinals 1-256) - are treated as errors. This includes embedded NULL bytes. - - Error handling is defined by the errors argument: - - NULL or "strict": raise a ValueError - "ignore": ignore the wrong characters (these are not copied to the - output buffer) - "replace": replaces illegal characters with '?' - - Returns 0 on success, -1 on failure. - -*/ - -Py_DEPRECATED(3.3) PyAPI_FUNC(int) PyUnicode_EncodeDecimal( - Py_UNICODE *s, /* Unicode buffer */ - Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ - char *output, /* Output buffer; must have size >= length */ - const char *errors /* error handling */ - ); - -/* Transforms code points that have decimal digit property to the - corresponding ASCII digit code points. - - Returns a new Unicode string on success, NULL on failure. -*/ - -Py_DEPRECATED(3.3) -PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII( - Py_UNICODE *s, /* Unicode buffer */ - Py_ssize_t length /* Number of Py_UNICODE chars to transform */ - ); - /* Coverts a Unicode object holding a decimal value to an ASCII string for using in int, float and complex parsers. Transforms code points that have decimal digit property to the diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 0e6cbb61b2298b..6f5d40f84bd07b 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -2935,40 +2935,6 @@ def test_copycharacters(self): self.assertRaises(SystemError, unicode_copycharacters, s, 0, s, 0, -1) self.assertRaises(SystemError, unicode_copycharacters, s, 0, b'', 0, 0) - @support.cpython_only - @support.requires_legacy_unicode_capi - def test_encode_decimal(self): - from _testcapi import unicode_encodedecimal - with warnings_helper.check_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - self.assertEqual(unicode_encodedecimal('123'), - b'123') - self.assertEqual(unicode_encodedecimal('\u0663.\u0661\u0664'), - b'3.14') - self.assertEqual(unicode_encodedecimal( - "\N{EM SPACE}3.14\N{EN SPACE}"), b' 3.14 ') - self.assertRaises(UnicodeEncodeError, - unicode_encodedecimal, "123\u20ac", "strict") - self.assertRaisesRegex( - ValueError, - "^'decimal' codec can't encode character", - unicode_encodedecimal, "123\u20ac", "replace") - - @support.cpython_only - @support.requires_legacy_unicode_capi - def test_transform_decimal(self): - from _testcapi import unicode_transformdecimaltoascii as transform_decimal - with warnings_helper.check_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - self.assertEqual(transform_decimal('123'), - '123') - self.assertEqual(transform_decimal('\u0663.\u0661\u0664'), - '3.14') - self.assertEqual(transform_decimal("\N{EM SPACE}3.14\N{EN SPACE}"), - "\N{EM SPACE}3.14\N{EN SPACE}") - self.assertEqual(transform_decimal('123\u20ac'), - '123\u20ac') - @support.cpython_only def test_pep393_utf8_caching_bug(self): # Issue #25709: Problem with string concatenation and utf-8 cache diff --git a/Misc/NEWS.d/next/C API/2021-05-04-17-43-39.bpo-44029.ayX4PR.rst b/Misc/NEWS.d/next/C API/2021-05-04-17-43-39.bpo-44029.ayX4PR.rst new file mode 100644 index 00000000000000..cf55e41bf332c7 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-04-17-43-39.bpo-44029.ayX4PR.rst @@ -0,0 +1,9 @@ +Remove deprecated ``Py_UNICODE`` APIs: ``PyUnicode_Encode``, +``PyUnicode_EncodeUTF7``, ``PyUnicode_EncodeUTF8``, +``PyUnicode_EncodeUTF16``, ``PyUnicode_EncodeUTF32``, +``PyUnicode_EncodeLatin1``, ``PyUnicode_EncodeMBCS``, +``PyUnicode_EncodeDecimal``, ``PyUnicode_EncodeRawUnicodeEscape``, +``PyUnicode_EncodeCharmap``, ``PyUnicode_EncodeUnicodeEscape``, +``PyUnicode_TransformDecimalToASCII``, ``PyUnicode_TranslateCharmap``, +``PyUnicodeEncodeError_Create``, ``PyUnicodeTranslateError_Create``. See +:pep:`393` and :pep:`624` for reference. diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 691d4a293e8498..3e74fafb384176 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -2570,7 +2570,7 @@ save_picklebuffer(PicklerObject *self, PyObject *obj) return 0; } -/* A copy of PyUnicode_EncodeRawUnicodeEscape() that also translates +/* A copy of PyUnicode_AsRawUnicodeEscapeString() that also translates backslash and newline characters to \uXXXX escapes. */ static PyObject * raw_unicode_escape(PyObject *obj) diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index d926ad8f87a7a4..0c48accf2803a8 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -2154,51 +2154,6 @@ unicode_copycharacters(PyObject *self, PyObject *args) _Py_COMP_DIAG_PUSH _Py_COMP_DIAG_IGNORE_DEPR_DECLS -static PyObject * -unicode_encodedecimal(PyObject *self, PyObject *args) -{ - Py_UNICODE *unicode; - Py_ssize_t length; - char *errors = NULL; - PyObject *decimal; - Py_ssize_t decimal_length, new_length; - int res; - - if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length, &errors)) - return NULL; - - decimal_length = length * 7; /* len('€') */ - decimal = PyBytes_FromStringAndSize(NULL, decimal_length); - if (decimal == NULL) - return NULL; - - res = PyUnicode_EncodeDecimal(unicode, length, - PyBytes_AS_STRING(decimal), - errors); - if (res < 0) { - Py_DECREF(decimal); - return NULL; - } - - new_length = strlen(PyBytes_AS_STRING(decimal)); - assert(new_length <= decimal_length); - res = _PyBytes_Resize(&decimal, new_length); - if (res < 0) - return NULL; - - return decimal; -} - -static PyObject * -unicode_transformdecimaltoascii(PyObject *self, PyObject *args) -{ - Py_UNICODE *unicode; - Py_ssize_t length; - if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length)) - return NULL; - return PyUnicode_TransformDecimalToASCII(unicode, length); -} - static PyObject * unicode_legacy_string(PyObject *self, PyObject *args) { @@ -5737,8 +5692,6 @@ static PyMethodDef TestMethods[] = { {"unicode_findchar", unicode_findchar, METH_VARARGS}, {"unicode_copycharacters", unicode_copycharacters, METH_VARARGS}, #if USE_UNICODE_WCHAR_CACHE - {"unicode_encodedecimal", unicode_encodedecimal, METH_VARARGS}, - {"unicode_transformdecimaltoascii", unicode_transformdecimaltoascii, METH_VARARGS}, {"unicode_legacy_string", unicode_legacy_string, METH_VARARGS}, #endif /* USE_UNICODE_WCHAR_CACHE */ {"_test_thread_state", test_thread_state, METH_VARARGS}, diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 95e6f21ae82175..20fcd4e04bf30a 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -2129,15 +2129,6 @@ static PyTypeObject _PyExc_UnicodeEncodeError = { }; PyObject *PyExc_UnicodeEncodeError = (PyObject *)&_PyExc_UnicodeEncodeError; -PyObject * -PyUnicodeEncodeError_Create( - const char *encoding, const Py_UNICODE *object, Py_ssize_t length, - Py_ssize_t start, Py_ssize_t end, const char *reason) -{ - return PyObject_CallFunction(PyExc_UnicodeEncodeError, "su#nns", - encoding, object, length, start, end, reason); -} - /* * UnicodeDecodeError extends UnicodeError @@ -2342,16 +2333,6 @@ static PyTypeObject _PyExc_UnicodeTranslateError = { }; PyObject *PyExc_UnicodeTranslateError = (PyObject *)&_PyExc_UnicodeTranslateError; -/* Deprecated. */ -PyObject * -PyUnicodeTranslateError_Create( - const Py_UNICODE *object, Py_ssize_t length, - Py_ssize_t start, Py_ssize_t end, const char *reason) -{ - return PyObject_CallFunction(PyExc_UnicodeTranslateError, "u#nns", - object, length, start, end, reason); -} - PyObject * _PyUnicodeTranslateError_Create( PyObject *object, diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index bfd5c881215dee..82f0b1afed444c 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -3730,22 +3730,6 @@ PyUnicode_AsDecodedUnicode(PyObject *unicode, return NULL; } -PyObject * -PyUnicode_Encode(const Py_UNICODE *s, - Py_ssize_t size, - const char *encoding, - const char *errors) -{ - PyObject *v, *unicode; - - unicode = PyUnicode_FromWideChar(s, size); - if (unicode == NULL) - return NULL; - v = PyUnicode_AsEncodedString(unicode, encoding, errors); - Py_DECREF(unicode); - return v; -} - PyObject * PyUnicode_AsEncodedObject(PyObject *unicode, const char *encoding, @@ -5047,22 +5031,6 @@ _PyUnicode_EncodeUTF7(PyObject *str, return NULL; return v; } -PyObject * -PyUnicode_EncodeUTF7(const Py_UNICODE *s, - Py_ssize_t size, - int base64SetO, - int base64WhiteSpace, - const char *errors) -{ - PyObject *result; - PyObject *tmp = PyUnicode_FromWideChar(s, size); - if (tmp == NULL) - return NULL; - result = _PyUnicode_EncodeUTF7(tmp, base64SetO, - base64WhiteSpace, errors); - Py_DECREF(tmp); - return result; -} #undef IS_BASE64 #undef FROM_BASE64 @@ -5705,21 +5673,6 @@ _PyUnicode_AsUTF8String(PyObject *unicode, const char *errors) } -PyObject * -PyUnicode_EncodeUTF8(const Py_UNICODE *s, - Py_ssize_t size, - const char *errors) -{ - PyObject *v, *unicode; - - unicode = PyUnicode_FromWideChar(s, size); - if (unicode == NULL) - return NULL; - v = _PyUnicode_AsUTF8String(unicode, errors); - Py_DECREF(unicode); - return v; -} - PyObject * PyUnicode_AsUTF8String(PyObject *unicode) { @@ -6029,21 +5982,6 @@ _PyUnicode_EncodeUTF32(PyObject *str, return NULL; } -PyObject * -PyUnicode_EncodeUTF32(const Py_UNICODE *s, - Py_ssize_t size, - const char *errors, - int byteorder) -{ - PyObject *result; - PyObject *tmp = PyUnicode_FromWideChar(s, size); - if (tmp == NULL) - return NULL; - result = _PyUnicode_EncodeUTF32(tmp, errors, byteorder); - Py_DECREF(tmp); - return result; -} - PyObject * PyUnicode_AsUTF32String(PyObject *unicode) { @@ -6382,21 +6320,6 @@ _PyUnicode_EncodeUTF16(PyObject *str, #undef STORECHAR } -PyObject * -PyUnicode_EncodeUTF16(const Py_UNICODE *s, - Py_ssize_t size, - const char *errors, - int byteorder) -{ - PyObject *result; - PyObject *tmp = PyUnicode_FromWideChar(s, size); - if (tmp == NULL) - return NULL; - result = _PyUnicode_EncodeUTF16(tmp, errors, byteorder); - Py_DECREF(tmp); - return result; -} - PyObject * PyUnicode_AsUTF16String(PyObject *unicode) { @@ -6773,21 +6696,6 @@ PyUnicode_AsUnicodeEscapeString(PyObject *unicode) return repr; } -PyObject * -PyUnicode_EncodeUnicodeEscape(const Py_UNICODE *s, - Py_ssize_t size) -{ - PyObject *result; - PyObject *tmp = PyUnicode_FromWideChar(s, size); - if (tmp == NULL) { - return NULL; - } - - result = PyUnicode_AsUnicodeEscapeString(tmp); - Py_DECREF(tmp); - return result; -} - /* --- Raw Unicode Escape Codec ------------------------------------------- */ PyObject * @@ -6988,19 +6896,6 @@ PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode) return repr; } -PyObject * -PyUnicode_EncodeRawUnicodeEscape(const Py_UNICODE *s, - Py_ssize_t size) -{ - PyObject *result; - PyObject *tmp = PyUnicode_FromWideChar(s, size); - if (tmp == NULL) - return NULL; - result = PyUnicode_AsRawUnicodeEscapeString(tmp); - Py_DECREF(tmp); - return result; -} - /* --- Latin-1 Codec ------------------------------------------------------ */ PyObject * @@ -7285,21 +7180,6 @@ unicode_encode_ucs1(PyObject *unicode, return NULL; } -/* Deprecated */ -PyObject * -PyUnicode_EncodeLatin1(const Py_UNICODE *p, - Py_ssize_t size, - const char *errors) -{ - PyObject *result; - PyObject *unicode = PyUnicode_FromWideChar(p, size); - if (unicode == NULL) - return NULL; - result = unicode_encode_ucs1(unicode, errors, 256); - Py_DECREF(unicode); - return result; -} - PyObject * _PyUnicode_AsLatin1String(PyObject *unicode, const char *errors) { @@ -7426,21 +7306,6 @@ PyUnicode_DecodeASCII(const char *s, return NULL; } -/* Deprecated */ -PyObject * -PyUnicode_EncodeASCII(const Py_UNICODE *p, - Py_ssize_t size, - const char *errors) -{ - PyObject *result; - PyObject *unicode = PyUnicode_FromWideChar(p, size); - if (unicode == NULL) - return NULL; - result = unicode_encode_ucs1(unicode, errors, 128); - Py_DECREF(unicode); - return result; -} - PyObject * _PyUnicode_AsASCIIString(PyObject *unicode, const char *errors) { @@ -8168,20 +8033,6 @@ encode_code_page(int code_page, return outbytes; } -PyObject * -PyUnicode_EncodeMBCS(const Py_UNICODE *p, - Py_ssize_t size, - const char *errors) -{ - PyObject *unicode, *res; - unicode = PyUnicode_FromWideChar(p, size); - if (unicode == NULL) - return NULL; - res = encode_code_page(CP_ACP, unicode, errors); - Py_DECREF(unicode); - return res; -} - PyObject * PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, @@ -9008,22 +8859,6 @@ _PyUnicode_EncodeCharmap(PyObject *unicode, return NULL; } -/* Deprecated */ -PyObject * -PyUnicode_EncodeCharmap(const Py_UNICODE *p, - Py_ssize_t size, - PyObject *mapping, - const char *errors) -{ - PyObject *result; - PyObject *unicode = PyUnicode_FromWideChar(p, size); - if (unicode == NULL) - return NULL; - result = _PyUnicode_EncodeCharmap(unicode, mapping, errors); - Py_DECREF(unicode); - return result; -} - PyObject * PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping) @@ -9448,22 +9283,6 @@ _PyUnicode_TranslateCharmap(PyObject *input, return NULL; } -/* Deprecated. Use PyUnicode_Translate instead. */ -PyObject * -PyUnicode_TranslateCharmap(const Py_UNICODE *p, - Py_ssize_t size, - PyObject *mapping, - const char *errors) -{ - PyObject *result; - PyObject *unicode = PyUnicode_FromWideChar(p, size); - if (!unicode) - return NULL; - result = _PyUnicode_TranslateCharmap(unicode, mapping, errors); - Py_DECREF(unicode); - return result; -} - PyObject * PyUnicode_Translate(PyObject *str, PyObject *mapping, @@ -9523,110 +9342,6 @@ _PyUnicode_TransformDecimalAndSpaceToASCII(PyObject *unicode) return result; } -PyObject * -PyUnicode_TransformDecimalToASCII(Py_UNICODE *s, - Py_ssize_t length) -{ - PyObject *decimal; - Py_ssize_t i; - Py_UCS4 maxchar; - enum PyUnicode_Kind kind; - const void *data; - - maxchar = 127; - for (i = 0; i < length; i++) { - Py_UCS4 ch = s[i]; - if (ch > 127) { - int decimal = Py_UNICODE_TODECIMAL(ch); - if (decimal >= 0) - ch = '0' + decimal; - maxchar = Py_MAX(maxchar, ch); - } - } - - /* Copy to a new string */ - decimal = PyUnicode_New(length, maxchar); - if (decimal == NULL) - return decimal; - kind = PyUnicode_KIND(decimal); - data = PyUnicode_DATA(decimal); - /* Iterate over code points */ - for (i = 0; i < length; i++) { - Py_UCS4 ch = s[i]; - if (ch > 127) { - int decimal = Py_UNICODE_TODECIMAL(ch); - if (decimal >= 0) - ch = '0' + decimal; - } - PyUnicode_WRITE(kind, data, i, ch); - } - return unicode_result(decimal); -} -/* --- Decimal Encoder ---------------------------------------------------- */ - -int -PyUnicode_EncodeDecimal(Py_UNICODE *s, - Py_ssize_t length, - char *output, - const char *errors) -{ - PyObject *unicode; - Py_ssize_t i; - enum PyUnicode_Kind kind; - const void *data; - - if (output == NULL) { - PyErr_BadArgument(); - return -1; - } - - unicode = PyUnicode_FromWideChar(s, length); - if (unicode == NULL) - return -1; - - kind = PyUnicode_KIND(unicode); - data = PyUnicode_DATA(unicode); - - for (i=0; i < length; ) { - PyObject *exc; - Py_UCS4 ch; - int decimal; - Py_ssize_t startpos; - - ch = PyUnicode_READ(kind, data, i); - - if (Py_UNICODE_ISSPACE(ch)) { - *output++ = ' '; - i++; - continue; - } - decimal = Py_UNICODE_TODECIMAL(ch); - if (decimal >= 0) { - *output++ = '0' + decimal; - i++; - continue; - } - if (0 < ch && ch < 256) { - *output++ = (char)ch; - i++; - continue; - } - - startpos = i; - exc = NULL; - raise_encode_exception(&exc, "decimal", unicode, - startpos, startpos+1, - "invalid decimal Unicode string"); - Py_XDECREF(exc); - Py_DECREF(unicode); - return -1; - } - /* 0-terminate the output string */ - *output++ = '\0'; - Py_DECREF(unicode); - return 0; -} - /* --- Helpers ------------------------------------------------------------ */ /* helper macro to fixup start/end slice values */ From webhook-mailer at python.org Fri May 7 04:07:10 2021 From: webhook-mailer at python.org (JulienPalard) Date: Fri, 07 May 2021 08:07:10 -0000 Subject: [Python-checkins] Doc: What's new in Python 3.11 (GH-25963) Message-ID: https://github.com/python/cpython/commit/a0cb2e43029170fadb917ef3d9fc22c5e2e4e34b commit: a0cb2e43029170fadb917ef3d9fc22c5e2e4e34b branch: main author: Julien Palard committer: JulienPalard date: 2021-05-07T10:06:45+02:00 summary: Doc: What's new in Python 3.11 (GH-25963) files: A Doc/whatsnew/3.11.rst M Doc/whatsnew/index.rst diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst new file mode 100644 index 00000000000000..cbae4717522279 --- /dev/null +++ b/Doc/whatsnew/3.11.rst @@ -0,0 +1,113 @@ +**************************** + What's New In Python 3.11 +**************************** + +:Release: |release| +:Date: |today| + +.. Rules for maintenance: + + * Anyone can add text to this document. Do not spend very much time + on the wording of your changes, because your text will probably + get rewritten to some degree. + + * The maintainer will go through Misc/NEWS periodically and add + changes; it's therefore more important to add your changes to + Misc/NEWS than to this file. + + * This is not a complete list of every single change; completeness + is the purpose of Misc/NEWS. Some changes I consider too small + or esoteric to include. If such a change is added to the text, + I'll just remove it. (This is another reason you shouldn't spend + too much time on writing your addition.) + + * If you want to draw your new text to the attention of the + maintainer, add 'XXX' to the beginning of the paragraph or + section. + + * It's OK to just add a fragmentary note about a change. For + example: "XXX Describe the transmogrify() function added to the + socket module." The maintainer will research the change and + write the necessary text. + + * You can comment out your additions if you like, but it's not + necessary (especially when a final release is some months away). + + * Credit the author of a patch or bugfix. Just the name is + sufficient; the e-mail address isn't necessary. + + * It's helpful to add the bug/patch number as a comment: + + XXX Describe the transmogrify() function added to the socket + module. + (Contributed by P.Y. Developer in :issue:`12345`.) + + This saves the maintainer the effort of going through the Mercurial log + when researching a change. + +This article explains the new features in Python 3.11, compared to 3.10. + +For full details, see the :source:`Misc/NEWS` file. + +.. note:: + + Prerelease users should be aware that this document is currently in draft + form. It will be updated substantially as Python 3.11 moves towards release, + so it's worth checking back even after reading earlier versions. + + +Summary -- Release highlights +============================= + +.. This section singles out the most important changes in Python 3.11. + Brevity is key. + + +.. PEP-sized items next. + + + +New Features +============ + + + +Other Language Changes +====================== + + + +New Modules +=========== + +* None yet. + + +Improved Modules +================ + + +Optimizations +============= + + +Build and C API Changes +======================= + + + +Deprecated +========== + + + +Removed +======= + + + +Porting to Python 3.11 +====================== + +This section lists previously described changes and other bugfixes +that may require changes to your code. diff --git a/Doc/whatsnew/index.rst b/Doc/whatsnew/index.rst index a1ff8ec2889c9d..c787cdb0f7130d 100644 --- a/Doc/whatsnew/index.rst +++ b/Doc/whatsnew/index.rst @@ -11,6 +11,7 @@ anyone wishing to stay up-to-date after a new release. .. toctree:: :maxdepth: 2 + 3.11.rst 3.10.rst 3.9.rst 3.8.rst From webhook-mailer at python.org Fri May 7 09:15:11 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Fri, 07 May 2021 13:15:11 -0000 Subject: [Python-checkins] bpo-44047: Remove unused argument to _pysqlite_seterror (GH-25915) Message-ID: https://github.com/python/cpython/commit/0988ed09b4c058fabb58a7ea7e757adafcf8763c commit: 0988ed09b4c058fabb58a7ea7e757adafcf8763c branch: main author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-05-07T16:15:01+03:00 summary: bpo-44047: Remove unused argument to _pysqlite_seterror (GH-25915) files: M Modules/_sqlite/connection.c M Modules/_sqlite/cursor.c M Modules/_sqlite/util.c M Modules/_sqlite/util.h diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index fb5411243c6798..28932726b74257 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -115,7 +115,7 @@ pysqlite_connection_init(pysqlite_Connection *self, PyObject *args, Py_DECREF(database_obj); if (rc != SQLITE_OK) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); return -1; } @@ -342,7 +342,7 @@ pysqlite_connection_close_impl(pysqlite_Connection *self) rc = sqlite3_close_v2(self->db); if (rc != SQLITE_OK) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); return NULL; } else { self->db = NULL; @@ -383,13 +383,13 @@ PyObject* _pysqlite_connection_begin(pysqlite_Connection* self) Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { - _pysqlite_seterror(self->db, statement); + _pysqlite_seterror(self->db); goto error; } rc = pysqlite_step(statement, self); if (rc != SQLITE_DONE) { - _pysqlite_seterror(self->db, statement); + _pysqlite_seterror(self->db); } Py_BEGIN_ALLOW_THREADS @@ -397,7 +397,7 @@ PyObject* _pysqlite_connection_begin(pysqlite_Connection* self) Py_END_ALLOW_THREADS if (rc != SQLITE_OK && !PyErr_Occurred()) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); } error: @@ -431,20 +431,20 @@ pysqlite_connection_commit_impl(pysqlite_Connection *self) rc = sqlite3_prepare_v2(self->db, "COMMIT", -1, &statement, NULL); Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); goto error; } rc = pysqlite_step(statement, self); if (rc != SQLITE_DONE) { - _pysqlite_seterror(self->db, statement); + _pysqlite_seterror(self->db); } Py_BEGIN_ALLOW_THREADS rc = sqlite3_finalize(statement); Py_END_ALLOW_THREADS if (rc != SQLITE_OK && !PyErr_Occurred()) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); } } @@ -481,20 +481,20 @@ pysqlite_connection_rollback_impl(pysqlite_Connection *self) rc = sqlite3_prepare_v2(self->db, "ROLLBACK", -1, &statement, NULL); Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); goto error; } rc = pysqlite_step(statement, self); if (rc != SQLITE_DONE) { - _pysqlite_seterror(self->db, statement); + _pysqlite_seterror(self->db); } Py_BEGIN_ALLOW_THREADS rc = sqlite3_finalize(statement); Py_END_ALLOW_THREADS if (rc != SQLITE_OK && !PyErr_Occurred()) { - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); } } @@ -1348,7 +1348,7 @@ pysqlite_connection_call(pysqlite_Connection *self, PyObject *args, PyErr_SetString(pysqlite_Warning, "SQL is of wrong type. Must be string."); } else { (void)pysqlite_statement_reset(statement); - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); } goto error; } @@ -1669,7 +1669,7 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, Py_END_ALLOW_THREADS if (bck_handle == NULL) { - _pysqlite_seterror(bck_conn, NULL); + _pysqlite_seterror(bck_conn); return NULL; } @@ -1707,7 +1707,7 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { - _pysqlite_seterror(bck_conn, NULL); + _pysqlite_seterror(bck_conn); return NULL; } @@ -1793,7 +1793,7 @@ pysqlite_connection_create_collation_impl(pysqlite_Connection *self, PyErr_Clear(); } } - _pysqlite_seterror(self->db, NULL); + _pysqlite_seterror(self->db); goto finally; } diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 60dfc7dce8fb5e..b71f780a0b4dfd 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -537,7 +537,7 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation } } (void)pysqlite_statement_reset(self->statement); - _pysqlite_seterror(self->connection->db, NULL); + _pysqlite_seterror(self->connection->db); goto error; } @@ -715,7 +715,7 @@ pysqlite_cursor_executescript(pysqlite_Cursor *self, PyObject *script_obj) &script_cstr); Py_END_ALLOW_THREADS if (rc != SQLITE_OK) { - _pysqlite_seterror(self->connection->db, NULL); + _pysqlite_seterror(self->connection->db); goto error; } @@ -730,13 +730,13 @@ pysqlite_cursor_executescript(pysqlite_Cursor *self, PyObject *script_obj) if (rc != SQLITE_DONE) { (void)sqlite3_finalize(statement); - _pysqlite_seterror(self->connection->db, NULL); + _pysqlite_seterror(self->connection->db); goto error; } rc = sqlite3_finalize(statement); if (rc != SQLITE_OK) { - _pysqlite_seterror(self->connection->db, NULL); + _pysqlite_seterror(self->connection->db); goto error; } @@ -802,7 +802,7 @@ pysqlite_cursor_iternext(pysqlite_Cursor *self) if (rc != SQLITE_DONE && rc != SQLITE_ROW) { (void)pysqlite_statement_reset(self->statement); Py_DECREF(next_row); - _pysqlite_seterror(self->connection->db, NULL); + _pysqlite_seterror(self->connection->db); return NULL; } diff --git a/Modules/_sqlite/util.c b/Modules/_sqlite/util.c index 0f4eba0ab31b60..3676935b9e9beb 100644 --- a/Modules/_sqlite/util.c +++ b/Modules/_sqlite/util.c @@ -39,7 +39,8 @@ int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection) * Checks the SQLite error code and sets the appropriate DB-API exception. * Returns the error code (0 means no error occurred). */ -int _pysqlite_seterror(sqlite3* db, sqlite3_stmt* st) +int +_pysqlite_seterror(sqlite3 *db) { int errorcode = sqlite3_errcode(db); diff --git a/Modules/_sqlite/util.h b/Modules/_sqlite/util.h index cff31cda9578a0..82e58139d02f9c 100644 --- a/Modules/_sqlite/util.h +++ b/Modules/_sqlite/util.h @@ -35,7 +35,7 @@ int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection); * Checks the SQLite error code and sets the appropriate DB-API exception. * Returns the error code (0 means no error occurred). */ -int _pysqlite_seterror(sqlite3* db, sqlite3_stmt* st); +int _pysqlite_seterror(sqlite3 *db); sqlite_int64 _pysqlite_long_as_int64(PyObject * value); From webhook-mailer at python.org Fri May 7 09:54:56 2021 From: webhook-mailer at python.org (ambv) Date: Fri, 07 May 2021 13:54:56 -0000 Subject: [Python-checkins] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) (#25957) Message-ID: https://github.com/python/cpython/commit/8a12f46dd8c780de84d78e6dd8350230e52e0c46 commit: 8a12f46dd8c780de84d78e6dd8350230e52e0c46 branch: 3.8 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-07T15:54:42+02:00 summary: bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-19548) (#25957) The address tuple for CAN_RAW no longer returns the address family after the introduction of CAN ISO-TP support in a30f6d45ac3. However, updating test_socket.CANTest.testSendFrame was missed as part of the change, so the test incorrectly attempts to index past the last tuple item to retrieve the address family. This removes the now-redundant check for equality against socket.AF_CAN, as the tuple will not contain the address family. (cherry picked from commit 355bae88822bee4de6092b63d69c5a5dad393a16) Co-authored-by: karl ding files: M Lib/test/test_socket.py diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index f9370d8e52dca1..eada6e929fe159 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -187,7 +187,7 @@ class SocketCANTest(unittest.TestCase): the following commands: # modprobe vcan # ip link add dev vcan0 type vcan - # ifconfig vcan0 up + # ip link set up vcan0 """ interface = 'vcan0' bufsize = 128 @@ -1954,7 +1954,6 @@ def testSendFrame(self): cf, addr = self.s.recvfrom(self.bufsize) self.assertEqual(self.cf, cf) self.assertEqual(addr[0], self.interface) - self.assertEqual(addr[1], socket.AF_CAN) def _testSendFrame(self): self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05') From webhook-mailer at python.org Fri May 7 10:08:59 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 07 May 2021 14:08:59 -0000 Subject: [Python-checkins] Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) Message-ID: https://github.com/python/cpython/commit/b32c8e97951db46484ba3b646b988bcdc4062199 commit: b32c8e97951db46484ba3b646b988bcdc4062199 branch: main author: Senthil Kumaran committer: orsenthil date: 2021-05-07T07:08:47-07:00 summary: Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) files: M Doc/library/ftplib.rst diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst index f4d4cdf9ada9d9..3a9165ac920519 100644 --- a/Doc/library/ftplib.rst +++ b/Doc/library/ftplib.rst @@ -28,6 +28,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.login() # user anonymous, passwd anonymous@ '230 Login successful.' >>> ftp.cwd('debian') # change into "debian" directory + '250 Directory successfully changed.' >>> ftp.retrlines('LIST') # list directory contents -rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README ... @@ -39,6 +40,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.retrbinary('RETR README', fp.write) '226 Transfer complete.' >>> ftp.quit() + '221 Goodbye.' The module defines the following items: From webhook-mailer at python.org Fri May 7 10:13:25 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 07 May 2021 14:13:25 -0000 Subject: [Python-checkins] Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) (#25969) Message-ID: https://github.com/python/cpython/commit/a8fa6b248fdd99da0b38c3452b7a1d6d71addca5 commit: a8fa6b248fdd99da0b38c3452b7a1d6d71addca5 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-07T07:13:15-07:00 summary: Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) (#25969) (cherry picked from commit b32c8e97951db46484ba3b646b988bcdc4062199) Co-authored-by: Senthil Kumaran Co-authored-by: Senthil Kumaran files: M Doc/library/ftplib.rst diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst index f4d4cdf9ada9d9..3a9165ac920519 100644 --- a/Doc/library/ftplib.rst +++ b/Doc/library/ftplib.rst @@ -28,6 +28,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.login() # user anonymous, passwd anonymous@ '230 Login successful.' >>> ftp.cwd('debian') # change into "debian" directory + '250 Directory successfully changed.' >>> ftp.retrlines('LIST') # list directory contents -rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README ... @@ -39,6 +40,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.retrbinary('RETR README', fp.write) '226 Transfer complete.' >>> ftp.quit() + '221 Goodbye.' The module defines the following items: From webhook-mailer at python.org Fri May 7 10:13:25 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 07 May 2021 14:13:25 -0000 Subject: [Python-checkins] Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) (#25970) Message-ID: https://github.com/python/cpython/commit/bf309d74a578a08b6054e310aaf6b45cfe5c71f9 commit: bf309d74a578a08b6054e310aaf6b45cfe5c71f9 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-07T07:13:19-07:00 summary: Simple Enhancement. Add missing return statements in ftplib documentation. (GH-25968) (#25970) (cherry picked from commit b32c8e97951db46484ba3b646b988bcdc4062199) Co-authored-by: Senthil Kumaran Co-authored-by: Senthil Kumaran files: M Doc/library/ftplib.rst diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst index f4d4cdf9ada9d9..3a9165ac920519 100644 --- a/Doc/library/ftplib.rst +++ b/Doc/library/ftplib.rst @@ -28,6 +28,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.login() # user anonymous, passwd anonymous@ '230 Login successful.' >>> ftp.cwd('debian') # change into "debian" directory + '250 Directory successfully changed.' >>> ftp.retrlines('LIST') # list directory contents -rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README ... @@ -39,6 +40,7 @@ Here's a sample session using the :mod:`ftplib` module:: >>> ftp.retrbinary('RETR README', fp.write) '226 Transfer complete.' >>> ftp.quit() + '221 Goodbye.' The module defines the following items: From webhook-mailer at python.org Fri May 7 10:19:28 2021 From: webhook-mailer at python.org (markshannon) Date: Fri, 07 May 2021 14:19:28 -0000 Subject: [Python-checkins] bpo-40222: "Zero cost" exception handling (GH-25729) Message-ID: https://github.com/python/cpython/commit/adcd2205565f91c6719f4141ab4e1da6d7086126 commit: adcd2205565f91c6719f4141ab4e1da6d7086126 branch: main author: Mark Shannon committer: markshannon date: 2021-05-07T15:19:19+01:00 summary: bpo-40222: "Zero cost" exception handling (GH-25729) "Zero cost" exception handling. * Uses a lookup table to determine how to handle exceptions. * Removes SETUP_FINALLY and POP_TOP block instructions, eliminating (most of) the runtime overhead of try statements. * Reduces the size of the frame object by about 60%. files: A Misc/NEWS.d/next/Core and Builtins/2021-04-30-15-48-36.bpo-40222.j3VxeX.rst A Objects/exception_handling_notes.txt M Doc/library/dis.rst M Doc/whatsnew/3.11.rst M Include/cpython/code.h M Include/cpython/frameobject.h M Include/opcode.h M Lib/ctypes/test/test_values.py M Lib/dis.py M Lib/importlib/_bootstrap_external.py M Lib/opcode.py M Lib/test/test_code.py M Lib/test/test_dis.py M Lib/test/test_exceptions.py M Lib/test/test_sys.py M Lib/test/test_sys_settrace.py M Modules/_opcode.c M Objects/clinic/codeobject.c.h M Objects/codeobject.c M Objects/frameobject.c M PC/launcher.c M Python/ceval.c M Python/compile.c M Python/frozen_hello.h M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h M Python/marshal.c M Python/opcode_targets.h M Tools/scripts/generate_opcode_h.py diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index 0491a9d4a072bf..193e40014d1ce4 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -616,13 +616,6 @@ the original TOS1. .. versionadded:: 3.5 -.. opcode:: SETUP_ASYNC_WITH - - Creates a new frame object. - - .. versionadded:: 3.5 - - **Miscellaneous opcodes** @@ -692,28 +685,29 @@ iterations of the loop. opcode implements ``from module import *``. -.. opcode:: POP_BLOCK - - Removes one block from the block stack. Per frame, there is a stack of - blocks, denoting :keyword:`try` statements, and such. - - .. opcode:: POP_EXCEPT - Removes one block from the block stack. The popped block must be an exception - handler block, as implicitly created when entering an except handler. In - addition to popping extraneous values from the frame stack, the last three - popped values are used to restore the exception state. + Pops three values from the stack, which are used to restore the exception state. .. opcode:: RERAISE Re-raises the exception currently on top of the stack. If oparg is non-zero, - restores ``f_lasti`` of the current frame to its value when the exception was raised. + pops an additional value from the stack which is used to set ``f_lasti`` + of the current frame. .. versionadded:: 3.9 +.. opcode:: PUSH_EXC_INFO + + Pops the three values from the stack. Pushes the current exception to the top of the stack. + Pushes the three values originally popped back to the stack. + Used in exception handlers. + + .. versionadded:: 3.11 + + .. opcode:: WITH_EXCEPT_START Calls the function in position 7 on the stack with the top three @@ -724,6 +718,17 @@ iterations of the loop. .. versionadded:: 3.9 +.. opcode:: POP_EXCEPT_AND_RERAISE + + Pops the exception currently on top of the stack. Pops the integer value on top + of the stack and sets the ``f_lasti`` attribute of the frame with that value. + Then pops the next exception from the stack uses it to restore the current exception. + Finally it re-raises the originally popped exception. + Used in excpetion handler cleanup. + + .. versionadded:: 3.11 + + .. opcode:: LOAD_ASSERTION_ERROR Pushes :exc:`AssertionError` onto the stack. Used by the :keyword:`assert` @@ -738,18 +743,15 @@ iterations of the loop. by :opcode:`CALL_FUNCTION` to construct a class. -.. opcode:: SETUP_WITH (delta) +.. opcode:: BEFORE_WITH (delta) This opcode performs several operations before a with block starts. First, it loads :meth:`~object.__exit__` from the context manager and pushes it onto the stack for later use by :opcode:`WITH_EXCEPT_START`. Then, - :meth:`~object.__enter__` is called, and a finally block pointing to *delta* - is pushed. Finally, the result of calling the ``__enter__()`` method is pushed onto - the stack. The next opcode will either ignore it (:opcode:`POP_TOP`), or - store it in (a) variable(s) (:opcode:`STORE_FAST`, :opcode:`STORE_NAME`, or - :opcode:`UNPACK_SEQUENCE`). + :meth:`~object.__enter__` is called. Finally, the result of calling the + ``__enter__()`` method is pushed onto the stack. - .. versionadded:: 3.2 + .. versionadded:: 3.11 .. opcode:: COPY_DICT_WITHOUT_KEYS @@ -1039,12 +1041,6 @@ All of the following opcodes use their arguments. Loads the global named ``co_names[namei]`` onto the stack. -.. opcode:: SETUP_FINALLY (delta) - - Pushes a try block from a try-finally or try-except clause onto the block - stack. *delta* points to the finally block or the first except block. - - .. opcode:: LOAD_FAST (var_num) Pushes a reference to the local ``co_varnames[var_num]`` onto the stack. diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index cbae4717522279..13d7a3dbb6193b 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -91,10 +91,12 @@ Optimizations ============= + + Build and C API Changes ======================= - +* :c:func:`PyFrame_BlockSetup` and :c:func:`PyFrame_BlockPop` have been removed. Deprecated ========== diff --git a/Include/cpython/code.h b/Include/cpython/code.h index e810eb4f816f3a..330f1f54d15203 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -40,6 +40,7 @@ struct PyCodeObject { PyObject *co_name; /* unicode (name, for reference) */ PyObject *co_linetable; /* string (encoding addr<->lineno mapping) See Objects/lnotab_notes.txt for details. */ + PyObject *co_exceptiontable; /* Byte string encoding exception handling table */ void *co_zombieframe; /* for optimization only (see frameobject.c) */ PyObject *co_weakreflist; /* to support weakrefs to code objects */ /* Scratch space for extra data relating to the code object. @@ -117,12 +118,12 @@ PyAPI_DATA(PyTypeObject) PyCode_Type; PyAPI_FUNC(PyCodeObject *) PyCode_New( int, int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); + PyObject *, PyObject *, int, PyObject *, PyObject *); PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs( int, int, int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); + PyObject *, PyObject *, int, PyObject *, PyObject *); /* same as struct above */ /* Creates a new empty code object with the specified source location. */ diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h index 5122ec41a3d22a..0c2206c0b92b6d 100644 --- a/Include/cpython/frameobject.h +++ b/Include/cpython/frameobject.h @@ -34,18 +34,14 @@ struct _frame { PyObject *f_locals; /* local symbol table (any mapping) */ PyObject **f_valuestack; /* points after the last local */ PyObject *f_trace; /* Trace function */ - int f_stackdepth; /* Depth of value stack */ - char f_trace_lines; /* Emit per-line trace events? */ - char f_trace_opcodes; /* Emit per-opcode trace events? */ - /* Borrowed reference to a generator, or NULL */ PyObject *f_gen; - + int f_stackdepth; /* Depth of value stack */ int f_lasti; /* Last instruction if called */ int f_lineno; /* Current line number. Only valid if non-zero */ - int f_iblock; /* index in f_blockstack */ PyFrameState f_state; /* What state the frame is in */ - PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ + char f_trace_lines; /* Emit per-line trace events? */ + char f_trace_opcodes; /* Emit per-opcode trace events? */ PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ }; @@ -77,11 +73,6 @@ _PyFrame_New_NoTrack(PyThreadState *, PyFrameConstructor *, PyObject *); /* The rest of the interface is specific for frame objects */ -/* Block management functions */ - -PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); -PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); - /* Conversions between "fast locals" and locals in dictionary */ PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); diff --git a/Include/opcode.h b/Include/opcode.h index 52039754bd88ea..1e44e1f5f23eb4 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -35,10 +35,13 @@ extern "C" { #define MATCH_SEQUENCE 32 #define MATCH_KEYS 33 #define COPY_DICT_WITHOUT_KEYS 34 +#define PUSH_EXC_INFO 35 +#define POP_EXCEPT_AND_RERAISE 37 #define WITH_EXCEPT_START 49 #define GET_AITER 50 #define GET_ANEXT 51 #define BEFORE_ASYNC_WITH 52 +#define BEFORE_WITH 53 #define END_ASYNC_FOR 54 #define INPLACE_ADD 55 #define INPLACE_SUBTRACT 56 @@ -69,7 +72,6 @@ extern "C" { #define IMPORT_STAR 84 #define SETUP_ANNOTATIONS 85 #define YIELD_VALUE 86 -#define POP_BLOCK 87 #define POP_EXCEPT 89 #define HAVE_ARGUMENT 90 #define STORE_NAME 90 @@ -103,7 +105,6 @@ extern "C" { #define CONTAINS_OP 118 #define RERAISE 119 #define JUMP_IF_NOT_EXC_MATCH 121 -#define SETUP_FINALLY 122 #define LOAD_FAST 124 #define STORE_FAST 125 #define DELETE_FAST 126 @@ -118,14 +119,12 @@ extern "C" { #define DELETE_DEREF 138 #define CALL_FUNCTION_KW 141 #define CALL_FUNCTION_EX 142 -#define SETUP_WITH 143 #define EXTENDED_ARG 144 #define LIST_APPEND 145 #define SET_ADD 146 #define MAP_ADD 147 #define LOAD_CLASSDEREF 148 #define MATCH_CLASS 152 -#define SETUP_ASYNC_WITH 154 #define FORMAT_VALUE 155 #define BUILD_CONST_KEY_MAP 156 #define BUILD_STRING 157 @@ -140,8 +139,8 @@ static uint32_t _PyOpcode_RelativeJump[8] = { 0U, 0U, 536870912U, - 67125248U, - 67141632U, + 16384U, + 0U, 0U, 0U, 0U, @@ -150,22 +149,20 @@ static uint32_t _PyOpcode_Jump[8] = { 0U, 0U, 536870912U, - 101695488U, - 67141632U, + 34586624U, + 0U, 0U, 0U, 0U, }; #endif /* OPCODE_TABLES */ -/* EXCEPT_HANDLER is a special, implicit block type which is created when - entering an except handler. It is not an opcode but we define it here - as we want it to be available to both frameobject.c and ceval.c, while - remaining private.*/ -#define EXCEPT_HANDLER 257 - #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) +/* Reserve some bytecodes for internal use in the compiler. + * The value of 240 is arbitrary. */ +#define IS_ARTIFICIAL(op) ((op) > 240) + #ifdef __cplusplus } #endif diff --git a/Lib/ctypes/test/test_values.py b/Lib/ctypes/test/test_values.py index 7514fe84ff53c8..80f4ed026f963c 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__", 137), - ("__phello__", -137), - ("__phello__.spam", 137), + expected = [("__hello__", 142), + ("__phello__", -142), + ("__phello__.spam", 142), ] self.assertEqual(items, expected, "PyImport_FrozenModules example " "in Doc/library/ctypes.rst may be out of date") diff --git a/Lib/dis.py b/Lib/dis.py index 3fee1ce27725cd..bc7c4d4a8d52c0 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -203,6 +203,9 @@ def show_code(co, *, file=None): _Instruction.starts_line.__doc__ = "Line started by this opcode (if any), otherwise None" _Instruction.is_jump_target.__doc__ = "True if other code jumps to here, otherwise False" +_ExceptionTableEntry = collections.namedtuple("_ExceptionTableEntry", + "start end target depth lasti") + _OPNAME_WIDTH = 20 _OPARG_WIDTH = 5 @@ -308,8 +311,33 @@ def _get_name_info(name_index, name_list): return argval, argrepr +def parse_varint(iterator): + b = next(iterator) + val = b & 63 + while b&64: + val <<= 6 + b = next(iterator) + val |= b&63 + return val + +def parse_exception_table(code): + iterator = iter(code.co_exceptiontable) + entries = [] + try: + while True: + start = parse_varint(iterator)*2 + length = parse_varint(iterator)*2 + end = start + length + target = parse_varint(iterator)*2 + dl = parse_varint(iterator) + depth = dl >> 1 + lasti = bool(dl&1) + entries.append(_ExceptionTableEntry(start, end, target, depth, lasti)) + except StopIteration: + return entries + def _get_instructions_bytes(code, varnames=None, names=None, constants=None, - cells=None, linestarts=None, line_offset=0): + cells=None, linestarts=None, line_offset=0, exception_entries=()): """Iterate over the instructions in a bytecode string. Generates a sequence of Instruction namedtuples giving the details of each @@ -318,7 +346,10 @@ def _get_instructions_bytes(code, varnames=None, names=None, constants=None, arguments. """ - labels = findlabels(code) + labels = set(findlabels(code)) + for start, end, target, _, _ in exception_entries: + for i in range(start, end): + labels.add(target) starts_line = None for offset, op, arg in _unpack_opargs(code): if linestarts is not None: @@ -369,8 +400,10 @@ def disassemble(co, lasti=-1, *, file=None): """Disassemble a code object.""" cell_names = co.co_cellvars + co.co_freevars linestarts = dict(findlinestarts(co)) + exception_entries = parse_exception_table(co) _disassemble_bytes(co.co_code, lasti, co.co_varnames, co.co_names, - co.co_consts, cell_names, linestarts, file=file) + co.co_consts, cell_names, linestarts, file=file, + exception_entries=exception_entries) def _disassemble_recursive(co, *, file=None, depth=None): disassemble(co, file=file) @@ -385,7 +418,7 @@ def _disassemble_recursive(co, *, file=None, depth=None): def _disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None, cells=None, linestarts=None, - *, file=None, line_offset=0): + *, file=None, line_offset=0, exception_entries=()): # Omit the line number column entirely if we have no line number info show_lineno = bool(linestarts) if show_lineno: @@ -403,7 +436,7 @@ def _disassemble_bytes(code, lasti=-1, varnames=None, names=None, offset_width = 4 for instr in _get_instructions_bytes(code, varnames, names, constants, cells, linestarts, - line_offset=line_offset): + line_offset=line_offset, exception_entries=exception_entries): new_source_line = (show_lineno and instr.starts_line is not None and instr.offset > 0) @@ -412,6 +445,12 @@ def _disassemble_bytes(code, lasti=-1, varnames=None, names=None, is_current_instr = instr.offset == lasti print(instr._disassemble(lineno_width, is_current_instr, offset_width), file=file) + if exception_entries: + print("ExceptionTable:", file=file) + for entry in exception_entries: + lasti = " lasti" if entry.lasti else "" + end = entry.end-2 + print(f" {entry.start} to {end} -> {entry.target} [{entry.depth}]{lasti}", file=file) def _disassemble_str(source, **kwargs): """Compile the source string, then disassemble the code object.""" @@ -482,13 +521,15 @@ def __init__(self, x, *, first_line=None, current_offset=None): self._linestarts = dict(findlinestarts(co)) self._original_object = x self.current_offset = current_offset + self.exception_entries = parse_exception_table(co) def __iter__(self): co = self.codeobj return _get_instructions_bytes(co.co_code, co.co_varnames, co.co_names, co.co_consts, self._cell_names, self._linestarts, - line_offset=self._line_offset) + line_offset=self._line_offset, + exception_entries=self.exception_entries) def __repr__(self): return "{}({!r})".format(self.__class__.__name__, @@ -519,7 +560,8 @@ def dis(self): linestarts=self._linestarts, line_offset=self._line_offset, file=output, - lasti=offset) + lasti=offset, + exception_entries=self.exception_entries) return output.getvalue() diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 9a73c7b43a08cf..469610aba54971 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -352,6 +352,7 @@ def _write_atomic(path, data, mode=0o666): # 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. # Python 3.10b1 3439 (Add ROT_N) +# Python 3.11a1 3450 Use exception table for unwinding ("zero cost" exception handling) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -361,7 +362,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 = (3439).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3450).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/opcode.py b/Lib/opcode.py index 37e88e92df70ec..88022a4d45303a 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -86,11 +86,15 @@ def jabs_op(name, op): def_op('MATCH_SEQUENCE', 32) def_op('MATCH_KEYS', 33) def_op('COPY_DICT_WITHOUT_KEYS', 34) +def_op('PUSH_EXC_INFO', 35) + +def_op('POP_EXCEPT_AND_RERAISE', 37) def_op('WITH_EXCEPT_START', 49) def_op('GET_AITER', 50) def_op('GET_ANEXT', 51) def_op('BEFORE_ASYNC_WITH', 52) +def_op('BEFORE_WITH', 53) def_op('END_ASYNC_FOR', 54) def_op('INPLACE_ADD', 55) @@ -124,7 +128,6 @@ def jabs_op(name, op): def_op('IMPORT_STAR', 84) def_op('SETUP_ANNOTATIONS', 85) def_op('YIELD_VALUE', 86) -def_op('POP_BLOCK', 87) def_op('POP_EXCEPT', 89) @@ -164,7 +167,6 @@ def jabs_op(name, op): def_op('RERAISE', 119) jabs_op('JUMP_IF_NOT_EXC_MATCH', 121) -jrel_op('SETUP_FINALLY', 122) # Distance to target address def_op('LOAD_FAST', 124) # Local variable number haslocal.append(124) @@ -190,7 +192,7 @@ def jabs_op(name, op): def_op('CALL_FUNCTION_KW', 141) # #args + #kwargs def_op('CALL_FUNCTION_EX', 142) # Flags -jrel_op('SETUP_WITH', 143) + def_op('EXTENDED_ARG', 144) EXTENDED_ARG = 144 def_op('LIST_APPEND', 145) @@ -201,7 +203,6 @@ def jabs_op(name, op): def_op('MATCH_CLASS', 152) -jrel_op('SETUP_ASYNC_WITH', 154) def_op('FORMAT_VALUE', 155) def_op('BUILD_CONST_KEY_MAP', 156) def_op('BUILD_STRING', 157) diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 6aaf04ca6dde5e..c3dd678cd13b41 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -227,6 +227,7 @@ def func(): pass co.co_name, co.co_firstlineno, co.co_lnotab, + co.co_exceptiontable, co.co_freevars, co.co_cellvars) diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index 21c68d488c33d3..f341a3e5750349 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -282,42 +282,47 @@ def bug42562(): """ dis_traceback = """\ -%3d 0 SETUP_FINALLY 7 (to 16) +%3d 0 NOP %3d 2 LOAD_CONST 1 (1) 4 LOAD_CONST 2 (0) --> 6 BINARY_TRUE_DIVIDE 8 POP_TOP - 10 POP_BLOCK -%3d 12 LOAD_FAST 1 (tb) - 14 RETURN_VALUE +%3d 10 LOAD_FAST 1 (tb) + 12 RETURN_VALUE + >> 14 PUSH_EXC_INFO -%3d >> 16 DUP_TOP +%3d 16 DUP_TOP 18 LOAD_GLOBAL 0 (Exception) - 20 JUMP_IF_NOT_EXC_MATCH 29 (to 58) + 20 JUMP_IF_NOT_EXC_MATCH 28 (to 56) 22 POP_TOP 24 STORE_FAST 0 (e) 26 POP_TOP - 28 SETUP_FINALLY 10 (to 50) - -%3d 30 LOAD_FAST 0 (e) - 32 LOAD_ATTR 1 (__traceback__) - 34 STORE_FAST 1 (tb) - 36 POP_BLOCK - 38 POP_EXCEPT - 40 LOAD_CONST 0 (None) - 42 STORE_FAST 0 (e) - 44 DELETE_FAST 0 (e) - -%3d 46 LOAD_FAST 1 (tb) - 48 RETURN_VALUE - >> 50 LOAD_CONST 0 (None) - 52 STORE_FAST 0 (e) - 54 DELETE_FAST 0 (e) - 56 RERAISE 1 - -%3d >> 58 RERAISE 0 + +%3d 28 LOAD_FAST 0 (e) + 30 LOAD_ATTR 1 (__traceback__) + 32 STORE_FAST 1 (tb) + 34 POP_EXCEPT + 36 LOAD_CONST 0 (None) + 38 STORE_FAST 0 (e) + 40 DELETE_FAST 0 (e) + +%3d 42 LOAD_FAST 1 (tb) + 44 RETURN_VALUE + >> 46 LOAD_CONST 0 (None) + 48 STORE_FAST 0 (e) + 50 DELETE_FAST 0 (e) + 52 RERAISE 1 + >> 54 POP_EXCEPT_AND_RERAISE + +%3d >> 56 RERAISE 0 +ExceptionTable: + 2 to 8 -> 14 [0] + 14 to 26 -> 54 [3] lasti + 28 to 32 -> 46 [3] lasti + 46 to 52 -> 54 [3] lasti + 56 to 56 -> 54 [3] lasti """ % (TRACEBACK_CODE.co_firstlineno + 1, TRACEBACK_CODE.co_firstlineno + 2, TRACEBACK_CODE.co_firstlineno + 5, @@ -360,38 +365,46 @@ def _tryfinallyconst(b): b() dis_tryfinally = """\ -%3d 0 SETUP_FINALLY 6 (to 14) +%3d 0 NOP %3d 2 LOAD_FAST 0 (a) - 4 POP_BLOCK -%3d 6 LOAD_FAST 1 (b) - 8 CALL_FUNCTION 0 - 10 POP_TOP - 12 RETURN_VALUE - >> 14 LOAD_FAST 1 (b) +%3d 4 LOAD_FAST 1 (b) + 6 CALL_FUNCTION 0 + 8 POP_TOP + 10 RETURN_VALUE + >> 12 PUSH_EXC_INFO + 14 LOAD_FAST 1 (b) 16 CALL_FUNCTION 0 18 POP_TOP 20 RERAISE 0 + >> 22 POP_EXCEPT_AND_RERAISE +ExceptionTable: + 2 to 2 -> 12 [0] + 12 to 20 -> 22 [3] lasti """ % (_tryfinally.__code__.co_firstlineno + 1, _tryfinally.__code__.co_firstlineno + 2, _tryfinally.__code__.co_firstlineno + 4, ) dis_tryfinallyconst = """\ -%3d 0 SETUP_FINALLY 6 (to 14) +%3d 0 NOP -%3d 2 POP_BLOCK +%3d 2 NOP %3d 4 LOAD_FAST 0 (b) 6 CALL_FUNCTION 0 8 POP_TOP 10 LOAD_CONST 1 (1) 12 RETURN_VALUE - >> 14 LOAD_FAST 0 (b) - 16 CALL_FUNCTION 0 - 18 POP_TOP - 20 RERAISE 0 + 14 PUSH_EXC_INFO + 16 LOAD_FAST 0 (b) + 18 CALL_FUNCTION 0 + 20 POP_TOP + 22 RERAISE 0 + >> 24 POP_EXCEPT_AND_RERAISE +ExceptionTable: + 14 to 22 -> 24 [3] lasti """ % (_tryfinallyconst.__code__.co_firstlineno + 1, _tryfinallyconst.__code__.co_firstlineno + 2, _tryfinallyconst.__code__.co_firstlineno + 4, @@ -833,7 +846,7 @@ async def async_def(): Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 2 -Stack size: 9 +Stack size: 10 Flags: OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE Constants: 0: None @@ -1059,61 +1072,64 @@ def jumpy(): 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=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=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=106, argval=212, argrepr='to 212', offset=124, starts_line=None, is_jump_target=False), + Instruction(opname='NOP', opcode=9, arg=None, argval=None, argrepr='', offset=104, starts_line=20, is_jump_target=True), + Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=106, starts_line=21, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False), + Instruction(opname='BINARY_TRUE_DIVIDE', opcode=27, arg=None, argval=None, argrepr='', offset=110, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=112, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=14, argval=144, argrepr='to 144', offset=114, starts_line=None, is_jump_target=False), + Instruction(opname='PUSH_EXC_INFO', opcode=35, arg=None, argval=None, argrepr='', offset=116, starts_line=None, is_jump_target=False), + Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=118, starts_line=22, is_jump_target=False), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=2, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=120, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_IF_NOT_EXC_MATCH', opcode=121, arg=109, argval=218, argrepr='to 218', offset=122, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', 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), - Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=132, starts_line=23, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=134, starts_line=None, is_jump_target=False), - 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=22, argval=188, argrepr='to 188', offset=142, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=130, starts_line=23, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=132, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=134, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=136, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=25, argval=192, argrepr='to 192', offset=140, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT_AND_RERAISE', opcode=37, arg=None, argval=None, argrepr='', 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=12, argval=172, argrepr='to 172', offset=146, starts_line=None, is_jump_target=False), + Instruction(opname='BEFORE_WITH', opcode=53, arg=None, argval=None, argrepr='', 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), 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=25, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=158, starts_line=25, is_jump_target=False), + Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=160, starts_line=None, 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), - 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=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=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), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=164, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=166, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=11, argval=192, argrepr='to 192', offset=168, starts_line=None, is_jump_target=False), + Instruction(opname='PUSH_EXC_INFO', opcode=35, arg=None, argval=None, argrepr='', 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=False), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=90, argval=180, argrepr='to 180', offset=174, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=119, arg=4, argval=4, argrepr='', offset=176, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT_AND_RERAISE', opcode=37, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=True), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False), - Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False), - Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False), - Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=True), - Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=190, starts_line=28, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=192, starts_line=None, is_jump_target=False), - Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=194, starts_line=None, is_jump_target=False), - Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=196, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=198, starts_line=None, is_jump_target=False), - Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=200, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=202, starts_line=None, is_jump_target=True), - Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=204, starts_line=None, is_jump_target=False), - Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=206, starts_line=None, is_jump_target=False), - Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=208, starts_line=None, is_jump_target=False), - Instruction(opname='RERAISE', opcode=119, arg=0, argval=0, argrepr='', offset=210, starts_line=None, is_jump_target=False), - Instruction(opname='RERAISE', opcode=119, arg=0, argval=0, argrepr='', offset=212, starts_line=22, is_jump_target=True), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=190, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=192, starts_line=28, is_jump_target=True), + Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=194, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=196, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=198, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=200, starts_line=None, is_jump_target=False), + Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=202, starts_line=None, is_jump_target=False), + Instruction(opname='PUSH_EXC_INFO', opcode=35, arg=None, argval=None, argrepr='', offset=204, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=206, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=208, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=210, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=212, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=119, arg=0, argval=0, argrepr='', offset=214, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT_AND_RERAISE', opcode=37, arg=None, argval=None, argrepr='', offset=216, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=119, arg=0, argval=0, argrepr='', offset=218, starts_line=22, is_jump_target=True), ] # One last piece of inspect fodder to check the default line number handling @@ -1211,6 +1227,7 @@ def test_from_traceback(self): self.assertEqual(b.current_offset, tb.tb_lasti) def test_from_traceback_dis(self): + self.maxDiff = None tb = get_tb() b = dis.Bytecode.from_traceback(tb) self.assertEqual(b.dis(), dis_traceback) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 3c427fed561183..1fe479fbe83092 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -218,7 +218,7 @@ def testSyntaxErrorOffset(self): check('class foo:return 1', 1, 11) check('def f():\n continue', 2, 3) check('def f():\n break', 2, 3) - check('try:\n pass\nexcept:\n pass\nexcept ValueError:\n pass', 2, 3) + check('try:\n pass\nexcept:\n pass\nexcept ValueError:\n pass', 3, 1) # Errors thrown by tokenizer.c check('(0x+1)', 1, 3) diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 1fd5247a91bb51..4f266894bfceef 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1273,13 +1273,12 @@ class C(object): pass check(sys.float_info, vsize('') + self.P * len(sys.float_info)) # frame import inspect - CO_MAXBLOCKS = 20 x = inspect.currentframe() ncells = len(x.f_code.co_cellvars) nfrees = len(x.f_code.co_freevars) - extras = x.f_code.co_stacksize + x.f_code.co_nlocals +\ - ncells + nfrees - 1 - check(x, vsize('4Pi2c4P3ic' + CO_MAXBLOCKS*'3i' + 'P' + extras*'P')) + localsplus = x.f_code.co_stacksize + x.f_code.co_nlocals +\ + ncells + nfrees + check(x, vsize('8P3i3c' + localsplus*'P')) # function def func(): pass check(func, size('14P')) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 40dd92ca8e23ac..12d4c288e2311a 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -1253,7 +1253,7 @@ def test_jump_out_of_block_backwards(output): output.append(6) output.append(7) - @async_jump_test(4, 5, [3, 5]) + @async_jump_test(4, 5, [3], (ValueError, 'into')) async def test_jump_out_of_async_for_block_forwards(output): for i in [1]: async for i in asynciter([1, 2]): @@ -1295,7 +1295,7 @@ def test_jump_in_nested_finally(output): output.append(8) output.append(9) - @jump_test(6, 7, [2, 7], (ZeroDivisionError, '')) + @jump_test(6, 7, [2], (ValueError, 'within')) def test_jump_in_nested_finally_2(output): try: output.append(2) @@ -1306,7 +1306,7 @@ def test_jump_in_nested_finally_2(output): output.append(7) output.append(8) - @jump_test(6, 11, [2, 11], (ZeroDivisionError, '')) + @jump_test(6, 11, [2], (ValueError, 'within')) def test_jump_in_nested_finally_3(output): try: output.append(2) @@ -1321,7 +1321,7 @@ def test_jump_in_nested_finally_3(output): output.append(11) output.append(12) - @jump_test(5, 11, [2, 4], (ValueError, 'after')) + @jump_test(5, 11, [2, 4], (ValueError, 'exception')) def test_no_jump_over_return_try_finally_in_finally_block(output): try: output.append(2) @@ -1417,8 +1417,8 @@ def test_jump_backwards_out_of_try_except_block(output): output.append(5) raise - @jump_test(5, 7, [4, 7, 8]) - def test_jump_between_except_blocks(output): + @jump_test(5, 7, [4], (ValueError, 'within')) + def test_no_jump_between_except_blocks(output): try: 1/0 except ZeroDivisionError: @@ -1428,8 +1428,8 @@ def test_jump_between_except_blocks(output): output.append(7) output.append(8) - @jump_test(5, 6, [4, 6, 7]) - def test_jump_within_except_block(output): + @jump_test(5, 6, [4], (ValueError, 'within')) + def test_no_jump_within_except_block(output): try: 1/0 except: @@ -1654,54 +1654,54 @@ def test_no_jump_backwards_into_for_block(output): output.append(2) output.append(3) - @async_jump_test(3, 2, [2, 2], (ValueError, 'into')) + @async_jump_test(3, 2, [2, 2], (ValueError, 'within')) async def test_no_jump_backwards_into_async_for_block(output): async for i in asynciter([1, 2]): output.append(2) output.append(3) - @jump_test(1, 3, [], (ValueError, 'into')) + @jump_test(1, 3, [], (ValueError, 'depth')) def test_no_jump_forwards_into_with_block(output): output.append(1) with tracecontext(output, 2): output.append(3) - @async_jump_test(1, 3, [], (ValueError, 'into')) + @async_jump_test(1, 3, [], (ValueError, 'depth')) async def test_no_jump_forwards_into_async_with_block(output): output.append(1) async with asynctracecontext(output, 2): output.append(3) - @jump_test(3, 2, [1, 2, -1], (ValueError, 'into')) + @jump_test(3, 2, [1, 2, -1], (ValueError, 'depth')) def test_no_jump_backwards_into_with_block(output): with tracecontext(output, 1): output.append(2) output.append(3) - @async_jump_test(3, 2, [1, 2, -1], (ValueError, 'into')) + @async_jump_test(3, 2, [1, 2, -1], (ValueError, 'depth')) async def test_no_jump_backwards_into_async_with_block(output): async with asynctracecontext(output, 1): output.append(2) output.append(3) - @jump_test(1, 3, [], (ValueError, 'into')) - def test_no_jump_forwards_into_try_finally_block(output): + @jump_test(1, 3, [3, 5]) + def test_jump_forwards_into_try_finally_block(output): output.append(1) try: output.append(3) finally: output.append(5) - @jump_test(5, 2, [2, 4], (ValueError, 'into')) - def test_no_jump_backwards_into_try_finally_block(output): + @jump_test(5, 2, [2, 4, 2, 4, 5]) + def test_jump_backwards_into_try_finally_block(output): try: output.append(2) finally: output.append(4) output.append(5) - @jump_test(1, 3, [], (ValueError, 'into')) - def test_no_jump_forwards_into_try_except_block(output): + @jump_test(1, 3, [3]) + def test_jump_forwards_into_try_except_block(output): output.append(1) try: output.append(3) @@ -1709,8 +1709,8 @@ def test_no_jump_forwards_into_try_except_block(output): output.append(5) raise - @jump_test(6, 2, [2], (ValueError, 'into')) - def test_no_jump_backwards_into_try_except_block(output): + @jump_test(6, 2, [2, 2, 6]) + def test_jump_backwards_into_try_except_block(output): try: output.append(2) except: @@ -1719,7 +1719,7 @@ def test_no_jump_backwards_into_try_except_block(output): output.append(6) # 'except' with a variable creates an implicit finally block - @jump_test(5, 7, [4], (ValueError, 'into')) + @jump_test(5, 7, [4], (ValueError, 'within')) def test_no_jump_between_except_blocks_2(output): try: 1/0 @@ -1756,7 +1756,7 @@ def test_jump_out_of_finally_block(output): finally: output.append(5) - @jump_test(1, 5, [], (ValueError, "into an 'except'")) + @jump_test(1, 5, [], (ValueError, "into an exception")) def test_no_jump_into_bare_except_block(output): output.append(1) try: @@ -1764,7 +1764,7 @@ def test_no_jump_into_bare_except_block(output): except: output.append(5) - @jump_test(1, 5, [], (ValueError, "into an 'except'")) + @jump_test(1, 5, [], (ValueError, "into an exception")) def test_no_jump_into_qualified_except_block(output): output.append(1) try: @@ -1772,7 +1772,7 @@ def test_no_jump_into_qualified_except_block(output): except Exception: output.append(5) - @jump_test(3, 6, [2, 5, 6], (ValueError, "into an 'except'")) + @jump_test(3, 6, [2, 5, 6], (ValueError, "into an exception")) def test_no_jump_into_bare_except_block_from_try_block(output): try: output.append(2) @@ -1783,7 +1783,7 @@ def test_no_jump_into_bare_except_block_from_try_block(output): raise output.append(8) - @jump_test(3, 6, [2], (ValueError, "into an 'except'")) + @jump_test(3, 6, [2], (ValueError, "into an exception")) def test_no_jump_into_qualified_except_block_from_try_block(output): try: output.append(2) @@ -1794,7 +1794,7 @@ def test_no_jump_into_qualified_except_block_from_try_block(output): raise output.append(8) - @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'")) + @jump_test(7, 1, [1, 3, 6], (ValueError, "within")) def test_no_jump_out_of_bare_except_block(output): output.append(1) try: @@ -1804,7 +1804,7 @@ def test_no_jump_out_of_bare_except_block(output): output.append(6) output.append(7) - @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'")) + @jump_test(7, 1, [1, 3, 6], (ValueError, "within")) def test_no_jump_out_of_qualified_except_block(output): output.append(1) try: diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-30-15-48-36.bpo-40222.j3VxeX.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-30-15-48-36.bpo-40222.j3VxeX.rst new file mode 100644 index 00000000000000..b7744755122783 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-30-15-48-36.bpo-40222.j3VxeX.rst @@ -0,0 +1,7 @@ +"Zero cost" exception handling. + +* Uses a lookup table to determine how to handle exceptions. +* Removes SETUP_FINALLY and POP_TOP block instructions, eliminating the runtime overhead of try statements. +* Reduces the size of the frame object by about 60%. + +Patch by Mark Shannon diff --git a/Modules/_opcode.c b/Modules/_opcode.c index d8de0762e765af..609a2621d5d77e 100644 --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -59,7 +59,12 @@ _opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg, "stack_effect: jump must be False, True or None"); return -1; } - effect = PyCompile_OpcodeStackEffectWithJump(opcode, oparg_int, jump_int); + if (IS_ARTIFICIAL(opcode)) { + effect = PY_INVALID_STACK_EFFECT; + } + else { + effect = PyCompile_OpcodeStackEffectWithJump(opcode, oparg_int, jump_int); + } if (effect == PY_INVALID_STACK_EFFECT) { PyErr_SetString(PyExc_ValueError, "invalid opcode or oparg"); diff --git a/Objects/clinic/codeobject.c.h b/Objects/clinic/codeobject.c.h index bae2ab07644858..7ffdf07e49ada0 100644 --- a/Objects/clinic/codeobject.c.h +++ b/Objects/clinic/codeobject.c.h @@ -5,7 +5,8 @@ preserve PyDoc_STRVAR(code_new__doc__, "code(argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize,\n" " flags, codestring, constants, names, varnames, filename, name,\n" -" firstlineno, linetable, freevars=(), cellvars=(), /)\n" +" firstlineno, linetable, exceptiontable, freevars=(), cellvars=(),\n" +" /)\n" "--\n" "\n" "Create a code object. Not for the faint of heart."); @@ -15,8 +16,8 @@ code_new_impl(PyTypeObject *type, int argcount, int posonlyargcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *filename, PyObject *name, - int firstlineno, PyObject *linetable, PyObject *freevars, - PyObject *cellvars); + int firstlineno, PyObject *linetable, PyObject *exceptiontable, + PyObject *freevars, PyObject *cellvars); static PyObject * code_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) @@ -36,6 +37,7 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) PyObject *name; int firstlineno; PyObject *linetable; + PyObject *exceptiontable; PyObject *freevars = NULL; PyObject *cellvars = NULL; @@ -43,7 +45,7 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) !_PyArg_NoKeywords("code", kwargs)) { goto exit; } - if (!_PyArg_CheckPositional("code", PyTuple_GET_SIZE(args), 14, 16)) { + if (!_PyArg_CheckPositional("code", PyTuple_GET_SIZE(args), 15, 17)) { goto exit; } argcount = _PyLong_AsInt(PyTuple_GET_ITEM(args, 0)); @@ -115,14 +117,11 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) goto exit; } linetable = PyTuple_GET_ITEM(args, 13); - if (PyTuple_GET_SIZE(args) < 15) { - goto skip_optional; - } - if (!PyTuple_Check(PyTuple_GET_ITEM(args, 14))) { - _PyArg_BadArgument("code", "argument 15", "tuple", PyTuple_GET_ITEM(args, 14)); + if (!PyBytes_Check(PyTuple_GET_ITEM(args, 14))) { + _PyArg_BadArgument("code", "argument 15", "bytes", PyTuple_GET_ITEM(args, 14)); goto exit; } - freevars = PyTuple_GET_ITEM(args, 14); + exceptiontable = PyTuple_GET_ITEM(args, 14); if (PyTuple_GET_SIZE(args) < 16) { goto skip_optional; } @@ -130,9 +129,17 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) _PyArg_BadArgument("code", "argument 16", "tuple", PyTuple_GET_ITEM(args, 15)); goto exit; } - cellvars = PyTuple_GET_ITEM(args, 15); + freevars = PyTuple_GET_ITEM(args, 15); + if (PyTuple_GET_SIZE(args) < 17) { + goto skip_optional; + } + if (!PyTuple_Check(PyTuple_GET_ITEM(args, 16))) { + _PyArg_BadArgument("code", "argument 17", "tuple", PyTuple_GET_ITEM(args, 16)); + goto exit; + } + cellvars = PyTuple_GET_ITEM(args, 16); skip_optional: - return_value = code_new_impl(type, argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize, flags, code, consts, names, varnames, filename, name, firstlineno, linetable, freevars, cellvars); + return_value = code_new_impl(type, argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize, flags, code, consts, names, varnames, filename, name, firstlineno, linetable, exceptiontable, freevars, cellvars); exit: return return_value; @@ -144,7 +151,7 @@ PyDoc_STRVAR(code_replace__doc__, " co_flags=-1, co_firstlineno=-1, co_code=None, co_consts=None,\n" " co_names=None, co_varnames=None, co_freevars=None,\n" " co_cellvars=None, co_filename=None, co_name=None,\n" -" co_linetable=None)\n" +" co_linetable=None, co_exceptiontable=None)\n" "--\n" "\n" "Return a copy of the code object with new values for the specified fields."); @@ -160,15 +167,16 @@ code_replace_impl(PyCodeObject *self, int co_argcount, PyObject *co_consts, PyObject *co_names, PyObject *co_varnames, PyObject *co_freevars, PyObject *co_cellvars, PyObject *co_filename, - PyObject *co_name, PyBytesObject *co_linetable); + PyObject *co_name, PyBytesObject *co_linetable, + PyBytesObject *co_exceptiontable); static PyObject * code_replace(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) { PyObject *return_value = NULL; - static const char * const _keywords[] = {"co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_firstlineno", "co_code", "co_consts", "co_names", "co_varnames", "co_freevars", "co_cellvars", "co_filename", "co_name", "co_linetable", NULL}; + static const char * const _keywords[] = {"co_argcount", "co_posonlyargcount", "co_kwonlyargcount", "co_nlocals", "co_stacksize", "co_flags", "co_firstlineno", "co_code", "co_consts", "co_names", "co_varnames", "co_freevars", "co_cellvars", "co_filename", "co_name", "co_linetable", "co_exceptiontable", NULL}; static _PyArg_Parser _parser = {NULL, _keywords, "replace", 0}; - PyObject *argsbuf[16]; + PyObject *argsbuf[17]; Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0; int co_argcount = self->co_argcount; int co_posonlyargcount = self->co_posonlyargcount; @@ -186,6 +194,7 @@ code_replace(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObje PyObject *co_filename = self->co_filename; PyObject *co_name = self->co_name; PyBytesObject *co_linetable = (PyBytesObject *)self->co_linetable; + PyBytesObject *co_exceptiontable = (PyBytesObject *)self->co_exceptiontable; args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf); if (!args) { @@ -343,15 +352,25 @@ code_replace(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObje goto skip_optional_kwonly; } } - if (!PyBytes_Check(args[15])) { - _PyArg_BadArgument("replace", "argument 'co_linetable'", "bytes", args[15]); + if (args[15]) { + if (!PyBytes_Check(args[15])) { + _PyArg_BadArgument("replace", "argument 'co_linetable'", "bytes", args[15]); + goto exit; + } + co_linetable = (PyBytesObject *)args[15]; + if (!--noptargs) { + goto skip_optional_kwonly; + } + } + if (!PyBytes_Check(args[16])) { + _PyArg_BadArgument("replace", "argument 'co_exceptiontable'", "bytes", args[16]); goto exit; } - co_linetable = (PyBytesObject *)args[15]; + co_exceptiontable = (PyBytesObject *)args[16]; skip_optional_kwonly: - return_value = code_replace_impl(self, co_argcount, co_posonlyargcount, co_kwonlyargcount, co_nlocals, co_stacksize, co_flags, co_firstlineno, co_code, co_consts, co_names, co_varnames, co_freevars, co_cellvars, co_filename, co_name, co_linetable); + return_value = code_replace_impl(self, co_argcount, co_posonlyargcount, co_kwonlyargcount, co_nlocals, co_stacksize, co_flags, co_firstlineno, co_code, co_consts, co_names, co_varnames, co_freevars, co_cellvars, co_filename, co_name, co_linetable, co_exceptiontable); exit: return return_value; } -/*[clinic end generated code: output=e3091c7baaaaa420 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a272b22f63ea002e input=a9049054013a1b77]*/ diff --git a/Objects/codeobject.c b/Objects/codeobject.c index c76ac900b3a5e8..e981e39aaf1240 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -119,7 +119,7 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, - PyObject *linetable) + PyObject *linetable, PyObject *exceptiontable) { PyCodeObject *co; Py_ssize_t *cell2arg = NULL; @@ -137,7 +137,8 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, cellvars == NULL || !PyTuple_Check(cellvars) || name == NULL || !PyUnicode_Check(name) || filename == NULL || !PyUnicode_Check(filename) || - linetable == NULL || !PyBytes_Check(linetable)) { + linetable == NULL || !PyBytes_Check(linetable) || + exceptiontable == NULL || !PyBytes_Check(exceptiontable)) { PyErr_BadInternalCall(); return NULL; } @@ -260,6 +261,8 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, co->co_firstlineno = firstlineno; Py_INCREF(linetable); co->co_linetable = linetable; + Py_INCREF(exceptiontable); + co->co_exceptiontable = exceptiontable; co->co_zombieframe = NULL; co->co_weakreflist = NULL; co->co_extra = NULL; @@ -277,12 +280,12 @@ PyCode_New(int argcount, int kwonlyargcount, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *freevars, PyObject *cellvars, PyObject *filename, PyObject *name, int firstlineno, - PyObject *linetable) + PyObject *linetable, PyObject *exceptiontable) { return PyCode_NewWithPosOnlyArgs(argcount, 0, kwonlyargcount, nlocals, stacksize, flags, code, consts, names, varnames, freevars, cellvars, filename, - name, firstlineno, linetable); + name, firstlineno, linetable, exceptiontable); } int @@ -369,7 +372,8 @@ PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno) filename_ob, /* filename */ funcname_ob, /* name */ firstlineno, /* firstlineno */ - emptystring /* linetable */ + emptystring, /* linetable */ + emptystring /* exception table */ ); failed: @@ -397,6 +401,7 @@ static PyMemberDef code_memberlist[] = { {"co_name", T_OBJECT, OFF(co_name), READONLY}, {"co_firstlineno", T_INT, OFF(co_firstlineno), READONLY}, {"co_linetable", T_OBJECT, OFF(co_linetable), READONLY}, + {"co_exceptiontable", T_OBJECT, OFF(co_exceptiontable), READONLY}, {NULL} /* Sentinel */ }; @@ -538,6 +543,7 @@ code.__new__ as code_new name: unicode firstlineno: int linetable: object(subclass_of="&PyBytes_Type") + exceptiontable: object(subclass_of="&PyBytes_Type") freevars: object(subclass_of="&PyTuple_Type", c_default="NULL") = () cellvars: object(subclass_of="&PyTuple_Type", c_default="NULL") = () / @@ -550,9 +556,9 @@ code_new_impl(PyTypeObject *type, int argcount, int posonlyargcount, int kwonlyargcount, int nlocals, int stacksize, int flags, PyObject *code, PyObject *consts, PyObject *names, PyObject *varnames, PyObject *filename, PyObject *name, - int firstlineno, PyObject *linetable, PyObject *freevars, - PyObject *cellvars) -/*[clinic end generated code: output=42c1839b082ba293 input=0ec80da632b99f57]*/ + int firstlineno, PyObject *linetable, PyObject *exceptiontable, + PyObject *freevars, PyObject *cellvars) +/*[clinic end generated code: output=a3899259c3b4cace input=f823c686da4b3a03]*/ { PyObject *co = NULL; PyObject *ournames = NULL; @@ -618,7 +624,9 @@ code_new_impl(PyTypeObject *type, int argcount, int posonlyargcount, code, consts, ournames, ourvarnames, ourfreevars, ourcellvars, filename, - name, firstlineno, linetable); + name, firstlineno, linetable, + exceptiontable + ); cleanup: Py_XDECREF(ournames); Py_XDECREF(ourvarnames); @@ -663,6 +671,7 @@ code_dealloc(PyCodeObject *co) Py_XDECREF(co->co_filename); Py_XDECREF(co->co_name); Py_XDECREF(co->co_linetable); + Py_XDECREF(co->co_exceptiontable); if (co->co_cell2arg != NULL) PyMem_Free(co->co_cell2arg); if (co->co_zombieframe != NULL) @@ -715,6 +724,7 @@ code.replace co_filename: unicode(c_default="self->co_filename") = None co_name: unicode(c_default="self->co_name") = None co_linetable: PyBytesObject(c_default="(PyBytesObject *)self->co_linetable") = None + co_exceptiontable: PyBytesObject(c_default="(PyBytesObject *)self->co_exceptiontable") = None Return a copy of the code object with new values for the specified fields. [clinic start generated code]*/ @@ -727,8 +737,9 @@ code_replace_impl(PyCodeObject *self, int co_argcount, PyObject *co_consts, PyObject *co_names, PyObject *co_varnames, PyObject *co_freevars, PyObject *co_cellvars, PyObject *co_filename, - PyObject *co_name, PyBytesObject *co_linetable) -/*[clinic end generated code: output=50d77e668d3b449b input=a5f997b173d7f636]*/ + PyObject *co_name, PyBytesObject *co_linetable, + PyBytesObject *co_exceptiontable) +/*[clinic end generated code: output=80957472b7f78ed6 input=38376b1193efbbae]*/ { #define CHECK_INT_ARG(ARG) \ if (ARG < 0) { \ @@ -758,7 +769,7 @@ code_replace_impl(PyCodeObject *self, int co_argcount, co_argcount, co_posonlyargcount, co_kwonlyargcount, co_nlocals, co_stacksize, co_flags, (PyObject*)co_code, co_consts, co_names, co_varnames, co_freevars, co_cellvars, co_filename, co_name, - co_firstlineno, (PyObject*)co_linetable); + co_firstlineno, (PyObject*)co_linetable, (PyObject*)co_exceptiontable); } static PyObject * diff --git a/Objects/exception_handling_notes.txt b/Objects/exception_handling_notes.txt new file mode 100644 index 00000000000000..2183fa111f1050 --- /dev/null +++ b/Objects/exception_handling_notes.txt @@ -0,0 +1,179 @@ +Description of exception handling in Python 3.11 +------------------------------------------------ + +Python 3.11 uses what is known as "zero-cost" exception handling. +Prior to 3.11, exceptions were handled by a runtime stack of "blocks". + +In zero-cost exception handling, the cost of supporting exceptions is minimized. +In the common case (where no exception is raised) the cost is reduced +to zero (or close to zero). +The cost of raising an exception is increased, but not by much. + +The following code: + +def f(): + try: + g(0) + except: + return "fail" + +compiles as follows in 3.10: + + 2 0 SETUP_FINALLY 7 (to 16) + + 3 2 LOAD_GLOBAL 0 (g) + 4 LOAD_CONST 1 (0) + 6 CALL_FUNCTION 1 + 8 POP_TOP + 10 POP_BLOCK + 12 LOAD_CONST 0 (None) + 14 RETURN_VALUE + + 4 >> 16 POP_TOP + 18 POP_TOP + 20 POP_TOP + + 5 22 POP_EXCEPT + 24 LOAD_CONST 3 ('fail') + 26 RETURN_VALUE + +Note the explicit instructions to push and pop from the "block" stack: +SETUP_FINALLY and POP_BLOCK. + +In 3.11, the SETUP_FINALLY and POP_BLOCK are eliminated, replaced with +a table to determine where to jump to when an exception is raised. + + 2 0 NOP + + 3 2 LOAD_GLOBAL 0 (g) + 4 LOAD_CONST 1 (0) + 6 CALL_FUNCTION 1 + 8 POP_TOP + 10 LOAD_CONST 0 (None) + 12 RETURN_VALUE + >> 14 PUSH_EXC_INFO + + 4 16 POP_TOP + 18 POP_TOP + 20 POP_TOP + + 5 22 POP_EXCEPT + 24 LOAD_CONST 2 ('fail') + 26 RETURN_VALUE + >> 28 POP_EXCEPT_AND_RERAISE +ExceptionTable: + 2 to 8 -> 14 [0] + 14 to 20 -> 28 [3] lasti + +(Note this code is from an early 3.11 alpha, the NOP may well have be removed before release). + +If an instruction raises an exception then its offset is used to find the target to jump to. +For example, the CALL_FUNCTION at offset 6, falls into the range 2 to 8. +So, if g() raises an exception, then control jumps to offset 14. + + +Unwinding +--------- + +When an exception is raised, the current instruction offset is used to find following: +target to jump to, stack depth, and 'lasti', which determines whether the instruction +offset of the raising instruction should be pushed. + +This information is stored in the exception table, described below. + +If there is no relevant entry, the exception bubbles up to the caller. + +If there is an entry, then: + 1. pop values from the stack until it matches the stack depth for the handler, + 2. if 'lasti' is true, then push the offset that the exception was raised at. + 3. push the exception to the stack as three values: traceback, value, type, + 4. jump to the target offset and resume execution. + + +Format of the exception table +----------------------------- + +Conceptually, the exception table consists of a sequence of 5-tuples: + 1. start-offset (inclusive) + 2. end-offset (exclusive) + 3. target + 4. stack-depth + 5. push-lasti (boolean) + +All offsets and lengths are in instructions, not bytes. + +We want the format to be compact, but quickly searchable. +For it to be compact, it needs to have variable sized entries so that we can store common (small) offsets compactly, but handle large offsets if needed. +For it to be searchable quickly, we need to support binary search giving us log(n) performance in all cases. +Binary search typically assumes fixed size entries, but that is not necesary, as long as we can identify the start of an entry. + +It is worth noting that the size (end-start) is always smaller than the end, so we encode the entries as: + start, size, target, depth, push-lasti + +Also, sizes are limited to 2**30 as the code length cannot exceed 2**31 and each instruction takes 2 bytes. +It also happens that depth is generally quite small. + +So, we need to encode: + start (up to 30 bits) + size (up to 30 bits) + target (up to 30 bits) + depth (up to ~8 bits) + lasti (1 bit) + +We need a marker for the start of the entry, so the first byte of entry will have the most significant bit set. +Since the most significant bit is reserved for marking the start of an entry, we have 7 bits per byte to encode offsets. +Encoding uses a standard varint encoding, but with only 7 bits instead of the usual 8. +The 8 bits of a bit are (msb left) SXdddddd where S is the start bit. X is the extend bit meaning that the next byte is required to extend the offset. + +In addition, we will combine depth and lasti into a single value, ((depth<<1)+lasti), before encoding. + +For example, the exception entry: + start: 20 + end: 28 + target: 100 + depth: 3 + lasti: False + +is encoded first by converting to the more compact four value form: + start: 20 + size: 8 + target: 100 + depth<<1+lasti: 6 + +which is then encoded as: + 148 (MSB + 20 for start) + 8 (size) + 65 (Extend bit + 1) + 36 (Remainder of target, 100 == (1<<6)+36) + 6 + +for a total of five bytes. + + + +Script to parse the exception table +----------------------------------- + +def parse_varint(iterator): + b = next(iterator) + val = b & 63 + while b&64: + val <<= 6 + b = next(iterator) + val |= b&63 + return val + +def parse_exception_table(code): + iterator = iter(code.co_exceptiontable) + try: + while True: + start = parse_varint(iterator)*2 + length = parse_varint(iterator)*2 + end = start + length - 2 # Present as inclusive, not exclusive + target = parse_varint(iterator)*2 + dl = parse_varint(iterator) + depth = dl >> 1 + lasti = bool(dl&1) + yield start, end, target, depth, lasti + except StopIteration: + return diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 034b908ade31cc..ae8cdcfb92d6b2 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -91,56 +91,71 @@ get_arg(const _Py_CODEUNIT *codestr, Py_ssize_t i) return oparg; } +/* Model the evaluation stack, to determine which jumps + * are safe and how many values needs to be popped. + * The stack is modelled by a 64 integer, treating any + * stack that can't fit into 64 bits as "overflowed". + */ + typedef enum kind { - With = 1, - Loop = 2, - Try = 3, - Except = 4, + Iterator = 1, + Except = 2, + Object = 3, } Kind; -#define BITS_PER_BLOCK 3 +#define BITS_PER_BLOCK 2 + +#define UNINITIALIZED -2 +#define OVERFLOWED -1 + +#define MAX_STACK_ENTRIES (63/BITS_PER_BLOCK) +#define WILL_OVERFLOW (1ULL<<((MAX_STACK_ENTRIES-1)*BITS_PER_BLOCK)) static inline int64_t -push_block(int64_t stack, Kind kind) +push_value(int64_t stack, Kind kind) { - assert(stack < ((int64_t)1)<<(BITS_PER_BLOCK*CO_MAXBLOCKS)); - return (stack << BITS_PER_BLOCK) | kind; + if (((uint64_t)stack) >= WILL_OVERFLOW) { + return OVERFLOWED; + } + else { + return (stack << BITS_PER_BLOCK) | kind; + } } static inline int64_t -pop_block(int64_t stack) +pop_value(int64_t stack) { - assert(stack > 0); - return stack >> BITS_PER_BLOCK; + return Py_ARITHMETIC_RIGHT_SHIFT(int64_t, stack, BITS_PER_BLOCK); } static inline Kind -top_block(int64_t stack) +top_of_stack(int64_t stack) { return stack & ((1<co_code); - int64_t *blocks = PyMem_New(int64_t, len+1); + int64_t *stacks = PyMem_New(int64_t, len+1); int i, j, opcode; - if (blocks == NULL) { + if (stacks == NULL) { PyErr_NoMemory(); return NULL; } - memset(blocks, -1, (len+1)*sizeof(int64_t)); - blocks[0] = 0; + for (int i = 1; i <= len; i++) { + stacks[i] = UNINITIALIZED; + } + stacks[0] = 0; int todo = 1; while (todo) { todo = 0; for (i = 0; i < len; i++) { - int64_t block_stack = blocks[i]; - int64_t except_stack; - if (block_stack == -1) { + int64_t next_stack = stacks[i]; + if (next_stack == UNINITIALIZED) { continue; } opcode = _Py_OPCODE(code[i]); @@ -150,109 +165,153 @@ 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); + { + int64_t target_stack; + int j = get_arg(code, i); assert(j < len); - if (blocks[j] == -1 && j < i) { + if (stacks[j] == UNINITIALIZED && j < i) { todo = 1; } - assert(blocks[j] == -1 || blocks[j] == block_stack); - blocks[j] = block_stack; - blocks[i+1] = block_stack; + if (opcode == JUMP_IF_NOT_EXC_MATCH) { + next_stack = pop_value(pop_value(next_stack)); + target_stack = next_stack; + } + else if (opcode == JUMP_IF_FALSE_OR_POP || + opcode == JUMP_IF_TRUE_OR_POP) + { + target_stack = next_stack; + next_stack = pop_value(next_stack); + } + else { + next_stack = pop_value(next_stack); + target_stack = next_stack; + } + assert(stacks[j] == UNINITIALIZED || stacks[j] == target_stack); + stacks[j] = target_stack; + stacks[i+1] = next_stack; break; + } case JUMP_ABSOLUTE: j = get_arg(code, i); assert(j < len); - if (blocks[j] == -1 && j < i) { + if (stacks[j] == UNINITIALIZED && j < i) { todo = 1; } - assert(blocks[j] == -1 || blocks[j] == block_stack); - blocks[j] = block_stack; + assert(stacks[j] == UNINITIALIZED || stacks[j] == next_stack); + stacks[j] = next_stack; break; - case SETUP_FINALLY: - 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); - blocks[j] = except_stack; - block_stack = push_block(block_stack, Try); - blocks[i+1] = block_stack; - break; - case SETUP_WITH: - case SETUP_ASYNC_WITH: - 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); - blocks[j] = except_stack; - block_stack = push_block(block_stack, With); - blocks[i+1] = block_stack; + case POP_EXCEPT: + next_stack = pop_value(pop_value(pop_value(next_stack))); + stacks[i+1] = next_stack; break; + case JUMP_FORWARD: j = get_arg(code, i) + i + 1; assert(j < len); - assert(blocks[j] == -1 || blocks[j] == block_stack); - blocks[j] = block_stack; + assert(stacks[j] == UNINITIALIZED || stacks[j] == next_stack); + stacks[j] = next_stack; break; case GET_ITER: case GET_AITER: - block_stack = push_block(block_stack, Loop); - blocks[i+1] = block_stack; + next_stack = push_value(pop_value(next_stack), Iterator); + stacks[i+1] = next_stack; break; case FOR_ITER: - blocks[i+1] = block_stack; - block_stack = pop_block(block_stack); + { + int64_t target_stack = pop_value(next_stack); + stacks[i+1] = push_value(next_stack, Object); j = get_arg(code, i) + i + 1; assert(j < len); - assert(blocks[j] == -1 || blocks[j] == block_stack); - blocks[j] = block_stack; - break; - case POP_BLOCK: - case POP_EXCEPT: - block_stack = pop_block(block_stack); - blocks[i+1] = block_stack; + assert(stacks[j] == UNINITIALIZED || stacks[j] == target_stack); + stacks[j] = target_stack; break; + } case END_ASYNC_FOR: - block_stack = pop_block(pop_block(block_stack)); - blocks[i+1] = block_stack; + next_stack = pop_value(pop_value(pop_value(next_stack))); + stacks[i+1] = next_stack; break; + case PUSH_EXC_INFO: + next_stack = push_value(next_stack, Except); + next_stack = push_value(next_stack, Except); + next_stack = push_value(next_stack, Except); + stacks[i+1] = next_stack; case RETURN_VALUE: case RAISE_VARARGS: case RERAISE: + case POP_EXCEPT_AND_RERAISE: /* End of block */ break; + case GEN_START: + stacks[i+1] = next_stack; + break; default: - blocks[i+1] = block_stack; - + { + int delta = PyCompile_OpcodeStackEffect(opcode, _Py_OPARG(code[i])); + while (delta < 0) { + next_stack = pop_value(next_stack); + delta++; + } + while (delta > 0) { + next_stack = push_value(next_stack, Object); + delta--; + } + stacks[i+1] = next_stack; + } } } } - return blocks; + return stacks; +} + +static int +compatible_kind(Kind from, Kind to) { + if (to == 0) { + return 0; + } + if (to == Object) { + return 1; + } + return from == to; } static int -compatible_block_stack(int64_t from_stack, int64_t to_stack) +compatible_stack(int64_t from_stack, int64_t to_stack) { - if (to_stack < 0) { + if (from_stack < 0 || to_stack < 0) { return 0; } while(from_stack > to_stack) { - from_stack = pop_block(from_stack); + from_stack = pop_value(from_stack); } - return from_stack == to_stack; + while(from_stack) { + Kind from_top = top_of_stack(from_stack); + Kind to_top = top_of_stack(to_stack); + if (!compatible_kind(from_top, to_top)) { + return 0; + } + from_stack = pop_value(from_stack); + to_stack = pop_value(to_stack); + } + return to_stack == 0; } static const char * -explain_incompatible_block_stack(int64_t to_stack) +explain_incompatible_stack(int64_t to_stack) { - Kind target_kind = top_block(to_stack); + assert(to_stack != 0); + if (to_stack == OVERFLOWED) { + return "stack is too deep to analyze"; + } + if (to_stack == UNINITIALIZED) { + return "can't jump into an exception handler, or code may be unreachable"; + } + Kind target_kind = top_of_stack(to_stack); switch(target_kind) { case Except: return "can't jump into an 'except' block as there's no exception"; - case Try: - return "can't jump into the body of a try statement"; - case With: - return "can't jump into the body of a with statement"; - case Loop: + case Object: + return "differing stack depth"; + case Iterator: return "can't jump into the body of a for loop"; default: Py_UNREACHABLE(); @@ -299,27 +358,12 @@ first_line_not_before(int *lines, int len, int line) static void frame_stack_pop(PyFrameObject *f) { - assert(f->f_stackdepth >= 0); + assert(f->f_stackdepth > 0); f->f_stackdepth--; PyObject *v = f->f_valuestack[f->f_stackdepth]; Py_DECREF(v); } -static void -frame_block_unwind(PyFrameObject *f) -{ - assert(f->f_stackdepth >= 0); - assert(f->f_iblock > 0); - f->f_iblock--; - PyTryBlock *b = &f->f_blockstack[f->f_iblock]; - intptr_t delta = f->f_stackdepth - b->b_level; - while (delta > 0) { - frame_stack_pop(f); - delta--; - } -} - - /* Setter for f_lineno - you can set f_lineno from within a trace function in * order to jump to a given line of code, subject to some restrictions. Most * lines are OK to jump to because they don't make any assumptions about the @@ -327,13 +371,7 @@ frame_block_unwind(PyFrameObject *f) * would still work without any stack errors), but there are some constructs * that limit jumping: * - * o Lines with an 'except' statement on them can't be jumped to, because - * they expect an exception to be on the top of the stack. - * o Lines that live in a 'finally' block can't be jumped from or to, since - * we cannot be sure which state the interpreter was in or would be in - * during execution of the finally block. - * o 'try', 'with' and 'async with' blocks can't be jumped into because - * the blockstack needs to be set up before their code runs. + * o Any excpetion handlers. * o 'for' and 'async for' loops can't be jumped into because the * iterator needs to be on the stack. * o Jumps cannot be made from within a trace function invoked with a @@ -428,67 +466,56 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore return -1; } - int64_t *blocks = markblocks(f->f_code, len); - if (blocks == NULL) { + int64_t *stacks = mark_stacks(f->f_code, len); + if (stacks == NULL) { PyMem_Free(lines); return -1; } - int64_t target_block_stack = -1; - int64_t best_block_stack = -1; + int64_t best_stack = OVERFLOWED; int best_addr = -1; - int64_t start_block_stack = blocks[f->f_lasti]; + int64_t start_stack = stacks[f->f_lasti]; + int err = -1; const char *msg = "cannot find bytecode for specified line"; for (int i = 0; i < len; i++) { if (lines[i] == new_lineno) { - target_block_stack = blocks[i]; - if (compatible_block_stack(start_block_stack, target_block_stack)) { - msg = NULL; - if (target_block_stack > best_block_stack) { - best_block_stack = target_block_stack; + int64_t target_stack = stacks[i]; + if (compatible_stack(start_stack, target_stack)) { + err = 0; + if (target_stack > best_stack) { + best_stack = target_stack; best_addr = i; } } - else if (msg) { - if (target_block_stack >= 0) { - msg = explain_incompatible_block_stack(target_block_stack); + else if (err < 0) { + if (start_stack == OVERFLOWED) { + msg = "stack to deep to analyze"; + } + else if (start_stack == UNINITIALIZED) { + msg = "can't jump from within an exception handler"; } else { - msg = "code may be unreachable."; + msg = explain_incompatible_stack(target_stack); + err = 1; } } } } - PyMem_Free(blocks); + PyMem_Free(stacks); PyMem_Free(lines); - if (msg != NULL) { + if (err) { PyErr_SetString(PyExc_ValueError, msg); return -1; } - /* Unwind block stack. */ - while (start_block_stack > best_block_stack) { - Kind kind = top_block(start_block_stack); - switch(kind) { - case Loop: - frame_stack_pop(f); - break; - case Try: - frame_block_unwind(f); - break; - case With: - frame_block_unwind(f); - // Pop the exit function - frame_stack_pop(f); - break; - case Except: - PyErr_SetString(PyExc_ValueError, - "can't jump out of an 'except' block"); - return -1; - } - start_block_stack = pop_block(start_block_stack); + if (f->f_state == FRAME_SUSPENDED) { + /* Account for value popped by yield */ + start_stack = pop_value(start_stack); + } + while (start_stack > best_stack) { + frame_stack_pop(f); + start_stack = pop_value(start_stack); } - /* Finally set the new f_lasti and return OK. */ f->f_lineno = 0; f->f_lasti = best_addr; @@ -852,7 +879,6 @@ _PyFrame_New_NoTrack(PyThreadState *tstate, PyFrameConstructor *con, PyObject *l f->f_gen = NULL; f->f_lasti = -1; f->f_lineno = 0; - f->f_iblock = 0; f->f_state = FRAME_CREATED; // f_blockstack and f_localsplus initialized by frame_alloc() return f; @@ -884,33 +910,6 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code, return f; } - -/* Block management */ - -void -PyFrame_BlockSetup(PyFrameObject *f, int type, int handler, int level) -{ - PyTryBlock *b; - if (f->f_iblock >= CO_MAXBLOCKS) { - Py_FatalError("block stack overflow"); - } - b = &f->f_blockstack[f->f_iblock++]; - b->b_type = type; - b->b_level = level; - b->b_handler = handler; -} - -PyTryBlock * -PyFrame_BlockPop(PyFrameObject *f) -{ - PyTryBlock *b; - if (f->f_iblock <= 0) { - Py_FatalError("block stack underflow"); - } - b = &f->f_blockstack[--f->f_iblock]; - return b; -} - /* Convert between "fast" version of locals and dictionary version. map and values are input arguments. map is a tuple of strings. diff --git a/PC/launcher.c b/PC/launcher.c index f5b225ac08cfe1..fbfb49ae857ac2 100644 --- a/PC/launcher.c +++ b/PC/launcher.c @@ -1258,7 +1258,8 @@ static PYC_MAGIC magic_values[] = { { 3390, 3399, L"3.7" }, { 3400, 3419, L"3.8" }, { 3420, 3429, L"3.9" }, - { 3430, 3439, L"3.10" }, + { 3430, 3449, L"3.10" }, + { 3450, 3469, L"3.11" }, { 0 } }; diff --git a/Python/ceval.c b/Python/ceval.c index 25548e34db246b..f7450670691dd1 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -95,6 +95,7 @@ static PyObject * special_lookup(PyThreadState *, PyObject *, _Py_Identifier *); static int check_args_iterable(PyThreadState *, PyObject *func, PyObject *vararg); static void format_kwargs_error(PyThreadState *, PyObject *func, PyObject *kwargs); static void format_awaitable_error(PyThreadState *, PyTypeObject *, int, int); +static PyTryBlock get_exception_handler(PyCodeObject *, int); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" @@ -1448,34 +1449,6 @@ eval_frame_handle_pending(PyThreadState *tstate) GETLOCAL(i) = value; \ Py_XDECREF(tmp); } while (0) - -#define UNWIND_BLOCK(b) \ - while (STACK_LEVEL() > (b)->b_level) { \ - PyObject *v = POP(); \ - Py_XDECREF(v); \ - } - -#define UNWIND_EXCEPT_HANDLER(b) \ - do { \ - PyObject *type, *value, *traceback; \ - _PyErr_StackItem *exc_info; \ - assert(STACK_LEVEL() >= (b)->b_level + 3); \ - while (STACK_LEVEL() > (b)->b_level + 3) { \ - value = POP(); \ - Py_XDECREF(value); \ - } \ - exc_info = tstate->exc_info; \ - type = exc_info->exc_type; \ - value = exc_info->exc_value; \ - traceback = exc_info->exc_traceback; \ - exc_info->exc_type = POP(); \ - exc_info->exc_value = POP(); \ - exc_info->exc_traceback = POP(); \ - Py_XDECREF(type); \ - Py_XDECREF(value); \ - Py_XDECREF(traceback); \ - } while(0) - /* macros for opcode cache */ #define OPCACHE_CHECK() \ do { \ @@ -1738,7 +1711,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) assert(!_PyErr_Occurred(tstate)); #endif -main_loop: for (;;) { assert(stack_pointer >= f->f_valuestack); /* else underflow */ assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */ @@ -1754,9 +1726,7 @@ _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 && + if (opcode != BEFORE_ASYNC_WITH && opcode != YIELD_FROM) { /* Few cases where we skip running signal handlers and other pending calls: @@ -1800,14 +1770,14 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) tstate->c_traceobj, tstate, f, &trace_info); - /* Reload possibly changed frame fields */ - JUMPTO(f->f_lasti); - stack_pointer = f->f_valuestack+f->f_stackdepth; - f->f_stackdepth = -1; if (err) { /* trace function raised an exception */ goto error; } + /* Reload possibly changed frame fields */ + JUMPTO(f->f_lasti); + stack_pointer = f->f_valuestack+f->f_stackdepth; + f->f_stackdepth = -1; NEXTOPARG(); } @@ -2425,7 +2395,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(RETURN_VALUE): { retval = POP(); - assert(f->f_iblock == 0); assert(EMPTY()); f->f_state = FRAME_RETURNED; f->f_stackdepth = 0; @@ -2664,14 +2633,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(POP_EXCEPT): { PyObject *type, *value, *traceback; _PyErr_StackItem *exc_info; - PyTryBlock *b = PyFrame_BlockPop(f); - if (b->b_type != EXCEPT_HANDLER) { - _PyErr_SetString(tstate, PyExc_SystemError, - "popped block is not an except handler"); - goto error; - } - assert(STACK_LEVEL() >= (b)->b_level + 3 && - STACK_LEVEL() <= (b)->b_level + 4); exc_info = tstate->exc_info; type = exc_info->exc_type; value = exc_info->exc_value; @@ -2685,15 +2646,48 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } - case TARGET(POP_BLOCK): { - PyFrame_BlockPop(f); - DISPATCH(); + case TARGET(POP_EXCEPT_AND_RERAISE): { + PyObject *lasti = PEEK(4); + if (PyLong_Check(lasti)) { + f->f_lasti = PyLong_AsLong(lasti); + assert(!_PyErr_Occurred(tstate)); + } + else { + _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); + goto error; + } + PyObject *type, *value, *traceback; + _PyErr_StackItem *exc_info; + type = POP(); + value = POP(); + traceback = POP(); + Py_DECREF(POP()); /* lasti */ + _PyErr_Restore(tstate, type, value, traceback); + exc_info = tstate->exc_info; + type = exc_info->exc_type; + value = exc_info->exc_value; + traceback = exc_info->exc_traceback; + exc_info->exc_type = POP(); + exc_info->exc_value = POP(); + exc_info->exc_traceback = POP(); + Py_XDECREF(type); + Py_XDECREF(value); + Py_XDECREF(traceback); + goto exception_unwind; } case TARGET(RERAISE): { - assert(f->f_iblock > 0); if (oparg) { - f->f_lasti = f->f_blockstack[f->f_iblock-1].b_handler; + PyObject *lasti = PEEK(oparg+3); + if (PyLong_Check(lasti)) { + f->f_lasti = PyLong_AsLong(lasti); + assert(!_PyErr_Occurred(tstate)); + } + else { + assert(PyLong_Check(lasti)); + _PyErr_SetString(tstate, PyExc_SystemError, "lasti is not an int"); + goto error; + } } PyObject *exc = POP(); PyObject *val = POP(); @@ -2705,19 +2699,17 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(END_ASYNC_FOR): { PyObject *exc = POP(); + PyObject *val = POP(); + PyObject *tb = POP(); assert(PyExceptionClass_Check(exc)); if (PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration)) { - PyTryBlock *b = PyFrame_BlockPop(f); - assert(b->b_type == EXCEPT_HANDLER); Py_DECREF(exc); - UNWIND_EXCEPT_HANDLER(b); + Py_DECREF(val); + Py_DECREF(tb); Py_DECREF(POP()); - JUMPBY(oparg); DISPATCH(); } else { - PyObject *val = POP(); - PyObject *tb = POP(); _PyErr_Restore(tstate, exc, val, tb); goto exception_unwind; } @@ -4022,12 +4014,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } - case TARGET(SETUP_FINALLY): { - PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg, - STACK_LEVEL()); - DISPATCH(); - } - case TARGET(BEFORE_ASYNC_WITH): { _Py_IDENTIFIER(__aenter__); _Py_IDENTIFIER(__aexit__); @@ -4053,17 +4039,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } - case TARGET(SETUP_ASYNC_WITH): { - PyObject *res = POP(); - /* Setup the finally block before pushing the result - of __aenter__ on the stack. */ - PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg, - STACK_LEVEL()); - PUSH(res); - DISPATCH(); - } - - case TARGET(SETUP_WITH): { + case TARGET(BEFORE_WITH): { _Py_IDENTIFIER(__enter__); _Py_IDENTIFIER(__exit__); PyObject *mgr = TOP(); @@ -4081,23 +4057,20 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) Py_DECREF(mgr); res = _PyObject_CallNoArg(enter); Py_DECREF(enter); - if (res == NULL) + if (res == NULL) { goto error; - /* Setup the finally block before pushing the result - of __enter__ on the stack. */ - PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg, - STACK_LEVEL()); - + } PUSH(res); DISPATCH(); } case TARGET(WITH_EXCEPT_START): { - /* At the top of the stack are 7 values: + /* At the top of the stack are 8 values: - (TOP, SECOND, THIRD) = exc_info() - - (FOURTH, FIFTH, SIXTH) = previous exception for EXCEPT_HANDLER - - SEVENTH: the context.__exit__ bound method - We call SEVENTH(TOP, SECOND, THIRD). + - (FOURTH, FIFTH, SIXTH) = previous exception + - SEVENTH: lasti of exception in exc_info() + - EIGHTH: the context.__exit__ bound method + We call EIGHTH(TOP, SECOND, THIRD). Then we push again the TOP exception and the __exit__ return value. */ @@ -4109,7 +4082,8 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) tb = THIRD(); assert(!Py_IsNone(exc)); assert(!PyLong_Check(exc)); - exit_func = PEEK(7); + assert(PyLong_Check(PEEK(7))); + exit_func = PEEK(8); PyObject *stack[4] = {NULL, exc, val, tb}; res = PyObject_Vectorcall(exit_func, stack + 1, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); @@ -4120,6 +4094,37 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } + case TARGET(PUSH_EXC_INFO): { + PyObject *type = TOP(); + PyObject *value = SECOND(); + PyObject *tb = THIRD(); + _PyErr_StackItem *exc_info = tstate->exc_info; + SET_THIRD(exc_info->exc_traceback); + SET_SECOND(exc_info->exc_value); + if (exc_info->exc_type != NULL) { + SET_TOP(exc_info->exc_type); + } + else { + Py_INCREF(Py_None); + SET_TOP(Py_None); + } + Py_INCREF(tb); + PUSH(tb); + exc_info->exc_traceback = tb; + + Py_INCREF(value); + PUSH(value); + assert(PyExceptionInstance_Check(value)); + exc_info->exc_value = value; + + Py_INCREF(type); + PUSH(type); + assert(PyExceptionClass_Check(type)); + exc_info->exc_type = type; + + DISPATCH(); + } + case TARGET(LOAD_METHOD): { /* Designed to work in tandem with CALL_METHOD. */ PyObject *name = GETITEM(names, oparg); @@ -4455,64 +4460,54 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } exception_unwind: f->f_state = FRAME_UNWINDING; - /* Unwind stacks if an exception occurred */ - while (f->f_iblock > 0) { - /* Pop the current block. */ - PyTryBlock *b = &f->f_blockstack[--f->f_iblock]; + /* We can't use f->f_lasti here, as RERAISE may have set it */ + int lasti = INSTR_OFFSET()-1; + PyTryBlock from_table = get_exception_handler(co, lasti); + if (from_table.b_handler < 0) { + // No handlers, so exit. + break; + } - if (b->b_type == EXCEPT_HANDLER) { - UNWIND_EXCEPT_HANDLER(b); - continue; - } - UNWIND_BLOCK(b); - if (b->b_type == SETUP_FINALLY) { - PyObject *exc, *val, *tb; - int handler = b->b_handler; - _PyErr_StackItem *exc_info = tstate->exc_info; - /* Beware, this invalidates all b->b_* fields */ - PyFrame_BlockSetup(f, EXCEPT_HANDLER, f->f_lasti, STACK_LEVEL()); - PUSH(exc_info->exc_traceback); - PUSH(exc_info->exc_value); - if (exc_info->exc_type != NULL) { - PUSH(exc_info->exc_type); - } - else { - Py_INCREF(Py_None); - PUSH(Py_None); - } - _PyErr_Fetch(tstate, &exc, &val, &tb); - /* Make the raw exception data - available to the handler, - so a program can emulate the - Python main loop. */ - _PyErr_NormalizeException(tstate, &exc, &val, &tb); - if (tb != NULL) - PyException_SetTraceback(val, tb); - else - PyException_SetTraceback(val, Py_None); - Py_INCREF(exc); - exc_info->exc_type = exc; - Py_INCREF(val); - exc_info->exc_value = val; - exc_info->exc_traceback = tb; - if (tb == NULL) - tb = Py_None; - Py_INCREF(tb); - PUSH(tb); - PUSH(val); - PUSH(exc); - JUMPTO(handler); - if (trace_info.cframe.use_tracing) { - trace_info.instr_prev = INT_MAX; - } - /* Resume normal execution */ - f->f_state = FRAME_EXECUTING; - goto main_loop; + assert(STACK_LEVEL() >= from_table.b_level); + while (STACK_LEVEL() > from_table.b_level) { + PyObject *v = POP(); + Py_XDECREF(v); + } + PyObject *exc, *val, *tb; + int handler = from_table.b_handler; + if (from_table.b_type) { + PyObject *lasti = PyLong_FromLong(f->f_lasti); + if (lasti == NULL) { + goto exception_unwind; } - } /* unwind stack */ - - /* End the loop as we still have an error */ - break; + PUSH(lasti); + } + _PyErr_Fetch(tstate, &exc, &val, &tb); + /* Make the raw exception data + available to the handler, + so a program can emulate the + Python main loop. */ + _PyErr_NormalizeException(tstate, &exc, &val, &tb); + if (tb != NULL) + PyException_SetTraceback(val, tb); + else + PyException_SetTraceback(val, Py_None); + if (tb == NULL) { + tb = Py_None; + Py_INCREF(Py_None); + } + PUSH(tb); + PUSH(val); + PUSH(exc); + JUMPTO(handler); + if (trace_info.cframe.use_tracing) { + trace_info.instr_prev = INT_MAX; + } + /* Resume normal execution */ + f->f_state = FRAME_EXECUTING; + f->f_lasti = handler; + NEXTOPARG(); + goto dispatch_opcode; } /* main loop */ assert(retval == NULL); @@ -4777,6 +4772,102 @@ positional_only_passed_as_keyword(PyThreadState *tstate, PyCodeObject *co, } +/* Exception table parsing code. + * See Objects/exception_table_notes.txt for details. + */ + +static inline unsigned char * +parse_varint(unsigned char *p, int *result) { + int val = p[0] & 63; + while (p[0] & 64) { + p++; + val = (val << 6) | (p[0] & 63); + } + *result = val; + return p+1; +} + +static inline unsigned char * +scan_back_to_entry_start(unsigned char *p) { + for (; (p[0]&128) == 0; p--); + return p; +} + +static inline unsigned char * +skip_to_next_entry(unsigned char *p) { + for (; (p[0]&128) == 0; p++); + return p; +} + +static inline unsigned char * +parse_range(unsigned char *p, int *start, int*end) +{ + p = parse_varint(p, start); + int size; + p = parse_varint(p, &size); + *end = *start + size; + return p; +} + +static inline void +parse_block(unsigned char *p, PyTryBlock *block) { + int depth_and_lasti; + p = parse_varint(p, &block->b_handler); + p = parse_varint(p, &depth_and_lasti); + block->b_level = depth_and_lasti >> 1; + block->b_type = depth_and_lasti & 1; +} + +#define MAX_LINEAR_SEARCH 40 + +static PyTryBlock +get_exception_handler(PyCodeObject *code, int index) +{ + PyTryBlock res; + unsigned char *start = (unsigned char *)PyBytes_AS_STRING(code->co_exceptiontable); + unsigned char *end = start + PyBytes_GET_SIZE(code->co_exceptiontable); + /* Invariants: + * start_table == end_table OR + * start_table points to a legal entry and end_table points + * beyond the table or to a legal entry that is after index. + */ + if (end - start > MAX_LINEAR_SEARCH) { + int offset; + parse_varint(start, &offset); + if (offset > index) { + res.b_handler = -1; + return res; + } + do { + unsigned char * mid = start + ((end-start)>>1); + mid = scan_back_to_entry_start(mid); + parse_varint(mid, &offset); + if (offset > index) { + end = mid; + } + else { + start = mid; + } + + } while (end - start > MAX_LINEAR_SEARCH); + } + unsigned char *scan = start; + while (scan < end) { + int start_offset, size; + scan = parse_varint(scan, &start_offset); + if (start_offset > index) { + break; + } + scan = parse_varint(scan, &size); + if (start_offset + size > index) { + parse_block(scan, &res); + return res; + } + scan = skip_to_next_entry(scan); + } + res.b_handler = -1; + return res; +} PyFrameObject * _PyEval_MakeFrameVector(PyThreadState *tstate, diff --git a/Python/compile.c b/Python/compile.c index 4fc8b38d978289..b174ef614c85ac 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -67,6 +67,14 @@ */ #define MAX_ALLOWED_STACK_USE (STACK_USE_GUIDELINE * 100) + +/* Pseudo-instructions used in the compiler, + * but turned into NOPs by the assembler. */ +#define SETUP_FINALLY 255 +#define SETUP_CLEANUP 254 +#define SETUP_WITH 253 +#define POP_BLOCK 252 + #define IS_TOP_LEVEL_AWAIT(c) ( \ (c->c_flags->cf_flags & PyCF_ALLOW_TOP_LEVEL_AWAIT) \ && (c->u->u_ste->ste_type == ModuleBlock)) @@ -74,10 +82,23 @@ struct instr { unsigned char i_opcode; int i_oparg; - struct basicblock_ *i_target; /* target block (if jump instruction) */ + /* target block (if jump instruction) */ + struct basicblock_ *i_target; + /* target block when exception is raised, should not be set by front-end. */ + struct basicblock_ *i_except; int i_lineno; }; +typedef struct excepthandler { + struct instr *setup; + int offset; +} ExceptHandler; + +typedef struct exceptstack { + struct basicblock_ *handlers[CO_MAXBLOCKS+1]; + int depth; +} ExceptStack; + #define LOG_BITS_PER_INT 5 #define MASK_LOW_LOG_BITS 31 @@ -101,7 +122,7 @@ is_relative_jump(struct instr *i) static inline int is_jump(struct instr *i) { - return is_bit_set_in_table(_PyOpcode_Jump, i->i_opcode); + return i->i_opcode >= SETUP_WITH || is_bit_set_in_table(_PyOpcode_Jump, i->i_opcode); } typedef struct basicblock_ { @@ -124,12 +145,18 @@ typedef struct basicblock_ { int b_predecessors; /* Basic block has no fall through (it ends with a return, raise or jump) */ unsigned b_nofallthrough : 1; + /* Basic block is an exception handler that preserves lasti */ + unsigned b_preserve_lasti : 1; + /* Used by compiler passes to mark whether they have visited a basic block. */ + unsigned b_visited : 1; /* Basic block exits scope (it ends with a return or raise) */ unsigned b_exit : 1; /* depth of stack upon entry of block, computed by stackdepth() */ int b_startdepth; /* instruction offset for block, computed by assemble_jump_offsets() */ int b_offset; + /* Exception stack at start of block, used by assembler to create the exception handling table */ + ExceptStack *b_exceptstack; } basicblock; /* fblockinfo tracks the current frame block. @@ -305,6 +332,8 @@ static int compiler_match(struct compiler *, stmt_ty); static int compiler_pattern_subpattern(struct compiler *, pattern_ty, pattern_context *); +static void clean_basic_block(basicblock *bb); + static PyCodeObject *assemble(struct compiler *, int addNone); static PyObject *__doc__, *__annotations__; @@ -1029,11 +1058,6 @@ stack_effect(int opcode, int oparg, int jump) case INPLACE_OR: return -1; - case SETUP_WITH: - /* 1 in the normal flow. - * Restore the stack position and push 6 values before jumping to - * the handler if an exception be raised. */ - return jump ? 6 : 1; case RETURN_VALUE: return -1; case IMPORT_STAR: @@ -1048,6 +1072,8 @@ stack_effect(int opcode, int oparg, int jump) return 0; case POP_EXCEPT: return -3; + case POP_EXCEPT_AND_RERAISE: + return -7; case STORE_NAME: return -1; @@ -1111,14 +1137,26 @@ stack_effect(int opcode, int oparg, int jump) case LOAD_GLOBAL: return 1; - /* Exception handling */ + /* Exception handling pseudo-instructions */ case SETUP_FINALLY: /* 0 in the normal flow. - * Restore the stack position and push 6 values before jumping to + * Restore the stack position and push 3 values before jumping to * the handler if an exception be raised. */ - return jump ? 6 : 0; + return jump ? 3 : 0; + case SETUP_CLEANUP: + /* As SETUP_FINALLY, but pushes lasti as well */ + return jump ? 4 : 0; + case SETUP_WITH: + /* 0 in the normal flow. + * Restore the stack position to the position before the result + * of __(a)enter__ and push 4 values before jumping to the handler + * if an exception be raised. */ + return jump ? -1 + 4 : 0; + case RERAISE: return -3; + case PUSH_EXC_INFO: + return 3; case WITH_EXCEPT_START: return 1; @@ -1165,13 +1203,9 @@ stack_effect(int opcode, int oparg, int jump) /* Iterators and generators */ case GET_AWAITABLE: return 0; - case SETUP_ASYNC_WITH: - /* 0 in the normal flow. - * Restore the stack position to the position before the result - * of __aenter__ and push 6 values before jumping to the handler - * if an exception be raised. */ - return jump ? -1 + 6 : 0; + case BEFORE_ASYNC_WITH: + case BEFORE_WITH: return 1; case GET_AITER: return 0; @@ -1180,7 +1214,7 @@ stack_effect(int opcode, int oparg, int jump) case GET_YIELD_FROM_ITER: return 0; case END_ASYNC_FOR: - return -7; + return -4; case FORMAT_VALUE: /* If there's a fmt_spec on the stack, we go from 2->1, else 1->1. */ @@ -1238,7 +1272,7 @@ compiler_addop_line(struct compiler *c, int opcode, int line) basicblock *b; struct instr *i; int off; - assert(!HAS_ARG(opcode)); + assert(!HAS_ARG(opcode) || IS_ARTIFICIAL(opcode)); off = compiler_next_instr(c->u->u_curblock); if (off < 0) return 0; @@ -1815,6 +1849,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, if (preserve_tos) { ADDOP(c, ROT_FOUR); } + ADDOP(c, POP_BLOCK); ADDOP(c, POP_EXCEPT); return 1; @@ -1845,6 +1880,7 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, if (preserve_tos) { ADDOP(c, ROT_FOUR); } + ADDOP(c, POP_BLOCK); ADDOP(c, POP_EXCEPT); if (info->fb_datum) { ADDOP_LOAD_CONST(c, Py_None); @@ -3072,14 +3108,15 @@ compiler_continue(struct compiler *c) static int compiler_try_finally(struct compiler *c, stmt_ty s) { - basicblock *body, *end, *exit; + basicblock *body, *end, *exit, *cleanup; body = compiler_new_block(c); end = compiler_new_block(c); exit = compiler_new_block(c); - if (body == NULL || end == NULL || exit == NULL) + cleanup = compiler_new_block(c); + if (body == NULL || end == NULL || exit == NULL || cleanup == NULL) { return 0; - + } /* `try` block */ ADDOP_JUMP(c, SETUP_FINALLY, end); compiler_use_next_block(c, body); @@ -3098,11 +3135,17 @@ compiler_try_finally(struct compiler *c, stmt_ty s) ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, exit); /* `finally` block */ compiler_use_next_block(c, end); + + c->u->u_lineno = -1; + ADDOP_JUMP(c, SETUP_CLEANUP, cleanup); + ADDOP(c, PUSH_EXC_INFO); if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL)) return 0; VISIT_SEQ(c, stmt, s->v.Try.finalbody); compiler_pop_fblock(c, FINALLY_END, end); ADDOP_I(c, RERAISE, 0); + compiler_use_next_block(c, cleanup); + ADDOP(c, POP_EXCEPT_AND_RERAISE); compiler_use_next_block(c, exit); return 1; } @@ -3140,14 +3183,15 @@ compiler_try_finally(struct compiler *c, stmt_ty s) static int compiler_try_except(struct compiler *c, stmt_ty s) { - basicblock *body, *orelse, *except, *end; + basicblock *body, *orelse, *except, *end, *cleanup; Py_ssize_t i, n; body = compiler_new_block(c); except = compiler_new_block(c); orelse = compiler_new_block(c); end = compiler_new_block(c); - if (body == NULL || except == NULL || orelse == NULL || end == NULL) + cleanup = compiler_new_block(c); + if (body == NULL || except == NULL || orelse == NULL || end == NULL || cleanup == NULL) return 0; ADDOP_JUMP(c, SETUP_FINALLY, except); compiler_use_next_block(c, body); @@ -3159,15 +3203,20 @@ compiler_try_except(struct compiler *c, stmt_ty s) ADDOP_JUMP_NOLINE(c, JUMP_FORWARD, orelse); n = asdl_seq_LEN(s->v.Try.handlers); compiler_use_next_block(c, except); + + c->u->u_lineno = -1; + ADDOP_JUMP(c, SETUP_CLEANUP, cleanup); + ADDOP(c, PUSH_EXC_INFO); /* Runtime will push a block here, so we need to account for that */ if (!compiler_push_fblock(c, EXCEPTION_HANDLER, NULL, NULL, NULL)) return 0; for (i = 0; i < n; i++) { excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET( s->v.Try.handlers, i); - if (!handler->v.ExceptHandler.type && i < n-1) - return compiler_error(c, "default 'except:' must be last"); SET_LOC(c, handler); + if (!handler->v.ExceptHandler.type && i < n-1) { + return compiler_error(c, "default 'except:' must be last"); + } except = compiler_new_block(c); if (except == NULL) return 0; @@ -3202,7 +3251,7 @@ compiler_try_except(struct compiler *c, stmt_ty s) */ /* second try: */ - ADDOP_JUMP(c, SETUP_FINALLY, cleanup_end); + ADDOP_JUMP(c, SETUP_CLEANUP, cleanup_end); compiler_use_next_block(c, cleanup_body); if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, handler->v.ExceptHandler.name)) return 0; @@ -3211,6 +3260,7 @@ compiler_try_except(struct compiler *c, stmt_ty s) VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body); compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body); ADDOP(c, POP_BLOCK); + ADDOP(c, POP_BLOCK); ADDOP(c, POP_EXCEPT); /* name = None; del name; # Mark as artificial */ c->u->u_lineno = -1; @@ -3224,6 +3274,7 @@ compiler_try_except(struct compiler *c, stmt_ty s) /* name = None; del name; # Mark as artificial */ c->u->u_lineno = -1; + ADDOP_LOAD_CONST(c, Py_None); compiler_nameop(c, handler->v.ExceptHandler.name, Store); compiler_nameop(c, handler->v.ExceptHandler.name, Del); @@ -3246,15 +3297,18 @@ compiler_try_except(struct compiler *c, stmt_ty s) compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body); /* name = None; del name; # Mark as artificial */ c->u->u_lineno = -1; + ADDOP(c, POP_BLOCK); ADDOP(c, POP_EXCEPT); ADDOP_JUMP(c, JUMP_FORWARD, end); } compiler_use_next_block(c, except); } - compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL); /* Mark as artificial */ c->u->u_lineno = -1; + compiler_pop_fblock(c, EXCEPTION_HANDLER, NULL); ADDOP_I(c, RERAISE, 0); + compiler_use_next_block(c, cleanup); + ADDOP(c, POP_EXCEPT_AND_RERAISE); compiler_use_next_block(c, orelse); VISIT_SEQ(c, stmt, s->v.Try.orelse); compiler_use_next_block(c, end); @@ -4764,6 +4818,8 @@ compiler_async_comprehension_generator(struct compiler *c, compiler_pop_fblock(c, ASYNC_COMPREHENSION_GENERATOR, start); compiler_use_next_block(c, except); + //c->u->u_lineno = -1; + ADDOP(c, END_ASYNC_FOR); return 1; @@ -4944,20 +5000,24 @@ compiler_visit_keyword(struct compiler *c, keyword_ty k) */ static int -compiler_with_except_finish(struct compiler *c) { +compiler_with_except_finish(struct compiler *c, basicblock * cleanup) { basicblock *exit; exit = compiler_new_block(c); if (exit == NULL) return 0; ADDOP_JUMP(c, POP_JUMP_IF_TRUE, exit); NEXT_BLOCK(c); - ADDOP_I(c, RERAISE, 1); + ADDOP_I(c, RERAISE, 4); + compiler_use_next_block(c, cleanup); + ADDOP(c, POP_EXCEPT_AND_RERAISE); compiler_use_next_block(c, exit); ADDOP(c, POP_TOP); ADDOP(c, POP_TOP); ADDOP(c, POP_TOP); + ADDOP(c, POP_BLOCK); ADDOP(c, POP_EXCEPT); ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); return 1; } @@ -4988,7 +5048,7 @@ compiler_with_except_finish(struct compiler *c) { static int compiler_async_with(struct compiler *c, stmt_ty s, int pos) { - basicblock *block, *final, *exit; + basicblock *block, *final, *exit, *cleanup; withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos); assert(s->kind == AsyncWith_kind); @@ -5001,7 +5061,8 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) block = compiler_new_block(c); final = compiler_new_block(c); exit = compiler_new_block(c); - if (!block || !final || !exit) + cleanup = compiler_new_block(c); + if (!block || !final || !exit || !cleanup) return 0; /* Evaluate EXPR */ @@ -5012,9 +5073,9 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) ADDOP_LOAD_CONST(c, Py_None); ADDOP(c, YIELD_FROM); - ADDOP_JUMP(c, SETUP_ASYNC_WITH, final); + ADDOP_JUMP(c, SETUP_WITH, final); - /* SETUP_ASYNC_WITH pushes a finally block. */ + /* SETUP_WITH pushes a finally block. */ compiler_use_next_block(c, block); if (!compiler_push_fblock(c, ASYNC_WITH, block, final, s)) { return 0; @@ -5055,13 +5116,17 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) /* For exceptional outcome: */ compiler_use_next_block(c, final); + c->u->u_lineno = -1; + + ADDOP_JUMP(c, SETUP_CLEANUP, cleanup); + ADDOP(c, PUSH_EXC_INFO); ADDOP(c, WITH_EXCEPT_START); ADDOP(c, GET_AWAITABLE); ADDOP_LOAD_CONST(c, Py_None); ADDOP(c, YIELD_FROM); - compiler_with_except_finish(c); + compiler_with_except_finish(c, cleanup); -compiler_use_next_block(c, exit); + compiler_use_next_block(c, exit); return 1; } @@ -5090,7 +5155,7 @@ compiler_use_next_block(c, exit); static int compiler_with(struct compiler *c, stmt_ty s, int pos) { - basicblock *block, *final, *exit; + basicblock *block, *final, *exit, *cleanup; withitem_ty item = asdl_seq_GET(s->v.With.items, pos); assert(s->kind == With_kind); @@ -5098,12 +5163,14 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) block = compiler_new_block(c); final = compiler_new_block(c); exit = compiler_new_block(c); - if (!block || !final || !exit) + cleanup = compiler_new_block(c); + if (!block || !final || !exit || !cleanup) return 0; /* Evaluate EXPR */ VISIT(c, expr, item->context_expr); /* Will push bound __exit__ */ + ADDOP(c, BEFORE_WITH); ADDOP_JUMP(c, SETUP_WITH, final); /* SETUP_WITH pushes a finally block. */ @@ -5146,8 +5213,12 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) /* For exceptional outcome: */ compiler_use_next_block(c, final); + c->u->u_lineno = -1; + + ADDOP_JUMP(c, SETUP_CLEANUP, cleanup); + ADDOP(c, PUSH_EXC_INFO); ADDOP(c, WITH_EXCEPT_START); - compiler_with_except_finish(c); + compiler_with_except_finish(c, cleanup); compiler_use_next_block(c, exit); return 1; @@ -6383,11 +6454,13 @@ compiler_match(struct compiler *c, stmt_ty s) */ struct assembler { - PyObject *a_bytecode; /* string containing bytecode */ + PyObject *a_bytecode; /* bytes containing bytecode */ int a_offset; /* offset into bytecode */ int a_nblocks; /* number of reachable blocks */ - PyObject *a_lnotab; /* string containing lnotab */ + PyObject *a_lnotab; /* bytes containing lnotab */ int a_lnotab_off; /* offset into lnotab */ + PyObject *a_except_table; /* bytes containing exception table */ + int a_except_table_off; /* offset into exception table */ int a_prevlineno; /* lineno of last emitted line in line table */ int a_lineno; /* lineno of last emitted instruction */ int a_lineno_start; /* bytecode start offset of current lineno */ @@ -6466,7 +6539,8 @@ stackdepth(struct compiler *c) instr->i_opcode == JUMP_FORWARD || instr->i_opcode == RETURN_VALUE || instr->i_opcode == RAISE_VARARGS || - instr->i_opcode == RERAISE) + instr->i_opcode == RERAISE || + instr->i_opcode == POP_EXCEPT_AND_RERAISE) { /* remaining code is dead */ next = NULL; @@ -6488,6 +6562,7 @@ assemble_init(struct assembler *a, int nblocks, int firstlineno) memset(a, 0, sizeof(struct assembler)); a->a_prevlineno = a->a_lineno = firstlineno; a->a_lnotab = NULL; + a->a_except_table = NULL; a->a_bytecode = PyBytes_FromStringAndSize(NULL, DEFAULT_CODE_SIZE); if (a->a_bytecode == NULL) { goto error; @@ -6496,6 +6571,10 @@ assemble_init(struct assembler *a, int nblocks, int firstlineno) if (a->a_lnotab == NULL) { goto error; } + a->a_except_table = PyBytes_FromStringAndSize(NULL, DEFAULT_LNOTAB_SIZE); + if (a->a_except_table == NULL) { + goto error; + } if ((size_t)nblocks > SIZE_MAX / sizeof(basicblock *)) { PyErr_NoMemory(); goto error; @@ -6504,6 +6583,7 @@ assemble_init(struct assembler *a, int nblocks, int firstlineno) error: Py_XDECREF(a->a_bytecode); Py_XDECREF(a->a_lnotab); + Py_XDECREF(a->a_except_table); return 0; } @@ -6512,6 +6592,7 @@ assemble_free(struct assembler *a) { Py_XDECREF(a->a_bytecode); Py_XDECREF(a->a_lnotab); + Py_XDECREF(a->a_except_table); } static int @@ -6541,6 +6622,253 @@ assemble_emit_linetable_pair(struct assembler *a, int bdelta, int ldelta) return 1; } +static int +is_block_push(struct instr *instr) +{ + int opcode = instr->i_opcode; + return opcode == SETUP_FINALLY || opcode == SETUP_WITH || opcode == SETUP_CLEANUP; +} + +static basicblock * +push_except_block(ExceptStack *stack, struct instr *setup) { + assert(is_block_push(setup)); + int opcode = setup->i_opcode; + basicblock * target = setup->i_target; + if (opcode == SETUP_WITH || opcode == SETUP_CLEANUP) { + target->b_preserve_lasti = 1; + } + stack->handlers[++stack->depth] = target; + return target; +} + +static basicblock * +pop_except_block(ExceptStack *stack) { + assert(stack->depth > 0); + return stack->handlers[--stack->depth]; +} + +static basicblock * +except_stack_top(ExceptStack *stack) { + return stack->handlers[stack->depth]; +} + +static ExceptStack * +make_except_stack(void) { + ExceptStack *new = PyMem_Malloc(sizeof(ExceptStack)); + if (new == NULL) { + PyErr_NoMemory(); + return NULL; + } + new->depth = 0; + new->handlers[0] = NULL; + return new; +} + +static ExceptStack * +copy_except_stack(ExceptStack *stack) { + ExceptStack *copy = PyMem_Malloc(sizeof(ExceptStack)); + if (copy == NULL) { + PyErr_NoMemory(); + return NULL; + } + memcpy(copy, stack, sizeof(ExceptStack)); + return copy; +} + +static int +label_exception_targets(basicblock *entry) { + int nblocks = 0; + for (basicblock *b = entry; b != NULL; b = b->b_next) { + b->b_visited = 0; + nblocks++; + } + basicblock **todo_stack = PyMem_Malloc(sizeof(basicblock *)*nblocks); + if (todo_stack == NULL) { + PyErr_NoMemory(); + return -1; + } + ExceptStack *except_stack = make_except_stack(); + if (except_stack == NULL) { + PyMem_Free(todo_stack); + PyErr_NoMemory(); + return -1; + } + except_stack->depth = 0; + todo_stack[0] = entry; + entry->b_visited = 1; + entry->b_exceptstack = except_stack; + basicblock **todo = &todo_stack[1]; + basicblock *handler = NULL; + while (todo > todo_stack) { + todo--; + basicblock *b = todo[0]; + assert(b->b_visited == 1); + except_stack = b->b_exceptstack; + assert(except_stack != NULL); + b->b_exceptstack = NULL; + handler = except_stack_top(except_stack); + for (int i = 0; i < b->b_iused; i++) { + struct instr *instr = &b->b_instr[i]; + if (is_block_push(instr)) { + if (!instr->i_target->b_visited) { + ExceptStack *copy = copy_except_stack(except_stack); + if (copy == NULL) { + goto error; + } + instr->i_target->b_exceptstack = copy; + todo[0] = instr->i_target; + instr->i_target->b_visited = 1; + todo++; + } + handler = push_except_block(except_stack, instr); + } + else if (instr->i_opcode == POP_BLOCK) { + handler = pop_except_block(except_stack); + } + else if (is_jump(instr)) { + instr->i_except = handler; + assert(i == b->b_iused -1); + if (!instr->i_target->b_visited) { + if (b->b_nofallthrough == 0) { + ExceptStack *copy = copy_except_stack(except_stack); + if (copy == NULL) { + goto error; + } + instr->i_target->b_exceptstack = copy; + } + else { + instr->i_target->b_exceptstack = except_stack; + except_stack = NULL; + } + todo[0] = instr->i_target; + instr->i_target->b_visited = 1; + todo++; + } + } + else { + instr->i_except = handler; + } + } + if (b->b_nofallthrough == 0 && !b->b_next->b_visited) { + assert(except_stack != NULL); + b->b_next->b_exceptstack = except_stack; + todo[0] = b->b_next; + b->b_next->b_visited = 1; + todo++; + } + else if (except_stack != NULL) { + PyMem_Free(except_stack); + } + } +#ifdef Py_DEBUG + for (basicblock *b = entry; b != NULL; b = b->b_next) { + assert(b->b_exceptstack == NULL); + } +#endif + PyMem_Free(todo_stack); + return 0; +error: + PyMem_Free(todo_stack); + PyMem_Free(except_stack); + return -1; +} + + +static void +convert_exception_handlers_to_nops(basicblock *entry) { + for (basicblock *b = entry; b != NULL; b = b->b_next) { + for (int i = 0; i < b->b_iused; i++) { + struct instr *instr = &b->b_instr[i]; + if (is_block_push(instr) || instr->i_opcode == POP_BLOCK) { + instr->i_opcode = NOP; + } + } + } +} + +static inline void +write_except_byte(struct assembler *a, int byte) { + unsigned char *p = (unsigned char *) PyBytes_AS_STRING(a->a_except_table); + p[a->a_except_table_off++] = byte; +} + +#define CONTINUATION_BIT 64 + +static void +assemble_emit_exception_table_item(struct assembler *a, int value, int msb) +{ + assert ((msb | 128) == 128); + assert(value >= 0 && value < (1 << 30)); + if (value >= 1 << 24) { + write_except_byte(a, (value >> 24) | CONTINUATION_BIT | msb); + msb = 0; + } + if (value >= 1 << 18) { + write_except_byte(a, ((value >> 18)&0x3f) | CONTINUATION_BIT | msb); + msb = 0; + } + if (value >= 1 << 12) { + write_except_byte(a, ((value >> 12)&0x3f) | CONTINUATION_BIT | msb); + msb = 0; + } + if (value >= 1 << 6) { + write_except_byte(a, ((value >> 6)&0x3f) | CONTINUATION_BIT | msb); + msb = 0; + } + write_except_byte(a, (value&0x3f) | msb); +} + +/* See Objects/exception_table_notes.txt for details of layout */ +#define MAX_SIZE_OF_ENTRY 20 + +static int +assemble_emit_exception_table_entry(struct assembler *a, int start, int end, basicblock *handler) +{ + Py_ssize_t len = PyBytes_GET_SIZE(a->a_except_table); + if (a->a_except_table_off + MAX_SIZE_OF_ENTRY >= len) { + if (_PyBytes_Resize(&a->a_except_table, len * 2) < 0) + return 0; + } + int size = end-start; + assert(end > start); + int target = handler->b_offset; + int depth = handler->b_preserve_lasti ? handler->b_startdepth-4 : handler->b_startdepth-3; + assert(depth >= 0); + int depth_lasti = (depth<<1) | handler->b_preserve_lasti; + assemble_emit_exception_table_item(a, start, (1<<7)); + assemble_emit_exception_table_item(a, size, 0); + assemble_emit_exception_table_item(a, target, 0); + assemble_emit_exception_table_item(a, depth_lasti, 0); + return 1; +} + +static int +assemble_exception_table(struct assembler *a) +{ + basicblock *b; + int ioffset = 0; + basicblock *handler = NULL; + int start = -1; + for (b = a->a_entry; b != NULL; b = b->b_next) { + ioffset = b->b_offset; + for (int i = 0; i < b->b_iused; i++) { + struct instr *instr = &b->b_instr[i]; + if (instr->i_except != handler) { + if (handler != NULL) { + RETURN_IF_FALSE(assemble_emit_exception_table_entry(a, start, ioffset, handler)); + } + start = ioffset; + handler = instr->i_except; + } + ioffset += instrsize(instr->i_oparg); + } + } + if (handler != NULL) { + RETURN_IF_FALSE(assemble_emit_exception_table_entry(a, start, ioffset, handler)); + } + return 1; +} + /* Appends a range to the end of the line number table. See * Objects/lnotab_notes.txt for the description of the line number table. */ @@ -6793,7 +7121,7 @@ merge_const_one(struct compiler *c, PyObject **obj) } static PyCodeObject * -makecode(struct compiler *c, struct assembler *a, PyObject *consts) +makecode(struct compiler *c, struct assembler *a, PyObject *consts, int maxdepth) { PyCodeObject *co = NULL; PyObject *names = NULL; @@ -6804,7 +7132,7 @@ makecode(struct compiler *c, struct assembler *a, PyObject *consts) Py_ssize_t nlocals; int nlocals_int; int flags; - int posorkeywordargcount, posonlyargcount, kwonlyargcount, maxdepth; + int posorkeywordargcount, posonlyargcount, kwonlyargcount; names = dict_keys_inorder(c->u->u_names, 0); varnames = dict_keys_inorder(c->u->u_varnames, 0); @@ -6846,23 +7174,11 @@ makecode(struct compiler *c, struct assembler *a, PyObject *consts) posonlyargcount = Py_SAFE_DOWNCAST(c->u->u_posonlyargcount, Py_ssize_t, int); posorkeywordargcount = Py_SAFE_DOWNCAST(c->u->u_argcount, Py_ssize_t, int); kwonlyargcount = Py_SAFE_DOWNCAST(c->u->u_kwonlyargcount, Py_ssize_t, int); - maxdepth = stackdepth(c); - if (maxdepth < 0) { - 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, varnames, freevars, cellvars, c->c_filename, - c->u->u_name, c->u->u_firstlineno, a->a_lnotab); + c->u->u_name, c->u->u_firstlineno, a->a_lnotab, a->a_except_table); Py_DECREF(consts); error: Py_XDECREF(names); @@ -7015,6 +7331,25 @@ assemble(struct compiler *c, int addNone) goto error; } + int maxdepth = stackdepth(c); + if (maxdepth < 0) { + goto error; + } + if (maxdepth > MAX_ALLOWED_STACK_USE) { + PyErr_Format(PyExc_SystemError, + "excessive stack use: stack is %d deep", + maxdepth); + goto error; + } + + if (label_exception_targets(entryblock)) { + goto error; + } + convert_exception_handlers_to_nops(entryblock); + for (basicblock *b = a.a_entry; b != NULL; b = b->b_next) { + clean_basic_block(b); + } + /* Can't modify the bytecode after computing jump offsets. */ assemble_jump_offsets(&a, c); @@ -7024,6 +7359,10 @@ assemble(struct compiler *c, int addNone) if (!assemble_emit(&a, &b->b_instr[j])) goto error; } + + if (!assemble_exception_table(&a)) { + return 0; + } if (!assemble_line_range(&a)) { return 0; } @@ -7031,6 +7370,11 @@ assemble(struct compiler *c, int addNone) if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0) { goto error; } + + if (_PyBytes_Resize(&a.a_except_table, a.a_except_table_off) < 0) { + goto error; + } + if (!merge_const_one(c, &a.a_lnotab)) { goto error; } @@ -7041,7 +7385,7 @@ assemble(struct compiler *c, int addNone) goto error; } - co = makecode(c, &a, consts); + co = makecode(c, &a, consts, maxdepth); error: Py_XDECREF(consts); assemble_free(&a); @@ -7417,9 +7761,10 @@ optimize_basic_block(struct compiler *c, basicblock *bb, PyObject *consts) static void -clean_basic_block(basicblock *bb, int prev_lineno) { +clean_basic_block(basicblock *bb) { /* Remove NOPs when legal to do so. */ int dest = 0; + int prev_lineno = -1; for (int src = 0; src < bb->b_iused; src++) { int lineno = bb->b_instr[src].i_lineno; if (bb->b_instr[src].i_opcode == NOP) { @@ -7451,7 +7796,6 @@ clean_basic_block(basicblock *bb, int prev_lineno) { } } } - } if (dest != src) { bb->b_instr[dest] = bb->b_instr[src]; @@ -7472,6 +7816,7 @@ normalize_basic_block(basicblock *bb) { case RETURN_VALUE: case RAISE_VARARGS: case RERAISE: + case POP_EXCEPT_AND_RERAISE: bb->b_exit = 1; bb->b_nofallthrough = 1; break; @@ -7588,9 +7933,9 @@ propogate_line_numbers(struct assembler *a) { if (is_jump(&b->b_instr[b->b_iused-1])) { switch (b->b_instr[b->b_iused-1].i_opcode) { /* Note: Only actual jumps, not exception handlers */ - case SETUP_ASYNC_WITH: case SETUP_WITH: case SETUP_FINALLY: + case SETUP_CLEANUP: continue; } basicblock *target = b->b_instr[b->b_iused-1].i_target; @@ -7619,7 +7964,7 @@ optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts) if (optimize_basic_block(c, b, consts)) { return -1; } - clean_basic_block(b, -1); + clean_basic_block(b); assert(b->b_predecessors == 0); } if (mark_reachable(a)) { @@ -7632,16 +7977,10 @@ optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts) b->b_nofallthrough = 0; } } - basicblock *pred = NULL; + eliminate_empty_basic_blocks(a->a_entry); for (basicblock *b = a->a_entry; b != NULL; b = b->b_next) { - int prev_lineno = -1; - if (pred && pred->b_iused) { - prev_lineno = pred->b_instr[pred->b_iused-1].i_lineno; - } - clean_basic_block(b, prev_lineno); - pred = b->b_nofallthrough ? NULL : b; + clean_basic_block(b); } - eliminate_empty_basic_blocks(a->a_entry); /* Delete jump instructions made redundant by previous step. If a non-empty block ends with a jump instruction, check if the next non-empty block reached through normal flow control is the target of that jump. If it @@ -7657,7 +7996,6 @@ optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts) assert(b->b_next->b_iused); b->b_nofallthrough = 0; b_last_instr->i_opcode = NOP; - clean_basic_block(b, -1); maybe_empty_blocks = 1; } } @@ -7691,12 +8029,13 @@ ensure_exits_have_lineno(struct compiler *c) /* Copy all exit blocks without line number that are targets of a jump. */ for (basicblock *b = c->u->u_blocks; b != NULL; b = b->b_list) { + entry = b; if (b->b_iused > 0 && is_jump(&b->b_instr[b->b_iused-1])) { switch (b->b_instr[b->b_iused-1].i_opcode) { /* Note: Only actual jumps, not exception handlers */ - case SETUP_ASYNC_WITH: case SETUP_WITH: case SETUP_FINALLY: + case SETUP_CLEANUP: continue; } basicblock *target = b->b_instr[b->b_iused-1].i_target; @@ -7709,7 +8048,6 @@ ensure_exits_have_lineno(struct compiler *c) b->b_instr[b->b_iused-1].i_target = new_target; } } - entry = b; } assert(entry != NULL); if (is_exit_without_lineno(entry)) { diff --git a/Python/frozen_hello.h b/Python/frozen_hello.h index 5448c80daa4292..76b1823af20084 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,4,0,0,0,4,0,12,1, + 115,4,0,0,0,4,0,12,1,243,0,0,0,0, }; diff --git a/Python/importlib.h b/Python/importlib.h index 8156973bdeaaf7..7ceb7e7d67bc5c 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -54,230 +54,241 @@ 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,4,124,0, - 106,0,87,0,83,0,4,0,116,1,121,18,1,0,1,0, + 0,0,0,67,0,0,0,115,40,0,0,0,9,0,124,0, + 106,0,83,0,35,0,4,0,116,1,121,19,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, - 69,114,114,111,114,218,4,116,121,112,101,41,1,218,3,111, - 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,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, + 37,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,69,114,114,111,114,218,4,116,121,112,101,41,1,218, + 3,111,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,14,0,0, + 0,2,1,6,1,2,128,12,1,14,1,2,128,2,255,115, + 12,0,0,0,129,2,4,0,132,12,18,7,147,1,18,7, + 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,243,0,0,0,0,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, - 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, + 11,95,110,101,119,95,109,111,100,117,108,101,48,0,0,0, + 115,2,0,0,0,12,1,114,18,0,0,0,114,22,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,23,0,0,0,61,0,0,0,115,4,0,0, + 0,8,0,4,1,114,18,0,0,0,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,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,21,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,21,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,114,18,0,0,0,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,27,0,0,0,218, + 9,103,101,116,95,105,100,101,110,116,114,30,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,34, + 0,0,0,90,2,109,101,218,3,116,105,100,90,4,115,101, + 101,110,114,28,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,114,18,0,0,0,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,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, + 0,0,0,0,0,2,0,0,0,9,0,0,0,67,0,0, + 0,115,206,0,0,0,116,0,160,1,161,0,125,1,124,0, + 116,2,124,1,60,0,9,0,9,0,124,0,106,3,53,0, 1,0,124,0,106,4,100,2,107,2,115,24,124,0,106,5, - 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, + 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,9,0,100,4,4,0, + 4,0,131,3,1,0,9,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, + 100,4,4,0,4,0,131,3,1,0,110,11,35,0,49,0, + 115,80,119,4,37,0,1,0,1,0,1,0,89,0,1,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,35,0,116,2,124,1,61,0, + 119,0,37,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,26,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,27,0,0,0,114,36, + 0,0,0,114,38,0,0,0,114,28,0,0,0,114,31,0, + 0,0,114,30,0,0,0,114,42,0,0,0,114,23,0,0, + 0,114,29,0,0,0,218,7,97,99,113,117,105,114,101,114, + 32,0,0,0,218,7,114,101,108,101,97,115,101,169,2,114, + 34,0,0,0,114,41,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,44,0,0,0,100,0,0, + 0,115,46,0,0,0,8,6,8,1,2,1,2,1,8,1, + 20,1,6,1,14,1,2,1,10,252,2,4,10,9,8,248, + 12,1,12,1,14,1,12,248,22,128,10,10,10,1,2,244, + 2,128,10,14,115,56,0,0,0,137,4,65,33,0,141,22, + 65,11,3,163,5,65,33,0,174,23,65,11,3,193,5,6, + 65,33,0,193,11,4,65,15,11,193,15,1,65,33,0,193, + 16,3,65,15,11,193,19,14,65,33,0,193,33,5,65,38, + 7,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,9,0,0,0,67,0,0,0,115, + 148,0,0,0,116,0,160,1,161,0,125,1,124,0,106,2, + 53,0,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, + 100,0,4,0,4,0,131,3,1,0,100,0,83,0,35,0, + 49,0,115,66,119,4,37,0,1,0,1,0,1,0,89,0, + 1,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,26,0,0, + 0,114,43,0,0,0,41,9,114,27,0,0,0,114,36,0, + 0,0,114,28,0,0,0,114,30,0,0,0,218,12,82,117, + 110,116,105,109,101,69,114,114,111,114,114,31,0,0,0,114, + 32,0,0,0,114,29,0,0,0,114,45,0,0,0,114,46, 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, + 0,0,114,45,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,14,247,26,128,115,15,0,0,0,135, + 47,61,3,189,4,65,1,11,193,2,3,65,1,11,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,21,0,0,0,218,2, + 105,100,169,1,114,34,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,114,18,0, + 0,0,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,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, + 35,0,0,0,114,42,0,0,0,114,44,0,0,0,114,45, + 0,0,0,114,54,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,24,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,18,0,0,0,114,24,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,25,0,0,0,41, + 2,114,21,0,0,0,114,31,0,0,0,114,33,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 35,0,0,0,146,0,0,0,243,4,0,0,0,6,1,10, + 1,114,18,0,0,0,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,43,0,0,0,84,41,1,114,31,0,0, + 0,114,53,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,44,0,0,0,150,0,0,0,115,4, + 0,0,0,14,1,4,1,114,18,0,0,0,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,26,0,0,0, + 114,47,0,0,0,114,43,0,0,0,41,2,114,31,0,0, + 0,114,48,0,0,0,114,53,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,45,0,0,0,154, + 0,0,0,115,6,0,0,0,10,1,8,1,18,1,114,18, + 0,0,0,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,49,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,50,0,0, + 0,114,53,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,54,0,0,0,159,0,0,0,114,55, + 0,0,0,114,18,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,35,0,0,0,114, + 44,0,0,0,114,45,0,0,0,114,54,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,56,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,18,0,0, + 0,114,56,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, @@ -287,1047 +298,1107 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 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, - 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, + 107,114,33,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,35,0,0,0,165,0,0,0,114,57, + 0,0,0,114,18,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,59,0,0,0,114,60,0,0,0, + 114,44,0,0,0,114,53,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,114,18,0,0,0,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,60,0,0,0,114,45,0,0, + 0,41,3,114,34,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,114,18,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,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,35, + 0,0,0,114,62,0,0,0,114,64,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,58,0,0,0,163,0,0,0,115,8,0,0,0,8, + 0,8,2,8,4,12,4,114,18,0,0,0,114,58,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,138,0,0,0,116, + 0,160,1,161,0,1,0,9,0,9,0,116,2,124,0,25, + 0,131,0,125,1,110,12,35,0,4,0,116,3,121,68,1, + 0,1,0,1,0,100,1,125,1,89,0,110,1,37,0,124, + 1,100,1,117,0,114,55,116,4,100,1,117,0,114,37,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,116,0,160, + 9,161,0,1,0,124,1,83,0,35,0,116,0,160,9,161, + 0,1,0,119,0,37,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,56,0,0,0,116,0,160,1,161,0,1,0,9, + 0,116,2,160,3,124,1,161,1,124,0,117,0,114,15,116, + 2,124,1,61,0,116,0,160,4,161,0,1,0,100,0,83, + 0,35,0,116,0,160,4,161,0,1,0,119,0,37,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,39,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,21,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, + 16,0,0,0,8,1,2,1,14,4,6,1,12,2,2,128, + 10,0,2,128,115,8,0,0,0,133,10,21,0,149,6,27, + 7,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,65,0,0,0,114,66,0,0,0,114,67,0,0,0, + 218,8,75,101,121,69,114,114,111,114,114,27,0,0,0,114, + 56,0,0,0,114,24,0,0,0,218,8,95,119,101,97,107, + 114,101,102,114,69,0,0,0,114,68,0,0,0,41,3,114, + 21,0,0,0,114,28,0,0,0,114,70,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,61,0, + 0,0,179,0,0,0,115,40,0,0,0,8,6,2,1,2, + 1,12,1,2,128,12,1,8,1,2,128,8,2,8,1,10, + 1,8,2,12,2,16,11,8,2,4,2,2,128,10,254,2, + 128,2,234,115,26,0,0,0,134,5,12,0,139,1,61,0, + 140,9,23,7,149,34,61,0,189,6,65,3,7,193,4,1, + 23,7,114,61,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,56,0,0,0,116,0,124,0,131,1,125,1,9,0,124, + 1,160,1,161,0,1,0,110,11,35,0,4,0,116,2,121, + 27,1,0,1,0,1,0,89,0,100,1,83,0,37,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,61,0,0,0,114,44,0,0,0,114,23,0,0,0, + 114,45,0,0,0,41,2,114,21,0,0,0,114,28,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,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, + 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,18,0,0,0,8,6, + 2,1,10,1,2,128,12,1,6,3,2,128,12,2,2,251, + 115,12,0,0,0,133,4,10,0,138,7,20,7,155,1,20, + 7,114,73,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,63,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,18,0,0,0,114,75,0,0,0,114,43,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,19,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,51,0,0, + 0,218,6,115,116,100,101,114,114,41,3,218,7,109,101,115, + 115,97,103,101,114,76,0,0,0,114,63,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,18,0,0,0,114,84,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, + 20,0,0,0,41,4,114,19,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,51, + 0,0,0,169,2,114,34,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,114,18,0,0,0,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,92,0,0,0,114,93,0, + 0,0,114,5,0,0,0,114,91,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,18,0,0,0,114,96,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,85,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,20,0,0,0,41,4,114,65,0,0,0,218,9, + 105,115,95,102,114,111,122,101,110,114,88,0,0,0,114,51, + 0,0,0,114,89,0,0,0,114,91,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,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, + 114,9,1,0,0,114,94,0,0,0,114,18,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,95,0,0,0,41,2,114,92,0,0,0, + 114,100,0,0,0,114,5,0,0,0,114,91,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,97,0,0,0,114, + 18,0,0,0,114,101,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,19,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,34,0,0,0,114,90,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,18,0,0,0,114,112,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,194,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,39,9,0,124,1,160,3,124,0,161,1, + 83,0,35,0,4,0,116,4,121,96,1,0,1,0,1,0, + 89,0,110,1,37,0,9,0,124,0,106,5,125,3,110,12, + 35,0,4,0,116,6,121,95,1,0,1,0,1,0,100,5, + 125,3,89,0,110,1,37,0,9,0,124,0,106,7,125,4, + 110,27,35,0,4,0,116,6,121,94,1,0,1,0,1,0, + 124,1,100,2,117,0,114,79,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,37,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,115,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,51,0,0,0,41,5,114,111, + 0,0,0,218,6,108,111,97,100,101,114,114,110,0,0,0, + 114,21,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,56,0,0,0,12,2,16,1,8,1,10,1,2,1,10, + 1,2,128,12,1,4,1,2,128,2,2,8,1,2,128,12, + 1,8,1,2,128,2,1,8,1,2,128,12,1,8,1,14, + 1,16,2,2,128,12,2,2,250,2,252,2,251,115,47,0, + 0,0,152,4,29,0,157,7,38,7,168,3,44,0,172,9, + 55,7,185,3,61,0,189,16,65,23,7,193,15,6,65,23, + 7,193,30,1,65,23,7,193,31,1,55,7,193,32,1,38, + 7,114,125,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,21,0,0,0,114,123,0, + 0,0,114,127,0,0,0,114,128,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,34,0,0,0,114,21,0,0,0,114,123,0,0, + 0,114,127,0,0,0,114,128,0,0,0,114,129,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 35,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,114,18,0,0,0, + 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,51, + 0,0,0,114,21,0,0,0,114,123,0,0,0,114,127,0, + 0,0,218,6,97,112,112,101,110,100,114,130,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,34,0,0,0,114,63,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,54,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,114,18,0,0,0,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, + 0,67,0,0,0,115,104,0,0,0,124,0,106,0,125,2, + 9,0,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, + 124,1,106,5,107,2,83,0,35,0,4,0,116,6,121,51, + 1,0,1,0,1,0,116,7,6,0,89,0,83,0,37,0, + 119,0,114,0,0,0,0,41,8,114,130,0,0,0,114,21, + 0,0,0,114,123,0,0,0,114,127,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,34,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,36,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,2,251,2,128,12,6,8,1,2,128,2,255, + 115,12,0,0,0,132,34,39,0,167,9,50,7,179,1,50, + 7,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,132,0,0,0,114,127,0,0,0,114,131,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,53,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,136,0, + 0,0,135,1,0,0,115,12,0,0,0,10,2,16,1,8, + 1,4,1,14,1,6,1,114,18,0,0,0,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,132, + 0,0,0,41,2,114,34,0,0,0,114,136,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,136, + 0,0,0,144,1,0,0,115,2,0,0,0,10,2,114,18, + 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,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,26,0,0,0,41,3, + 114,130,0,0,0,114,21,0,0,0,218,10,114,112,97,114, + 116,105,116,105,111,110,114,53,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,114,18,0,0,0,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,131,0,0,0,114,53,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,137,0, + 0,0,156,1,0,0,115,2,0,0,0,6,2,114,18,0, + 0,0,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,131,0,0,0,41,2,114,34,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,137,0,0,0,160,1,0,0,115, + 2,0,0,0,14,2,114,18,0,0,0,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,35,0,0,0,114,54,0,0,0,114,139,0,0,0, + 218,8,112,114,111,112,101,114,116,121,114,136,0,0,0,218, + 6,115,101,116,116,101,114,114,144,0,0,0,114,137,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, + 114,6,0,0,0,114,126,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, + 1,4,3,14,1,114,18,0,0,0,114,126,0,0,0,169, + 2,114,127,0,0,0,114,129,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,152,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,67,116,0,124,1,100, + 5,131,2,114,65,9,0,124,1,160,4,124,0,161,1,125, + 3,110,14,35,0,4,0,116,5,121,75,1,0,1,0,1, + 0,100,2,125,3,89,0,110,3,37,0,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,123,0,0,0, + 41,2,114,123,0,0,0,114,130,0,0,0,114,129,0,0, + 0,70,114,149,0,0,0,41,7,114,11,0,0,0,114,140, + 0,0,0,114,141,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,129,0,0,0,114,88,0,0,0,114,126,0,0,0, + 41,6,114,21,0,0,0,114,123,0,0,0,114,127,0,0, + 0,114,129,0,0,0,114,150,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,105,0,0,0,165,1,0,0,115,42,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,12,1,2,128,12,1, + 8,1,2,128,4,3,16,2,2,250,115,15,0,0,0,175, + 5,53,0,181,9,65,0,7,193,11,1,65,0,7,114,105, + 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,50,1,0, + 0,9,0,124,0,106,0,125,3,110,10,35,0,4,0,116, + 1,121,152,1,0,1,0,1,0,89,0,110,7,37,0,124, + 3,100,0,117,1,114,21,124,3,83,0,124,0,106,2,125, + 4,124,1,100,0,117,0,114,43,9,0,124,0,106,3,125, + 1,110,10,35,0,4,0,116,1,121,151,1,0,1,0,1, + 0,89,0,110,1,37,0,9,0,124,0,106,4,125,5,110, + 12,35,0,4,0,116,1,121,150,1,0,1,0,1,0,100, + 0,125,5,89,0,110,1,37,0,124,2,100,0,117,0,114, + 87,124,5,100,0,117,0,114,85,9,0,124,1,106,5,125, + 2,110,14,35,0,4,0,116,1,121,149,1,0,1,0,1, + 0,100,0,125,2,89,0,110,3,37,0,124,5,125,2,9, + 0,124,0,106,6,125,6,110,12,35,0,4,0,116,1,121, + 148,1,0,1,0,1,0,100,0,125,6,89,0,110,1,37, + 0,9,0,116,7,124,0,106,8,131,1,125,7,110,12,35, + 0,4,0,116,1,121,147,1,0,1,0,1,0,100,0,125, + 7,89,0,110,1,37,0,116,9,124,4,124,1,124,2,100, + 1,141,3,125,3,124,5,100,0,117,0,114,136,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,127,0,0,0,70,84,41, + 13,114,114,0,0,0,114,2,0,0,0,114,9,0,0,0, + 114,113,0,0,0,114,122,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, + 126,0,0,0,114,131,0,0,0,114,136,0,0,0,114,130, + 0,0,0,41,8,114,111,0,0,0,114,123,0,0,0,114, + 127,0,0,0,114,110,0,0,0,114,21,0,0,0,90,8, + 108,111,99,97,116,105,111,110,114,136,0,0,0,114,130,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,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,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,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, - 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, + 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,108,0,0,0,2,2,8, + 1,2,128,12,1,4,1,2,128,8,2,4,1,6,2,8, + 1,2,1,8,1,2,128,12,1,4,2,2,128,2,1,8, + 1,2,128,12,1,8,1,2,128,8,1,8,1,2,1,8, + 1,2,128,12,1,8,1,2,128,4,2,2,1,8,1,2, + 128,12,1,8,1,2,128,2,1,12,1,2,128,12,1,8, + 1,2,128,14,2,18,1,6,1,6,1,4,1,2,249,2, + 252,2,250,2,250,2,251,2,246,115,93,0,0,0,129,3, + 5,0,133,7,14,7,157,3,33,0,161,7,42,7,172,3, + 48,0,176,9,59,7,193,5,3,65,9,0,193,9,9,65, + 20,7,193,24,3,65,28,0,193,28,9,65,39,7,193,41, + 5,65,47,0,193,47,9,65,58,7,194,19,1,65,58,7, + 194,20,1,65,39,7,194,21,1,65,20,7,194,22,1,59, + 7,194,23,1,42,7,194,24,1,14,7,114,156,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,204,1,0,0,124,2,115,10,116, + 0,124,1,100,1,100,0,131,3,100,0,117,0,114,26,9, + 0,124,0,106,1,124,1,95,2,110,10,35,0,4,0,116, + 3,121,229,1,0,1,0,1,0,89,0,110,1,37,0,124, + 2,115,36,116,0,124,1,100,2,100,0,131,3,100,0,117, + 0,114,87,124,0,106,4,125,3,124,3,100,0,117,0,114, + 72,124,0,106,5,100,0,117,1,114,72,116,6,100,0,117, + 0,114,54,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,9,0,124,3,124, + 1,95,12,110,10,35,0,4,0,116,3,121,228,1,0,1, + 0,1,0,89,0,110,1,37,0,124,2,115,97,116,0,124, + 1,100,3,100,0,131,3,100,0,117,0,114,113,9,0,124, + 0,106,13,124,1,95,14,110,10,35,0,4,0,116,3,121, + 227,1,0,1,0,1,0,89,0,110,1,37,0,9,0,124, + 0,124,1,95,15,110,10,35,0,4,0,116,3,121,226,1, + 0,1,0,1,0,89,0,110,1,37,0,124,2,115,138,116, + 0,124,1,100,4,100,0,131,3,100,0,117,0,114,159,124, + 0,106,5,100,0,117,1,114,159,9,0,124,0,106,5,124, + 1,95,16,110,10,35,0,4,0,116,3,121,225,1,0,1, + 0,1,0,89,0,110,1,37,0,124,0,106,17,114,221,124, + 2,115,172,116,0,124,1,100,5,100,0,131,3,100,0,117, + 0,114,188,9,0,124,0,106,18,124,1,95,11,110,10,35, + 0,4,0,116,3,121,224,1,0,1,0,1,0,89,0,110, + 1,37,0,124,2,115,198,116,0,124,1,100,6,100,0,131, + 3,100,0,117,0,114,221,124,0,106,19,100,0,117,1,114, + 221,9,0,124,0,106,19,124,1,95,20,124,1,83,0,35, + 0,4,0,116,3,121,223,1,0,1,0,1,0,89,0,124, + 1,83,0,37,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, + 113,0,0,0,218,11,95,95,112,97,99,107,97,103,101,95, + 95,114,155,0,0,0,114,122,0,0,0,114,153,0,0,0, + 41,21,114,13,0,0,0,114,21,0,0,0,114,9,0,0, + 0,114,2,0,0,0,114,123,0,0,0,114,130,0,0,0, + 114,140,0,0,0,114,141,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,122,0,0, + 0,114,113,0,0,0,114,144,0,0,0,114,159,0,0,0, + 114,114,0,0,0,114,155,0,0,0,114,137,0,0,0,114, + 127,0,0,0,114,136,0,0,0,114,153,0,0,0,41,5, + 114,110,0,0,0,114,111,0,0,0,114,158,0,0,0,114, + 123,0,0,0,114,160,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,142,0,0,0,20,4,2,1,10,1,2,128,12,1,4, + 1,2,128,20,2,6,1,8,1,10,2,8,1,4,1,6, + 1,10,2,8,1,6,1,6,11,2,1,8,1,2,128,12, + 1,4,1,2,128,20,2,2,1,10,1,2,128,12,1,4, + 1,2,128,2,2,8,1,2,128,12,1,4,1,2,128,20, + 2,10,1,2,1,10,1,2,128,12,1,4,1,2,128,6, + 2,20,1,2,1,10,1,2,128,12,1,4,1,2,128,20, + 2,10,1,2,1,8,1,4,3,2,128,12,254,2,1,4, + 1,2,128,4,0,2,254,2,249,2,249,2,249,2,251,2, + 250,2,228,115,121,0,0,0,139,4,16,0,144,7,25,7, + 193,9,3,65,13,0,193,13,7,65,22,7,193,34,4,65, + 39,0,193,39,7,65,48,7,193,50,3,65,54,0,193,54, + 7,65,63,7,194,16,4,66,21,0,194,21,7,66,30,7, + 194,45,4,66,50,0,194,50,7,66,59,7,195,12,4,67, + 18,0,195,18,7,67,28,7,195,31,1,67,28,7,195,32, + 1,66,59,7,195,33,1,66,30,7,195,34,1,65,63,7, + 195,35,1,65,48,7,195,36,1,65,22,7,195,37,1,25, + 7,114,162,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,123,0, + 0,0,114,163,0,0,0,114,88,0,0,0,114,22,0,0, + 0,114,21,0,0,0,114,162,0,0,0,169,2,114,110,0, + 0,0,114,111,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,18,0,0,0,114,166,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,116,0,0,0,114, + 117,0,0,0,114,118,0,0,0,114,119,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,21,0,0,0,114,127,0,0,0,114,123, + 0,0,0,114,51,0,0,0,114,137,0,0,0,41,2,114, + 110,0,0,0,114,21,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,120,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,18,0,0,0,114,120,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,32,1,0,0,124,0, + 106,0,125,2,116,1,124,2,131,1,53,0,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,9,0,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,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,16,35,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, + 119,0,37,0,9,0,100,3,4,0,4,0,131,3,1,0, + 124,1,83,0,35,0,49,0,115,136,119,4,37,0,1,0, + 1,0,1,0,89,0,1,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,20,0,0,0,78,250,14, + 109,105,115,115,105,110,103,32,108,111,97,100,101,114,84,114, + 157,0,0,0,114,164,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,21,0,0,0,114,58,0,0,0,114,19, + 0,0,0,114,106,0,0,0,114,39,0,0,0,114,51,0, + 0,0,114,88,0,0,0,114,123,0,0,0,114,130,0,0, + 0,114,162,0,0,0,114,11,0,0,0,114,7,0,0,0, + 114,102,0,0,0,114,103,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,164,0,0,0,218,3,112,111,112, + 41,4,114,110,0,0,0,114,111,0,0,0,114,21,0,0, + 0,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,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,14,4,14,1,2,128,14,255,18,1,10,233,4, + 24,22,128,4,0,115,41,0,0,0,135,20,66,3,3,156, + 65,1,65,43,2,193,29,14,66,3,3,193,43,15,65,58, + 9,193,58,1,66,3,3,194,3,4,66,7,11,194,8,3, + 66,7,11,114,107,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,22,1,0,0,9,0,124,0,106,0,160,1,124,0, + 106,2,161,1,1,0,110,25,35,0,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,37,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,71,9,0,124,0,106,0,124,1,95,7,110,10, + 35,0,4,0,116,8,121,138,1,0,1,0,1,0,89,0, + 110,1,37,0,116,6,124,1,100,2,100,0,131,3,100,0, + 117,0,114,109,9,0,124,1,106,9,124,1,95,10,116,11, + 124,1,100,3,131,2,115,98,124,0,106,2,160,12,100,4, + 161,1,100,5,25,0,124,1,95,10,110,10,35,0,4,0, + 116,8,121,137,1,0,1,0,1,0,89,0,110,1,37,0, + 116,6,124,1,100,6,100,0,131,3,100,0,117,0,114,134, + 9,0,124,0,124,1,95,13,124,1,83,0,35,0,4,0, + 116,8,121,136,1,0,1,0,1,0,89,0,124,1,83,0, + 37,0,124,1,83,0,119,0,119,0,119,0,41,7,78,114, + 113,0,0,0,114,159,0,0,0,114,155,0,0,0,114,142, + 0,0,0,114,26,0,0,0,114,114,0,0,0,41,14,114, + 123,0,0,0,114,171,0,0,0,114,21,0,0,0,114,19, + 0,0,0,114,106,0,0,0,114,172,0,0,0,114,13,0, + 0,0,114,113,0,0,0,114,2,0,0,0,114,9,0,0, + 0,114,159,0,0,0,114,11,0,0,0,114,143,0,0,0, + 114,114,0,0,0,114,165,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,80,0,0,0,2,3,16, + 1,2,128,6,1,12,1,14,1,12,1,2,1,2,128,14, + 3,12,1,16,1,2,1,10,1,2,128,12,1,4,1,2, + 128,16,1,2,1,8,4,10,1,18,1,4,128,12,1,4, + 1,2,128,16,1,2,1,6,1,4,3,2,128,12,254,2, + 1,4,1,2,128,4,0,2,254,2,251,2,246,115,59,0, + 0,0,129,7,9,0,137,24,33,7,184,4,61,0,189,7, + 65,6,7,193,16,18,65,35,0,193,35,7,65,44,7,193, + 54,3,65,59,0,193,59,7,66,5,7,194,8,1,66,5, + 7,194,9,1,65,44,7,194,10,1,65,6,7,114,173,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,248,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,9,0,124,2,116,9,106,10, + 124,0,106,11,60,0,9,0,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,110,22,35,0,1,0,1,0, + 1,0,9,0,116,9,106,10,124,0,106,11,61,0,130,0, + 35,0,4,0,116,15,121,123,1,0,1,0,1,0,89,0, + 130,0,37,0,37,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, + 100,7,124,0,95,8,124,2,83,0,35,0,100,7,124,0, + 95,8,119,0,37,0,119,0,41,8,78,114,164,0,0,0, + 114,169,0,0,0,84,114,168,0,0,0,114,20,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,123,0,0,0,114,11,0,0, + 0,114,7,0,0,0,114,102,0,0,0,114,103,0,0,0, + 114,170,0,0,0,114,173,0,0,0,114,166,0,0,0,90, + 13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,19, + 0,0,0,114,106,0,0,0,114,21,0,0,0,114,130,0, + 0,0,114,88,0,0,0,114,164,0,0,0,114,71,0,0, + 0,114,172,0,0,0,114,84,0,0,0,41,3,114,110,0, + 0,0,114,109,0,0,0,114,111,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, + 66,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,10,1,2,3,2,128,12,254, + 2,1,2,1,4,128,14,5,12,1,16,1,6,2,4,2, + 2,128,10,254,2,245,115,64,0,0,0,165,6,65,53,0, + 172,24,65,5,0,193,4,1,65,53,0,193,5,4,65,26, + 7,193,10,5,65,16,6,193,15,1,65,26,7,193,16,7, + 65,25,13,193,23,3,65,26,7,193,26,22,65,53,0,193, + 53,5,65,58,7,193,59,1,65,25,13,114,174,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,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, - 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,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,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,9,0,0,0,67,0,0,0,115,58,0,0,0,116,0, + 124,0,106,1,131,1,53,0,1,0,116,2,124,0,131,1, + 2,0,100,1,4,0,4,0,131,3,1,0,83,0,35,0, + 49,0,115,21,119,4,37,0,1,0,1,0,1,0,89,0, + 1,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,58, + 0,0,0,114,21,0,0,0,114,174,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,108,0,0,0,197,2,0,0,115,10,0,0, + 0,12,9,6,1,12,255,2,1,26,128,115,12,0,0,0, + 133,4,16,3,144,4,20,11,149,3,20,11,114,108,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,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,22,100, - 6,100,7,132,1,131,1,90,8,101,7,100,23,100,8,100, + 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,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,115,112,101,99,99,3,0,0,0,0,0,0,0, + 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,102,0,0,0,114,103, + 0,0,0,114,104,0,0,0,114,9,0,0,0,114,176,0, + 0,0,114,152,0,0,0,169,1,114,111,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,115,0, + 0,0,223,2,0,0,115,8,0,0,0,6,7,2,1,4, + 255,22,2,114,18,0,0,0,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,151,0,0,0,41,4,114,65,0,0,0,90,10,105, + 115,95,98,117,105,108,116,105,110,114,105,0,0,0,114,152, + 0,0,0,169,4,218,3,99,108,115,114,90,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,114,18,0,0,0,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,102,0,0,0,114,103,0,0,0,114,104, + 0,0,0,114,184,0,0,0,114,123,0,0,0,41,4,114, + 181,0,0,0,114,90,0,0,0,114,182,0,0,0,114,110, + 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,114,18,0,0,0,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,86,0,0, + 0,114,20,0,0,0,78,41,8,114,21,0,0,0,114,19, + 0,0,0,114,87,0,0,0,114,88,0,0,0,114,51,0, + 0,0,114,75,0,0,0,114,65,0,0,0,90,14,99,114, + 101,97,116,101,95,98,117,105,108,116,105,110,114,175,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,163,0,0,0,2,3,0,0,115,10,0,0,0,12,3, + 12,1,4,1,6,255,12,2,114,18,0,0,0,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,75,0,0,0,114,65,0,0, + 0,90,12,101,120,101,99,95,98,117,105,108,116,105,110,114, + 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,164,0,0,0,10,3,0,0,115,2,0,0, + 0,16,3,114,18,0,0,0,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,181,0,0, + 0,114,90,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,114,18,0,0,0,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,186,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,187,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,189,0, + 0,0,114,18,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,186,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,187,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,129,0,0,0,27,3,0,0,114,189,0, + 0,0,114,18,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,152,0,0,0,218,12,115,116,97,116,105,99,109, + 101,116,104,111,100,114,115,0,0,0,218,11,99,108,97,115, + 115,109,101,116,104,111,100,114,184,0,0,0,114,185,0,0, + 0,114,163,0,0,0,114,164,0,0,0,114,96,0,0,0, + 114,188,0,0,0,114,190,0,0,0,114,129,0,0,0,114, + 112,0,0,0,114,171,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,176,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,18,0,0,0,114,176, + 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,177,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,167, + 0,0,0,78,41,7,114,102,0,0,0,114,103,0,0,0, + 114,104,0,0,0,114,51,0,0,0,114,9,0,0,0,114, + 194,0,0,0,114,152,0,0,0,41,1,218,1,109,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,115,0, + 0,0,47,3,0,0,115,8,0,0,0,6,7,2,1,4, + 255,16,2,114,18,0,0,0,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,179,0,0,0,41,4,114,65,0,0,0,114,99,0, + 0,0,114,105,0,0,0,114,152,0,0,0,114,180,0,0, + 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, + 114,184,0,0,0,58,3,0,0,115,6,0,0,0,10,2, + 16,1,4,2,114,18,0,0,0,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,102, + 0,0,0,114,103,0,0,0,114,104,0,0,0,114,65,0, + 0,0,114,99,0,0,0,41,3,114,181,0,0,0,114,90, + 0,0,0,114,182,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,185,0,0,0,65,3,0,0, + 115,8,0,0,0,6,7,2,2,4,254,18,3,114,18,0, + 0,0,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,186,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,175,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,163,0,0,0,77,3,0,0,115,2,0, + 0,0,4,0,114,18,0,0,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,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, + 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,98,0,0,0,41,10,114,114,0,0, + 0,114,21,0,0,0,114,65,0,0,0,114,99,0,0,0, + 114,88,0,0,0,114,51,0,0,0,114,75,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, + 111,0,0,0,114,21,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,164, + 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,114,18,0,0,0,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,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, - 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,2,0,0,0,10,8,122,26,70,114,111,122,101,110,73, + 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,112,0,0,0,114,187, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,171,0,0,0,90,3,0,0,115,2,0,0,0, + 10,8,114,18,0,0,0,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, @@ -1335,299 +1406,312 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 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,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,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,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, + 65,0,0,0,114,196,0,0,0,114,187,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,188,0, + 0,0,100,3,0,0,243,2,0,0,0,10,4,114,18,0, + 0,0,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,186,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,187,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,190,0, + 0,0,106,3,0,0,114,189,0,0,0,114,18,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,199,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,65, + 0,0,0,90,17,105,115,95,102,114,111,122,101,110,95,112, + 97,99,107,97,103,101,114,187,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,129,0,0,0,112, + 3,0,0,114,200,0,0,0,114,18,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,191,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,152,0,0,0,114,192,0, + 0,0,114,115,0,0,0,114,193,0,0,0,114,184,0,0, + 0,114,185,0,0,0,114,163,0,0,0,114,164,0,0,0, + 114,171,0,0,0,114,101,0,0,0,114,188,0,0,0,114, + 190,0,0,0,114,129,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,5,0,0,0,114,6,0,0,0,114,194,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,18,0,0,0, + 114,194,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,65,0,0,0,114,66,0, + 0,0,114,53,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,62,0,0,0,125,3,0,0,243, + 2,0,0,0,12,2,114,18,0,0,0,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,202,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,65,0,0,0,114, + 68,0,0,0,41,4,114,34,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,64, + 0,0,0,129,3,0,0,114,203,0,0,0,114,18,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,62,0,0,0,114,64,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,201,0,0,0,121,3,0,0,115,8,0,0, + 0,8,0,4,2,8,2,12,4,114,18,0,0,0,114,201, + 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,142,0,0,0,114,43,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,26,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,88,0,0,0,114,51,0,0,0,41,5,114,21,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, + 18,0,0,0,114,212,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,102,0,0,0,114,103,0,0,0,114,170, + 0,0,0,114,185,0,0,0,114,105,0,0,0,41,5,218, + 6,102,105,110,100,101,114,114,21,0,0,0,114,182,0,0, + 0,114,109,0,0,0,114,123,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,18,0,0,0,114,214,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,30,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,112, + 125,5,116,7,131,0,53,0,1,0,9,0,124,5,106,8, + 125,6,110,27,35,0,4,0,116,9,121,142,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,61,89,0,100,1,4,0,4,0,131,3, + 1,0,113,26,89,0,110,7,37,0,124,6,124,0,124,1, + 124,2,131,3,125,7,100,1,4,0,4,0,131,3,1,0, + 110,11,35,0,49,0,115,81,119,4,37,0,1,0,1,0, + 1,0,89,0,1,0,1,0,124,7,100,1,117,1,114,138, + 124,4,115,134,124,0,116,0,106,6,118,0,114,134,116,0, + 106,6,124,0,25,0,125,8,9,0,124,8,106,11,125,9, + 110,14,35,0,4,0,116,9,121,141,1,0,1,0,1,0, + 124,7,6,0,89,0,2,0,1,0,83,0,37,0,124,9, + 100,1,117,0,114,130,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,19,0,0,0,218,9,109,101,116,97,95,112, + 97,116,104,114,88,0,0,0,114,102,0,0,0,114,103,0, + 0,0,114,170,0,0,0,114,106,0,0,0,114,201,0,0, + 0,114,184,0,0,0,114,2,0,0,0,114,214,0,0,0, + 114,114,0,0,0,41,10,114,21,0,0,0,114,182,0,0, + 0,114,183,0,0,0,114,215,0,0,0,90,9,105,115,95, + 114,101,108,111,97,100,114,213,0,0,0,114,184,0,0,0, + 114,110,0,0,0,114,111,0,0,0,114,114,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,78, + 0,0,0,6,2,8,1,8,2,4,3,12,1,10,5,8, + 1,8,1,2,1,8,1,2,128,12,1,12,1,8,1,2, + 1,10,250,2,6,4,255,2,128,12,3,12,248,22,128,8, + 9,14,2,10,1,2,1,8,1,2,128,12,1,12,4,2, + 128,8,2,8,1,8,2,8,2,2,239,4,19,2,243,2, + 244,115,63,0,0,0,159,1,65,12,5,161,3,37,4,164, + 1,65,12,5,165,17,63,11,182,1,65,12,5,189,9,65, + 12,5,193,12,4,65,16,13,193,17,3,65,16,13,193,40, + 3,65,44,2,193,44,9,65,57,9,194,13,1,65,57,9, + 194,14,1,63,11,114,216,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,26,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,51,0,0,0, + 114,3,0,0,0,218,10,86,97,108,117,101,69,114,114,111, + 114,114,88,0,0,0,169,3,114,21,0,0,0,114,210,0, + 0,0,114,211,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,18,0,0,0,114,222,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,20,1,0,0,100,0,125,2,124,0,160,0,100,1, + 161,1,100,2,25,0,125,3,124,3,114,64,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,9,0, + 124,4,106,4,125,2,110,23,35,0,4,0,116,5,121,137, + 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,37,0,116,9,124,0,124,2,131,2,125,6, + 124,6,100,0,117,0,114,82,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,134,116,1,106,2,124,3,25,0,125,4, + 124,0,160,0,100,1,161,1,100,5,25,0,125,8,9,0, + 116,11,124,4,124,8,124,7,131,3,1,0,124,7,83,0, + 35,0,4,0,116,5,121,136,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, + 37,0,124,7,83,0,119,0,119,0,41,8,78,114,142,0, + 0,0,114,26,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,20,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,143,0, + 0,0,114,19,0,0,0,114,106,0,0,0,114,75,0,0, + 0,114,155,0,0,0,114,2,0,0,0,218,8,95,69,82, + 82,95,77,83,71,114,51,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, + 216,0,0,0,114,174,0,0,0,114,12,0,0,0,114,102, + 0,0,0,114,103,0,0,0,114,170,0,0,0,41,9,114, + 21,0,0,0,218,7,105,109,112,111,114,116,95,114,182,0, + 0,0,114,144,0,0,0,90,13,112,97,114,101,110,116,95, + 109,111,100,117,108,101,114,109,0,0,0,114,110,0,0,0, + 114,111,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,68,0,0,0,4,1,14, + 1,4,1,10,1,10,1,10,2,10,1,10,1,2,1,8, + 1,2,128,12,1,16,1,14,1,2,128,10,1,8,1,18, + 1,8,2,4,1,10,2,14,1,2,1,12,1,4,4,2, + 128,12,253,16,1,14,1,4,1,2,128,4,0,2,253,2, + 242,115,31,0,0,0,165,3,41,0,169,22,63,7,193,37, + 6,65,45,0,193,45,21,66,5,7,194,8,1,66,5,7, + 194,9,1,63,7,114,227,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,9,0,0,0,67, + 0,0,0,115,132,0,0,0,116,0,124,0,131,1,53,0, + 1,0,116,1,106,2,160,3,124,0,116,4,161,2,125,2, + 124,2,116,4,117,0,114,27,116,5,124,0,124,1,131,2, + 2,0,100,1,4,0,4,0,131,3,1,0,83,0,9,0, + 100,1,4,0,4,0,131,3,1,0,110,11,35,0,49,0, + 115,39,119,4,37,0,1,0,1,0,1,0,89,0,1,0, + 1,0,124,2,100,1,117,0,114,60,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,20,0,0,0,41,9,114,58,0,0,0, + 114,19,0,0,0,114,106,0,0,0,114,39,0,0,0,218, + 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, + 227,0,0,0,114,51,0,0,0,114,225,0,0,0,114,73, + 0,0,0,41,4,114,21,0,0,0,114,226,0,0,0,114, + 111,0,0,0,114,83,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,32,0,0, + 0,10,2,14,1,8,1,8,1,12,253,2,3,2,255,12, + 254,22,128,8,5,2,1,6,1,2,255,12,2,8,2,4, + 1,115,12,0,0,0,132,16,34,3,162,4,38,11,167,3, + 38,11,114,229,0,0,0,114,26,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,26,0, + 0,0,78,41,4,114,222,0,0,0,114,212,0,0,0,114, + 229,0,0,0,218,11,95,103,99,100,95,105,109,112,111,114, + 116,114,221,0,0,0,114,5,0,0,0,114,5,0,0,0, + 114,6,0,0,0,114,230,0,0,0,14,4,0,0,115,8, + 0,0,0,12,9,8,1,12,1,10,1,114,18,0,0,0, + 114,230,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,9,0,0,0,67,0,0,0,115,216,0,0,0, + 124,1,68,0,93,102,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,104,100,9,160,8,124,0,106,2,124,4,161,2, + 125,6,9,0,116,9,124,2,124,6,131,2,1,0,113,2, + 35,0,4,0,116,10,121,107,1,0,125,7,1,0,124,7, + 106,11,124,6,107,2,114,98,116,12,106,13,160,14,124,6, + 116,15,161,2,100,10,117,1,114,98,89,0,100,10,125,7, + 126,7,113,2,130,0,100,10,125,7,126,7,119,1,37,0, 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, @@ -1647,65 +1731,68 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 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, + 32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,231, + 0,0,0,114,207,0,0,0,78,41,16,114,217,0,0,0, + 114,218,0,0,0,114,9,0,0,0,114,219,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, + 108,101,95,102,114,111,109,108,105,115,116,114,234,0,0,0, + 114,51,0,0,0,114,75,0,0,0,114,225,0,0,0,114, + 21,0,0,0,114,19,0,0,0,114,106,0,0,0,114,39, + 0,0,0,114,228,0,0,0,41,8,114,111,0,0,0,218, + 8,102,114,111,109,108,105,115,116,114,226,0,0,0,114,232, 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, + 0,0,114,5,0,0,0,114,6,0,0,0,114,235,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,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, + 2,1,6,255,2,128,10,2,14,1,2,1,12,1,2,128, + 12,1,10,4,16,1,2,255,10,2,2,1,10,128,2,245, + 4,12,2,248,115,36,0,0,0,193,2,5,65,8,2,193, + 8,7,65,39,9,193,15,14,65,35,9,193,34,1,65,35, + 9,193,35,4,65,39,9,193,43,1,65,39,9,114,235,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,159,0, + 0,0,114,114,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,155,0,0,0,114,142,0,0,0, + 114,26,0,0,0,41,6,114,39,0,0,0,114,144,0,0, + 0,114,102,0,0,0,114,103,0,0,0,114,170,0,0,0, + 114,143,0,0,0,41,3,218,7,103,108,111,98,97,108,115, + 114,210,0,0,0,114,110,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, + 18,0,0,0,114,241,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, @@ -1748,132 +1835,134 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 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, + 41,46,10,10,32,32,32,32,114,26,0,0,0,78,114,142, + 0,0,0,114,155,0,0,0,41,9,114,230,0,0,0,114, + 241,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, + 209,0,0,0,114,19,0,0,0,114,106,0,0,0,114,9, + 0,0,0,114,11,0,0,0,114,235,0,0,0,41,9,114, + 21,0,0,0,114,240,0,0,0,218,6,108,111,99,97,108, + 115,114,236,0,0,0,114,211,0,0,0,114,111,0,0,0, + 90,8,103,108,111,98,97,108,115,95,114,210,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, + 26,4,30,3,10,1,12,1,4,2,114,18,0,0,0,114, + 244,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,176,0,0,0,114,184,0, + 0,0,114,88,0,0,0,114,174,0,0,0,41,2,114,21, + 0,0,0,114,110,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,18,0,0, + 0,114,245,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,27,0,0,0,114, + 102,0,0,0,114,72,0,0,0,78,41,15,114,65,0,0, + 0,114,19,0,0,0,114,3,0,0,0,114,106,0,0,0, + 218,5,105,116,101,109,115,114,217,0,0,0,114,87,0,0, + 0,114,176,0,0,0,114,99,0,0,0,114,194,0,0,0, + 114,156,0,0,0,114,162,0,0,0,114,9,0,0,0,114, + 245,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,21,0,0,0,114,111,0,0,0,114,123,0,0,0, + 114,110,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,18,0,0,0,114,249,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,249,0, + 0,0,114,19,0,0,0,114,215,0,0,0,114,133,0,0, + 0,114,176,0,0,0,114,194,0,0,0,41,2,114,247,0, + 0,0,114,248,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, + 18,0,0,0,114,250,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,26,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,140,0,0,0,114,250,0, + 0,0,114,19,0,0,0,114,106,0,0,0,114,9,0,0, + 0,41,1,114,251,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,18,0,0,0,114,252,0,0,0,114,191,0, + 0,0,114,0,0,0,0,114,25,0,0,0,41,4,78,78, + 114,5,0,0,0,114,26,0,0,0,41,54,114,10,0,0, + 0,114,7,0,0,0,114,27,0,0,0,114,102,0,0,0, + 114,72,0,0,0,114,140,0,0,0,114,17,0,0,0,114, + 22,0,0,0,114,67,0,0,0,114,38,0,0,0,114,48, + 0,0,0,114,23,0,0,0,114,24,0,0,0,114,56,0, + 0,0,114,58,0,0,0,114,61,0,0,0,114,73,0,0, + 0,114,75,0,0,0,114,84,0,0,0,114,96,0,0,0, + 114,101,0,0,0,114,112,0,0,0,114,125,0,0,0,114, + 126,0,0,0,114,105,0,0,0,114,156,0,0,0,114,162, + 0,0,0,114,166,0,0,0,114,120,0,0,0,114,107,0, + 0,0,114,173,0,0,0,114,174,0,0,0,114,108,0,0, + 0,114,176,0,0,0,114,194,0,0,0,114,201,0,0,0, + 114,212,0,0,0,114,214,0,0,0,114,216,0,0,0,114, + 222,0,0,0,90,15,95,69,82,82,95,77,83,71,95,80, + 82,69,70,73,88,114,224,0,0,0,114,227,0,0,0,218, + 6,111,98,106,101,99,116,114,228,0,0,0,114,229,0,0, + 0,114,230,0,0,0,114,235,0,0,0,114,241,0,0,0, + 114,244,0,0,0,114,245,0,0,0,114,249,0,0,0,114, + 250,0,0,0,114,252,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,114,18,0,0,0, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 8f4eeb0e53483a..b469079c97fd9d 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -82,282 +82,295 @@ 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,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,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, + 0,0,115,4,0,0,0,6,128,22,0,243,0,0,0,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,10,0,0,0,114,14,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,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,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,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,2,0,0,0,20,2,114,10,0,0,0,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,71, + 0,0,0,243,2,0,0,0,4,2,114,10,0,0,0,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,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, + 10,0,0,0,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,79,0,0,0,114,23,0,0,0,114,10, + 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,84, + 0,0,0,243,4,0,0,0,16,2,12,1,114,10,0,0, + 0,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,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, - 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,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, + 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,89,0,0,0,114, + 44,0,0,0,114,10,0,0,0,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,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,11,0,0,0,114,3,0,0,0,114,0,0, + 0,0,114,12,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,114, + 10,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,78,41,13,114,4,0,0,0,218,3,109,97, + 112,114,19,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,50,0,0,0,114,51,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,10,0,0,0,114, + 68,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,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,114,48,0,0,0,114,7,0,0,0, + 114,49,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,54,0,0,0,128,0,0,0,115,6,0,0,0,6, + 0,6,1,14,255,114,10,0,0,0,114,55,0,0,0,78, + 41,2,114,60,0,0,0,114,63,0,0,0,41,1,114,64, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,68,0,0,0,126,0,0,0,115,6,0,0,0, + 10,2,2,1,8,255,114,10,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,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,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,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, + 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,52,0,0,0,169,1,114,66,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,114,10,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,11,0,0,0,78,114,3,0,0,0, + 41,2,218,3,109,97,120,114,51,0,0,0,41,2,114,66, + 0,0,0,218,1,105,114,7,0,0,0,114,72,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,10,0,0,0,114,75,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,114,72,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,2,0,0,0,10,7, + 114,10,0,0,0,114,76,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,9,0,116,0,124,0,131,1, + 125,2,110,11,35,0,4,0,116,1,121,24,1,0,1,0, + 1,0,89,0,100,1,83,0,37,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,76,0,0,0,218,7,79, + 83,69,114,114,111,114,218,7,115,116,95,109,111,100,101,41, + 3,114,66,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,16, + 0,0,0,2,2,10,1,2,128,12,1,6,1,2,128,14, + 1,2,254,115,12,0,0,0,129,4,6,0,134,7,16,7, + 152,1,16,7,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,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,80,0,0, + 0,114,72,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,10, + 0,0,0,114,81,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,80,0,0,0,114,72,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,10,0,0,0,114,84,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,19,0,0, + 0,114,57,0,0,0,218,7,114,101,112,108,97,99,101,114, + 4,0,0,0,114,27,0,0,0,114,59,0,0,0,41,2, + 114,66,0,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,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,10,0,0,0,114,87,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, - 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,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,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,111,13,0,0,114,44,0,0,0,114,32,0,0,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,85,0,0,0, + 78,41,2,114,27,0,0,0,114,51,0,0,0,114,72,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,87,0,0,0,180,0,0,0,114,82,0,0,0,114, + 10,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,9,0,116,7,160,8,124,4,100, + 3,161,2,53,0,125,5,124,5,160,9,124,1,161,1,1, + 0,100,4,4,0,4,0,131,3,1,0,110,11,35,0,49, + 0,115,48,119,4,37,0,1,0,1,0,1,0,89,0,1, + 0,1,0,116,2,160,10,124,3,124,0,161,2,1,0,100, + 4,83,0,35,0,4,0,116,11,121,88,1,0,1,0,1, + 0,9,0,116,2,160,12,124,3,161,1,1,0,130,0,35, + 0,4,0,116,11,121,87,1,0,1,0,1,0,89,0,130, + 0,37,0,37,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,88,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,114,86,0,0,0,114,77,0, + 0,0,90,6,117,110,108,105,110,107,41,6,114,66,0,0, + 0,114,42,0,0,0,114,79,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,44,0,0,0,16,5,6,1,22,1,4,255,2,2, + 14,3,10,1,12,255,22,128,16,2,2,128,12,1,2,1, + 10,1,2,3,2,128,12,254,2,1,2,1,4,128,2,254, + 2,253,115,69,0,0,0,153,6,62,0,159,6,43,3,165, + 6,62,0,171,4,47,11,175,1,62,0,176,3,47,11,179, + 9,62,0,190,7,65,22,7,193,6,5,65,12,6,193,11, + 1,65,22,7,193,12,7,65,21,13,193,19,3,65,22,7, + 193,23,1,65,21,13,193,24,1,65,22,7,114,96,0,0, + 0,105,122,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, @@ -440,492 +453,500 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 115,101,116,32,116,111,32,78,111,110,101,114,11,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, + 125,46,123,125,123,125,114,12,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,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, + 111,114,114,19,0,0,0,218,6,102,115,112,97,116,104,114, + 75,0,0,0,218,10,114,112,97,114,116,105,116,105,111,110, + 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,62,0,0,0,114,16,0,0,0,218, + 69,114,114,111,114,114,63,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,89,0,0,0,218,4,95,79,80,84,218,17, + 114,111,114,114,90,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, + 120,114,87,0,0,0,114,68,0,0,0,114,83,0,0,0, + 114,51,0,0,0,218,6,108,115,116,114,105,112,218,8,95, + 80,89,67,65,67,72,69,41,12,114,66,0,0,0,90,14, + 100,101,98,117,103,95,111,118,101,114,114,105,100,101,114,97, 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, + 97,100,114,67,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,124,1,0,0,115,72, + 114,111,109,95,115,111,117,114,99,101,125,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,195,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,235,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,254,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,10,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,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,30,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, - 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,43,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,22,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, + 4,4,1,8,1,2,1,4,253,12,5,114,10,0,0,0, + 114,122,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,99,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,98,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,123,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,106,0,0,0,114,107,0,0,0,114,108,0,0, + 0,114,19,0,0,0,114,104,0,0,0,114,75,0,0,0, + 114,115,0,0,0,114,50,0,0,0,114,51,0,0,0,114, + 27,0,0,0,114,60,0,0,0,114,4,0,0,0,114,117, + 0,0,0,114,112,0,0,0,218,5,99,111,117,110,116,218, + 6,114,115,112,108,105,116,114,113,0,0,0,114,111,0,0, + 0,218,9,112,97,114,116,105,116,105,111,110,114,68,0,0, + 0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88, + 69,83,41,10,114,66,0,0,0,114,119,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,97,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,196,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,10,0,0,0,114,129,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,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,9,0,116,3,124,0,131,1,125,4, + 110,18,35,0,4,0,116,4,116,5,102,2,121,62,1,0, + 1,0,1,0,124,0,100,2,100,5,133,2,25,0,125,4, + 89,0,110,1,37,0,116,6,124,4,131,1,114,60,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,98, + 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,105,0,0,0,218,5,108, + 111,119,101,114,114,129,0,0,0,114,108,0,0,0,114,112, + 0,0,0,114,81,0,0,0,41,5,218,13,98,121,116,101, + 99,111,100,101,95,112,97,116,104,114,120,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,236,1,0,0,115,26,0, + 0,0,12,7,4,1,16,1,24,1,4,1,2,1,10,1, + 2,128,16,1,16,1,2,128,16,1,2,254,115,12,0,0, + 0,159,4,36,0,164,15,53,7,190,1,53,7,114,136,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,70,0,0,0, + 124,0,160,0,116,1,116,2,131,1,161,1,114,23,9,0, + 116,3,124,0,131,1,83,0,35,0,4,0,116,4,121,34, + 1,0,1,0,1,0,89,0,100,0,83,0,37,0,124,0, + 160,0,116,1,116,5,131,1,161,1,114,32,124,0,83,0, + 100,0,83,0,119,0,114,70,0,0,0,41,6,114,59,0, + 0,0,218,5,116,117,112,108,101,114,128,0,0,0,114,122, + 0,0,0,114,108,0,0,0,114,114,0,0,0,41,1,114, + 121,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, + 255,1,0,0,115,22,0,0,0,14,1,2,1,8,1,2, + 128,12,1,6,1,2,128,14,1,4,1,4,2,2,251,115, + 12,0,0,0,136,3,12,0,140,7,22,7,162,1,22,7, + 114,138,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,9,0,116,0,124,0,131,1,106,1,125,1,110, + 12,35,0,4,0,116,2,121,25,1,0,1,0,1,0,100, + 1,125,1,89,0,110,1,37,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,88, + 0,0,0,233,128,0,0,0,78,41,3,114,76,0,0,0, + 114,78,0,0,0,114,77,0,0,0,41,2,114,66,0,0, + 0,114,79,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,11,2,0,0,115,18,0,0,0,2,2,12,1,2,128, + 12,1,8,1,2,128,8,3,4,1,2,251,115,12,0,0, + 0,129,5,7,0,135,9,18,7,153,1,18,7,114,140,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,142,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,142,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,31,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,114,10,0,0,0,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,86,0,0,0, 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,53,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,73,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, - 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,106,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, + 5,95,119,114,97,112,44,2,0,0,115,10,0,0,0,8, + 1,10,1,18,1,2,128,18,1,114,10,0,0,0,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,70,0,0,0,41, + 2,218,10,95,98,111,111,116,115,116,114,97,112,114,159,0, + 0,0,41,3,114,148,0,0,0,114,149,0,0,0,114,159, + 0,0,0,114,7,0,0,0,114,147,0,0,0,114,8,0, + 0,0,218,11,95,99,104,101,99,107,95,110,97,109,101,23, + 2,0,0,115,12,0,0,0,14,8,8,10,8,1,8,2, + 10,6,4,1,114,10,0,0,0,114,161,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,100,0,0,0,114,101,0,0,0,114, + 102,0,0,0,218,11,102,105,110,100,95,108,111,97,100,101, + 114,114,4,0,0,0,114,90,0,0,0,218,13,73,109,112, + 111,114,116,87,97,114,110,105,110,103,41,5,114,144,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,54,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,10,0, + 0,0,114,168,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,160,0,0,0,218,16, + 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, + 114,143,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,142,0,0,0,218,11,101,120,99,95,100,101,116,97,105, + 108,115,90,5,109,97,103,105,99,114,118,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,74,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,10,0,0,0,114,177,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, - 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,134,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, - 158,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,171,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, + 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,171,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, + 169,0,0,0,78,114,170,0,0,0,41,4,114,43,0,0, + 0,114,160,0,0,0,114,174,0,0,0,114,143,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,142,0,0,0,114,176,0,0,0,114,118,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,107,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,10,0,0,0,114,181,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,171,0,0,0,114,170,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,143,0, + 0,0,41,4,114,42,0,0,0,218,11,115,111,117,114,99, + 101,95,104,97,115,104,114,142,0,0,0,114,176,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,135,2,0,0,115,14,0,0,0,16,17,2,1, + 8,1,4,255,2,2,6,254,4,255,114,10,0,0,0,114, + 183,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,142,0,0,0,114,66,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,160,0,0, + 0,114,174,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,143, + 0,0,0,114,90,0,0,0,41,5,114,42,0,0,0,114, + 142,0,0,0,114,133,0,0,0,114,135,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,159,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,10,0,0,0,114,190,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,173,0,0,0,218,6,101,120,116,101,110,100,114,37, + 0,0,0,114,185,0,0,0,218,5,100,117,109,112,115,41, + 4,114,189,0,0,0,218,5,109,116,105,109,101,114,180,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,172,2, + 0,0,115,12,0,0,0,8,2,14,1,14,1,14,1,16, + 1,4,1,114,10,0,0,0,114,195,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, @@ -935,381 +956,395 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 100,32,112,121,99,46,114,3,0,0,0,114,171,0,0,0, + 78,41,7,114,191,0,0,0,114,173,0,0,0,114,192,0, + 0,0,114,37,0,0,0,114,4,0,0,0,114,185,0,0, + 0,114,193,0,0,0,41,5,114,189,0,0,0,114,182,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,181,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, - 192,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, + 97,115,104,95,112,121,99,182,2,0,0,115,14,0,0,0, + 8,2,12,1,14,1,16,1,10,1,16,1,4,1,114,10, + 0,0,0,114,196,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,92,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,197,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,193,2,0,0,115,10,0,0,0,8,5, + 12,1,10,1,12,1,20,1,114,10,0,0,0,114,201,0, + 0,0,169,2,114,165,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,60, + 1,0,0,124,1,100,1,117,0,114,29,100,2,125,1,116, + 0,124,2,100,3,131,2,114,28,9,0,124,2,160,1,124, + 0,161,1,125,1,110,39,35,0,4,0,116,2,121,157,1, + 0,1,0,1,0,89,0,110,30,37,0,110,28,116,3,160, + 4,124,1,161,1,125,1,116,5,124,1,131,1,115,57,9, + 0,116,6,116,3,160,7,161,0,124,1,131,2,125,1,110, + 10,35,0,4,0,116,8,121,156,1,0,1,0,1,0,89, + 0,110,1,37,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, + 0,114,99,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,96,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, - 209,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,14,95,111,112,101,110,95,114,101,103,105,115,116,114, - 121,38,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,45,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,60,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,76,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,26,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,113,99,113,75,100,1,83,0,124,3,116,16,117,0,114, + 131,116,0,124,2,100,6,131,2,114,130,9,0,124,2,160, + 17,124,0,161,1,125,7,110,10,35,0,4,0,116,2,121, + 155,1,0,1,0,1,0,89,0,110,10,37,0,124,7,114, + 130,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, + 4,106,18,103,0,107,2,114,153,124,1,114,153,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,154,0,0,0, + 114,204,0,0,0,114,143,0,0,0,114,19,0,0,0,114, + 104,0,0,0,114,87,0,0,0,114,68,0,0,0,114,83, + 0,0,0,114,77,0,0,0,114,160,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,59,0,0,0,114,137,0,0,0,114, + 165,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, + 207,0,0,0,114,203,0,0,0,114,75,0,0,0,114,62, + 0,0,0,41,9,114,142,0,0,0,90,8,108,111,99,97, + 116,105,111,110,114,165,0,0,0,114,203,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,207,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,210,2,0,0,115,96,0,0,0,8,12,4,4,10, + 1,2,2,12,1,2,128,12,1,4,1,2,128,2,251,10, + 7,8,1,2,1,16,1,2,128,12,1,4,1,2,128,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,12,1,2,128,12,1,4, + 1,2,128,4,2,6,1,2,128,6,2,10,1,4,1,12, + 1,12,1,4,2,2,244,2,228,2,249,115,44,0,0,0, + 140,5,18,0,146,7,27,7,167,7,47,0,175,7,56,7, + 193,45,5,65,51,0,193,51,7,65,60,7,194,27,1,65, + 60,7,194,28,1,56,7,194,29,1,27,7,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,98,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,106, - 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,109,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, + 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,52,0,0,0,9,0,116,0,160,1,116,0,106,2, + 124,0,161,2,83,0,35,0,4,0,116,3,121,25,1,0, + 1,0,1,0,116,0,160,1,116,0,106,4,124,0,161,2, + 6,0,89,0,83,0,37,0,119,0,114,70,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,77,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,39,3,0,0,115,14,0,0,0,2,2,14,1,2, + 128,12,1,18,1,2,128,2,255,115,12,0,0,0,129,6, + 8,0,136,14,24,7,153,1,24,7,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,136,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,9,0, + 124,0,160,6,124,3,161,1,53,0,125,4,116,7,160,8, + 124,4,100,4,161,2,125,5,100,0,4,0,4,0,131,3, + 1,0,110,11,35,0,49,0,115,48,119,4,37,0,1,0, + 1,0,1,0,89,0,1,0,1,0,124,5,83,0,35,0, + 4,0,116,9,121,67,1,0,1,0,1,0,89,0,100,0, + 83,0,37,0,119,0,41,5,78,122,5,37,100,46,37,100, + 114,45,0,0,0,41,2,114,164,0,0,0,90,11,115,121, + 115,95,118,101,114,115,105,111,110,114,11,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, + 90,0,0,0,114,16,0,0,0,218,12,118,101,114,115,105, + 111,110,95,105,110,102,111,114,217,0,0,0,114,216,0,0, + 0,90,10,81,117,101,114,121,86,97,108,117,101,114,77,0, + 0,0,41,6,218,3,99,108,115,114,164,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,46,3,0,0,115,34,0,0,0,6,2,8,1,6, + 2,6,1,16,1,6,255,2,2,12,1,12,1,12,255,22, + 128,4,4,2,128,12,254,6,1,2,128,2,255,115,39,0, + 0,0,153,5,56,0,158,7,43,3,165,6,56,0,171,4, + 47,11,175,1,56,0,176,3,47,11,179,3,56,0,184,7, + 65,2,7,193,3,1,65,2,7,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,117,0, + 114,11,100,0,83,0,9,0,116,1,124,4,131,1,1,0, + 110,11,35,0,4,0,116,2,121,60,1,0,1,0,1,0, + 89,0,100,0,83,0,37,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,57,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,31,100,0,83,0,119,0,41,2,78,114,205,0, + 0,0,41,8,114,224,0,0,0,114,76,0,0,0,114,77, + 0,0,0,114,209,0,0,0,114,59,0,0,0,114,137,0, + 0,0,114,160,0,0,0,218,16,115,112,101,99,95,102,114, + 111,109,95,108,111,97,100,101,114,41,8,114,222,0,0,0, + 114,164,0,0,0,114,66,0,0,0,218,6,116,97,114,103, + 101,116,114,223,0,0,0,114,165,0,0,0,114,213,0,0, + 0,114,211,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, + 61,3,0,0,115,38,0,0,0,10,2,8,1,4,1,2, + 1,10,1,2,128,12,1,6,1,2,128,14,1,14,1,6, + 1,8,1,2,1,6,254,8,3,2,252,4,255,2,254,115, + 12,0,0,0,140,4,17,0,145,7,27,7,188,1,27,7, + 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,100,0,0, + 0,114,101,0,0,0,114,102,0,0,0,114,227,0,0,0, + 114,165,0,0,0,169,4,114,222,0,0,0,114,164,0,0, + 0,114,66,0,0,0,114,211,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,77,3,0,0,115,14,0,0,0, + 6,7,2,2,4,254,12,3,8,1,6,1,4,2,114,10, + 0,0,0,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,70,0,0,0,41, + 15,114,151,0,0,0,114,150,0,0,0,114,152,0,0,0, + 114,153,0,0,0,114,220,0,0,0,114,219,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,218,0,0,0,218,12,115,116,97,116,105,99,109,101,116, + 104,111,100,114,217,0,0,0,218,11,99,108,97,115,115,109, + 101,116,104,111,100,114,224,0,0,0,114,227,0,0,0,114, + 230,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,215,0,0,0,27,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,10,0,0,0,114,215,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,98,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,75,0,0,0,114,204,0,0,0,114,126,0,0, + 0,114,105,0,0,0,41,5,114,144,0,0,0,114,164,0, + 0,0,114,121,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,207,0,0,0,99,3,0,0,115,8,0,0,0,18,3, + 16,1,14,1,16,1,114,10,0,0,0,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,144,0,0,0,114,211, + 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,107,3,0,0,243,2,0,0,0,4,0,114,10,0,0, + 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,151, + 0,0,0,114,143,0,0,0,114,90,0,0,0,114,160,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,157,0,0,0,41,3,114,144,0,0,0,218, + 6,109,111,100,117,108,101,114,189,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,110,3,0,0,115,12,0,0, + 0,12,2,8,1,4,1,8,1,4,255,20,2,114,10,0, + 0,0,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,160,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,144,0,0,0,114,164,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,118,3,0,0,115,2,0,0, + 0,12,3,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0, + 114,152,0,0,0,114,153,0,0,0,114,207,0,0,0,114, + 240,0,0,0,114,246,0,0,0,114,249,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,94,3,0,0,115,12,0,0,0, + 8,0,4,2,8,3,8,8,8,3,12,8,114,10,0,0, + 0,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, + 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,77,0,0, + 0,169,2,114,144,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,112,97, + 116,104,95,109,116,105,109,101,126,3,0,0,115,2,0,0, + 0,4,6,114,10,0,0,0,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,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,117,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,93,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,125,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,133,3,0,0,115,2,0,0,0,14,12,122, + 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,194,0,0,0,78,41,1,114,252,0,0,0,114, + 251,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,134, + 3,0,0,115,2,0,0,0,14,12,114,10,0,0,0,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, @@ -1329,279 +1364,294 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 101,116,95,100,97,116,97,41,4,114,144,0,0,0,114,135, 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, + 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,147,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, - 157,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,164,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,174,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, + 99,111,100,101,148,3,0,0,115,2,0,0,0,12,8,114, + 10,0,0,0,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,144,0,0,0,114,66,0,0,0,114,42,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,254,0,0,0,158,3,0,0,114,241,0,0,0,114,10, + 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,8,0,0,0,67, + 0,0,0,115,70,0,0,0,124,0,160,0,124,1,161,1, + 125,2,9,0,124,0,160,1,124,2,161,1,125,3,116,4, + 124,3,131,1,83,0,35,0,4,0,116,2,121,34,1,0, + 125,4,1,0,116,3,100,1,124,1,100,2,141,2,124,4, + 130,2,100,3,125,4,126,4,119,1,37,0,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, + 141,0,0,0,78,41,5,114,204,0,0,0,218,8,103,101, + 116,95,100,97,116,97,114,77,0,0,0,114,143,0,0,0, + 114,201,0,0,0,41,5,114,144,0,0,0,114,164,0,0, + 0,114,66,0,0,0,114,199,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,165,3,0,0,115, + 26,0,0,0,10,2,2,1,10,1,8,4,2,128,12,253, + 4,1,2,1,4,255,2,1,2,255,10,128,2,255,115,20, + 0,0,0,134,5,15,0,143,7,33,7,150,7,29,7,157, + 4,33,7,162,1,33,7,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,131,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,244,0,0, + 0,84,41,2,218,12,100,111,110,116,95,105,110,104,101,114, + 105,116,114,109,0,0,0,78,41,3,114,160,0,0,0,114, + 243,0,0,0,218,7,99,111,109,112,105,108,101,41,4,114, + 144,0,0,0,114,42,0,0,0,114,66,0,0,0,114,3, + 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,175,3,0,0,115,6,0,0,0,12,5,4,1,6, + 255,114,10,0,0,0,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,28,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,9, + 0,116,1,124,2,131,1,125,8,110,13,35,0,4,0,116, + 2,144,1,121,13,1,0,1,0,1,0,100,1,125,8,89, + 0,110,147,37,0,9,0,124,0,160,3,124,2,161,1,125, + 9,110,11,35,0,4,0,116,4,144,1,121,12,1,0,1, + 0,1,0,89,0,110,129,37,0,116,5,124,9,100,4,25, + 0,131,1,125,3,9,0,124,0,160,6,124,8,161,1,125, + 10,110,11,35,0,4,0,116,4,144,1,121,11,1,0,1, + 0,1,0,89,0,110,105,37,0,124,1,124,8,100,5,156, + 2,125,11,9,0,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, + 141,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, + 10,100,10,107,3,114,140,124,7,115,122,116,9,106,10,100, + 11,107,2,114,140,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,182, - 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,123,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,16,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, - 22,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,26,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, - 29,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, + 3,124,9,100,12,25,0,124,1,124,11,131,5,1,0,110, + 13,35,0,4,0,116,15,116,16,102,2,144,1,121,10,1, + 0,1,0,1,0,89,0,110,16,37,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,114, + 189,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,1,115,7,124,8,100,1,117, + 1,144,1,114,7,124,3,100,1,117,1,144,1,114,7,124, + 6,114,233,124,5,100,1,117,0,114,226,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,9,0,124,0,160,26,124,2,124,8,124,10,161, + 3,1,0,124,14,83,0,35,0,4,0,116,2,144,1,121, + 9,1,0,1,0,1,0,89,0,124,14,83,0,37,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,194,0,0,0,114,184,0,0,0,114,170,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,142,0,0,0,114,133,0,0,0, + 114,135,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,204,0,0, + 0,114,122,0,0,0,114,108,0,0,0,114,253,0,0,0, + 114,77,0,0,0,114,34,0,0,0,114,0,1,0,0,114, + 177,0,0,0,218,10,109,101,109,111,114,121,118,105,101,119, + 114,188,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,182,0,0, + 0,218,17,95,82,65,87,95,77,65,71,73,67,95,78,85, + 77,66,69,82,114,183,0,0,0,114,181,0,0,0,114,143, + 0,0,0,114,175,0,0,0,114,160,0,0,0,114,174,0, + 0,0,114,190,0,0,0,114,6,1,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,196,0,0,0,114,195,0,0,0, + 114,4,0,0,0,114,255,0,0,0,41,15,114,144,0,0, + 0,114,164,0,0,0,114,135,0,0,0,114,179,0,0,0, + 114,199,0,0,0,114,182,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,133,0,0,0,218,2,115,116,114,42,0, + 0,0,114,176,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,242,0,0,0,183,3,0,0,115,188,0, + 0,0,10,7,4,1,4,1,4,1,4,1,4,1,2,1, + 10,1,2,128,14,1,8,1,2,128,2,2,12,1,2,128, + 14,1,4,1,2,128,12,2,2,1,12,1,2,128,14,1, + 4,1,2,128,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,2,128,8,2,2,1,4,255,6,2, + 2,1,2,1,6,254,8,3,10,1,12,1,12,1,18,1, + 6,1,4,255,4,2,8,1,10,1,14,1,6,2,6,1, + 4,255,2,2,14,1,4,3,2,128,14,254,2,1,4,1, + 2,128,4,0,2,254,2,233,2,225,2,250,2,251,115,80, + 0,0,0,144,4,21,0,149,10,33,7,163,5,41,0,169, + 8,51,7,187,5,65,1,0,193,1,8,65,11,7,193,18, + 65,5,66,24,0,194,24,10,66,36,7,195,50,7,67,59, + 0,195,59,8,68,6,7,196,9,1,68,6,7,196,10,1, + 66,36,7,196,11,1,65,11,7,196,12,1,51,7,196,13, + 1,33,7,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,151,0, + 0,0,114,150,0,0,0,114,152,0,0,0,114,252,0,0, + 0,114,253,0,0,0,114,255,0,0,0,114,254,0,0,0, + 114,2,1,0,0,114,6,1,0,0,114,242,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,250,0,0,0,124,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,10,0,0,0,114,250,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,184,0,0,0,41, + 3,114,144,0,0,0,114,164,0,0,0,114,66,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 203,0,0,0,41,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,46,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,55,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,11,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, + 237,0,0,0,17,4,0,0,115,4,0,0,0,6,3,10, + 1,114,10,0,0,0,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,70,0,0,0,169,2,218,9,95,95,99,108,97,115, + 115,95,95,114,157,0,0,0,169,2,114,144,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,23,4,0, + 0,243,6,0,0,0,12,1,10,1,2,255,114,10,0,0, + 0,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,70,0,0,0,169,3,218,4,104, + 97,115,104,114,142,0,0,0,114,66,0,0,0,169,1,114, + 144,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,27,4,0, + 0,243,2,0,0,0,20,1,114,10,0,0,0,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,12,1,0,0,114,249,0,0,0,114,248,0,0, + 0,169,1,114,15,1,0,0,114,7,0,0,0,114,8,0, + 0,0,114,249,0,0,0,30,4,0,0,115,2,0,0,0, + 16,10,114,10,0,0,0,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,72,0,0,0,114,248,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,204,0,0,0, + 42,4,0,0,243,2,0,0,0,6,3,114,10,0,0,0, + 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,9,0,0,0,67,0, + 0,0,115,136,0,0,0,116,0,124,0,116,1,116,2,102, + 2,131,2,114,38,116,3,160,4,116,5,124,1,131,1,161, + 1,53,0,125,2,124,2,160,6,161,0,2,0,100,1,4, + 0,4,0,131,3,1,0,83,0,35,0,49,0,115,30,119, + 4,37,0,1,0,1,0,1,0,89,0,1,0,1,0,100, + 1,83,0,116,3,160,7,124,1,100,2,161,2,53,0,125, + 2,124,2,160,6,161,0,2,0,100,1,4,0,4,0,131, + 3,1,0,83,0,35,0,49,0,115,60,119,4,37,0,1, + 0,1,0,1,0,89,0,1,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,186,0,0,0,114,250,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, + 92,0,0,0,90,9,111,112,101,110,95,99,111,100,101,114, + 110,0,0,0,90,4,114,101,97,100,114,93,0,0,0,41, + 3,114,144,0,0,0,114,66,0,0,0,114,95,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 0,1,0,0,47,4,0,0,115,22,0,0,0,14,2,16, + 1,6,1,12,255,2,1,26,128,14,2,6,1,12,255,2, + 1,26,128,115,24,0,0,0,142,4,25,3,153,4,29,11, + 158,3,29,11,172,4,55,3,183,4,59,11,188,3,59,11, + 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,32,1,0,0,41,3,114,144,0,0,0,114,245, + 0,0,0,114,32,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,56,4,0,0, + 115,4,0,0,0,12,2,8,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, + 153,0,0,0,114,237,0,0,0,114,17,1,0,0,114,23, + 1,0,0,114,161,0,0,0,114,249,0,0,0,114,204,0, + 0,0,114,0,1,0,0,114,34,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,26,1,0,0,114,8,0,0,0,114, + 12,1,0,0,12,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,10,0,0,0,114,12,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, @@ -1617,141 +1667,148 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 104,101,32,112,97,116,104,46,41,2,114,194,0,0,0,114, + 7,1,0,0,78,41,3,114,76,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, + 3,114,144,0,0,0,114,66,0,0,0,114,11,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 252,0,0,0,65,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,70,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,75,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,61,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,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,110, - 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, + 253,0,0,0,66,4,0,0,115,4,0,0,0,8,2,14, + 1,114,10,0,0,0,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,140,0,0,0,114,254,0,0, + 0,41,5,114,144,0,0,0,114,135,0,0,0,114,133,0, + 0,0,114,42,0,0,0,114,79,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,255,0,0,0, + 71,4,0,0,115,4,0,0,0,8,2,16,1,114,10,0, + 0,0,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,88,0,0,0,114,37,1,0,0,99,3, + 0,0,0,0,0,0,0,1,0,0,0,9,0,0,0,9, + 0,0,0,67,0,0,0,115,250,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,47,125,7,116,4,124,4,124,7,131,2,125,4, + 9,0,116,5,160,6,124,4,161,1,1,0,113,35,35,0, + 4,0,116,7,121,58,1,0,1,0,1,0,89,0,113,35, + 4,0,116,8,121,124,1,0,125,8,1,0,116,9,160,10, + 100,1,124,4,124,8,161,3,1,0,89,0,100,2,125,8, + 126,8,1,0,100,2,83,0,100,2,125,8,126,8,119,1, + 37,0,9,0,116,11,124,1,124,2,124,3,131,3,1,0, + 116,9,160,10,100,3,124,1,161,2,1,0,100,2,83,0, + 35,0,4,0,116,8,121,123,1,0,125,8,1,0,116,9, + 160,10,100,1,124,1,124,8,161,3,1,0,89,0,100,2, + 125,8,126,8,100,2,83,0,100,2,125,8,126,8,119,1, + 37,0,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,75,0,0,0,114,84,0,0,0,114,62,0, + 0,0,218,8,114,101,118,101,114,115,101,100,114,68,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,77, + 0,0,0,114,160,0,0,0,114,174,0,0,0,114,96,0, + 0,0,41,9,114,144,0,0,0,114,66,0,0,0,114,42, + 0,0,0,114,38,1,0,0,218,6,112,97,114,101,110,116, + 114,121,0,0,0,114,64,0,0,0,114,69,0,0,0,114, + 1,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,254,0,0,0,76,4,0,0,115,60,0,0, + 0,12,2,4,1,12,2,12,1,10,1,12,254,12,4,10, + 1,2,1,12,1,2,128,12,1,4,2,12,1,6,3,4, + 1,4,255,14,2,10,128,2,1,12,1,16,1,2,128,12, + 1,8,2,2,1,16,255,10,128,2,254,2,247,115,62,0, + 0,0,171,5,49,2,177,7,65,18,9,186,6,65,18,9, + 193,0,7,65,14,9,193,14,4,65,18,9,193,20,12,65, + 34,0,193,34,7,65,58,7,193,41,7,65,54,7,193,54, + 4,65,58,7,193,59,1,65,58,7,193,60,1,65,18,9, + 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,151, + 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, + 0,0,114,253,0,0,0,114,255,0,0,0,114,254,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,35,1,0,0,62,4,0,0,115,10, + 0,0,0,8,0,4,2,8,2,8,5,18,5,114,10,0, + 0,0,114,35,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,184,0,0,0,114,170,0,0,0,41,2,114,142,0, + 0,0,114,133,0,0,0,41,5,114,204,0,0,0,114,0, + 1,0,0,114,177,0,0,0,114,190,0,0,0,114,8,1, + 0,0,41,5,114,144,0,0,0,114,164,0,0,0,114,66, + 0,0,0,114,42,0,0,0,114,176,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,242,0,0, + 0,111,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, + 114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,2,1,0,0,127,4,0,0, + 114,25,0,0,0,114,10,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,151, + 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, + 0,0,114,242,0,0,0,114,2,1,0,0,114,7,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,1,1,0,0,126,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,106,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,139,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,143,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,147,4, - 0,0,114,23,1,0,0,122,28,69,120,116,101,110,115,105, + 114,42,1,0,0,107,4,0,0,115,8,0,0,0,8,0, + 4,2,8,2,12,16,114,10,0,0,0,114,42,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,31,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,70, + 0,0,0,114,184,0,0,0,41,3,114,144,0,0,0,114, + 142,0,0,0,114,66,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,237,0,0,0,140,4,0, + 0,115,4,0,0,0,6,1,10,1,114,10,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,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,13,1,0,0,114,70,0,0,0, + 114,14,1,0,0,114,16,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,17,1,0,0,144,4, + 0,0,114,18,1,0,0,114,10,0,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,19,1,0,0,114,70,0,0,0,114,20,1,0,0, + 114,22,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,23,1,0,0,148,4,0,0,114,24,1, + 0,0,114,10,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,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, @@ -1762,483 +1819,497 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,150, + 102,114,111,109,32,123,33,114,125,78,41,7,114,160,0,0, + 0,114,243,0,0,0,114,188,0,0,0,90,14,99,114,101, + 97,116,101,95,100,121,110,97,109,105,99,114,174,0,0,0, + 114,142,0,0,0,114,66,0,0,0,41,3,114,144,0,0, + 0,114,211,0,0,0,114,245,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,240,0,0,0,151, 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,158,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, + 8,1,4,255,4,2,114,10,0,0,0,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, + 160,0,0,0,114,243,0,0,0,114,188,0,0,0,90,12, + 101,120,101,99,95,100,121,110,97,109,105,99,114,174,0,0, + 0,114,142,0,0,0,114,66,0,0,0,169,2,114,144,0, + 0,0,114,245,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,246,0,0,0,159,4,0,0,115, + 8,0,0,0,14,2,6,1,8,1,8,255,114,10,0,0, + 0,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,237,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, + 168,4,0,0,115,6,0,0,0,6,128,2,1,20,255,114, + 10,0,0,0,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,75,0,0,0,114, + 66,0,0,0,218,3,97,110,121,114,233,0,0,0,114,248, + 0,0,0,114,7,0,0,0,114,46,1,0,0,114,8,0, + 0,0,114,207,0,0,0,165,4,0,0,115,8,0,0,0, + 14,2,12,1,2,1,8,255,114,10,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,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,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,167,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,164,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, + 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,248,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,242,0,0,0,171,4,0, + 0,114,25,0,0,0,114,10,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,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,170,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,174,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, - 178,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,131,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,191,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,197,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,207,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,211,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,224,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,227,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,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,248,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,2,1,0,0,175, + 4,0,0,114,25,0,0,0,114,10,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,27,1,0,0,114,28,1,0,0, + 114,72,0,0,0,114,248,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,204,0,0,0,179,4, + 0,0,114,29,1,0,0,114,10,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0, + 114,153,0,0,0,114,237,0,0,0,114,17,1,0,0,114, + 23,1,0,0,114,240,0,0,0,114,246,0,0,0,114,207, + 0,0,0,114,242,0,0,0,114,2,1,0,0,114,161,0, + 0,0,114,204,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,31,1,0,0, + 132,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,10,0,0,0,114,31,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,70,0,0,0,41,6,218,5,95,110,97,109,101,218,5, + 95,112,97,116,104,114,137,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, + 144,0,0,0,114,142,0,0,0,114,66,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,237,0,0,0,192, + 4,0,0,115,8,0,0,0,6,1,6,1,14,1,10,1, + 114,10,0,0,0,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,98,0,0,0,114,11,0,0,0,41,2, + 114,16,0,0,0,114,66,0,0,0,90,8,95,95,112,97, + 116,104,95,95,78,41,2,114,49,1,0,0,114,105,0,0, + 0,41,4,114,144,0,0,0,114,41,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,198,4, + 0,0,115,8,0,0,0,18,2,8,1,4,2,8,3,114, + 10,0,0,0,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,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,230,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,233,4,0,0,114,61,1,0,0,122,22,95, + 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,70,0,0,0,41,4,114,56,1, + 0,0,114,156,0,0,0,114,16,0,0,0,218,7,109,111, + 100,117,108,101,115,41,3,114,144,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, + 51,1,0,0,208,4,0,0,115,4,0,0,0,12,1,16, + 1,114,10,0,0,0,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,70,0,0,0,41,8,114,137,0,0, + 0,114,51,1,0,0,114,52,1,0,0,114,53,1,0,0, + 114,49,1,0,0,114,165,0,0,0,114,203,0,0,0,114, + 50,1,0,0,41,3,114,144,0,0,0,90,11,112,97,114, + 101,110,116,95,112,97,116,104,114,211,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,212,4,0,0,115,16, + 0,0,0,12,2,10,1,14,1,18,3,6,1,8,1,6, + 1,6,1,114,10,0,0,0,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, + 70,0,0,0,41,2,218,4,105,116,101,114,114,58,1,0, + 0,114,22,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,225, + 4,0,0,243,2,0,0,0,12,1,114,10,0,0,0,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,70,0,0,0,169,1,114,58,1,0,0,41,2, + 114,144,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,228,4,0,0,114,62,1,0, + 0,114,10,0,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,70, + 0,0,0,41,1,114,50,1,0,0,41,3,114,144,0,0, + 0,114,64,1,0,0,114,66,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,231,4,0,0,115,2,0,0,0, + 14,1,114,10,0,0,0,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,59,1,0, + 0,114,70,0,0,0,41,2,114,4,0,0,0,114,58,1, + 0,0,114,22,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,234, + 4,0,0,114,62,1,0,0,114,10,0,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, + 116,104,40,123,33,114,125,41,41,2,114,90,0,0,0,114, + 50,1,0,0,114,22,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,236,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,239,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, - 242,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,184,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,248,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,251,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,6,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,9,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, + 95,95,237,4,0,0,114,62,1,0,0,114,10,0,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,70,0,0,0,114,63,1,0,0,169,2,114, + 144,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,240,4,0,0,114,62,1,0,0, + 114,10,0,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,70,0,0,0,41,2,114,50,1,0,0,114,62,0,0, + 0,114,70,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,62,0,0,0,243,4,0,0,243,2, + 0,0,0,16,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152, + 0,0,0,114,153,0,0,0,114,237,0,0,0,114,56,1, + 0,0,114,51,1,0,0,114,58,1,0,0,114,61,1,0, + 0,114,65,1,0,0,114,66,1,0,0,114,67,1,0,0, + 114,69,1,0,0,114,72,1,0,0,114,62,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,48,1,0,0,185,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,10,0,0,0, + 114,48,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, + 70,0,0,0,41,2,114,48,1,0,0,114,50,1,0,0, + 114,54,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,237,0,0,0,249,4,0,0,115,2,0, + 0,0,18,1,114,10,0,0,0,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,100,0,0,0,114,101,0,0,0,114,102,0, + 0,0,114,90,0,0,0,114,151,0,0,0,41,1,114,245, + 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,252, + 4,0,0,115,8,0,0,0,6,7,2,1,4,255,12,2, + 114,10,0,0,0,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,248,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,207, + 0,0,0,7,5,0,0,243,2,0,0,0,4,1,114,10, + 0,0,0,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,11,0,0,0,114,7,0,0,0,114,248,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 241,0,0,0,12,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,15,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,18,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, + 2,1,0,0,10,5,0,0,114,76,1,0,0,114,10,0, + 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,11,0,0,0,122,8,60,115,116,114,105,110,103,62,114, + 244,0,0,0,84,41,1,114,4,1,0,0,41,1,114,5, + 1,0,0,114,248,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,242,0,0,0,13,5,0,0, + 114,73,1,0,0,114,10,0,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,238,0,0,0,114,7,0,0,0,114,239,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,240,0,0,0,16,5,0,0,114,241,0,0,0,114, + 10,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,70,0,0,0,114,7,0,0,0, + 114,43,1,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,246,0,0,0,19,5,0,0,114,76,1, + 0,0,114,10,0,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,160, + 0,0,0,114,174,0,0,0,114,50,1,0,0,114,247,0, + 0,0,114,248,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,249,0,0,0,22,5,0,0,115, + 8,0,0,0,6,7,4,1,4,255,12,3,114,10,0,0, + 0,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,33,1,0,0,114,77,1,0,0,114,50,1,0,0,41, + 3,114,144,0,0,0,114,245,0,0,0,114,77,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 248,0,0,0,21,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,33,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,247,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,44,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,54,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,67,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,89,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, + 34,1,0,0,34,5,0,0,115,4,0,0,0,12,1,10, + 1,114,10,0,0,0,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, + 151,0,0,0,114,150,0,0,0,114,152,0,0,0,114,237, + 0,0,0,114,234,0,0,0,114,75,1,0,0,114,207,0, + 0,0,114,2,1,0,0,114,242,0,0,0,114,240,0,0, + 0,114,246,0,0,0,114,249,0,0,0,114,34,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,74,1,0,0,248,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,10,0,0,0,114,74,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, + 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,154,0,0,0,114,79,1,0,0,41,2,114,142,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,79,1,0,0,45,5,0, + 0,115,14,0,0,0,22,4,8,1,10,1,10,1,8,1, + 2,128,4,252,114,10,0,0,0,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,78,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,18,125,1,9,0,124,1,124, + 0,131,1,2,0,1,0,83,0,35,0,4,0,116,5,121, + 38,1,0,1,0,1,0,89,0,113,17,37,0,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,100,0,0,0,114,101,0,0,0,114,163,0,0, + 0,114,143,0,0,0,41,2,114,66,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,55, + 5,0,0,115,22,0,0,0,16,3,12,1,10,1,2,1, + 12,1,2,128,12,1,4,1,2,128,4,2,2,253,115,12, + 0,0,0,148,3,26,2,154,7,35,9,166,1,35,9,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,21,9,0,116, + 0,160,1,161,0,125,1,110,11,35,0,4,0,116,2,121, + 51,1,0,1,0,1,0,89,0,100,2,83,0,37,0,9, + 0,116,3,106,4,124,1,25,0,125,2,124,2,83,0,35, + 0,4,0,116,5,121,50,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,37,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,11,0,0,0,78,41,7,114,19,0,0,0, + 114,83,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,81,1, + 0,0,218,8,75,101,121,69,114,114,111,114,114,85,1,0, + 0,41,3,114,222,0,0,0,114,66,0,0,0,114,83,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,68,5,0,0,115,36,0,0,0, + 8,8,2,1,10,1,2,128,12,1,6,3,2,128,2,1, + 10,1,4,4,2,128,12,253,10,1,12,1,4,1,2,128, + 2,253,2,250,115,24,0,0,0,133,4,10,0,138,7,20, + 7,150,5,29,0,157,17,49,7,178,1,49,7,179,1,20, + 7,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,162,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,154,0,0,0,114,160,0,0,0,90,12,95,111, + 98,106,101,99,116,95,110,97,109,101,114,100,0,0,0,114, + 101,0,0,0,114,163,0,0,0,114,162,0,0,0,114,230, + 0,0,0,114,225,0,0,0,114,208,0,0,0,114,203,0, + 0,0,41,7,114,222,0,0,0,114,164,0,0,0,114,83, + 1,0,0,114,167,0,0,0,114,165,0,0,0,114,166,0, + 0,0,114,211,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,90,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,114,10,0,0,0, 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, @@ -2257,499 +2328,511 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 110,97,109,101,46,78,114,227,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, + 41,13,114,186,0,0,0,114,110,0,0,0,218,5,98,121, + 116,101,115,114,88,1,0,0,114,154,0,0,0,114,227,0, + 0,0,114,89,1,0,0,114,165,0,0,0,114,203,0,0, + 0,114,143,0,0,0,114,192,0,0,0,114,160,0,0,0, + 114,208,0,0,0,41,9,114,222,0,0,0,114,164,0,0, + 0,114,66,0,0,0,114,226,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, + 114,121,114,83,1,0,0,114,211,0,0,0,114,166,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,110,5,0,0,115, + 218,9,95,103,101,116,95,115,112,101,99,111,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,142,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, - 166,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, - 182,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,40,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,211,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, - 205,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,221,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,227,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,242,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,247,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, + 8,1,8,1,10,5,2,128,12,2,6,1,4,1,114,10, + 0,0,0,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,66, + 0,0,0,114,92,1,0,0,114,165,0,0,0,114,203,0, + 0,0,114,206,0,0,0,114,48,1,0,0,41,6,114,222, + 0,0,0,114,164,0,0,0,114,66,0,0,0,114,226,0, + 0,0,114,211,0,0,0,114,91,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,227,0,0,0, + 143,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,114,10,0,0,0,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,228,0,0, + 0,114,229,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,230,0,0,0,167,5,0,0,115,14, + 0,0,0,6,8,2,2,4,254,12,3,8,1,4,1,6, + 1,114,10,0,0,0,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,93,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,145,0,0, + 0,114,146,0,0,0,114,93,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,94,1,0,0,183, + 5,0,0,115,4,0,0,0,12,10,16,1,114,10,0,0, + 0,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,70,0,0,0,114,231,0,0,0,41,14,114,151,0,0, + 0,114,150,0,0,0,114,152,0,0,0,114,153,0,0,0, + 114,234,0,0,0,114,79,1,0,0,114,85,1,0,0,114, + 235,0,0,0,114,88,1,0,0,114,89,1,0,0,114,92, + 1,0,0,114,227,0,0,0,114,230,0,0,0,114,94,1, + 0,0,114,7,0,0,0,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, + 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,10,0,0,0,114,78,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,70,0,0,0,114,7,0, + 0,0,114,44,1,0,0,169,1,114,165,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,9,0,0,0,212,5,0, + 0,115,4,0,0,0,6,128,18,0,114,10,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,98,0,0,0,114,131,0,0, + 0,78,41,11,114,192,0,0,0,218,8,95,108,111,97,100, + 101,114,115,114,66,0,0,0,114,87,0,0,0,114,68,0, + 0,0,114,19,0,0,0,114,83,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,144,0,0,0,114,66,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,213,0,0,0,114,7,0,0,0,114, + 96,1,0,0,114,8,0,0,0,114,237,0,0,0,206,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,114,10,0,0,0, + 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,131,0,0,0,78,41,1,114,98,1,0,0,114,22,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,79,1,0,0,222,5,0,0,114,82,0,0,0,114, + 10,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,100,0,0,0,114,101, + 0,0,0,114,102,0,0,0,114,227,0,0,0,114,165,0, + 0,0,114,203,0,0,0,41,3,114,144,0,0,0,114,164, + 0,0,0,114,211,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,162,0,0,0,228,5,0,0, + 115,14,0,0,0,6,7,2,2,4,254,10,3,8,1,8, + 1,16,1,114,10,0,0,0,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,202,0,0,0, + 41,1,114,214,0,0,0,41,7,114,144,0,0,0,114,212, + 0,0,0,114,164,0,0,0,114,66,0,0,0,90,4,115, + 109,115,108,114,226,0,0,0,114,165,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,92,1,0, + 0,243,5,0,0,115,8,0,0,0,10,1,8,1,2,1, + 6,255,114,10,0,0,0,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,9,0, + 116,1,124,0,106,2,112,17,116,3,160,4,161,0,131,1, + 106,5,125,5,110,12,35,0,4,0,116,6,121,190,1,0, + 1,0,1,0,100,4,125,5,89,0,110,1,37,0,124,5, + 124,0,106,7,107,3,114,45,124,0,160,8,161,0,1,0, + 124,5,124,0,95,7,116,9,131,0,114,56,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,108,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,103,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,74,116,17,124,8, + 131,1,125,3,124,0,106,14,68,0,93,55,92,2,125,9, + 125,10,9,0,116,13,124,0,106,2,124,4,124,9,23,0, + 131,2,125,12,110,12,35,0,4,0,116,18,121,189,1,0, + 1,0,1,0,89,0,1,0,100,6,83,0,37,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,166,116,15,124,12,131,1, + 114,166,124,0,160,16,124,10,124,1,124,12,100,6,124,2, + 161,5,2,0,1,0,83,0,113,111,124,3,114,187,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,98, + 0,0,0,114,45,0,0,0,114,131,0,0,0,114,237,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,105,0,0,0,114,76,0, + 0,0,114,66,0,0,0,114,19,0,0,0,114,83,0,0, + 0,114,36,1,0,0,114,77,0,0,0,114,98,1,0,0, + 218,11,95,102,105,108,108,95,99,97,99,104,101,114,22,0, + 0,0,114,101,1,0,0,114,132,0,0,0,114,100,1,0, + 0,114,68,0,0,0,114,97,1,0,0,114,81,0,0,0, + 114,92,1,0,0,114,84,0,0,0,114,112,0,0,0,114, + 160,0,0,0,114,174,0,0,0,114,208,0,0,0,114,203, + 0,0,0,41,14,114,144,0,0,0,114,164,0,0,0,114, + 226,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, + 194,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,45,1,0,0,114,212,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,211,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,227,0,0, + 0,248,5,0,0,115,94,0,0,0,4,5,14,1,2,1, + 22,1,2,128,12,1,8,1,2,128,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, + 18,1,2,128,12,1,8,1,2,128,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,71,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,42, - 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,83,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,73,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,91,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,196,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,97,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, - 120,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,131,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,136,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, + 4,1,4,1,2,244,2,228,115,31,0,0,0,138,10,21, + 0,149,9,32,7,193,52,8,65,61,2,193,61,7,66,8, + 9,194,61,1,66,8,9,194,62,1,32,7,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,194,0,0,0, + 124,0,106,0,125,1,9,0,116,1,160,2,124,1,112,11, + 116,1,160,3,161,0,161,1,125,2,110,15,35,0,4,0, + 116,4,116,5,116,6,102,3,121,96,1,0,1,0,1,0, + 103,0,125,2,89,0,110,1,37,0,116,7,106,8,160,9, + 100,1,161,1,115,41,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,67,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,46,124,3,124,0,95,11,116,7,106,8, + 160,9,116,16,161,1,114,94,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, + 98,0,0,0,114,89,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,132,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,14,0,0,0,72,6,0,0,115,2,0,0,0,20, + 0,114,10,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,66,0,0,0,114,19,0,0,0,90,7, + 108,105,115,116,100,105,114,114,83,0,0,0,114,86,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,99,1,0,0,114,100,1,0,0,114, + 127,0,0,0,114,90,0,0,0,114,132,0,0,0,218,3, + 97,100,100,114,28,0,0,0,114,101,1,0,0,41,9,114, + 144,0,0,0,114,66,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,71,1,0,0,114, + 142,0,0,0,114,55,1,0,0,114,45,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,103,1,0,0,43,6,0,0, + 115,42,0,0,0,6,2,2,1,20,1,2,128,18,1,8, + 3,2,128,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,115, + 13,0,0,0,132,9,14,0,142,12,28,7,193,32,1,28, + 7,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,72,0,0,0,78,41,2,114, + 84,0,0,0,114,143,0,0,0,114,72,0,0,0,169,2, + 114,222,0,0,0,114,102,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,84,6, + 0,0,115,6,0,0,0,8,2,12,1,16,1,114,10,0, + 0,0,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,222,0,0,0,114,102,1,0,0,114,108,1,0, + 0,114,7,0,0,0,114,107,1,0,0,114,8,0,0,0, + 218,9,112,97,116,104,95,104,111,111,107,74,6,0,0,115, + 4,0,0,0,14,10,4,6,114,10,0,0,0,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,68,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,90,0,0,0,114,66,0, + 0,0,114,22,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,69,1,0,0,92,6,0,0,114, + 62,1,0,0,114,10,0,0,0,122,19,70,105,108,101,70, + 105,110,100,101,114,46,95,95,114,101,112,114,95,95,114,70, + 0,0,0,41,15,114,151,0,0,0,114,150,0,0,0,114, + 152,0,0,0,114,153,0,0,0,114,237,0,0,0,114,79, + 1,0,0,114,168,0,0,0,114,230,0,0,0,114,162,0, + 0,0,114,92,1,0,0,114,227,0,0,0,114,103,1,0, + 0,114,235,0,0,0,114,109,1,0,0,114,69,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,95,1,0,0,197,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,10,0,0,0,114, + 95,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,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,9,0,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,100,0,83,0,35,0,4,0, + 116,5,121,72,1,0,1,0,1,0,89,0,100,0,83,0, + 37,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,96,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, + 165,0,0,0,114,42,1,0,0,114,35,1,0,0,114,214, + 0,0,0,218,9,69,120,99,101,112,116,105,111,110,41,6, + 90,2,110,115,114,142,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,165, + 0,0,0,114,211,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,98,6,0,0,115,40,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,12,1,2,128, + 12,1,6,2,2,128,2,254,115,15,0,0,0,171,16,61, + 0,189,7,65,7,7,193,8,1,65,7,7,114,114,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,31,1,0,0, + 114,188,0,0,0,218,18,101,120,116,101,110,115,105,111,110, + 95,115,117,102,102,105,120,101,115,114,35,1,0,0,114,128, + 0,0,0,114,42,1,0,0,114,114,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,209,0,0, + 0,121,6,0,0,115,8,0,0,0,12,5,8,1,8,1, + 10,1,114,10,0,0,0,114,209,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,70,0,0,0,41,1,114,160,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,132,6,0,0,115,2,0, + 0,0,8,2,114,10,0,0,0,114,117,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,117, + 1,0,0,114,209,0,0,0,114,16,0,0,0,114,84,1, + 0,0,114,192,0,0,0,114,95,1,0,0,114,109,1,0, + 0,218,9,109,101,116,97,95,112,97,116,104,114,62,0,0, + 0,114,78,1,0,0,41,2,114,116,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,137,6,0,0,115,8,0, + 0,0,8,2,6,1,20,1,16,1,114,10,0,0,0,114, + 119,1,0,0,41,1,114,88,0,0,0,114,70,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,41,1,84,41,85,114,153,0,0,0,114,160,0,0,0, + 114,188,0,0,0,114,92,0,0,0,114,16,0,0,0,114, + 100,0,0,0,114,185,0,0,0,114,26,0,0,0,114,232, + 0,0,0,90,2,110,116,114,19,0,0,0,114,216,0,0, + 0,90,5,112,111,115,105,120,114,51,0,0,0,218,3,97, + 108,108,114,60,0,0,0,114,137,0,0,0,114,58,0,0, + 0,114,63,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,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,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, + 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,68,0,0,0,114,75,0,0,0, + 114,76,0,0,0,114,80,0,0,0,114,81,0,0,0,114, + 84,0,0,0,114,87,0,0,0,114,96,0,0,0,218,4, + 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,187, + 0,0,0,114,35,0,0,0,114,173,0,0,0,114,34,0, + 0,0,114,40,0,0,0,114,9,1,0,0,114,117,0,0, + 0,114,113,0,0,0,114,128,0,0,0,114,62,0,0,0, + 114,115,1,0,0,114,233,0,0,0,114,114,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, + 70,73,88,69,83,114,122,0,0,0,114,129,0,0,0,114, + 136,0,0,0,114,138,0,0,0,114,140,0,0,0,114,161, + 0,0,0,114,168,0,0,0,114,177,0,0,0,114,181,0, + 0,0,114,183,0,0,0,114,190,0,0,0,114,195,0,0, + 0,114,196,0,0,0,114,201,0,0,0,218,6,111,98,106, + 101,99,116,114,210,0,0,0,114,214,0,0,0,114,215,0, + 0,0,114,236,0,0,0,114,250,0,0,0,114,12,1,0, + 0,114,35,1,0,0,114,42,1,0,0,114,31,1,0,0, + 114,48,1,0,0,114,74,1,0,0,114,78,1,0,0,114, + 95,1,0,0,114,114,1,0,0,114,209,0,0,0,114,117, + 1,0,0,114,119,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, @@ -2757,11 +2840,11 @@ 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,30,12,1,4,2,4,1,6, + 8,10,5,10,22,0,127,16,31,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, + 11,12,5,114,10,0,0,0, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index fa00ffc89ea268..873fc7df176833 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -73,351 +73,359 @@ 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,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, + 115,4,0,0,0,8,0,4,1,243,0,0,0,0,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,40,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,9,0,116,8,160,9,124,1, + 161,1,125,4,110,36,35,0,4,0,116,10,116,11,102,2, + 121,147,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,15,37,0,124,4, + 106,14,100,6,64,0,100,7,107,3,114,89,116,4,100,5, + 124,1,100,3,141,2,130,1,113,91,113,33,9,0,116,15, + 124,1,25,0,125,7,110,18,35,0,4,0,116,16,121,146, + 1,0,1,0,1,0,116,17,124,1,131,1,125,7,124,7, + 116,15,124,1,60,0,89,0,110,1,37,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,144,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,14, + 0,0,0,114,18,0,0,0,114,32,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,76,0,0,0,10,1,8, + 1,10,1,4,1,12,1,4,1,12,1,4,2,2,1,2, + 1,12,1,2,128,16,1,14,3,8,1,12,1,4,1,14, + 1,2,128,14,3,12,2,2,1,2,240,2,18,10,1,2, + 128,12,1,8,1,12,1,2,128,6,1,6,1,22,2,6, + 1,18,1,4,255,2,249,2,239,115,33,0,0,0,162,5, + 40,0,168,33,65,11,7,193,28,4,65,33,0,193,33,15, + 65,50,7,194,18,1,65,50,7,194,19,1,65,11,7,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,30,0,0,0,114,21,0,0,0,41,5,114,33,0, + 0,0,218,8,102,117,108,108,110,97,109,101,114,14,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,114,11,0,0,0,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,36,0,0,0,114,37,0,0,0,114,38,0,0,0, + 114,45,0,0,0,41,3,114,33,0,0,0,114,42,0,0, + 0,114,14,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,114,11,0,0,0,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,47,0,0,0,41, + 10,114,39,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,40,0,0,0,114,41,0,0,0,114,30, + 0,0,0,114,21,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,25,0,0,0,41,7,114,33,0,0,0,114,42,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,44,0,0,0,114,14,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,114,11,0,0,0,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,33,0,0,0,114,42,0,0,0,218,4,99,111,100,101, + 218,9,105,115,112,97,99,107,97,103,101,114,44,0,0,0, 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,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,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, - 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,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,122,22,122,105,112,105,109,112,111, + 8,103,101,116,95,99,111,100,101,190,0,0,0,115,4,0, + 0,0,16,6,4,1,114,11,0,0,0,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,114,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,9,0,124,0,106,6,124, + 2,25,0,125,3,110,14,35,0,4,0,116,7,121,56,1, + 0,1,0,1,0,116,8,100,2,100,3,124,2,131,3,130, + 1,37,0,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,19,0,0,0,114,20, + 0,0,0,114,21,0,0,0,218,10,115,116,97,114,116,115, + 119,105,116,104,114,30,0,0,0,218,3,108,101,110,114,29, + 0,0,0,114,27,0,0,0,114,23,0,0,0,218,9,95, + 103,101,116,95,100,97,116,97,41,4,114,33,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,26,0,0,0,4,6,12,1,4, + 2,16,1,22,1,2,2,12,1,2,128,12,1,12,1,2, + 128,12,1,2,254,115,12,0,0,0,158,5,36,0,164,13, + 49,7,184,1,49,7,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,51,0,0,0,114,53,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,114,11,0,0, + 0,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,128,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,9,0,124,0,106,5,124,4,25,0,125,5,110, + 11,35,0,4,0,116,6,121,63,1,0,1,0,1,0,89, + 0,100,1,83,0,37,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,48,0,0,0,250,11,95,95,105,110,105,116,95,95, + 46,112,121,250,3,46,112,121,41,10,114,39,0,0,0,114, + 3,0,0,0,114,40,0,0,0,114,22,0,0,0,114,31, + 0,0,0,114,29,0,0,0,114,27,0,0,0,114,60,0, + 0,0,114,30,0,0,0,218,6,100,101,99,111,100,101,41, + 6,114,33,0,0,0,114,42,0,0,0,114,43,0,0,0, + 114,14,0,0,0,218,8,102,117,108,108,112,97,116,104,114, + 62,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,30,0,0,0,10,7,8,1,18,1,10,2, + 4,1,14,1,10,2,2,2,12,1,2,128,12,1,6,2, + 2,128,16,1,2,253,115,12,0,0,0,166,5,44,0,172, + 7,54,7,191,1,54,7,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, @@ -434,227 +442,235 @@ const unsigned char _Py_M__zipimport[] = { 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, + 32,32,32,32,78,114,65,0,0,0,114,66,0,0,0,41, + 2,114,39,0,0,0,114,3,0,0,0,41,3,114,33,0, + 0,0,114,42,0,0,0,114,43,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,47,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,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, + 1,114,11,0,0,0,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,0,1,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,9,0,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,110,10,35,0,1,0,1,0,1,0,116,4, + 106,5,124,1,61,0,130,0,37,0,9,0,116,4,106,5, + 124,1,25,0,125,6,110,16,35,0,4,0,116,20,121,127, + 1,0,1,0,1,0,116,21,100,4,124,1,155,2,100,5, + 157,3,131,1,130,1,37,0,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,36,0,0,0,114,37,0,0,0,114,38,0, + 0,0,114,52,0,0,0,218,3,115,121,115,218,7,109,111, + 100,117,108,101,115,218,3,103,101,116,114,16,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,40,0,0,0,114,22, + 0,0,0,114,31,0,0,0,114,30,0,0,0,90,8,95, + 95,112,97,116,104,95,95,218,7,104,97,115,97,116,116,114, + 114,72,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,27,0,0,0,218,11,73,109,112,111, + 114,116,69,114,114,111,114,114,49,0,0,0,218,16,95,118, + 101,114,98,111,115,101,95,109,101,115,115,97,103,101,41,9, + 114,33,0,0,0,114,42,0,0,0,218,3,109,115,103,114, + 54,0,0,0,114,55,0,0,0,114,44,0,0,0,90,3, + 109,111,100,114,14,0,0,0,114,70,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,62,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,14,1,2,128,6,1,8,1,2,1,2,128,2,2, + 12,1,2,128,12,1,16,1,2,128,14,1,4,1,2,253, + 115,29,0,0,0,172,40,65,21,0,193,21,9,65,30,7, + 193,32,5,65,38,0,193,38,15,65,53,7,193,63,1,65, + 53,7,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,9,0,124,0,160,0,124, + 1,161,1,115,8,100,1,83,0,110,11,35,0,4,0,116, + 1,121,31,1,0,1,0,1,0,89,0,100,1,83,0,37, + 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,47, + 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,85,0,0,0, + 41,3,114,33,0,0,0,114,42,0,0,0,114,85,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,22,0,0,0,2,6, + 10,1,4,1,2,255,2,128,12,2,6,1,2,128,12,1, + 10,1,2,253,115,12,0,0,0,129,5,9,0,137,7,19, + 7,159,1,19,7,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, + 74,0,0,0,9,0,116,0,124,0,106,1,131,1,124,0, + 95,2,124,0,106,2,116,3,124,0,106,1,60,0,100,1, + 83,0,35,0,4,0,116,4,121,36,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,37,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,28, + 0,0,0,114,30,0,0,0,114,29,0,0,0,114,26,0, + 0,0,114,3,0,0,0,218,3,112,111,112,169,1,114,33, + 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,18,0,0,0,2,2, + 12,1,16,1,2,128,12,1,14,1,12,1,2,128,2,254, + 115,12,0,0,0,129,12,15,0,143,17,35,7,164,1,35, + 7,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,30,0,0,0,114,21,0,0,0, + 114,32,0,0,0,114,88,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,114,11, + 0,0,0,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,35,0,0,0,114,45,0,0,0, + 114,46,0,0,0,114,50,0,0,0,114,56,0,0,0,114, + 63,0,0,0,114,64,0,0,0,114,71,0,0,0,114,47, + 0,0,0,114,84,0,0,0,114,86,0,0,0,114,89,0, + 0,0,114,90,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,114,11,0,0,0,122,12,95,95, + 105,110,105,116,95,95,46,112,121,99,84,114,67,0,0,0, + 70,41,3,122,4,46,112,121,99,84,70,41,3,114,68,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,32,0,0,0,218,10,114,112,97,114,116,105, + 116,105,111,110,41,2,114,33,0,0,0,114,42,0,0,0, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,114, + 40,0,0,0,102,1,0,0,115,2,0,0,0,20,1,114, + 11,0,0,0,114,40,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,91,0,0,0,41,2, + 114,21,0,0,0,114,29,0,0,0,41,3,114,33,0,0, + 0,114,14,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,41, + 0,0,0,106,1,0,0,115,4,0,0,0,8,4,10,2, + 114,11,0,0,0,114,41,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,91,0,0,0,41,3,114,40,0,0,0,218,16,95,122, + 105,112,95,115,101,97,114,99,104,111,114,100,101,114,114,29, + 0,0,0,41,7,114,33,0,0,0,114,42,0,0,0,114, + 14,0,0,0,218,6,115,117,102,102,105,120,218,10,105,115, + 98,121,116,101,99,111,100,101,114,55,0,0,0,114,70,0, + 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, + 0,114,39,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,11,0, + 0,0,114,39,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,248,4,0,0,9,0,116,0,160,1,124,0,161,1,125, + 1,110,18,35,0,4,0,116,2,144,2,121,123,1,0,1, + 0,1,0,116,3,100,1,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,37,0,124,1,53,0,1,0,9,0,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,110, + 18,35,0,4,0,116,2,144,2,121,122,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, + 2,130,1,37,0,116,8,124,3,131,1,116,5,107,3,114, + 79,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,204,9,0,124,1,160,4,100,6,100,3,161,2,1, + 0,124,1,160,6,161,0,125,4,110,18,35,0,4,0,116, + 2,144,2,121,121,1,0,1,0,1,0,116,3,100,4,124, + 0,155,2,157,2,124,0,100,2,141,2,130,1,37,0,116, + 10,124,4,116,11,24,0,116,5,24,0,100,6,131,2,125, + 5,9,0,124,1,160,4,124,5,161,1,1,0,124,1,160, + 7,161,0,125,6,110,18,35,0,4,0,116,2,144,2,121, + 120,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, + 2,124,0,100,2,141,2,130,1,37,0,124,6,160,12,116, + 9,161,1,125,7,124,7,100,6,107,0,114,173,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,196,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,233,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,246,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,12,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,9,0,124,1,160,4,124,2,161,1,1, + 0,110,18,35,0,4,0,116,2,144,2,121,119,1,0,1, + 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, + 2,141,2,130,1,37,0,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, + 58,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,69,144,2,113,88,116, + 8,124,3,131,1,100,16,107,3,144,1,114,80,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, @@ -667,102 +683,120 @@ const unsigned char _Py_M__zipimport[] = { 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, + 8,124,22,124,9,107,4,144,1,114,188,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, + 10,55,0,125,22,9,0,124,1,160,7,124,19,161,1,125, + 23,110,18,35,0,4,0,116,2,144,2,121,118,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, + 2,141,2,130,1,37,0,116,8,124,23,131,1,124,19,107, + 3,144,1,114,233,116,3,100,4,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,9,0,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,2,114,1,116,3,100,4,124,0,155,2,157,2,124, + 0,100,2,141,2,130,1,110,18,35,0,4,0,116,2,144, + 2,121,117,1,0,1,0,1,0,116,3,100,4,124,0,155, + 2,157,2,124,0,100,2,141,2,130,1,37,0,124,13,100, + 29,64,0,144,2,114,30,124,23,160,16,161,0,125,23,110, + 26,9,0,124,23,160,16,100,30,161,1,125,23,110,19,35, + 0,4,0,116,17,144,2,121,116,1,0,1,0,1,0,124, + 23,160,16,100,31,161,1,160,18,116,19,161,1,125,23,89, + 0,110,1,37,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,42,9,0,100,0,4,0,4,0,131,3,1, + 0,110,12,35,0,49,0,144,2,115,101,119,4,37,0,1, + 0,1,0,1,0,89,0,1,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,13,0,0,0,114,94,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,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,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, + 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,23,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,59,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,69, + 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, + 20,0,0,0,114,21,0,0,0,114,22,0,0,0,114,31, + 0,0,0,114,49,0,0,0,114,82,0,0,0,41,26,114, + 30,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,34,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,48,0, + 0,0,114,14,0,0,0,218,1,116,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,114,28,0,0,0,146,1, + 0,0,115,16,1,0,0,2,1,12,1,2,128,14,1,18, + 1,2,128,6,2,2,1,14,1,8,1,12,1,2,128,14, + 1,18,1,2,128,12,1,18,1,16,1,2,3,12,1,10, + 1,2,128,14,1,10,1,2,1,6,255,2,128,8,2,2, + 1,2,255,2,1,4,255,2,2,10,1,10,1,2,128,14, + 1,10,1,2,1,6,255,2,128,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,12,1,2,128,14,1,18, + 1,2,128,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,12,1,2,128,14,1,18,1,2,128,14,1,18, + 1,2,4,28,1,18,1,2,255,2,128,14,2,18,1,2, + 128,10,2,10,2,2,3,12,1,2,128,14,1,20,1,2, + 128,12,2,12,1,20,1,8,1,8,1,4,202,2,6,12, + 196,24,128,14,109,4,1,2,247,2,246,2,246,2,227,2, + 227,2,248,2,246,2,248,115,235,0,0,0,129,5,7,0, + 135,17,24,7,155,1,73,31,3,157,16,46,2,173,1,73, + 31,3,174,17,63,9,191,24,73,31,3,193,24,10,65,35, + 2,193,34,1,73,31,3,193,35,17,65,52,9,193,52,10, + 73,31,3,193,63,9,66,9,2,194,8,1,73,31,3,194, + 9,17,66,26,9,194,26,65,54,73,31,3,196,17,5,68, + 23,2,196,22,1,73,31,3,196,23,17,68,40,9,196,40, + 66,24,73,31,3,199,1,5,71,7,2,199,6,1,73,31, + 3,199,7,17,71,24,9,199,24,17,73,31,3,199,42,23, + 72,2,2,200,1,1,73,31,3,200,2,17,72,19,9,200, + 19,11,73,31,3,200,31,5,72,37,2,200,36,1,73,31, + 3,200,37,16,72,55,9,200,53,35,73,31,3,201,31,5, + 73,36,11,201,37,3,73,36,11,201,52,1,72,55,9,201, + 53,1,72,19,9,201,54,1,71,24,9,201,55,1,68,40, + 9,201,56,1,66,26,9,201,57,1,65,52,9,201,58,1, + 63,9,201,59,1,24,7,114,28,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, @@ -792,272 +826,290 @@ const unsigned char _Py_M__zipimport[] = { 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, + 8,0,0,0,67,0,0,0,115,110,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,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, + 1,130,1,100,3,97,0,9,0,100,4,100,5,108,4,109, + 5,125,0,1,0,110,17,35,0,4,0,116,6,121,54,1, + 0,1,0,1,0,116,1,160,2,100,1,161,1,1,0,116, + 3,100,2,131,1,130,1,37,0,9,0,100,6,97,0,110, + 5,35,0,100,6,97,0,119,0,37,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,49,0,0,0,114,82, + 0,0,0,114,3,0,0,0,90,4,122,108,105,98,114,148, + 0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,147, + 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,36,0,0, + 0,4,2,10,3,8,1,4,2,2,1,14,1,2,128,12, + 1,10,1,8,1,2,128,2,253,6,5,2,128,8,0,10, + 2,4,1,2,249,115,24,0,0,0,142,6,21,0,148,1, + 42,0,149,16,37,7,165,1,42,0,170,4,46,7,182,1, + 37,7,114,151,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,132,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,53,0,125,10,9,0,124,10,160,3,124,6,161,1,1, + 0,110,17,35,0,4,0,116,4,121,193,1,0,1,0,1, + 0,116,0,100,3,124,0,155,2,157,2,124,0,100,4,141, + 2,130,1,37,0,124,10,160,5,100,5,161,1,125,11,116, + 6,124,11,131,1,100,5,107,3,114,63,116,7,100,6,131, + 1,130,1,124,11,100,0,100,7,133,2,25,0,100,8,107, + 3,114,80,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,9,0,124,10,160,3,124, + 6,161,1,1,0,110,17,35,0,4,0,116,4,121,192,1, + 0,1,0,1,0,116,0,100,3,124,0,155,2,157,2,124, + 0,100,4,141,2,130,1,37,0,124,10,160,5,124,4,161, + 1,125,15,116,6,124,15,131,1,124,4,107,3,114,145,116, + 4,100,12,131,1,130,1,9,0,100,0,4,0,4,0,131, + 3,1,0,110,11,35,0,49,0,115,157,119,4,37,0,1, + 0,1,0,1,0,89,0,1,0,1,0,124,3,100,1,107, + 2,114,169,124,15,83,0,9,0,116,9,131,0,125,16,110, + 12,35,0,4,0,116,10,121,191,1,0,1,0,1,0,116, + 0,100,13,131,1,130,1,37,0,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,99,0,0,0,114,13,0,0,0,114, + 111,0,0,0,114,105,0,0,0,114,100,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,110,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,146,0,0,0,105,241,255,255,255, + 41,11,114,3,0,0,0,114,117,0,0,0,114,118,0,0, + 0,114,119,0,0,0,114,23,0,0,0,114,121,0,0,0, + 114,59,0,0,0,114,126,0,0,0,114,1,0,0,0,114, + 151,0,0,0,114,150,0,0,0,41,17,114,30,0,0,0, + 114,62,0,0,0,90,8,100,97,116,97,112,97,116,104,114, + 137,0,0,0,114,141,0,0,0,114,132,0,0,0,114,144, + 0,0,0,114,138,0,0,0,114,139,0,0,0,114,140,0, + 0,0,114,130,0,0,0,114,131,0,0,0,114,142,0,0, + 0,114,143,0,0,0,114,134,0,0,0,90,8,114,97,119, + 95,100,97,116,97,114,148,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,114,60,0,0,0,69,2, + 0,0,115,86,0,0,0,20,1,8,1,8,1,12,2,2, + 2,12,1,2,128,12,1,18,1,2,128,10,1,12,1,8, + 1,16,2,18,2,16,2,16,1,12,1,8,1,2,1,12, + 1,2,128,12,1,18,1,2,128,10,1,12,1,8,1,2, + 255,12,233,22,128,8,26,4,2,2,3,8,1,2,128,12, + 1,8,1,2,128,10,1,2,254,2,243,2,240,115,88,0, + 0,0,151,1,66,24,3,153,5,31,2,158,1,66,24,3, + 159,16,47,9,175,59,66,24,3,193,43,5,65,49,2,193, + 48,1,66,24,3,193,49,16,66,1,9,194,1,16,66,24, + 3,194,24,4,66,28,11,194,29,3,66,28,11,194,42,3, + 66,46,0,194,46,11,66,57,7,194,63,1,66,57,7,195, + 0,1,66,1,9,195,1,1,47,9,114,60,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, - 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,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, + 115,2,0,0,115,2,0,0,0,16,2,114,11,0,0,0, + 114,154,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,48,0,0,0,114,14,0,0,0, + 114,5,0,0,0,114,0,0,0,0,114,94,0,0,0,90, + 5,110,101,118,101,114,90,6,97,108,119,97,121,115,114,106, + 0,0,0,114,101,0,0,0,114,102,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,22,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,154,0,0,0,114,2,0,0,0,114, + 49,0,0,0,114,82,0,0,0,218,7,109,97,114,115,104, + 97,108,90,5,108,111,97,100,115,114,16,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,33,0,0,0,114,61,0,0, + 0,114,70,0,0,0,114,42,0,0,0,114,133,0,0,0, + 90,11,101,120,99,95,100,101,116,97,105,108,115,114,136,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,157,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,54,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,11,0,0,0,114,162,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,20,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,11,0,0,0,114,166,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,80,0,0,0,84,41,1,90,12,100, + 111,110,116,95,105,110,104,101,114,105,116,41,2,114,166,0, + 0,0,218,7,99,111,109,112,105,108,101,41,2,114,61,0, + 0,0,114,165,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,4,0,0,0, + 8,1,16,1,114,11,0,0,0,114,168,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,94,0,0,0,114,15,0,0,0, + 41,2,114,138,0,0,0,90,6,109,107,116,105,109,101,41, + 2,218,1,100,114,145,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,11,0,0,0,114,176,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,112,0,0,0,9,0,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,83,0,35,0,4, + 0,116,2,116,3,116,4,102,3,121,55,1,0,1,0,1, + 0,89,0,100,6,83,0,37,0,119,0,41,7,78,114,15, + 0,0,0,169,2,218,1,99,218,1,111,114,170,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,29,0,0,0,114,176,0, + 0,0,114,27,0,0,0,218,10,73,110,100,101,120,69,114, + 114,111,114,114,161,0,0,0,41,6,114,33,0,0,0,114, + 14,0,0,0,114,62,0,0,0,114,138,0,0,0,114,139, + 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,158,0,0,0,194,2,0,0,115,26, + 0,0,0,2,1,20,2,12,1,10,1,8,3,8,1,8, + 1,14,1,2,128,18,1,6,1,2,128,2,255,115,12,0, + 0,0,129,39,41,0,169,10,54,7,183,1,54,7,114,158, 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, + 3,0,0,0,8,0,0,0,67,0,0,0,115,82,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, + 1,9,0,124,0,106,0,124,1,25,0,125,2,110,11,35, + 0,4,0,116,1,121,40,1,0,1,0,1,0,89,0,100, + 0,83,0,37,0,116,2,124,0,106,3,124,2,131,2,83, + 0,119,0,41,3,78,114,15,0,0,0,114,177,0,0,0, + 41,4,114,29,0,0,0,114,27,0,0,0,114,60,0,0, + 0,114,30,0,0,0,41,3,114,33,0,0,0,114,14,0, + 0,0,114,62,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,156,0,0,0,213,2,0,0,115, + 20,0,0,0,20,2,12,1,2,2,12,1,2,128,12,1, + 6,1,2,128,12,2,2,253,115,12,0,0,0,145,5,23, + 0,151,7,33,7,168,1,33,7,114,156,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,9, + 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,9,0,124,0,106,6,124,7,25,0, + 125,8,110,10,35,0,4,0,116,7,121,134,1,0,1,0, + 1,0,89,0,113,9,37,0,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,9,0,116,9,124,0,124,9,124,7,124,1, + 124,10,131,5,125,11,110,24,35,0,4,0,116,10,121,133, + 1,0,125,12,1,0,124,12,125,3,89,0,100,0,125,12, + 126,12,110,10,100,0,125,12,126,12,119,1,37,0,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,94,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,66,0,0,0,114,65, + 0,0,0,41,13,114,40,0,0,0,114,96,0,0,0,114, + 49,0,0,0,114,82,0,0,0,114,30,0,0,0,114,21, + 0,0,0,114,29,0,0,0,114,27,0,0,0,114,60,0, + 0,0,114,162,0,0,0,114,81,0,0,0,114,168,0,0, + 0,114,3,0,0,0,41,14,114,33,0,0,0,114,42,0, + 0,0,114,14,0,0,0,90,12,105,109,112,111,114,116,95, + 101,114,114,111,114,114,97,0,0,0,114,98,0,0,0,114, + 55,0,0,0,114,70,0,0,0,114,62,0,0,0,114,44, + 0,0,0,114,133,0,0,0,114,54,0,0,0,90,3,101, + 120,99,114,83,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,52,0,0,0,228,2,0,0,115, + 64,0,0,0,10,1,4,1,14,1,8,1,22,1,2,1, + 12,1,2,128,12,1,4,1,2,128,8,2,12,1,4,1, + 4,1,2,1,18,1,2,128,12,1,14,1,10,128,10,2, + 8,1,2,3,8,1,14,1,4,2,10,1,14,1,18,2, + 2,241,2,247,115,42,0,0,0,158,5,36,2,164,7,45, + 9,189,8,65,6,2,193,6,7,65,24,9,193,13,2,65, + 20,9,193,20,4,65,24,9,194,5,1,65,24,9,194,6, + 1,45,9,114,52,0,0,0,41,46,114,92,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,22,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,49,0, + 0,0,114,155,0,0,0,114,117,0,0,0,114,159,0,0, + 0,114,73,0,0,0,114,138,0,0,0,114,36,0,0,0, + 90,7,95,95,97,108,108,95,95,114,21,0,0,0,90,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114, + 19,0,0,0,114,81,0,0,0,114,3,0,0,0,114,26, + 0,0,0,218,4,116,121,112,101,114,76,0,0,0,114,120, + 0,0,0,114,122,0,0,0,114,124,0,0,0,90,13,95, + 76,111,97,100,101,114,66,97,115,105,99,115,114,4,0,0, + 0,114,96,0,0,0,114,40,0,0,0,114,41,0,0,0, + 114,39,0,0,0,114,28,0,0,0,114,129,0,0,0,114, + 149,0,0,0,114,151,0,0,0,114,60,0,0,0,114,154, + 0,0,0,114,162,0,0,0,218,8,95,95,99,111,100,101, + 95,95,114,160,0,0,0,114,166,0,0,0,114,168,0,0, + 0,114,176,0,0,0,114,158,0,0,0,114,156,0,0,0, + 114,52,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,114,11,0,0,0, }; diff --git a/Python/marshal.c b/Python/marshal.c index fa4ec9eb605f05..f8ec7789a38689 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -525,6 +525,7 @@ w_complex_object(PyObject *v, char flag, WFILE *p) w_object(co->co_name, p); w_long(co->co_firstlineno, p); w_object(co->co_linetable, p); + w_object(co->co_exceptiontable, p); } else if (PyObject_CheckBuffer(v)) { /* Write unknown bytes-like objects as a bytes object */ @@ -1313,6 +1314,7 @@ r_object(RFILE *p) PyObject *name = NULL; int firstlineno; PyObject *linetable = NULL; + PyObject *exceptiontable = NULL; idx = r_ref_reserve(flag, p); if (idx < 0) @@ -1370,6 +1372,10 @@ r_object(RFILE *p) linetable = r_object(p); if (linetable == NULL) goto code_error; + exceptiontable = r_object(p); + if (exceptiontable == NULL) + goto code_error; + if (PySys_Audit("code.__new__", "OOOiiiiii", code, filename, name, argcount, posonlyargcount, @@ -1382,7 +1388,7 @@ r_object(RFILE *p) nlocals, stacksize, flags, code, consts, names, varnames, freevars, cellvars, filename, name, - firstlineno, linetable); + firstlineno, linetable, exceptiontable); v = r_ref_insert(v, idx, flag, p); code_error: @@ -1395,6 +1401,7 @@ r_object(RFILE *p) Py_XDECREF(filename); Py_XDECREF(name); Py_XDECREF(linetable); + Py_XDECREF(exceptiontable); } retval = v; break; diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 951f8f8a5569f7..7c2242863ece23 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -34,9 +34,9 @@ static void *opcode_targets[256] = { &&TARGET_MATCH_SEQUENCE, &&TARGET_MATCH_KEYS, &&TARGET_COPY_DICT_WITHOUT_KEYS, + &&TARGET_PUSH_EXC_INFO, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_POP_EXCEPT_AND_RERAISE, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, @@ -52,7 +52,7 @@ static void *opcode_targets[256] = { &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, &&TARGET_BEFORE_ASYNC_WITH, - &&_unknown_opcode, + &&TARGET_BEFORE_WITH, &&TARGET_END_ASYNC_FOR, &&TARGET_INPLACE_ADD, &&TARGET_INPLACE_SUBTRACT, @@ -86,7 +86,7 @@ static void *opcode_targets[256] = { &&TARGET_IMPORT_STAR, &&TARGET_SETUP_ANNOTATIONS, &&TARGET_YIELD_VALUE, - &&TARGET_POP_BLOCK, + &&_unknown_opcode, &&_unknown_opcode, &&TARGET_POP_EXCEPT, &&TARGET_STORE_NAME, @@ -121,7 +121,7 @@ static void *opcode_targets[256] = { &&TARGET_RERAISE, &&_unknown_opcode, &&TARGET_JUMP_IF_NOT_EXC_MATCH, - &&TARGET_SETUP_FINALLY, + &&_unknown_opcode, &&_unknown_opcode, &&TARGET_LOAD_FAST, &&TARGET_STORE_FAST, @@ -142,7 +142,7 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&TARGET_CALL_FUNCTION_KW, &&TARGET_CALL_FUNCTION_EX, - &&TARGET_SETUP_WITH, + &&_unknown_opcode, &&TARGET_EXTENDED_ARG, &&TARGET_LIST_APPEND, &&TARGET_SET_ADD, @@ -153,7 +153,7 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&TARGET_MATCH_CLASS, &&_unknown_opcode, - &&TARGET_SETUP_ASYNC_WITH, + &&_unknown_opcode, &&TARGET_FORMAT_VALUE, &&TARGET_BUILD_CONST_KEY_MAP, &&TARGET_BUILD_STRING, diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py index cba13b24213906..290f6251af1745 100644 --- a/Tools/scripts/generate_opcode_h.py +++ b/Tools/scripts/generate_opcode_h.py @@ -16,14 +16,12 @@ """.lstrip() footer = """ -/* EXCEPT_HANDLER is a special, implicit block type which is created when - entering an except handler. It is not an opcode but we define it here - as we want it to be available to both frameobject.c and ceval.c, while - remaining private.*/ -#define EXCEPT_HANDLER 257 - #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) +/* Reserve some bytecodes for internal use in the compiler. + * The value of 240 is arbitrary. */ +#define IS_ARTIFICIAL(op) ((op) > 240) + #ifdef __cplusplus } #endif From webhook-mailer at python.org Fri May 7 11:53:32 2021 From: webhook-mailer at python.org (zware) Date: Fri, 07 May 2021 15:53:32 -0000 Subject: [Python-checkins] bpo-41730: Show deprecation warnings for tkinter.tix (GH-22186) Message-ID: https://github.com/python/cpython/commit/4a2d98a1e98de25c5114d11fcb0f9fedbb057e51 commit: 4a2d98a1e98de25c5114d11fcb0f9fedbb057e51 branch: main author: wyz23x2 <52805709+wyz23x2 at users.noreply.github.com> committer: zware date: 2021-05-07T10:53:23-05:00 summary: bpo-41730: Show deprecation warnings for tkinter.tix (GH-22186) Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> Co-authored-by: Zachary Ware files: A Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst M Lib/test/test_tix.py M Lib/tkinter/tix.py diff --git a/Lib/test/test_tix.py b/Lib/test/test_tix.py index e6d759e7bd3b61..a2fb357fd0c500 100644 --- a/Lib/test/test_tix.py +++ b/Lib/test/test_tix.py @@ -1,7 +1,7 @@ +import sys import unittest from test import support from test.support import import_helper -import sys # Skip this test if the _tkinter module wasn't built. _tkinter = import_helper.import_module('_tkinter') @@ -9,7 +9,9 @@ # Skip test if tk cannot be initialized. support.requires('gui') -from tkinter import tix, TclError +# Suppress the deprecation warning +tix = import_helper.import_module('tkinter.tix', deprecated=True) +from tkinter import TclError class TestTix(unittest.TestCase): @@ -24,9 +26,12 @@ def setUp(self): else: self.addCleanup(self.root.destroy) - def test_tix_available(self): - # this test is just here to make setUp run - pass + def test_tix_deprecation(self): + with self.assertWarns(DeprecationWarning): + import_helper.import_fresh_module( + 'tkinter.tix', + fresh=('tkinter.tix',), + ) if __name__ == '__main__': diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py index 7d24075403649c..44ecae1a326831 100644 --- a/Lib/tkinter/tix.py +++ b/Lib/tkinter/tix.py @@ -21,13 +21,20 @@ # Compare the demo tixwidgets.py to the original Tcl program and you will # appreciate the advantages. # +# NOTE: This module is deprecated since Python 3.6. import os +import warnings import tkinter from tkinter import * from tkinter import _cnfmerge -import _tkinter # If this fails your Python may not be configured for Tk +warnings.warn( + 'The Tix Tk extension is unmaintained, and the tkinter.tix wrapper module' + ' is deprecated in favor of tkinter.ttk', + DeprecationWarning, + stacklevel=2, + ) # Some more constants (for consistency with Tkinter) WINDOW = 'window' diff --git a/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst b/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst new file mode 100644 index 00000000000000..63d8353a7aab2e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst @@ -0,0 +1 @@ +``DeprecationWarning`` is now raised when importing :mod:`tkinter.tix`, which has been deprecated in documentation since Python 3.6. From webhook-mailer at python.org Fri May 7 12:14:56 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 07 May 2021 16:14:56 -0000 Subject: [Python-checkins] bpo-41730: Show deprecation warnings for tkinter.tix (GH-22186) Message-ID: https://github.com/python/cpython/commit/ec6a1ea1ee67a5e7c8ee5f5b1541bc1c6e17a373 commit: ec6a1ea1ee67a5e7c8ee5f5b1541bc1c6e17a373 branch: 3.10 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-05-07T09:14:48-07:00 summary: bpo-41730: Show deprecation warnings for tkinter.tix (GH-22186) Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> Co-authored-by: Zachary Ware (cherry picked from commit 4a2d98a1e98de25c5114d11fcb0f9fedbb057e51) Co-authored-by: wyz23x2 <52805709+wyz23x2 at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst M Lib/test/test_tix.py M Lib/tkinter/tix.py diff --git a/Lib/test/test_tix.py b/Lib/test/test_tix.py index e6d759e7bd3b61..a2fb357fd0c500 100644 --- a/Lib/test/test_tix.py +++ b/Lib/test/test_tix.py @@ -1,7 +1,7 @@ +import sys import unittest from test import support from test.support import import_helper -import sys # Skip this test if the _tkinter module wasn't built. _tkinter = import_helper.import_module('_tkinter') @@ -9,7 +9,9 @@ # Skip test if tk cannot be initialized. support.requires('gui') -from tkinter import tix, TclError +# Suppress the deprecation warning +tix = import_helper.import_module('tkinter.tix', deprecated=True) +from tkinter import TclError class TestTix(unittest.TestCase): @@ -24,9 +26,12 @@ def setUp(self): else: self.addCleanup(self.root.destroy) - def test_tix_available(self): - # this test is just here to make setUp run - pass + def test_tix_deprecation(self): + with self.assertWarns(DeprecationWarning): + import_helper.import_fresh_module( + 'tkinter.tix', + fresh=('tkinter.tix',), + ) if __name__ == '__main__': diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py index 7d24075403649c..44ecae1a326831 100644 --- a/Lib/tkinter/tix.py +++ b/Lib/tkinter/tix.py @@ -21,13 +21,20 @@ # Compare the demo tixwidgets.py to the original Tcl program and you will # appreciate the advantages. # +# NOTE: This module is deprecated since Python 3.6. import os +import warnings import tkinter from tkinter import * from tkinter import _cnfmerge -import _tkinter # If this fails your Python may not be configured for Tk +warnings.warn( + 'The Tix Tk extension is unmaintained, and the tkinter.tix wrapper module' + ' is deprecated in favor of tkinter.ttk', + DeprecationWarning, + stacklevel=2, + ) # Some more constants (for consistency with Tkinter) WINDOW = 'window' diff --git a/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst b/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst new file mode 100644 index 00000000000000..63d8353a7aab2e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-09-10-07-23-24.bpo-41730.DyKFi9.rst @@ -0,0 +1 @@ +``DeprecationWarning`` is now raised when importing :mod:`tkinter.tix`, which has been deprecated in documentation since Python 3.6. From webhook-mailer at python.org Fri May 7 13:49:15 2021 From: webhook-mailer at python.org (isidentical) Date: Fri, 07 May 2021 17:49:15 -0000 Subject: [Python-checkins] bpo-44063: set the missing end locations on the compiler (GH-25956) Message-ID: https://github.com/python/cpython/commit/b2ec37a7224318d466e0877790ed740ce8b4867d commit: b2ec37a7224318d466e0877790ed740ce8b4867d branch: main author: Batuhan Taskaya committer: isidentical date: 2021-05-07T20:49:06+03:00 summary: bpo-44063: set the missing end locations on the compiler (GH-25956) files: M Lib/test/test_syntax.py M Python/compile.c diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 0a910bcf5bd77..9799697b87d3b 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1422,6 +1422,13 @@ def case(x): case(34) """ compile(code, "", "exec") + + def test_multiline_compiler_error_points_to_the_end(self): + self._check_error( + "call(\na=1,\na=1\n)", + "keyword argument repeated", + lineno=3 + ) def test_main(): diff --git a/Python/compile.c b/Python/compile.c index b174ef614c85a..013ee4b6c84c8 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -4315,7 +4315,7 @@ validate_keywords(struct compiler *c, asdl_keyword_seq *keywords) for (Py_ssize_t j = i + 1; j < nkeywords; j++) { keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j)); if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) { - c->u->u_col_offset = other->col_offset; + SET_LOC(c, other); compiler_error(c, "keyword argument repeated: %U", key->arg); return -1; } @@ -5368,11 +5368,15 @@ static int compiler_visit_expr(struct compiler *c, expr_ty e) { int old_lineno = c->u->u_lineno; + int old_end_lineno = c->u->u_end_lineno; int old_col_offset = c->u->u_col_offset; + int old_end_col_offset = c->u->u_end_col_offset; SET_LOC(c, e); int res = compiler_visit_expr1(c, e); c->u->u_lineno = old_lineno; + c->u->u_end_lineno = old_end_lineno; c->u->u_col_offset = old_col_offset; + c->u->u_end_col_offset = old_end_col_offset; return res; } @@ -5383,7 +5387,9 @@ compiler_augassign(struct compiler *c, stmt_ty s) expr_ty e = s->v.AugAssign.target; int old_lineno = c->u->u_lineno; + int old_end_lineno = c->u->u_end_lineno; int old_col_offset = c->u->u_col_offset; + int old_end_col_offset = c->u->u_end_col_offset; SET_LOC(c, e); switch (e->kind) { @@ -5413,7 +5419,9 @@ compiler_augassign(struct compiler *c, stmt_ty s) } c->u->u_lineno = old_lineno; + c->u->u_end_lineno = old_end_lineno; c->u->u_col_offset = old_col_offset; + c->u->u_end_col_offset = old_end_col_offset; VISIT(c, expr, s->v.AugAssign.value); ADDOP(c, inplace_binop(s->v.AugAssign.op)); @@ -5934,14 +5942,14 @@ validate_kwd_attrs(struct compiler *c, asdl_identifier_seq *attrs, asdl_pattern_ 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, i))); 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, j))); compiler_error(c, "attribute name repeated in class pattern: %U", attr); return -1; } @@ -5972,7 +5980,7 @@ compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) } 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 + SET_LOC(c, p); } VISIT(c, expr, p->v.MatchClass.cls); PyObject *attr_names; @@ -6056,7 +6064,7 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) if (key == NULL) { 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, i))); return compiler_error(c, e); } if (!MATCH_VALUE_EXPR(key)) { From webhook-mailer at python.org Fri May 7 15:36:40 2021 From: webhook-mailer at python.org (ned-deily) Date: Fri, 07 May 2021 19:36:40 -0000 Subject: [Python-checkins] [3.7] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-25960) Message-ID: https://github.com/python/cpython/commit/1beae7e523d2db4e3ce383b2032095ef956f21c4 commit: 1beae7e523d2db4e3ce383b2032095ef956f21c4 branch: 3.7 author: Zachary Ware committer: ned-deily date: 2021-05-07T15:36:32-04:00 summary: [3.7] bpo-40297: Fix test_socket.CANTest.testSendFrame (GH-25960) files: M Lib/test/test_socket.py diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 41ba53b48153e8..5f4b019c048d9c 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1863,8 +1863,10 @@ def dissect_can_frame(cls, frame): def testSendFrame(self): cf, addr = self.s.recvfrom(self.bufsize) self.assertEqual(self.cf, cf) - self.assertEqual(addr[0], self.interface) - self.assertEqual(addr[1], socket.AF_CAN) + # XXX: This may not be strictly correct, but the ship has sailed for + # 3.7. This is different in 3.8+; we just want the test to pass + # in 3.7 at this point. -- ZW 6May21 + self.assertEqual(addr, self.interface) def _testSendFrame(self): self.cf = self.build_can_frame(0x00, b'\x01\x02\x03\x04\x05') From webhook-mailer at python.org Fri May 7 16:40:19 2021 From: webhook-mailer at python.org (isidentical) Date: Fri, 07 May 2021 20:40:19 -0000 Subject: [Python-checkins] bpo-44063: set the missing end locations on the compiler (GH-25956) (#25972) Message-ID: https://github.com/python/cpython/commit/13de28f17af02563cb8c6d0f6da3c178a4241ff3 commit: 13de28f17af02563cb8c6d0f6da3c178a4241ff3 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: isidentical date: 2021-05-07T23:40:09+03:00 summary: bpo-44063: set the missing end locations on the compiler (GH-25956) (#25972) (cherry picked from commit b2ec37a7224318d466e0877790ed740ce8b4867d) Co-authored-by: Batuhan Taskaya files: M Lib/test/test_syntax.py M Python/compile.c diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 0a910bcf5bd77..9799697b87d3b 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1422,6 +1422,13 @@ def case(x): case(34) """ compile(code, "", "exec") + + def test_multiline_compiler_error_points_to_the_end(self): + self._check_error( + "call(\na=1,\na=1\n)", + "keyword argument repeated", + lineno=3 + ) def test_main(): diff --git a/Python/compile.c b/Python/compile.c index d6bcca1c02483..bb88c06c08d8f 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -4261,7 +4261,7 @@ validate_keywords(struct compiler *c, asdl_keyword_seq *keywords) for (Py_ssize_t j = i + 1; j < nkeywords; j++) { keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j)); if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) { - c->u->u_col_offset = other->col_offset; + SET_LOC(c, other); compiler_error(c, "keyword argument repeated: %U", key->arg); return -1; } @@ -5297,11 +5297,15 @@ static int compiler_visit_expr(struct compiler *c, expr_ty e) { int old_lineno = c->u->u_lineno; + int old_end_lineno = c->u->u_end_lineno; int old_col_offset = c->u->u_col_offset; + int old_end_col_offset = c->u->u_end_col_offset; SET_LOC(c, e); int res = compiler_visit_expr1(c, e); c->u->u_lineno = old_lineno; + c->u->u_end_lineno = old_end_lineno; c->u->u_col_offset = old_col_offset; + c->u->u_end_col_offset = old_end_col_offset; return res; } @@ -5312,7 +5316,9 @@ compiler_augassign(struct compiler *c, stmt_ty s) expr_ty e = s->v.AugAssign.target; int old_lineno = c->u->u_lineno; + int old_end_lineno = c->u->u_end_lineno; int old_col_offset = c->u->u_col_offset; + int old_end_col_offset = c->u->u_end_col_offset; SET_LOC(c, e); switch (e->kind) { @@ -5342,7 +5348,9 @@ compiler_augassign(struct compiler *c, stmt_ty s) } c->u->u_lineno = old_lineno; + c->u->u_end_lineno = old_end_lineno; c->u->u_col_offset = old_col_offset; + c->u->u_end_col_offset = old_end_col_offset; VISIT(c, expr, s->v.AugAssign.value); ADDOP(c, inplace_binop(s->v.AugAssign.op)); @@ -5863,14 +5871,14 @@ validate_kwd_attrs(struct compiler *c, asdl_identifier_seq *attrs, asdl_pattern_ 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, i))); 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, j))); compiler_error(c, "attribute name repeated in class pattern: %U", attr); return -1; } @@ -5901,7 +5909,7 @@ compiler_pattern_class(struct compiler *c, pattern_ty p, pattern_context *pc) } 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 + SET_LOC(c, p); } VISIT(c, expr, p->v.MatchClass.cls); PyObject *attr_names; @@ -5985,7 +5993,7 @@ compiler_pattern_mapping(struct compiler *c, pattern_ty p, pattern_context *pc) if (key == NULL) { 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; + SET_LOC(c, ((pattern_ty) asdl_seq_GET(patterns, i))); return compiler_error(c, e); } if (!MATCH_VALUE_EXPR(key)) { From webhook-mailer at python.org Fri May 7 19:52:12 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 07 May 2021 23:52:12 -0000 Subject: [Python-checkins] bpo-44026: Idle - display interpreter's 'did you mean' hints (GH-25912) Message-ID: https://github.com/python/cpython/commit/092f9ddb5e85665552c8207972cd393d492f764e commit: 092f9ddb5e85665552c8207972cd393d492f764e branch: main author: E-Paine <63801254+E-Paine at users.noreply.github.com> committer: terryjreedy date: 2021-05-07T19:52:01-04:00 summary: bpo-44026: Idle - display interpreter's 'did you mean' hints (GH-25912) A C function accessible by the default exception handler, but not by python code, finds the existing name closest to the name causing a name or attribute error. For such errors, call the default handler after capturing stderr and retrieve its message line. Co-authored-by: Terry Jan Reedy files: A Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst M Lib/idlelib/NEWS.txt M Lib/idlelib/idle_test/test_run.py M Lib/idlelib/run.py diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index ed1142653d9534..396820e9117b53 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -4,6 +4,9 @@ Released on 2021-10-04? ========================= +bpo-44026: Include interpreter's typo fix suggestions in message line +for NameErrors and AttributeErrors. Patch by E. Paine. + bpo-37903: Add mouse actions to the shell sidebar. Left click and optional drag selects one or more lines of text, as with the editor line number sidebar. Right click after selecting text lines diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py index a31671ee0485fa..ec4637c5ca617a 100644 --- a/Lib/idlelib/idle_test/test_run.py +++ b/Lib/idlelib/idle_test/test_run.py @@ -1,4 +1,4 @@ -"Test run, coverage 49%." +"Test run, coverage 54%." from idlelib import run import io @@ -12,7 +12,7 @@ idlelib.testing = True # Use {} for executing test user code. -class PrintExceptionTest(unittest.TestCase): +class ExceptionTest(unittest.TestCase): def test_print_exception_unhashable(self): class UnhashableException(Exception): @@ -28,8 +28,7 @@ def __eq__(self, other): raise ex1 except UnhashableException: with captured_stderr() as output: - with mock.patch.object(run, - 'cleanup_traceback') as ct: + with mock.patch.object(run, 'cleanup_traceback') as ct: ct.side_effect = lambda t, e: t run.print_exception() @@ -38,6 +37,46 @@ def __eq__(self, other): self.assertIn('UnhashableException: ex2', tb[3]) self.assertIn('UnhashableException: ex1', tb[10]) + data = (('1/0', ZeroDivisionError, "division by zero\n"), + ('abc', NameError, "name 'abc' is not defined. " + "Did you mean: 'abs'?\n"), + ('int.reel', AttributeError, + "type object 'int' has no attribute 'reel'. " + "Did you mean: 'real'?\n"), + ) + + def test_get_message(self): + for code, exc, msg in self.data: + with self.subTest(code=code): + try: + eval(compile(code, '', 'eval')) + except exc: + typ, val, tb = sys.exc_info() + actual = run.get_message_lines(typ, val, tb)[0] + expect = f'{exc.__name__}: {msg}' + self.assertEqual(actual, expect) + + @mock.patch.object(run, 'cleanup_traceback', + new_callable=lambda: (lambda t, e: None)) + def test_get_multiple_message(self, mock): + d = self.data + data2 = ((d[0], d[1]), (d[1], d[2]), (d[2], d[0])) + subtests = 0 + for (code1, exc1, msg1), (code2, exc2, msg2) in data2: + with self.subTest(codes=(code1,code2)): + try: + eval(compile(code1, '', 'eval')) + except exc1: + try: + eval(compile(code2, '', 'eval')) + except exc2: + with captured_stderr() as output: + run.print_exception() + actual = output.getvalue() + self.assertIn(msg1, actual) + self.assertIn(msg2, actual) + subtests += 1 + self.assertEqual(subtests, len(data2)) # All subtests ran? # StdioFile tests. diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index 07e9a2bf9ceeae..3836727691229e 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -4,6 +4,7 @@ f'''{sys.executable} -c "__import__('idlelib.run').run.main()"''' '.run' is needed because __import__ returns idlelib, not idlelib.run. """ +import contextlib import functools import io import linecache @@ -211,6 +212,19 @@ def show_socket_error(err, address): parent=root) root.destroy() + +def get_message_lines(typ, exc, tb): + "Return line composing the exception message." + if typ in (AttributeError, NameError): + # 3.10+ hints are not directly accessible from python (#44026). + err = io.StringIO() + with contextlib.redirect_stderr(err): + sys.__excepthook__(typ, exc, tb) + return [err.getvalue().split("\n")[-2] + "\n"] + else: + return traceback.format_exception_only(typ, exc) + + def print_exception(): import linecache linecache.checkcache() @@ -241,7 +255,7 @@ def print_exc(typ, exc, tb): "debugger_r.py", "bdb.py") cleanup_traceback(tbe, exclude) traceback.print_list(tbe, file=efile) - lines = traceback.format_exception_only(typ, exc) + lines = get_message_lines(typ, exc, tb) for line in lines: print(line, end='', file=efile) diff --git a/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst b/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst new file mode 100644 index 00000000000000..bc4b680983a59a --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst @@ -0,0 +1,2 @@ +Include interpreter's typo fix suggestions in message line for +NameErrors and AttributeErrors. Patch by E. Paine. From webhook-mailer at python.org Fri May 7 20:35:32 2021 From: webhook-mailer at python.org (terryjreedy) Date: Sat, 08 May 2021 00:35:32 -0000 Subject: [Python-checkins] bpo-44026: Idle - display interpreter's 'did you mean' hints (GH-25912) Message-ID: https://github.com/python/cpython/commit/5a5237c6d08ed97458b0903d6836624168df0b51 commit: 5a5237c6d08ed97458b0903d6836624168df0b51 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: terryjreedy date: 2021-05-07T20:35:25-04:00 summary: bpo-44026: Idle - display interpreter's 'did you mean' hints (GH-25912) A C function accessible by the default exception handler, but not by python code, finds the existing name closest to the name causing a name or attribute error. For such errors, call the default handler after capturing stderr and retrieve its message line. Co-authored-by: Terry Jan Reedy (cherry picked from commit 092f9ddb5e85665552c8207972cd393d492f764e) Co-authored-by: E-Paine <63801254+E-Paine at users.noreply.github.com> files: A Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst M Lib/idlelib/NEWS.txt M Lib/idlelib/idle_test/test_run.py M Lib/idlelib/run.py diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index ed1142653d9534..396820e9117b53 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -4,6 +4,9 @@ Released on 2021-10-04? ========================= +bpo-44026: Include interpreter's typo fix suggestions in message line +for NameErrors and AttributeErrors. Patch by E. Paine. + bpo-37903: Add mouse actions to the shell sidebar. Left click and optional drag selects one or more lines of text, as with the editor line number sidebar. Right click after selecting text lines diff --git a/Lib/idlelib/idle_test/test_run.py b/Lib/idlelib/idle_test/test_run.py index a31671ee0485fa..ec4637c5ca617a 100644 --- a/Lib/idlelib/idle_test/test_run.py +++ b/Lib/idlelib/idle_test/test_run.py @@ -1,4 +1,4 @@ -"Test run, coverage 49%." +"Test run, coverage 54%." from idlelib import run import io @@ -12,7 +12,7 @@ idlelib.testing = True # Use {} for executing test user code. -class PrintExceptionTest(unittest.TestCase): +class ExceptionTest(unittest.TestCase): def test_print_exception_unhashable(self): class UnhashableException(Exception): @@ -28,8 +28,7 @@ def __eq__(self, other): raise ex1 except UnhashableException: with captured_stderr() as output: - with mock.patch.object(run, - 'cleanup_traceback') as ct: + with mock.patch.object(run, 'cleanup_traceback') as ct: ct.side_effect = lambda t, e: t run.print_exception() @@ -38,6 +37,46 @@ def __eq__(self, other): self.assertIn('UnhashableException: ex2', tb[3]) self.assertIn('UnhashableException: ex1', tb[10]) + data = (('1/0', ZeroDivisionError, "division by zero\n"), + ('abc', NameError, "name 'abc' is not defined. " + "Did you mean: 'abs'?\n"), + ('int.reel', AttributeError, + "type object 'int' has no attribute 'reel'. " + "Did you mean: 'real'?\n"), + ) + + def test_get_message(self): + for code, exc, msg in self.data: + with self.subTest(code=code): + try: + eval(compile(code, '', 'eval')) + except exc: + typ, val, tb = sys.exc_info() + actual = run.get_message_lines(typ, val, tb)[0] + expect = f'{exc.__name__}: {msg}' + self.assertEqual(actual, expect) + + @mock.patch.object(run, 'cleanup_traceback', + new_callable=lambda: (lambda t, e: None)) + def test_get_multiple_message(self, mock): + d = self.data + data2 = ((d[0], d[1]), (d[1], d[2]), (d[2], d[0])) + subtests = 0 + for (code1, exc1, msg1), (code2, exc2, msg2) in data2: + with self.subTest(codes=(code1,code2)): + try: + eval(compile(code1, '', 'eval')) + except exc1: + try: + eval(compile(code2, '', 'eval')) + except exc2: + with captured_stderr() as output: + run.print_exception() + actual = output.getvalue() + self.assertIn(msg1, actual) + self.assertIn(msg2, actual) + subtests += 1 + self.assertEqual(subtests, len(data2)) # All subtests ran? # StdioFile tests. diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py index 07e9a2bf9ceeae..3836727691229e 100644 --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -4,6 +4,7 @@ f'''{sys.executable} -c "__import__('idlelib.run').run.main()"''' '.run' is needed because __import__ returns idlelib, not idlelib.run. """ +import contextlib import functools import io import linecache @@ -211,6 +212,19 @@ def show_socket_error(err, address): parent=root) root.destroy() + +def get_message_lines(typ, exc, tb): + "Return line composing the exception message." + if typ in (AttributeError, NameError): + # 3.10+ hints are not directly accessible from python (#44026). + err = io.StringIO() + with contextlib.redirect_stderr(err): + sys.__excepthook__(typ, exc, tb) + return [err.getvalue().split("\n")[-2] + "\n"] + else: + return traceback.format_exception_only(typ, exc) + + def print_exception(): import linecache linecache.checkcache() @@ -241,7 +255,7 @@ def print_exc(typ, exc, tb): "debugger_r.py", "bdb.py") cleanup_traceback(tbe, exclude) traceback.print_list(tbe, file=efile) - lines = traceback.format_exception_only(typ, exc) + lines = get_message_lines(typ, exc, tb) for line in lines: print(line, end='', file=efile) diff --git a/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst b/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst new file mode 100644 index 00000000000000..bc4b680983a59a --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-05-05-09-45-24.bpo-44026.m2Z0zR.rst @@ -0,0 +1,2 @@ +Include interpreter's typo fix suggestions in message line for +NameErrors and AttributeErrors. Patch by E. Paine. From webhook-mailer at python.org Fri May 7 21:18:00 2021 From: webhook-mailer at python.org (methane) Date: Sat, 08 May 2021 01:18:00 -0000 Subject: [Python-checkins] Do not use Py_ssize_clean_t (GH-25940) Message-ID: https://github.com/python/cpython/commit/4d4be477055d0f9e415407bcd193788fae04dc11 commit: 4d4be477055d0f9e415407bcd193788fae04dc11 branch: main author: Inada Naoki committer: methane date: 2021-05-08T10:17:37+09:00 summary: Do not use Py_ssize_clean_t (GH-25940) files: M Include/pyport.h M Lib/test/clinic.test M Modules/_dbmmodule.c M Modules/_gdbmmodule.c M Modules/clinic/_dbmmodule.c.h M Modules/clinic/_gdbmmodule.c.h M Modules/clinic/unicodedata.c.h M Modules/unicodedata.c M Tools/clinic/clinic.py diff --git a/Include/pyport.h b/Include/pyport.h index 6ab0ae4007922a..b2b53dd2f771b6 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -118,12 +118,8 @@ typedef Py_ssize_t Py_hash_t; #define SIZEOF_PY_UHASH_T SIZEOF_SIZE_T typedef size_t Py_uhash_t; -/* Only used for compatibility with code that may not be PY_SSIZE_T_CLEAN. */ -#ifdef PY_SSIZE_T_CLEAN +/* Now PY_SSIZE_T_CLEAN is mandatory. This is just for backward compatibility. */ typedef Py_ssize_t Py_ssize_clean_t; -#else -typedef int Py_ssize_clean_t; -#endif /* Largest possible value of size_t. */ #define PY_SIZE_MAX SIZE_MAX diff --git a/Lib/test/clinic.test b/Lib/test/clinic.test index 07e13829d5db97..8224317c04d1b5 100644 --- a/Lib/test/clinic.test +++ b/Lib/test/clinic.test @@ -1659,9 +1659,9 @@ PyDoc_STRVAR(test_str_converter__doc__, static PyObject * test_str_converter_impl(PyObject *module, const char *a, const char *b, const char *c, const char *d, const char *e, - const char *f, Py_ssize_clean_t f_length, - const char *g, Py_ssize_clean_t g_length, - const char *h, Py_ssize_clean_t h_length); + const char *f, Py_ssize_t f_length, const char *g, + Py_ssize_t g_length, const char *h, + Py_ssize_t h_length); static PyObject * test_str_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs) @@ -1673,11 +1673,11 @@ test_str_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs) const char *d = "cef"; const char *e = "gh"; const char *f = "ij"; - Py_ssize_clean_t f_length; + Py_ssize_t f_length; const char *g = "kl"; - Py_ssize_clean_t g_length; + Py_ssize_t g_length; const char *h = "mn"; - Py_ssize_clean_t h_length; + Py_ssize_t h_length; if (!_PyArg_ParseStack(args, nargs, "|sssyzy#s#z#:test_str_converter", &a, &b, &c, &d, &e, &f, &f_length, &g, &g_length, &h, &h_length)) { @@ -1692,10 +1692,10 @@ exit: static PyObject * test_str_converter_impl(PyObject *module, const char *a, const char *b, const char *c, const char *d, const char *e, - const char *f, Py_ssize_clean_t f_length, - const char *g, Py_ssize_clean_t g_length, - const char *h, Py_ssize_clean_t h_length) -/*[clinic end generated code: output=ad868ad94a488e32 input=8afe9da8185cd38c]*/ + const char *f, Py_ssize_t f_length, const char *g, + Py_ssize_t g_length, const char *h, + Py_ssize_t h_length) +/*[clinic end generated code: output=5def009caa2fd1ac input=8afe9da8185cd38c]*/ /*[clinic input] @@ -1720,8 +1720,8 @@ PyDoc_STRVAR(test_str_converter_encoding__doc__, static PyObject * test_str_converter_encoding_impl(PyObject *module, char *a, char *b, char *c, - char *d, Py_ssize_clean_t d_length, char *e, - Py_ssize_clean_t e_length); + char *d, Py_ssize_t d_length, char *e, + Py_ssize_t e_length); static PyObject * test_str_converter_encoding(PyObject *module, PyObject *const *args, Py_ssize_t nargs) @@ -1731,9 +1731,9 @@ test_str_converter_encoding(PyObject *module, PyObject *const *args, Py_ssize_t char *b = NULL; char *c = NULL; char *d = NULL; - Py_ssize_clean_t d_length; + Py_ssize_t d_length; char *e = NULL; - Py_ssize_clean_t e_length; + Py_ssize_t e_length; if (!_PyArg_ParseStack(args, nargs, "esesetes#et#:test_str_converter_encoding", "idna", &a, "idna", &b, "idna", &c, "idna", &d, &d_length, "idna", &e, &e_length)) { @@ -1768,9 +1768,9 @@ exit: static PyObject * test_str_converter_encoding_impl(PyObject *module, char *a, char *b, char *c, - char *d, Py_ssize_clean_t d_length, char *e, - Py_ssize_clean_t e_length) -/*[clinic end generated code: output=f579dd9e795a364e input=eb4c38e1f898f402]*/ + char *d, Py_ssize_t d_length, char *e, + Py_ssize_t e_length) +/*[clinic end generated code: output=5cae635c092334cb input=eb4c38e1f898f402]*/ /*[clinic input] @@ -1796,10 +1796,8 @@ PyDoc_STRVAR(test_Py_UNICODE_converter__doc__, static PyObject * test_Py_UNICODE_converter_impl(PyObject *module, const Py_UNICODE *a, const Py_UNICODE *b, const Py_UNICODE *c, - const Py_UNICODE *d, - Py_ssize_clean_t d_length, - const Py_UNICODE *e, - Py_ssize_clean_t e_length); + const Py_UNICODE *d, Py_ssize_t d_length, + const Py_UNICODE *e, Py_ssize_t e_length); static PyObject * test_Py_UNICODE_converter(PyObject *module, PyObject *const *args, Py_ssize_t nargs) @@ -1809,9 +1807,9 @@ test_Py_UNICODE_converter(PyObject *module, PyObject *const *args, Py_ssize_t na const Py_UNICODE *b; const Py_UNICODE *c; const Py_UNICODE *d; - Py_ssize_clean_t d_length; + Py_ssize_t d_length; const Py_UNICODE *e; - Py_ssize_clean_t e_length; + Py_ssize_t e_length; if (!_PyArg_ParseStack(args, nargs, "O&O&O&u#Z#:test_Py_UNICODE_converter", _PyUnicode_WideCharString_Converter, &a, _PyUnicode_WideCharString_Converter, &b, _PyUnicode_WideCharString_Opt_Converter, &c, &d, &d_length, &e, &e_length)) { @@ -1839,11 +1837,9 @@ exit: static PyObject * test_Py_UNICODE_converter_impl(PyObject *module, const Py_UNICODE *a, const Py_UNICODE *b, const Py_UNICODE *c, - const Py_UNICODE *d, - Py_ssize_clean_t d_length, - const Py_UNICODE *e, - Py_ssize_clean_t e_length) -/*[clinic end generated code: output=ef45e982fedf0b3d input=064a3b68ad7f04b0]*/ + const Py_UNICODE *d, Py_ssize_t d_length, + const Py_UNICODE *e, Py_ssize_t e_length) +/*[clinic end generated code: output=65d6607da302afd0 input=064a3b68ad7f04b0]*/ /*[clinic input] diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 58f9c2c357b2c6..96d0b0a5cfe6a5 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -299,8 +299,8 @@ Return the value for key if present, otherwise default. static PyObject * _dbm_dbm_get_impl(dbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length, PyObject *default_value) -/*[clinic end generated code: output=34851b5dc1c664dc input=66b993b8349fa8c1]*/ + Py_ssize_t key_length, PyObject *default_value) +/*[clinic end generated code: output=b4e55f8b6d482bc4 input=66b993b8349fa8c1]*/ { datum dbm_key, val; _dbm_state *state = PyType_GetModuleState(cls); @@ -331,9 +331,8 @@ If key is not in the database, it is inserted with default as the value. static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length, - PyObject *default_value) -/*[clinic end generated code: output=d5c68fe673886767 input=126a3ff15c5f8232]*/ + Py_ssize_t key_length, PyObject *default_value) +/*[clinic end generated code: output=9c2f6ea6d0fb576c input=126a3ff15c5f8232]*/ { datum dbm_key, val; Py_ssize_t tmp_size; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index c52190a7ed2db5..dc8b8b692c1a3f 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -448,8 +448,8 @@ to create a list in memory that contains them all: static PyObject * _gdbm_gdbm_nextkey_impl(gdbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length) -/*[clinic end generated code: output=204964441fdbaf02 input=fcf6a51a96ce0172]*/ + Py_ssize_t key_length) +/*[clinic end generated code: output=c81a69300ef41766 input=fcf6a51a96ce0172]*/ { PyObject *v; datum dbm_key, nextkey; diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h index af288c2586a10b..b50db5d0d2e0d1 100644 --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -60,7 +60,7 @@ PyDoc_STRVAR(_dbm_dbm_get__doc__, static PyObject * _dbm_dbm_get_impl(dbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length, PyObject *default_value); + Py_ssize_t key_length, PyObject *default_value); static PyObject * _dbm_dbm_get(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) @@ -69,7 +69,7 @@ _dbm_dbm_get(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize static const char * const _keywords[] = {"", "", NULL}; static _PyArg_Parser _parser = {"s#|O:get", _keywords, 0}; const char *key; - Py_ssize_clean_t key_length; + Py_ssize_t key_length; PyObject *default_value = Py_None; if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, @@ -95,8 +95,7 @@ PyDoc_STRVAR(_dbm_dbm_setdefault__doc__, static PyObject * _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length, - PyObject *default_value); + Py_ssize_t key_length, PyObject *default_value); static PyObject * _dbm_dbm_setdefault(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) @@ -105,7 +104,7 @@ _dbm_dbm_setdefault(dbmobject *self, PyTypeObject *cls, PyObject *const *args, P static const char * const _keywords[] = {"", "", NULL}; static _PyArg_Parser _parser = {"s#|O:setdefault", _keywords, 0}; const char *key; - Py_ssize_clean_t key_length; + Py_ssize_t key_length; PyObject *default_value = NULL; if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, @@ -187,4 +186,4 @@ dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=6947b1115df66f7c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=13b6d821416be228 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h index ffd2179f36970a..060445177702bb 100644 --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -170,7 +170,7 @@ PyDoc_STRVAR(_gdbm_gdbm_nextkey__doc__, static PyObject * _gdbm_gdbm_nextkey_impl(gdbmobject *self, PyTypeObject *cls, const char *key, - Py_ssize_clean_t key_length); + Py_ssize_t key_length); static PyObject * _gdbm_gdbm_nextkey(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) @@ -179,7 +179,7 @@ _gdbm_gdbm_nextkey(gdbmobject *self, PyTypeObject *cls, PyObject *const *args, P static const char * const _keywords[] = {"", NULL}; static _PyArg_Parser _parser = {"s#:nextkey", _keywords, 0}; const char *key; - Py_ssize_clean_t key_length; + Py_ssize_t key_length; if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser, &key, &key_length)) { @@ -340,4 +340,4 @@ dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=e84bc6ac82fcb6d4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c3ee3ad64a2f331f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/unicodedata.c.h b/Modules/clinic/unicodedata.c.h index 4251db2edc7b96..17f2e009701f11 100644 --- a/Modules/clinic/unicodedata.c.h +++ b/Modules/clinic/unicodedata.c.h @@ -542,14 +542,14 @@ PyDoc_STRVAR(unicodedata_UCD_lookup__doc__, static PyObject * unicodedata_UCD_lookup_impl(PyObject *self, const char *name, - Py_ssize_clean_t name_length); + Py_ssize_t name_length); static PyObject * unicodedata_UCD_lookup(PyObject *self, PyObject *arg) { PyObject *return_value = NULL; const char *name; - Py_ssize_clean_t name_length; + Py_ssize_t name_length; if (!PyArg_Parse(arg, "s#:lookup", &name, &name_length)) { goto exit; @@ -559,4 +559,4 @@ unicodedata_UCD_lookup(PyObject *self, PyObject *arg) exit: return return_value; } -/*[clinic end generated code: output=10c23477dbe8a202 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a3c0eb84eda47b2d input=a9049054013a1b77]*/ diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 1a41e1c2c527f4..2e8d199de86ca8 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1389,8 +1389,8 @@ corresponding character. If not found, KeyError is raised. static PyObject * unicodedata_UCD_lookup_impl(PyObject *self, const char *name, - Py_ssize_clean_t name_length) -/*[clinic end generated code: output=765cb8186788e6be input=a557be0f8607a0d6]*/ + Py_ssize_t name_length) +/*[clinic end generated code: output=7f03fc4959b242f6 input=a557be0f8607a0d6]*/ { Py_UCS4 code; unsigned int index; diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 959742677d2f67..b2879163f1e7fa 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2534,7 +2534,7 @@ def _render_self(self, parameter, data): # impl_parameters data.impl_parameters.append(self.simple_declaration(by_reference=self.impl_by_reference)) if self.length: - data.impl_parameters.append("Py_ssize_clean_t " + self.length_name()) + data.impl_parameters.append("Py_ssize_t " + self.length_name()) def _render_non_self(self, parameter, data): self.parameter = parameter @@ -2640,7 +2640,7 @@ def declaration(self): declaration.append(default) declaration.append(";") if self.length: - declaration.append('\nPy_ssize_clean_t ') + declaration.append('\nPy_ssize_t ') declaration.append(self.length_name()) declaration.append(';') return "".join(declaration) From webhook-mailer at python.org Fri May 7 22:31:10 2021 From: webhook-mailer at python.org (ned-deily) Date: Sat, 08 May 2021 02:31:10 -0000 Subject: [Python-checkins] Add the blurbify of the 3.10.0b1 changelog to the main branch (GH-25976) Message-ID: https://github.com/python/cpython/commit/164d6e1bb1bb3a4e4d5610f07a8911ecf57a691d commit: 164d6e1bb1bb3a4e4d5610f07a8911ecf57a691d branch: main author: Ned Deily committer: ned-deily date: 2021-05-07T22:31:01-04:00 summary: Add the blurbify of the 3.10.0b1 changelog to the main branch (GH-25976) files: A Misc/NEWS.d/3.10.0b1.rst D Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst D Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst D Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst D Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst D Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst D Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst D Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst D Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst D Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst D Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst D Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst D Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst D Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst D Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst D Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst D Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst D Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst D Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst D Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst D Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst D Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst D Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst D Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst D Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst D Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst D Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst D Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst D Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst D Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst D Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst D Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst D Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst D Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst D Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst D Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst D Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst D Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst D Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst D Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst D Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst D Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst D Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst D Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst D Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst D Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst D Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst D Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst D Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst D Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst D Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst D Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst D Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst D Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst D Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst D Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst D Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst D Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst D Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst D Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst D Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst D Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst D Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst D Misc/NEWS.d/next/Library/2021-04-08-11-47-31.bpo-38659.r_HFnU.rst D Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst D Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst D Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst D Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst D Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst D Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst D Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst D Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst D Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst D Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst D Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst D Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst D Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst D Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst D Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst D Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst D Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst D Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst D Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst D Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst D Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst D Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst D Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst D Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst D Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst D Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst D Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst D Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst D Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst D Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst D Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst D Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst D Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst D Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst D Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst D Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst D Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst D Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst D Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst D Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst D Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst D Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst D Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst D Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst D Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst D Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst D Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst D Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst D Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst D Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst D Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst D Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst D Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst D Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst D Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst D Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst D Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst D Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst D Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst D Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst D Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst D Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst D Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst D Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst D Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst D Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst D Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst D Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst D Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst D Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst D Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst D Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst D Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst D Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst D Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst D Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst diff --git a/Misc/NEWS.d/3.10.0b1.rst b/Misc/NEWS.d/3.10.0b1.rst new file mode 100644 index 00000000000000..a0dac135a3a604 --- /dev/null +++ b/Misc/NEWS.d/3.10.0b1.rst @@ -0,0 +1,1807 @@ +.. bpo: 43434 +.. date: 2021-05-02-17-50-23 +.. nonce: cy7xz6 +.. release date: 2021-05-03 +.. section: Security + +Creating :class:`sqlite3.Connection` objects now also produces +``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events +`. Previously these events were only produced by +:func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43998 +.. date: 2021-05-01-13-13-40 +.. nonce: xhmWD7 +.. section: Security + +The :mod:`ssl` module sets more secure cipher suites defaults. Ciphers +without forward secrecy and with SHA-1 MAC are disabled by default. Security +level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of +security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS +1.2. Settings are based on Hynek Schlawack's research. + +.. + +.. bpo: 43882 +.. date: 2021-04-25-07-46-37 +.. nonce: Jpwx85 +.. section: Security + +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. + +.. + +.. bpo: 43472 +.. date: 2021-04-21-22-53-31 +.. nonce: gjLBTb +.. section: Security + +Ensures interpreter-level audit hooks receive the +``cpython.PyInterpreterState_New`` event when called through the +``_xxsubinterpreters`` module. + +.. + +.. bpo: 43362 +.. date: 2021-04-18-00-56-44 +.. nonce: __5aiP +.. section: Security + +Fix invalid free in _sha3 module. The issue was introduced in 3.10.0a1. +Python 3.9 and earlier are not affected. + +.. + +.. bpo: 43762 +.. date: 2021-04-07-12-57-41 +.. nonce: 7lMtpT +.. section: Security + +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. + +.. + +.. bpo: 43756 +.. date: 2021-04-06-18-07-48 +.. nonce: DLBNqQ +.. section: Security + +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`. + +.. + +.. bpo: 36384 +.. date: 2021-03-30-16-29-51 +.. nonce: sCAmLs +.. section: Security + +:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address +strings. Leading zeros are ambiguous and interpreted as octal notation by +some libraries. For example the legacy function :func:`socket.inet_aton` +treats leading zeros as octal notatation. glibc implementation of modern +:func:`~socket.inet_pton` does not accept any leading zeros. For a while the +:mod:`ipaddress` module used to accept ambiguous leading zeros. + +.. + +.. bpo: 43075 +.. date: 2021-01-31-05-28-14 +.. nonce: DoAXqO +.. section: Security + +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. + +.. + +.. bpo: 42800 +.. date: 2021-01-09-17-07-36 +.. nonce: _dtZvW +.. section: Security + +Audit hooks are now fired for frame.f_code, traceback.tb_frame, and +generator code/frame attribute access. + +.. + +.. bpo: 37363 +.. date: 2020-07-04-22-14-46 +.. nonce: NDjHNw +.. section: Security + +Add audit events to the :mod:`http.client` module. + +.. + +.. bpo: 43977 +.. date: 2021-05-02-11-59-00 +.. nonce: R0hSDo +.. section: Core and Builtins + +Prevent classes being both a sequence and a mapping when pattern matching. + +.. + +.. bpo: 43977 +.. date: 2021-04-29-17-40-25 +.. nonce: FrQhge +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43892 +.. date: 2021-04-29-16-00-28 +.. nonce: WXIehI +.. section: Core and Builtins + +Restore proper validation of complex literal value patterns when parsing +:keyword:`!match` blocks. + +.. + +.. bpo: 43933 +.. date: 2021-04-29-13-49-57 +.. nonce: TueFdQ +.. section: Core and Builtins + +Set frame.f_lineno to the line number of the 'with' kweyword when executing +the call to ``__exit__``. + +.. + +.. bpo: 43933 +.. date: 2021-04-29-13-11-44 +.. nonce: mvoV6O +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43963 +.. date: 2021-04-28-01-23-38 +.. nonce: u5Y6bS +.. section: Core and Builtins + +Importing the :mod:`_signal` module in a subinterpreter has no longer side +effects. + +.. + +.. bpo: 42739 +.. date: 2021-04-27-10-59-10 +.. nonce: PrVkKM +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43908 +.. date: 2021-04-26-21-20-41 +.. nonce: 2L51nO +.. section: Core and Builtins + +Make :mod:`re` types immutable. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43908 +.. date: 2021-04-26-20-59-17 +.. nonce: -COW4- +.. section: Core and Builtins + +Make the :class:`array.array` type immutable. Patch by Erlend E. Aasland. + +.. + +.. bpo: 43901 +.. date: 2021-04-25-22-50-47 +.. nonce: oKjG5E +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43892 +.. date: 2021-04-25-08-35-11 +.. nonce: hr5Ke2 +.. section: Core and Builtins + +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. + +.. + +.. bpo: 42725 +.. date: 2021-04-25-05-40-51 +.. nonce: WGloYm +.. section: Core and Builtins + +Usage of ``await``/``yield``/``yield from`` and named expressions within an +annotation is now forbidden when PEP 563 is activated. + +.. + +.. bpo: 43754 +.. date: 2021-04-24-16-40-23 +.. nonce: 9SzHWG +.. section: Core and Builtins + +When performing structural pattern matching (:pep:`634`), captured names are +now left unbound until the *entire* pattern has matched successfully. + +.. + +.. bpo: 42737 +.. date: 2021-04-22-22-48-30 +.. nonce: lsJ7pD +.. section: Core and Builtins + +Annotations for complex targets (everything beside simple names) no longer +cause any runtime effects with ``from __future__ import annotations``. + +.. + +.. bpo: 43914 +.. date: 2021-04-22-19-09-58 +.. nonce: 0Ik1AM +.. section: Core and Builtins + +: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. + +.. + +.. bpo: 38605 +.. date: 2021-04-20-22-17-47 +.. nonce: 9eeCNZ +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43475 +.. date: 2021-04-20-20-10-46 +.. nonce: oV8Mbs +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43859 +.. date: 2021-04-16-01-26-57 +.. nonce: QfqjFL +.. section: Core and Builtins + +Improve the error message for :exc:`IndentationError` exceptions. Patch by +Pablo Galindo + +.. + +.. bpo: 41323 +.. date: 2021-04-15-10-19-59 +.. nonce: nsvpSg +.. section: Core and Builtins + +Constant tuple folding in bytecode optimizer now reuses tuple in constant +table. + +.. + +.. bpo: 43846 +.. date: 2021-04-14-13-53-08 +.. nonce: 2jO97c +.. section: Core and Builtins + +Data stack usage is much reduced for large literal and call expressions. + +.. + +.. bpo: 38530 +.. date: 2021-04-14-03-53-06 +.. nonce: rNI_G1 +.. section: Core and Builtins + +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 + +.. + +.. bpo: 43823 +.. date: 2021-04-13-03-06-09 +.. nonce: xpuHBi +.. section: Core and Builtins + +Improve syntax errors for invalid dictionary literals. Patch by Pablo +Galindo. + +.. + +.. bpo: 43822 +.. date: 2021-04-13-02-32-18 +.. nonce: lej0OO +.. section: Core and Builtins + +Improve syntax errors in the parser for missing commas between expressions. +Patch by Pablo Galindo. + +.. + +.. bpo: 43798 +.. date: 2021-04-10-00-01-43 +.. nonce: p_nJFM +.. section: Core and Builtins + +:class:`ast.alias` nodes now include source location metadata attributes +e.g. lineno, col_offset. + +.. + +.. bpo: 43797 +.. date: 2021-04-09-19-12-48 +.. nonce: HfRqNP +.. section: Core and Builtins + +Improve ``SyntaxError`` error messages for invalid comparisons. Patch by +Pablo Galindo. + +.. + +.. bpo: 43760 +.. date: 2021-04-08-12-20-29 +.. nonce: tBIsD8 +.. section: Core and Builtins + +Move the flag for checking whether tracing is enabled to the C stack, from +the heap. Should speed up dispatch in the interpreter. + +.. + +.. bpo: 43682 +.. date: 2021-04-08-01-06-22 +.. nonce: eUn4p5 +.. section: Core and Builtins + +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. + +.. + +.. bpo: 43751 +.. date: 2021-04-07-18-00-05 +.. nonce: 8fHsqQ +.. section: Core and Builtins + +Fixed a bug where ``anext(ait, default)`` would erroneously return None. + +.. + +.. bpo: 42128 +.. date: 2021-04-05-17-38-08 +.. nonce: 1uVeGK +.. section: Core and Builtins + +:data:`~object.__match_args__` is no longer allowed to be a list. + +.. + +.. bpo: 43683 +.. date: 2021-04-01-12-30-30 +.. nonce: AjxOx2 +.. section: Core and Builtins + +Add GEN_START opcode. Marks start of generator, including async, or +coroutine and handles sending values to a newly created generator or +coroutine. + +.. + +.. bpo: 43105 +.. date: 2021-03-31-20-35-11 +.. nonce: PBVmHm +.. section: Core and Builtins + +Importlib now resolves relative paths when creating module spec objects from +file locations. + +.. + +.. bpo: 43682 +.. date: 2021-03-31-16-32-57 +.. nonce: VSF3vg +.. section: Core and Builtins + +Static methods (:func:`@staticmethod `) are now callable as +regular functions. Patch by Victor Stinner. + +.. + +.. bpo: 42609 +.. date: 2020-12-12-14-28-31 +.. nonce: Qcd54b +.. section: Core and Builtins + +Prevented crashes in the AST validator and optimizer when compiling some +absurdly long expressions like ``"+0"*1000000``. :exc:`RecursionError` is +now raised instead. + +.. + +.. bpo: 38530 +.. date: 2019-10-27-20-20-07 +.. nonce: ZyoDNn +.. section: Core and Builtins + +When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer +suggestions of similar attribute names in the object that the exception was +raised from. Patch by Pablo Galindo + +.. + +.. bpo: 44015 +.. date: 2021-05-03-03-03-49 +.. nonce: V5936k +.. section: Library + +In @dataclass(), raise a TypeError if KW_ONLY is specified more than once. + +.. + +.. bpo: 25478 +.. date: 2021-05-02-19-17-20 +.. nonce: AwlwdA +.. section: Library + +Added a *total()* method to collections.Counter() to compute the sum of the +counts. + +.. + +.. bpo: 43733 +.. date: 2021-05-01-22-59-20 +.. nonce: gJWwEQ +.. section: Library + +Change :class:`netrc.netrc` to use UTF-8 encoding before using locale +encoding. + +.. + +.. bpo: 43979 +.. date: 2021-05-01-01-36-51 +.. nonce: 43oJ9L +.. section: Library + +Removed an unnecessary list comprehension before looping from +:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee +Na. + +.. + +.. bpo: 43993 +.. date: 2021-04-30-19-23-45 +.. nonce: T7_yoq +.. section: Library + +Update bundled pip to 21.1.1. + +.. + +.. bpo: 43957 +.. date: 2021-04-27-12-13-51 +.. nonce: 6EaPD- +.. section: Library + +[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. + +.. + +.. bpo: 42904 +.. date: 2021-04-26-23-39-47 +.. nonce: ejjsyR +.. section: Library + +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. + +.. + +.. bpo: 43945 +.. date: 2021-04-26-20-52-16 +.. nonce: NgERXO +.. section: Library + +[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum +member, not the member's value, will be used for format() calls. + +.. + +.. bpo: 41139 +.. date: 2021-04-26-17-47-48 +.. nonce: ROhn1k +.. section: Library + +Deprecate undocumented ``cgi.log()`` API. + +.. + +.. bpo: 43937 +.. date: 2021-04-25-13-34-13 +.. nonce: isx95l +.. section: Library + +Fixed the :mod:`turtle` module working with non-default root window. + +.. + +.. bpo: 43930 +.. date: 2021-04-24-14-23-07 +.. nonce: R7ah0m +.. section: Library + +Update bundled pip to 21.1 and setuptools to 56.0.0 + +.. + +.. bpo: 43907 +.. date: 2021-04-23-20-57-20 +.. nonce: 3RJEjv +.. section: Library + +Fix a bug in the pure-Python pickle implementation when using protocol 5, +where bytearray instances that occur several time in the pickled object +graph would incorrectly unpickle into repeated copies of the bytearray +object. + +.. + +.. bpo: 43926 +.. date: 2021-04-23-17-48-55 +.. nonce: HMUlGU +.. section: Library + +In ``importlib.metadata``, provide a uniform interface to ``Description``, +allow for any field to be encoded with multiline values, remove continuation +lines from multiline values, and add a ``.json`` property for easy access to +the PEP 566 JSON-compatible form. Sync with ``importlib_metadata 4.0``. + +.. + +.. bpo: 43920 +.. date: 2021-04-23-11-54-38 +.. nonce: cJMQ2D +.. section: Library + +OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a +consistent error message when cadata contains no valid certificate. + +.. + +.. bpo: 43607 +.. date: 2021-04-22-22-39-58 +.. nonce: 7IYDkG +.. section: Library + +:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL +paths. + +.. + +.. bpo: 43817 +.. date: 2021-04-22-04-12-13 +.. nonce: FQ-XlH +.. section: Library + +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. + +.. + +.. bpo: 43284 +.. date: 2021-04-21-14-50-57 +.. nonce: 2QZn2T +.. section: Library + +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. + +.. + +.. bpo: 42854 +.. date: 2021-04-19-03-54-29 +.. nonce: Y4M7Tv +.. section: Library + +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. + +.. + +.. bpo: 42333 +.. date: 2021-04-17-19-31-17 +.. nonce: cgbtZO +.. section: Library + +Port ``_ssl`` extension module to multiphase initialization. + +.. + +.. bpo: 43880 +.. date: 2021-04-17-13-53-33 +.. nonce: -fC2JD +.. section: Library + +: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. + +.. + +.. bpo: 41559 +.. date: 2021-04-17-10-49-57 +.. nonce: caIwt9 +.. section: Library + +: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. + +.. + +.. bpo: 43867 +.. date: 2021-04-16-16-46-44 +.. nonce: xT9QjF +.. section: Library + +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). + +.. + +.. bpo: 40443 +.. date: 2021-04-16-02-03-00 +.. nonce: Io6FHL +.. section: Library + +Remove unused imports: pyclbr no longer uses copy, and typing no longer uses +ast. Patch by Victor Stinner. + +.. + +.. bpo: 43820 +.. date: 2021-04-12-18-01-10 +.. nonce: YkqYW4 +.. section: Library + +Remove an unneeded copy of the namespace passed to +dataclasses.make_dataclass(). + +.. + +.. bpo: 43787 +.. date: 2021-04-12-15-15-50 +.. nonce: wCy_Wd +.. section: Library + +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. + +.. + +.. bpo: 43680 +.. date: 2021-04-12-11-20-34 +.. nonce: SR0Epv +.. section: Library + +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(). + +.. + +.. bpo: 43680 +.. date: 2021-04-12-09-57-37 +.. nonce: o1zEk_ +.. section: Library + +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. + +.. + +.. bpo: 41515 +.. date: 2021-04-12-06-01-10 +.. nonce: YaVReb +.. section: Library + +Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due to synthetic +modules that don't appear in ``sys.modules``. + +.. + +.. bpo: 43776 +.. date: 2021-04-12-00-00-00 +.. nonce: p14y7a +.. section: Library + +When :class:`subprocess.Popen` args are provided as a string or as +:class:`pathlib.Path`, the Popen instance repr now shows the right thing. + +.. + +.. bpo: 42248 +.. date: 2021-04-11-21-10-57 +.. nonce: pedB1E +.. section: Library + +[Enum] ensure exceptions raised in ``_missing__`` are released + +.. + +.. bpo: 43744 +.. date: 2021-04-11-20-52-32 +.. nonce: uf0E68 +.. section: Library + +fix issue with enum member name matching the start of a private variable +name + +.. + +.. bpo: 43772 +.. date: 2021-04-10-19-14-49 +.. nonce: Bxq0zQ +.. section: Library + +Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle Zijlstra. + +.. + +.. bpo: 43764 +.. date: 2021-04-10-18-23-09 +.. nonce: Le5KJp +.. section: Library + +Add match_args parameter to @dataclass decorator to allow suppression of +__match_args__ generation. + +.. + +.. bpo: 43799 +.. date: 2021-04-10-11-35-50 +.. nonce: 1iV4pX +.. section: Library + +OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to suppress deprecation +warnings. Python requires OpenSSL 1.1.1 APIs. + +.. + +.. bpo: 43478 +.. date: 2021-04-10-03-30-36 +.. nonce: iZcBTq +.. section: Library + +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. + +.. + +.. bpo: 43794 +.. date: 2021-04-09-16-14-22 +.. nonce: -1XPDH +.. section: Library + +Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) + +.. + +.. bpo: 43785 +.. date: 2021-04-09-14-51-58 +.. nonce: 1mM5xE +.. section: Library + +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. + +.. + +.. bpo: 43789 +.. date: 2021-04-09-14-08-03 +.. nonce: eaHlAm +.. section: Library + +OpenSSL 3.0.0: Don't call the password callback function a second time when +first call has signaled an error condition. + +.. + +.. bpo: 43788 +.. date: 2021-04-09-12-08-01 +.. nonce: YsvInM +.. section: Library + +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. + +.. + +.. bpo: 43766 +.. date: 2021-04-09-00-16-22 +.. nonce: nYNQP0 +.. section: Library + +Implement :pep:`647` in the :mod:`typing` module by adding +:data:`TypeGuard`. + +.. + +.. bpo: 25264 +.. date: 2021-04-08-22-11-27 +.. nonce: b33fa0 +.. section: Library + +: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. + +.. + +.. bpo: 43780 +.. date: 2021-04-08-20-04-46 +.. nonce: hUOgCh +.. section: Library + +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. + +.. + +.. bpo: 47383 +.. date: 2021-04-08-19-32-26 +.. nonce: YI1hdL +.. section: Library + +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. + +.. + +.. bpo: 43731 +.. date: 2021-04-08-15-19-20 +.. nonce: nnVd3h +.. section: Library + +Add an ``encoding`` parameter :func:`logging.fileConfig()`. + +.. + +.. bpo: 43712 +.. date: 2021-04-08-12-25-08 +.. nonce: f8WXCX +.. section: Library + +Add ``encoding`` and ``errors`` parameters to :func:`fileinput.input` and +:class:`fileinput.FileInput`. + +.. + +.. bpo: 38659 +.. date: 2021-04-08-11-47-31 +.. nonce: r_HFnU +.. section: Library + +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``. + +.. + +.. bpo: 43764 +.. date: 2021-04-08-09-59-20 +.. nonce: tHjO60 +.. section: Library + +Fix an issue where :data:`~object.__match_args__` generation could fail for +some :mod:`dataclasses`. + +.. + +.. bpo: 43752 +.. date: 2021-04-06-21-18-29 +.. nonce: K7qmAF +.. section: Library + +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. + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-51-19 +.. nonce: LwGy8R +.. section: Library + +:mod:`tkinter` dialog windows are now recognized as dialogs by window +managers on macOS and X Window. + +.. + +.. bpo: 43723 +.. date: 2021-04-03-18-03-44 +.. nonce: uBhBZS +.. section: Library + +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. + +.. + +.. bpo: 2135 +.. date: 2021-04-03-15-24-59 +.. nonce: xmDAYJ +.. section: Library + +Deprecate find_module() and find_loader() implementations in importlib and +zipimport. + +.. + +.. bpo: 43534 +.. date: 2021-03-18-15-46-08 +.. nonce: vPE9Us +.. section: Library + +:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient +window working on behalf of the canvas window. + +.. + +.. bpo: 43532 +.. date: 2021-03-17-19-06-45 +.. nonce: W2Ntnm +.. section: Library + +Add the ability to specify keyword-only fields to dataclasses. These fields +will become keyword-only arguments to the generated __init__. + +.. + +.. bpo: 43522 +.. date: 2021-03-16-22-37-32 +.. nonce: dhNwOu +.. section: Library + +Fix problem with :attr:`~ssl.SSLContext.hostname_checks_common_name`. +OpenSSL does not copy hostflags from *struct SSL_CTX* to *struct SSL*. + +.. + +.. bpo: 8978 +.. date: 2021-03-13-14-02-07 +.. nonce: CRxG-O +.. section: Library + +Improve error message for :func:`tarfile.open` when :mod:`lzma` / :mod:`bz2` +are unavailable. Patch by Anthony Sottile. + +.. + +.. bpo: 42967 +.. date: 2021-03-11-00-31-41 +.. nonce: 2PeQRw +.. section: Library + +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``. + +.. + +.. bpo: 43296 +.. date: 2021-03-01-13-01-33 +.. nonce: p_gU6T +.. section: Library + +Improve :mod:`sqlite3` error handling: ``sqlite3_value_blob()`` errors that +set ``SQLITE_NOMEM`` now raise :exc:`MemoryError`. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43312 +.. date: 2021-02-25-14-43-59 +.. nonce: 6dg9_2 +.. section: Library + +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. + +.. + +.. bpo: 43265 +.. date: 2021-02-19-22-24-33 +.. nonce: MyAzCH +.. section: Library + +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. + +.. + +.. bpo: 41282 +.. date: 2021-02-16-13-18-38 +.. nonce: GK9a0l +.. section: Library + +Install schemes in :mod:`distutils.command.install` are now loaded from +:mod:`sysconfig`. + +.. + +.. bpo: 41282 +.. date: 2021-02-15-12-52-23 +.. nonce: SenEje +.. section: Library + +:mod:`distutils.sysconfig` has been merged to :mod:`sysconfig`. + +.. + +.. bpo: 43176 +.. date: 2021-02-09-07-24-29 +.. nonce: bocNQn +.. section: Library + +Fixed processing of a dataclass that inherits from a frozen dataclass with +no fields. It is now correctly detected as an error. + +.. + +.. bpo: 43080 +.. date: 2021-01-31-00-23-13 +.. nonce: -fDg4Q +.. section: Library + +:mod:`pprint` now has support for :class:`dataclasses.dataclass`. Patch by +Lewis Gaul. + +.. + +.. bpo: 39950 +.. date: 2021-01-22-00-15-37 +.. nonce: NzLVaR +.. section: Library + +Add `pathlib.Path.hardlink_to()` method that supersedes `link_to()`. The new +method has the same argument order as `symlink_to()`. + +.. + +.. bpo: 42904 +.. date: 2021-01-12-23-17-02 +.. nonce: -4qkTD +.. section: Library + +:func:`typing.get_type_hints` now checks the local namespace of a class when +evaluating :pep:`563` annotations inside said class. + +.. + +.. bpo: 42269 +.. date: 2021-01-08-22-32-13 +.. nonce: W5v8z4 +.. section: Library + +Add ``slots`` parameter to ``dataclasses.dataclass`` decorator to +automatically generate ``__slots__`` for class. Patch provided by Yurii +Karabas. + +.. + +.. bpo: 39529 +.. date: 2020-12-06-20-21-16 +.. nonce: 9Zrg43 +.. section: Library + +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`. + +.. + +.. bpo: 18369 +.. date: 2020-11-19-09-52-24 +.. nonce: qzvYH2 +.. section: Library + +Certificate and PrivateKey classes were added to the ssl module. +Certificates and keys can now be loaded from memory buffer, too. + +.. + +.. bpo: 41486 +.. date: 2020-10-16-15-34-30 +.. nonce: Mu9Iit +.. section: Library + +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. + +.. + +.. bpo: 31870 +.. date: 2020-09-15-23-44-07 +.. nonce: nVwd38 +.. section: Library + +The :func:`ssl.get_server_certificate` function now has a *timeout* +parameter. + +.. + +.. bpo: 41735 +.. date: 2020-09-07-11-15-15 +.. nonce: NKqGKy +.. section: Library + +Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. + +.. + +.. bpo: 36470 +.. date: 2020-06-13-23-33-32 +.. nonce: oi6Kdb +.. section: Library + +Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch +by Claudiu Popa. + +.. + +.. bpo: 40849 +.. date: 2020-06-02-21-32-33 +.. nonce: zpeKx3 +.. section: Library + +Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag + +.. + +.. bpo: 35114 +.. date: 2020-05-17-14-10-24 +.. nonce: uLIHfn +.. section: Library + +:func:`ssl.RAND_status` now returns a boolean value (as documented) instead +of ``1`` or ``0``. + +.. + +.. bpo: 39906 +.. date: 2020-03-30-00-13-27 +.. nonce: eaR3fN +.. section: Library + +: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. + +.. + +.. bpo: 39899 +.. date: 2020-03-09-20-36-07 +.. nonce: 9adF3E +.. section: Library + +: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. + +.. + +.. bpo: 36076 +.. date: 2019-10-16-17-21-53 +.. nonce: FGeQQT +.. section: Library + +Added SNI support to :func:`ssl.get_server_certificate`. + +.. + +.. bpo: 38490 +.. date: 2019-10-16-08-08-14 +.. nonce: QbDXEF +.. section: Library + +Covariance, Pearson's correlation, and simple linear regression +functionality was added to statistics module. Patch by Tymoteusz Wo?od?ko. + +.. + +.. bpo: 33731 +.. date: 2019-08-14-13-19-50 +.. nonce: 9esS0d +.. section: Library + +Provide a locale.localize() function, which converts a normalized number +string into a locale format. + +.. + +.. bpo: 32745 +.. date: 2018-08-09-23-47-10 +.. nonce: iQi9hI +.. section: Library + +Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: +embedded null characters would cause a :exc:`ValueError` to be raised. Patch +by Zackery Spytz. + +.. + +.. bpo: 43987 +.. date: 2021-04-30-04-27-02 +.. nonce: 1DftVa +.. section: Documentation + +Add "Annotations Best Practices" document as a new HOWTO. + +.. + +.. bpo: 43977 +.. date: 2021-04-29-15-06-03 +.. nonce: K5aSl1 +.. section: Documentation + +Document the new :const:`Py_TPFLAGS_MAPPING` and +:const:`Py_TPFLAGS_SEQUENCE` type flags. + +.. + +.. bpo: 43959 +.. date: 2021-04-27-22-22-22 +.. nonce: n2261q +.. section: Documentation + +The documentation on the PyContextVar C-API was clarified. + +.. + +.. bpo: 43938 +.. date: 2021-04-25-22-44-27 +.. nonce: nC660q +.. section: Documentation + +Update dataclasses documentation to express that FrozenInstanceError is +derived from AttributeError. + +.. + +.. bpo: 43778 +.. date: 2021-04-08-22-42-02 +.. nonce: MszRnY +.. section: Documentation + +Fix the Sphinx glossary_search extension: create the _static/ sub-directory +if it doesn't exist. + +.. + +.. bpo: 43755 +.. date: 2021-04-06-14-55-45 +.. nonce: 1m0fGq +.. section: Documentation + +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. + +.. + +.. bpo: 43739 +.. date: 2021-04-06-07-05-49 +.. nonce: L4HjiX +.. section: Documentation + +Fixing the example code in Doc/extending/extending.rst to declare and +initialize the pmodule variable to be of the right type. + +.. + +.. bpo: 43961 +.. date: 2021-04-28-13-21-52 +.. nonce: gNchls +.. section: Tests + +Fix test_logging.test_namer_rotator_inheritance() on Windows: use +:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. + +.. + +.. bpo: 43842 +.. date: 2021-04-16-14-07-40 +.. nonce: w60GAH +.. section: Tests + +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. + +.. + +.. bpo: 43843 +.. date: 2021-04-14-13-22-44 +.. nonce: ruIQKD +.. section: Tests + +: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. + +.. + +.. bpo: 43811 +.. date: 2021-04-12-11-14-28 +.. nonce: vGNbnD +.. section: Tests + +Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up +testing. + +.. + +.. bpo: 43791 +.. date: 2021-04-09-15-10-38 +.. nonce: 4KxiXK +.. section: Tests + +OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests +are failing with TLSV1_ALERT_INTERNAL_ERROR. + +.. + +.. bpo: 43567 +.. date: 2021-03-31-19-50-01 +.. nonce: vd0a-p +.. section: Build + +Improved generated code refresh (AST/tokens/opcodes/keywords) on Windows. + +.. + +.. bpo: 43669 +.. date: 2021-03-30-14-19-39 +.. nonce: lWMUYx +.. section: Build + +Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or newer. + +.. + +.. bpo: 35306 +.. date: 2021-04-22-21-37-41 +.. nonce: 10kSR- +.. section: Windows + +Adds additional arguments to :func:`os.startfile` function. + +.. + +.. bpo: 43538 +.. date: 2021-04-22-20-39-49 +.. nonce: F0Cg6X +.. section: Windows + +Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an +invalid filename. + +.. + +.. bpo: 38822 +.. date: 2021-04-22-19-49-20 +.. nonce: jgdPmq +.. section: Windows + +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`. + +.. + +.. bpo: 26227 +.. date: 2021-04-21-23-37-34 +.. nonce: QMY_eA +.. section: Windows + +Fixed decoding of host names in :func:`socket.gethostbyaddr` and +:func:`socket.gethostbyname_ex`. + +.. + +.. bpo: 40432 +.. date: 2021-04-20-23-07-22 +.. nonce: 9OFpoq +.. section: Windows + +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. + +.. + +.. bpo: 43745 +.. date: 2021-04-06-12-27-33 +.. nonce: rdKNda +.. section: Windows + +Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were +mislabelled and actually included 1.1.1i again. + +.. + +.. bpo: 43652 +.. date: 2021-04-03-18-54-31 +.. nonce: gNmfVN +.. section: Windows + +Update Tcl and Tk to 8.6.11 in Windows installer. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-34-33 +.. nonce: AsYnVX +.. section: Windows + +Upgrade Windows installer to use SQLite 3.35.5. + +.. + +.. bpo: 30555 +.. date: 2017-12-16-12-23-51 +.. nonce: 3ybjly +.. section: Windows + +Fix ``WindowsConsoleIO`` errors in the presence of fd redirection. Patch by +Segev Finer. + +.. + +.. bpo: 42119 +.. date: 2021-05-02-21-03-27 +.. nonce: Y7BSX_ +.. section: macOS + +Fix check for macOS SDK paths when building Python. Narrow search to match +contents of SDKs, namely only files in ``/System/Library``, +``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, +anything under ``/System`` was assumed to be in an SDK which causes problems +with the new file system layout in 10.15+ where user file systems may appear +to be mounted under ``/System``. Paths in ``/Library`` were also +incorrectly treated as SDK locations. + +.. + +.. bpo: 43568 +.. date: 2021-05-02-19-50-52 +.. nonce: AeLNBd +.. section: macOS + +Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 + +.. + +.. bpo: 44009 +.. date: 2021-05-02-03-45-30 +.. nonce: uvhmlh +.. section: macOS + +Provide "python3.x-intel64" executable to allow reliably forcing macOS +universal2 framework builds to run under Rosetta 2 Intel-64 emulation on +Apple Silicon Macs. This can be useful for testing or when universal2 +wheels are not yet available. + +.. + +.. bpo: 43851 +.. date: 2021-04-15-01-20-45 +.. nonce: sDI60Y +.. section: macOS + +Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by Erlend E. +Aasland. + +.. + +.. bpo: 43492 +.. date: 2021-03-15-11-32-23 +.. nonce: 1ZRcV9 +.. section: macOS + +Update macOS installer to use SQLite 3.35.4. + +.. + +.. bpo: 42235 +.. date: 2020-11-01-17-37-16 +.. nonce: A97_BN +.. section: macOS + +``Mac/BuildScript/build-installer.py`` will now use "--enable-optimizations" +and ``--with-lto`` when building on macOS 10.15 or later. + +.. + +.. bpo: 37903 +.. date: 2021-05-02-20-25-53 +.. nonce: VQ6VTU +.. section: IDLE + +Add mouse actions to the shell sidebar. Left click and optional drag +selects one or more lines, as with the editor line number sidebar. Right +click after selecting raises a context menu with 'copy with prompts'. This +zips together prompts from the sidebar with lines from the selected text. + +.. + +.. bpo: 43981 +.. date: 2021-04-30-17-59-56 +.. nonce: 3EFl1H +.. section: IDLE + +Fix reference leak in test_squeezer. Patch by Pablo Galindo + +.. + +.. bpo: 37892 +.. date: 2021-04-29-02-40-41 +.. nonce: bgW2fk +.. section: IDLE + +Indent IDLE Shell input with spaces instead of tabs + +.. + +.. bpo: 43655 +.. date: 2021-04-04-20-52-07 +.. nonce: HSyaKH +.. section: IDLE + +IDLE dialog windows are now recognized as dialogs by window managers on +macOS and X Window. + +.. + +.. bpo: 37903 +.. date: 2019-08-24-23-49-36 +.. nonce: 4xjast +.. section: IDLE + +IDLE's shell now shows prompts in a separate side-bar. + +.. + +.. bpo: 43916 +.. date: 2021-04-29-17-35-48 +.. nonce: wvWt23 +.. section: C API + +Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow +creating type instances. Patch by Victor Stinner. + +.. + +.. bpo: 43774 +.. date: 2021-04-29-10-17-21 +.. nonce: 5MGfgN +.. section: C API + +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). + +.. + +.. bpo: 43962 +.. date: 2021-04-28-13-13-07 +.. nonce: 9Jzs5X +.. section: C API + +_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. + +.. + +.. bpo: 28254 +.. date: 2021-04-28-12-33-44 +.. nonce: a2561e +.. section: C API + +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. + +.. + +.. bpo: 43908 +.. date: 2021-04-22-10-46-40 +.. nonce: Co3YhZ +.. section: C API + +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. + +.. + +.. bpo: 43795 +.. date: 2021-04-20-15-06-29 +.. nonce: y0IP4c +.. section: C API + +:c:func:`PyMem_Calloc` is now available in the limited C API +(``Py_LIMITED_API``). + +.. + +.. bpo: 43868 +.. date: 2021-04-16-18-15-56 +.. nonce: twQ7KH +.. section: C API + +: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. + +.. + +.. bpo: 43795 +.. date: 2021-04-09-18-19-07 +.. nonce: l0yobT +.. section: C API + +Stable ABI and limited API definitions are generated from a central manifest +(:pep:`652`). + +.. + +.. bpo: 43753 +.. date: 2021-04-06-20-52-44 +.. nonce: xUsHp1 +.. section: C API + +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/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 deleted file mode 100644 index 48c74813daa903..00000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-30-14-19-39.bpo-43669.lWMUYx.rst +++ /dev/null @@ -1 +0,0 @@ -Implement :pep:`644`. Python now requires OpenSSL 1.1.1 or newer. 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 deleted file mode 100644 index 062662f6bceaf9..00000000000000 --- a/Misc/NEWS.d/next/Build/2021-03-31-19-50-01.bpo-43567.vd0a-p.rst +++ /dev/null @@ -1 +0,0 @@ -Improved generated code refresh (AST/tokens/opcodes/keywords) on Windows. 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 deleted file mode 100644 index f0eac4cf8e7374..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-06-20-52-44.bpo-43753.xUsHp1.rst +++ /dev/null @@ -1,6 +0,0 @@ -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/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 deleted file mode 100644 index 5153c336777187..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-09-18-19-07.bpo-43795.l0yobT.rst +++ /dev/null @@ -1,2 +0,0 @@ -Stable ABI and limited API definitions are generated from a central manifest -(:pep:`652`). 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 deleted file mode 100644 index 50888b8b37ab84..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-16-18-15-56.bpo-43868.twQ7KH.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index 1dee6e2d69a1b4..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-20-15-06-29.bpo-43795.y0IP4c.rst +++ /dev/null @@ -1,2 +0,0 @@ -:c:func:`PyMem_Calloc` is now available in the limited C API -(``Py_LIMITED_API``). 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 deleted file mode 100644 index 0413c20a1b6b22..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-22-10-46-40.bpo-43908.Co3YhZ.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 015acc9803d474..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-28-12-33-44.bpo-28254.a2561e.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 32164162f90ad0..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-28-13-13-07.bpo-43962.9Jzs5X.rst +++ /dev/null @@ -1,5 +0,0 @@ -_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/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 deleted file mode 100644 index 9664b552717bbb..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-29-10-17-21.bpo-43774.5MGfgN.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index 0cec8103645e34..00000000000000 --- a/Misc/NEWS.d/next/C API/2021-04-29-17-35-48.bpo-43916.wvWt23.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow -creating type instances. Patch by Victor Stinner. 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 deleted file mode 100644 index 0bd2fa65448826..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2019-10-27-20-20-07.bpo-38530.ZyoDNn.rst +++ /dev/null @@ -1,3 +0,0 @@ -When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer -suggestions of similar attribute names in the object that the exception was -raised from. Patch by Pablo Galindo 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 deleted file mode 100644 index d2b0c641b2ecca..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2020-12-12-14-28-31.bpo-42609.Qcd54b.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 1ad949389a1f64..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-16-32-57.bpo-43682.VSF3vg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Static methods (:func:`@staticmethod `) are now callable as -regular functions. Patch by Victor Stinner. 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 deleted file mode 100644 index dd4c18661ec0b8..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-03-31-20-35-11.bpo-43105.PBVmHm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importlib now resolves relative paths when creating module spec objects from -file locations. 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 deleted file mode 100644 index 6e29998a49912e..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-01-12-30-30.bpo-43683.AjxOx2.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index b87c97cc08d254..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-05-17-38-08.bpo-42128.1uVeGK.rst +++ /dev/null @@ -1 +0,0 @@ -:data:`~object.__match_args__` is no longer allowed to be a list. 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 deleted file mode 100644 index 75951ae794d106..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-07-18-00-05.bpo-43751.8fHsqQ.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed a bug where ``anext(ait, default)`` would erroneously return None. \ No newline at end of file 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 deleted file mode 100644 index ab5873edbd70f4..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-01-06-22.bpo-43682.eUn4p5.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index e6612103d807e0..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-08-12-20-29.bpo-43760.tBIsD8.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 2c10bb6ddc8c38..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-09-19-12-48.bpo-43797.HfRqNP.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve ``SyntaxError`` error messages for invalid comparisons. Patch by -Pablo Galindo. 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 deleted file mode 100644 index f6ab5dd410f284..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-10-00-01-43.bpo-43798.p_nJFM.rst +++ /dev/null @@ -1 +0,0 @@ -:class:`ast.alias` nodes now include source location metadata attributes e.g. lineno, col_offset. 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 deleted file mode 100644 index f0e1c2f35a1868..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-02-32-18.bpo-43822.lej0OO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve syntax errors in the parser for missing commas between expressions. -Patch by Pablo Galindo. 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 deleted file mode 100644 index 96cf8eee16b7e9..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-13-03-06-09.bpo-43823.xpuHBi.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve syntax errors for invalid dictionary literals. Patch by Pablo -Galindo. 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 deleted file mode 100644 index ca175e7bebd9e5..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-03-53-06.bpo-38530.rNI_G1.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 220690cd813743..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-14-13-53-08.bpo-43846.2jO97c.rst +++ /dev/null @@ -1 +0,0 @@ -Data stack usage is much reduced for large literal and call expressions. 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 deleted file mode 100644 index b14299e77ebd5f..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-15-10-19-59.bpo-41323.nsvpSg.rst +++ /dev/null @@ -1,2 +0,0 @@ -Constant tuple folding in bytecode optimizer now reuses tuple in constant -table. 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 deleted file mode 100644 index c91f85b4338abb..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-16-01-26-57.bpo-43859.QfqjFL.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve the error message for :exc:`IndentationError` exceptions. Patch by -Pablo Galindo 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 deleted file mode 100644 index 73ed0222ba3b0c..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-20-10-46.bpo-43475.oV8Mbs.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d289424fda3954..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-20-22-17-47.bpo-38605.9eeCNZ.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index ce6747cb1d5d7e..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-19-09-58.bpo-43914.0Ik1AM.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index e55db436896af8..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-22-22-48-30.bpo-42737.lsJ7pD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Annotations for complex targets (everything beside simple names) no longer -cause any runtime effects with ``from __future__ import annotations``. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst deleted file mode 100644 index 54556fa299814c..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-24-16-40-23.bpo-43754.9SzHWG.rst +++ /dev/null @@ -1,2 +0,0 @@ -When performing structural pattern matching (:pep:`634`), captured names are -now left unbound until the *entire* pattern has matched successfully. diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst deleted file mode 100644 index c9ea706e982668..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-05-40-51.bpo-42725.WGloYm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Usage of ``await``/``yield``/``yield from`` and named expressions within an -annotation is now forbidden when PEP 563 is activated. 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 deleted file mode 100644 index 69be1b243c7be5..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-08-35-11.bpo-43892.hr5Ke2.rst +++ /dev/null @@ -1,5 +0,0 @@ -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/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 deleted file mode 100644 index 2ab93d1f756f6e..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-25-22-50-47.bpo-43901.oKjG5E.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 07303b99d1f95d..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-20-59-17.bpo-43908.-COW4-.rst +++ /dev/null @@ -1,2 +0,0 @@ -Make the :class:`array.array` type immutable. Patch by -Erlend E. Aasland. 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 deleted file mode 100644 index 1709351726f965..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-26-21-20-41.bpo-43908.2L51nO.rst +++ /dev/null @@ -1,2 +0,0 @@ -Make :mod:`re` types immutable. Patch by -Erlend E. Aasland. 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 deleted file mode 100644 index b59f3e1b6ccc5d..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-27-10-59-10.bpo-42739.PrVkKM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1f8904338f26c8..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-28-01-23-38.bpo-43963.u5Y6bS.rst +++ /dev/null @@ -1,2 +0,0 @@ -Importing the :mod:`_signal` module in a subinterpreter has no longer side -effects. 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 deleted file mode 100644 index 8d11a8cb3dab3d..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-11-44.bpo-43933.mvoV6O.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d442f303edc076..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-13-49-57.bpo-43933.TueFdQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Set frame.f_lineno to the line number of the 'with' kweyword when executing -the call to ``__exit__``. 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 deleted file mode 100644 index f2a3dc90e556fd..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-16-00-28.bpo-43892.WXIehI.rst +++ /dev/null @@ -1,2 +0,0 @@ -Restore proper validation of complex literal value patterns when parsing -:keyword:`!match` blocks. 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 deleted file mode 100644 index 038d7390852baf..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-04-29-17-40-25.bpo-43977.FrQhge.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst deleted file mode 100644 index 95aacaf5fa2c37..00000000000000 --- a/Misc/NEWS.d/next/Core and Builtins/2021-05-02-11-59-00.bpo-43977.R0hSDo.rst +++ /dev/null @@ -1 +0,0 @@ -Prevent classes being both a sequence and a mapping when pattern matching. 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 deleted file mode 100644 index 9f8d3625e79618..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-07-05-49.bpo-43739.L4HjiX.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 53cba0b47d6d3b..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-06-14-55-45.bpo-43755.1m0fGq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 86dc286f83ce9b..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-08-22-42-02.bpo-43778.MszRnY.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix the Sphinx glossary_search extension: create the _static/ sub-directory -if it doesn't exist. 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 deleted file mode 100644 index dcf252e21bb9e0..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-25-22-44-27.bpo-43938.nC660q.rst +++ /dev/null @@ -1,2 +0,0 @@ -Update dataclasses documentation to express that FrozenInstanceError is -derived from AttributeError. 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 deleted file mode 100644 index ba23ffd577b3d4..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-27-22-22-22.bpo-43959.n2261q.rst +++ /dev/null @@ -1 +0,0 @@ -The documentation on the PyContextVar C-API was clarified. diff --git a/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst b/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst deleted file mode 100644 index 20b5fd7ab86fa8..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-29-15-06-03.bpo-43977.K5aSl1.rst +++ /dev/null @@ -1,2 +0,0 @@ -Document the new :const:`Py_TPFLAGS_MAPPING` and -:const:`Py_TPFLAGS_SEQUENCE` type flags. diff --git a/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst b/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst deleted file mode 100644 index 158259e3ab378e..00000000000000 --- a/Misc/NEWS.d/next/Documentation/2021-04-30-04-27-02.bpo-43987.1DftVa.rst +++ /dev/null @@ -1 +0,0 @@ -Add "Annotations Best Practices" document as a new HOWTO. 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 deleted file mode 100644 index 56b50e2e91e467..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2019-08-24-23-49-36.bpo-37903.4xjast.rst +++ /dev/null @@ -1 +0,0 @@ -IDLE's shell now shows prompts in a separate side-bar. 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 deleted file mode 100644 index 105ec9281f0051..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-04-20-52-07.bpo-43655.HSyaKH.rst +++ /dev/null @@ -1,2 +0,0 @@ -IDLE dialog windows are now recognized as dialogs by window managers on -macOS and X Window. 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 deleted file mode 100644 index c8bb84bb400413..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-29-02-40-41.bpo-37892.bgW2fk.rst +++ /dev/null @@ -1 +0,0 @@ -Indent IDLE Shell input with spaces instead of tabs 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 deleted file mode 100644 index 10eb8b01d13a48..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-04-30-17-59-56.bpo-43981.3EFl1H.rst +++ /dev/null @@ -1 +0,0 @@ -Fix reference leak in test_squeezer. Patch by Pablo Galindo \ No newline at end of file diff --git a/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst b/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst deleted file mode 100644 index 28b11e60f0fb3e..00000000000000 --- a/Misc/NEWS.d/next/IDLE/2021-05-02-20-25-53.bpo-37903.VQ6VTU.rst +++ /dev/null @@ -1,4 +0,0 @@ -Add mouse actions to the shell sidebar. Left click and optional drag -selects one or more lines, as with the editor line number sidebar. Right -click after selecting raises a context menu with 'copy with prompts'. This -zips together prompts from the sidebar with lines from the selected text. diff --git a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst b/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst deleted file mode 100644 index e6a60fe8da140b..00000000000000 --- a/Misc/NEWS.d/next/Library/2018-08-09-23-47-10.bpo-32745.iQi9hI.rst +++ /dev/null @@ -1,3 +0,0 @@ -Fix a regression in the handling of ctypes' :data:`ctypes.c_wchar_p` type: -embedded null characters would cause a :exc:`ValueError` to be raised. Patch -by Zackery Spytz. 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 deleted file mode 100644 index 2fedb0696c3266..00000000000000 --- a/Misc/NEWS.d/next/Library/2019-08-14-13-19-50.bpo-33731.9esS0d.rst +++ /dev/null @@ -1,2 +0,0 @@ -Provide a locale.localize() function, which converts a normalized number string -into a locale format. 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 deleted file mode 100644 index 82b9e33be0e304..00000000000000 --- a/Misc/NEWS.d/next/Library/2019-10-16-08-08-14.bpo-38490.QbDXEF.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index 7e9bc4e461e06f..00000000000000 --- a/Misc/NEWS.d/next/Library/2019-10-16-17-21-53.bpo-36076.FGeQQT.rst +++ /dev/null @@ -1 +0,0 @@ -Added SNI support to :func:`ssl.get_server_certificate`. 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 deleted file mode 100644 index 5239553d51c672..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-03-09-20-36-07.bpo-39899.9adF3E.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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. 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 deleted file mode 100644 index dacefb73d93dd8..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-03-30-00-13-27.bpo-39906.eaR3fN.rst +++ /dev/null @@ -1 +0,0 @@ -: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 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 deleted file mode 100644 index e1d57f597bd466..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-05-17-14-10-24.bpo-35114.uLIHfn.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`ssl.RAND_status` now returns a boolean value (as documented) instead -of ``1`` or ``0``. 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 deleted file mode 100644 index 032a65d9963b7b..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-02-21-32-33.bpo-40849.zpeKx3.rst +++ /dev/null @@ -1 +0,0 @@ -Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag 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 deleted file mode 100644 index 9b6ab994f3b6a3..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-06-13-23-33-32.bpo-36470.oi6Kdb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix dataclasses with ``InitVar``\s and :func:`~dataclasses.replace()`. Patch -by Claudiu Popa. 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 deleted file mode 100644 index 9e36435a364eaf..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-07-11-15-15.bpo-41735.NKqGKy.rst +++ /dev/null @@ -1 +0,0 @@ -Fix thread locks in zlib module may go wrong in rare case. Patch by Ma Lin. 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 deleted file mode 100644 index 6adf456d2d6cc9..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-09-15-23-44-07.bpo-31870.nVwd38.rst +++ /dev/null @@ -1,2 +0,0 @@ -The :func:`ssl.get_server_certificate` function now has a *timeout* -parameter. 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 deleted file mode 100644 index 75de9f672ea5d3..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-10-16-15-34-30.bpo-41486.Mu9Iit.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1b97afbd2c40ff..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-11-19-09-52-24.bpo-18369.qzvYH2.rst +++ /dev/null @@ -1,2 +0,0 @@ -Certificate and PrivateKey classes were added to the ssl module. -Certificates and keys can now be loaded from memory buffer, too. 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 deleted file mode 100644 index bb1fd82c99e363..00000000000000 --- a/Misc/NEWS.d/next/Library/2020-12-06-20-21-16.bpo-39529.9Zrg43.rst +++ /dev/null @@ -1,9 +0,0 @@ -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/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 deleted file mode 100644 index 595f8733d0eab9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-08-22-32-13.bpo-42269.W5v8z4.rst +++ /dev/null @@ -1,3 +0,0 @@ -Add ``slots`` parameter to ``dataclasses.dataclass`` decorator to -automatically generate ``__slots__`` for class. Patch provided by Yurii -Karabas. 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 deleted file mode 100644 index ef4b4e56fbebcd..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-12-23-17-02.bpo-42904.-4qkTD.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`typing.get_type_hints` now checks the local namespace of a class when -evaluating :pep:`563` annotations inside said class. 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 deleted file mode 100644 index 33b8acf9c18fbb..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-22-00-15-37.bpo-39950.NzLVaR.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add `pathlib.Path.hardlink_to()` method that supersedes `link_to()`. The new -method has the same argument order as `symlink_to()`. 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 deleted file mode 100644 index aa59b901739b49..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-01-31-00-23-13.bpo-43080.-fDg4Q.rst +++ /dev/null @@ -1 +0,0 @@ -:mod:`pprint` now has support for :class:`dataclasses.dataclass`. Patch by Lewis Gaul. \ No newline at end of file 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 deleted file mode 100644 index 016514d9c3346c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-09-07-24-29.bpo-43176.bocNQn.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed processing of a dataclass that inherits from a frozen dataclass with no fields. It is now correctly detected as an error. 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 deleted file mode 100644 index 95ac1831dbf2d3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-15-12-52-23.bpo-41282.SenEje.rst +++ /dev/null @@ -1 +0,0 @@ -:mod:`distutils.sysconfig` has been merged to :mod:`sysconfig`. 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 deleted file mode 100644 index eefebcfe1ba7c4..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-16-13-18-38.bpo-41282.GK9a0l.rst +++ /dev/null @@ -1,2 +0,0 @@ -Install schemes in :mod:`distutils.command.install` are now loaded from -:mod:`sysconfig`. 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 deleted file mode 100644 index 3e7f34ea5649da..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-19-22-24-33.bpo-43265.MyAzCH.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index b8def9ceee64cf..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-02-25-14-43-59.bpo-43312.6dg9_2.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 741dfcd705ebd9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-01-13-01-33.bpo-43296.p_gU6T.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index f8ad3eaaedd785..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-11-00-31-41.bpo-42967.2PeQRw.rst +++ /dev/null @@ -1,3 +0,0 @@ -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``. 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 deleted file mode 100644 index 2da8874dc7f343..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-13-14-02-07.bpo-8978.CRxG-O.rst +++ /dev/null @@ -1,2 +0,0 @@ -Improve error message for :func:`tarfile.open` when :mod:`lzma` / :mod:`bz2` -are unavailable. Patch by Anthony Sottile. 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 deleted file mode 100644 index a17e1b44637383..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-16-22-37-32.bpo-43522.dhNwOu.rst +++ /dev/null @@ -1 +0,0 @@ -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/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 deleted file mode 100644 index 11ea5f916d173f..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-17-19-06-45.bpo-43532.W2Ntnm.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add the ability to specify keyword-only fields to dataclasses. These fields -will become keyword-only arguments to the generated __init__. 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 deleted file mode 100644 index 7f2e5a46add039..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-03-18-15-46-08.bpo-43534.vPE9Us.rst +++ /dev/null @@ -1,2 +0,0 @@ -:func:`turtle.textinput` and :func:`turtle.numinput` create now a transient -window working on behalf of the canvas window. 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 deleted file mode 100644 index 33e5cf4d208b9b..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-03-15-24-59.bpo-2135.xmDAYJ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Deprecate find_module() and find_loader() implementations in importlib and -zipimport. 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 deleted file mode 100644 index 27cf7aa716273c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-03-18-03-44.bpo-43723.uBhBZS.rst +++ /dev/null @@ -1,19 +0,0 @@ -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. 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 deleted file mode 100644 index 7916d2248b231d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-04-20-51-19.bpo-43655.LwGy8R.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`tkinter` 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-06-21-18-29.bpo-43752.K7qmAF.rst b/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst deleted file mode 100644 index ef4b9539a8055d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-06-21-18-29.bpo-43752.K7qmAF.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 838dd0200f1d6b..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-09-59-20.bpo-43764.tHjO60.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix an issue where :data:`~object.__match_args__` generation could fail for -some :mod:`dataclasses`. 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 822584be1b221c..00000000000000 --- 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``. 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 deleted file mode 100644 index d11df0d1027000..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-12-25-08.bpo-43712.f8WXCX.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add ``encoding`` and ``errors`` parameters to :func:`fileinput.input` and -:class:`fileinput.FileInput`. 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 deleted file mode 100644 index e5309c92fddba3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-15-19-20.bpo-43731.nnVd3h.rst +++ /dev/null @@ -1 +0,0 @@ -Add an ``encoding`` parameter :func:`logging.fileConfig()`. 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 deleted file mode 100644 index 8b680065ea7c3d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-19-32-26.bpo-47383.YI1hdL.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 3adbe50512beda..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-20-04-46.bpo-43780.hUOgCh.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 593846ec15c5b9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-08-22-11-27.bpo-25264.b33fa0.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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. 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 deleted file mode 100644 index 4f039a7cebbf65..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-00-16-22.bpo-43766.nYNQP0.rst +++ /dev/null @@ -1,2 +0,0 @@ -Implement :pep:`647` in the :mod:`typing` module by adding -:data:`TypeGuard`. 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 deleted file mode 100644 index ff76256472c6ec..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-12-08-01.bpo-43788.YsvInM.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 1c0852946214d2..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-08-03.bpo-43789.eaHlAm.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index b4ed5e51e22475..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-14-51-58.bpo-43785.1mM5xE.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index 64894bdc017e53..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-09-16-14-22.bpo-43794.-1XPDH.rst +++ /dev/null @@ -1 +0,0 @@ -Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL 3.0.0) 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 deleted file mode 100644 index 12a03d79e72e0f..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-03-30-36.bpo-43478.iZcBTq.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index bd79519015c7a9..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-11-35-50.bpo-43799.1iV4pX.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index 555aad06e32ca6..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-18-23-09.bpo-43764.Le5KJp.rst +++ /dev/null @@ -1,2 +0,0 @@ -Add match_args parameter to @dataclass decorator to allow suppression of -__match_args__ generation. 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 deleted file mode 100644 index 648357b3faa741..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-10-19-14-49.bpo-43772.Bxq0zQ.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the return value of ``TypeVar.__ror__``. Patch by Jelle Zijlstra. 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 deleted file mode 100644 index 7fd74be87664e4..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-20-52-32.bpo-43744.uf0E68.rst +++ /dev/null @@ -1,2 +0,0 @@ -fix issue with enum member name matching the start of a private variable -name 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 deleted file mode 100644 index 0722d35a37a1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-11-21-10-57.bpo-42248.pedB1E.rst +++ /dev/null @@ -1 +0,0 @@ -[Enum] ensure exceptions raised in ``_missing__`` are released 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 deleted file mode 100644 index 51bc791f10d31a..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-00-00-00.bpo-43776.p14y7a.rst +++ /dev/null @@ -1 +0,0 @@ -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 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 deleted file mode 100644 index aef5c1791dfeac..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-06-01-10.bpo-41515.YaVReb.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix :exc:`KeyError` raised in :func:`typing.get_type_hints` due to -synthetic modules that don't appear in ``sys.modules``. 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 deleted file mode 100644 index cb561ae586a98d..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-09-57-37.bpo-43680.o1zEk_.rst +++ /dev/null @@ -1,6 +0,0 @@ -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/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 deleted file mode 100644 index e4ddb96491b571..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-11-20-34.bpo-43680.SR0Epv.rst +++ /dev/null @@ -1,6 +0,0 @@ -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(). 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 deleted file mode 100644 index 9b8d945cbb8a8b..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-15-15-50.bpo-43787.wCy_Wd.rst +++ /dev/null @@ -1,3 +0,0 @@ -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. 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 deleted file mode 100644 index 2c870ac8b97de8..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-12-18-01-10.bpo-43820.YkqYW4.rst +++ /dev/null @@ -1,2 +0,0 @@ -Remove an unneeded copy of the namespace passed to -dataclasses.make_dataclass(). 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 deleted file mode 100644 index f5672e6bd7bf57..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-16-02-03-00.bpo-40443.Io6FHL.rst +++ /dev/null @@ -1,2 +0,0 @@ -Remove unused imports: pyclbr no longer uses copy, and typing no longer uses -ast. Patch by Victor Stinner. 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 deleted file mode 100644 index 1ec914e5ee9d03..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-16-16-46-44.bpo-43867.xT9QjF.rst +++ /dev/null @@ -1,3 +0,0 @@ -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). 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 deleted file mode 100644 index 11db42350eb7ef..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-10-49-57.bpo-41559.caIwt9.rst +++ /dev/null @@ -1,6 +0,0 @@ -: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/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 deleted file mode 100644 index b50680afc23fd6..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-13-53-33.bpo-43880.-fC2JD.rst +++ /dev/null @@ -1,3 +0,0 @@ -: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/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 deleted file mode 100644 index da2df1f614c101..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-17-19-31-17.bpo-42333.cgbtZO.rst +++ /dev/null @@ -1 +0,0 @@ -Port ``_ssl`` extension module to multiphase initialization. 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 deleted file mode 100644 index 3941fd85635f02..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-19-03-54-29.bpo-42854.Y4M7Tv.rst +++ /dev/null @@ -1,4 +0,0 @@ -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/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 deleted file mode 100644 index 7e41016015efed..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-21-14-50-57.bpo-43284.2QZn2T.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. 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 deleted file mode 100644 index 36a6018bab2531..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-04-12-13.bpo-43817.FQ-XlH.rst +++ /dev/null @@ -1,11 +0,0 @@ -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. 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 deleted file mode 100644 index fa62846acaa984..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-22-22-39-58.bpo-43607.7IYDkG.rst +++ /dev/null @@ -1,2 +0,0 @@ -:mod:`urllib` can now convert Windows paths with ``\\?\`` prefixes into URL -paths. 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 deleted file mode 100644 index 28ff0fb3afa9d3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-11-54-38.bpo-43920.cJMQ2D.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst b/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst deleted file mode 100644 index 45f29a84cd599f..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-17-48-55.bpo-43926.HMUlGU.rst +++ /dev/null @@ -1,4 +0,0 @@ -In ``importlib.metadata``, provide a uniform interface to ``Description``, -allow for any field to be encoded with multiline values, remove continuation -lines from multiline values, and add a ``.json`` property for easy access to -the PEP 566 JSON-compatible form. Sync with ``importlib_metadata 4.0``. diff --git a/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst b/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst deleted file mode 100644 index 7da3a1c3f76127..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-23-20-57-20.bpo-43907.3RJEjv.rst +++ /dev/null @@ -1,4 +0,0 @@ -Fix a bug in the pure-Python pickle implementation when using protocol 5, -where bytearray instances that occur several time in the pickled object -graph would incorrectly unpickle into repeated copies of the bytearray -object. 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 deleted file mode 100644 index 7dac21f3d9b197..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-24-14-23-07.bpo-43930.R7ah0m.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1 and setuptools to 56.0.0 \ No newline at end of file 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 deleted file mode 100644 index cb4d90b723d1fa..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-25-13-34-13.bpo-43937.isx95l.rst +++ /dev/null @@ -1 +0,0 @@ -Fixed the :mod:`turtle` module working with non-default root window. 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 deleted file mode 100644 index 5df89298919236..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-17-47-48.bpo-41139.ROhn1k.rst +++ /dev/null @@ -1 +0,0 @@ -Deprecate undocumented ``cgi.log()`` API. 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 deleted file mode 100644 index c01c200caa7801..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-20-52-16.bpo-43945.NgERXO.rst +++ /dev/null @@ -1,2 +0,0 @@ -[Enum] Deprecate non-standard mixin format() behavior: in 3.12 the enum -member, not the member's value, will be used for format() calls. 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 deleted file mode 100644 index 632941ac362676..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-26-23-39-47.bpo-42904.ejjsyR.rst +++ /dev/null @@ -1,5 +0,0 @@ -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. 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 deleted file mode 100644 index c6d1ddef64ca30..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-27-12-13-51.bpo-43957.6EaPD-.rst +++ /dev/null @@ -1,4 +0,0 @@ -[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. diff --git a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst b/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst deleted file mode 100644 index c9d2c458eee75c..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-04-30-19-23-45.bpo-43993.T7_yoq.rst +++ /dev/null @@ -1 +0,0 @@ -Update bundled pip to 21.1.1. \ No newline at end of file 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 deleted file mode 100644 index d5d1caa3e56827..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-01-01-36-51.bpo-43979.43oJ9L.rst +++ /dev/null @@ -1,2 +0,0 @@ -Removed an unnecessary list comprehension before looping from -:func:`urllib.parse.parse_qsl`. Patch by Christoph Zwerschke and Dong-hee Na. diff --git a/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst b/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst deleted file mode 100644 index 5ecd928b118347..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-01-22-59-20.bpo-43733.gJWwEQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -Change :class:`netrc.netrc` to use UTF-8 encoding before using locale -encoding. diff --git a/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst b/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst deleted file mode 100644 index 81d2724726dd06..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-02-19-17-20.bpo-25478.AwlwdA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Added a *total()* method to collections.Counter() to compute the sum of the -counts. diff --git a/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst b/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst deleted file mode 100644 index 4c4f543fa0c2e3..00000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-03-03-03-49.bpo-44015.V5936k.rst +++ /dev/null @@ -1 +0,0 @@ -In @dataclass(), raise a TypeError if KW_ONLY is specified more than once. 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 deleted file mode 100644 index 539084836dc4e5..00000000000000 --- a/Misc/NEWS.d/next/Security/2020-07-04-22-14-46.bpo-37363.NDjHNw.rst +++ /dev/null @@ -1 +0,0 @@ -Add audit events to the :mod:`http.client` module. \ No newline at end of file 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 deleted file mode 100644 index d01c0c3073a503..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-09-17-07-36.bpo-42800._dtZvW.rst +++ /dev/null @@ -1 +0,0 @@ -Audit hooks are now fired for frame.f_code, traceback.tb_frame, and generator code/frame attribute access. 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 deleted file mode 100644 index 1c9f727e965fb8..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-01-31-05-28-14.bpo-43075.DoAXqO.rst +++ /dev/null @@ -1 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst b/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst deleted file mode 100644 index f956cde948ec57..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-03-30-16-29-51.bpo-36384.sCAmLs.rst +++ /dev/null @@ -1,6 +0,0 @@ -:mod:`ipaddress` module no longer accepts any leading zeros in IPv4 address -strings. Leading zeros are ambiguous and interpreted as octal notation by -some libraries. For example the legacy function :func:`socket.inet_aton` -treats leading zeros as octal notatation. glibc implementation of modern -:func:`~socket.inet_pton` does not accept any leading zeros. For a while -the :mod:`ipaddress` module used to accept ambiguous leading zeros. 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 deleted file mode 100644 index e05fef2d5524ff..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-06-18-07-48.bpo-43756.DLBNqQ.rst +++ /dev/null @@ -1,2 +0,0 @@ -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`. 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 deleted file mode 100644 index aa392656807e11..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-07-12-57-41.bpo-43762.7lMtpT.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index 713a683bc8eb34..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-18-00-56-44.bpo-43362.__5aiP.rst +++ /dev/null @@ -1,2 +0,0 @@ -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/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 deleted file mode 100644 index e38dc169def96e..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-21-22-53-31.bpo-43472.gjLBTb.rst +++ /dev/null @@ -1,3 +0,0 @@ -Ensures interpreter-level audit hooks receive the -``cpython.PyInterpreterState_New`` event when called through the -``_xxsubinterpreters`` module. 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 deleted file mode 100644 index a326d079dff4a4..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-04-25-07-46-37.bpo-43882.Jpwx85.rst +++ /dev/null @@ -1,6 +0,0 @@ -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. diff --git a/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst b/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst deleted file mode 100644 index 6a40346128e187..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-01-13-13-40.bpo-43998.xhmWD7.rst +++ /dev/null @@ -1,5 +0,0 @@ -The :mod:`ssl` module sets more secure cipher suites defaults. Ciphers -without forward secrecy and with SHA-1 MAC are disabled by default. Security -level 2 prohibits weak RSA, DH, and ECC keys with less than 112 bits of -security. :class:`~ssl.SSLContext` defaults to minimum protocol version TLS -1.2. Settings are based on Hynek Schlawack's research. diff --git a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst b/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst deleted file mode 100644 index b5a3f8d7587498..00000000000000 --- a/Misc/NEWS.d/next/Security/2021-05-02-17-50-23.bpo-43434.cy7xz6.rst +++ /dev/null @@ -1,4 +0,0 @@ -Creating :class:`sqlite3.Connection` objects now also produces -``sqlite3.connect`` and ``sqlite3.connect/handle`` :ref:`auditing events -`. Previously these events were only produced by -:func:`sqlite3.connect` calls. Patch by Erlend E. Aasland. 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 deleted file mode 100644 index 964ae5abb3d880..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-09-15-10-38.bpo-43791.4KxiXK.rst +++ /dev/null @@ -1,2 +0,0 @@ -OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 and 1.1. Tests -are failing with TLSV1_ALERT_INTERNAL_ERROR. 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 deleted file mode 100644 index d4c7066013332c..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-12-11-14-28.bpo-43811.vGNbnD.rst +++ /dev/null @@ -1,2 +0,0 @@ -Tests multiple OpenSSL versions on GitHub Actions. Use ccache to speed up -testing. 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 deleted file mode 100644 index d1085ec2395b80..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-14-13-22-44.bpo-43843.ruIQKD.rst +++ /dev/null @@ -1,5 +0,0 @@ -: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. 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 deleted file mode 100644 index 5b4a120eb86371..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-16-14-07-40.bpo-43842.w60GAH.rst +++ /dev/null @@ -1,4 +0,0 @@ -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. 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 deleted file mode 100644 index e56572f5170998..00000000000000 --- a/Misc/NEWS.d/next/Tests/2021-04-28-13-21-52.bpo-43961.gNchls.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix test_logging.test_namer_rotator_inheritance() on Windows: use -:func:`os.replace` rather than :func:`os.rename`. Patch by Victor Stinner. 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 deleted file mode 100644 index 2b0c2219539e9e..00000000000000 --- a/Misc/NEWS.d/next/Windows/2017-12-16-12-23-51.bpo-30555.3ybjly.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fix ``WindowsConsoleIO`` errors in the presence of fd redirection. Patch by -Segev Finer. 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 deleted file mode 100644 index 93da1b6dec8e3b..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-03-15-11-34-33.bpo-43492.AsYnVX.rst +++ /dev/null @@ -1 +0,0 @@ -Upgrade Windows installer to use SQLite 3.35.5. 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 deleted file mode 100644 index 0ef44e28a9a1df..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-03-18-54-31.bpo-43652.gNmfVN.rst +++ /dev/null @@ -1 +0,0 @@ -Update Tcl and Tk to 8.6.11 in Windows installer. 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 deleted file mode 100644 index 8ec498d11ea938..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-06-12-27-33.bpo-43745.rdKNda.rst +++ /dev/null @@ -1,2 +0,0 @@ -Actually updates Windows release to OpenSSL 1.1.1k. Earlier releases were -mislabelled and actually included 1.1.1i again. 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 deleted file mode 100644 index 6f8ce00bf99ecc..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-20-23-07-22.bpo-40432.9OFpoq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/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 deleted file mode 100644 index d6826fb39706bd..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-21-23-37-34.bpo-26227.QMY_eA.rst +++ /dev/null @@ -1,2 +0,0 @@ -Fixed decoding of host names in :func:`socket.gethostbyaddr` and -:func:`socket.gethostbyname_ex`. 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 deleted file mode 100644 index 072a96989c3d04..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-19-49-20.bpo-38822.jgdPmq.rst +++ /dev/null @@ -1,3 +0,0 @@ -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/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst b/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst deleted file mode 100644 index af41b3ceacb648..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-20-39-49.bpo-43538.F0Cg6X.rst +++ /dev/null @@ -1,2 +0,0 @@ -Avoid raising errors from :meth:`pathlib.Path.exists()` when passed an -invalid filename. 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 deleted file mode 100644 index f1ee2def320070..00000000000000 --- a/Misc/NEWS.d/next/Windows/2021-04-22-21-37-41.bpo-35306.10kSR-.rst +++ /dev/null @@ -1 +0,0 @@ -Adds additional arguments to :func:`os.startfile` function. diff --git a/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst b/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst deleted file mode 100644 index eef4fcdaae3cfc..00000000000000 --- a/Misc/NEWS.d/next/macOS/2020-11-01-17-37-16.bpo-42235.A97_BN.rst +++ /dev/null @@ -1,2 +0,0 @@ -``Mac/BuildScript/build-installer.py`` will now use "--enable-optimizations" -and ``--with-lto`` when building on macOS 10.15 or later. 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 deleted file mode 100644 index 39f15370688161..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-03-15-11-32-23.bpo-43492.1ZRcV9.rst +++ /dev/null @@ -1 +0,0 @@ -Update macOS installer to use SQLite 3.35.4. diff --git a/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst b/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst deleted file mode 100644 index 0febfb02315e84..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-04-15-01-20-45.bpo-43851.sDI60Y.rst +++ /dev/null @@ -1 +0,0 @@ -Build SQLite with ``SQLITE_OMIT_AUTOINIT`` on macOS. Patch by Erlend E. Aasland. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst b/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst deleted file mode 100644 index f9f11c8ae6a793..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-03-45-30.bpo-44009.uvhmlh.rst +++ /dev/null @@ -1,4 +0,0 @@ -Provide "python3.x-intel64" executable to allow reliably forcing macOS -universal2 framework builds to run under Rosetta 2 Intel-64 emulation on -Apple Silicon Macs. This can be useful for testing or when universal2 -wheels are not yet available. diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst b/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst deleted file mode 100644 index 3bc9b0b55bbd35..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-19-50-52.bpo-43568.AeLNBd.rst +++ /dev/null @@ -1 +0,0 @@ -Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3 diff --git a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst b/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst deleted file mode 100644 index 7dd67a527eb009..00000000000000 --- a/Misc/NEWS.d/next/macOS/2021-05-02-21-03-27.bpo-42119.Y7BSX_.rst +++ /dev/null @@ -1,7 +0,0 @@ -Fix check for macOS SDK paths when building Python. Narrow search to match -contents of SDKs, namely only files in ``/System/Library``, -``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, -anything under ``/System`` was assumed to be in an SDK which causes problems -with the new file system layout in 10.15+ where user file systems may appear -to be mounted under ``/System``. Paths in ``/Library`` were also -incorrectly treated as SDK locations. From webhook-mailer at python.org Fri May 7 22:43:31 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 08 May 2021 02:43:31 -0000 Subject: [Python-checkins] Update the SOURCE_URI in pyspecific.py to point to the new branch (GH-25977) Message-ID: https://github.com/python/cpython/commit/c40ab5b699b5c902b477d3cc0eb0fd85165db787 commit: c40ab5b699b5c902b477d3cc0eb0fd85165db787 branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-08T03:43:23+01:00 summary: Update the SOURCE_URI in pyspecific.py to point to the new branch (GH-25977) files: M Doc/tools/extensions/pyspecific.py diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index bcd9d26b36846f..ff522c98d0f629 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -44,7 +44,7 @@ ISSUE_URI = 'https://bugs.python.org/issue%s' -SOURCE_URI = 'https://github.com/python/cpython/tree/master/%s' +SOURCE_URI = 'https://github.com/python/cpython/tree/main/%s' # monkey-patch reST parser to disable alphabetic and roman enumerated lists from docutils.parsers.rst.states import Body From webhook-mailer at python.org Fri May 7 22:43:52 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 08 May 2021 02:43:52 -0000 Subject: [Python-checkins] Update the SOURCE_URI in pyspecific.py to point to the new branch (GH-25978) Message-ID: https://github.com/python/cpython/commit/f46ef57c254f5f78117fac66aa740a80cc974fe3 commit: f46ef57c254f5f78117fac66aa740a80cc974fe3 branch: 3.10 author: Pablo Galindo committer: pablogsal date: 2021-05-08T03:43:43+01:00 summary: Update the SOURCE_URI in pyspecific.py to point to the new branch (GH-25978) files: M Doc/tools/extensions/pyspecific.py diff --git a/Doc/tools/extensions/pyspecific.py b/Doc/tools/extensions/pyspecific.py index bcd9d26b36846f..92fc5e7c71cd7d 100644 --- a/Doc/tools/extensions/pyspecific.py +++ b/Doc/tools/extensions/pyspecific.py @@ -44,7 +44,7 @@ ISSUE_URI = 'https://bugs.python.org/issue%s' -SOURCE_URI = 'https://github.com/python/cpython/tree/master/%s' +SOURCE_URI = 'https://github.com/python/cpython/tree/3.10/%s' # monkey-patch reST parser to disable alphabetic and roman enumerated lists from docutils.parsers.rst.states import Body From webhook-mailer at python.org Fri May 7 23:25:43 2021 From: webhook-mailer at python.org (ned-deily) Date: Sat, 08 May 2021 03:25:43 -0000 Subject: [Python-checkins] Fix the whatsnew/3.11.rst to link to the blurb-generated changelog. (GH-25979) Message-ID: https://github.com/python/cpython/commit/42fcad26a487df166ee75600fbaab9818e967a0a commit: 42fcad26a487df166ee75600fbaab9818e967a0a branch: main author: Ned Deily committer: ned-deily date: 2021-05-07T23:25:37-04:00 summary: Fix the whatsnew/3.11.rst to link to the blurb-generated changelog. (GH-25979) files: M Doc/whatsnew/3.11.rst diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 13d7a3dbb6193..8e97c092bf57b 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -47,7 +47,7 @@ This article explains the new features in Python 3.11, compared to 3.10. -For full details, see the :source:`Misc/NEWS` file. +For full details, see the :ref:`changelog `. .. note:: From webhook-mailer at python.org Sat May 8 02:38:12 2021 From: webhook-mailer at python.org (orsenthil) Date: Sat, 08 May 2021 06:38:12 -0000 Subject: [Python-checkins] Fix make libainstall. (GH-25980) Message-ID: https://github.com/python/cpython/commit/80d250d68cf3bb511fd862169c681b28028499c2 commit: 80d250d68cf3bb511fd862169c681b28028499c2 branch: main author: Senthil Kumaran committer: orsenthil date: 2021-05-07T23:38:08-07:00 summary: Fix make libainstall. (GH-25980) Initial patch by Benno Leslie. files: M Makefile.pre.in diff --git a/Makefile.pre.in b/Makefile.pre.in index 92cc48657a2af..080318bf454f6 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1688,7 +1688,7 @@ LIBPL= @LIBPL@ LIBPC= $(LIBDIR)/pkgconfig libainstall: @DEF_MAKE_RULE@ python-config - @for i in $(LIBDIR) $(LIBPL) $(LIBPC); \ + @for i in $(LIBDIR) $(LIBPL) $(LIBPC) $(BINDIR); \ do \ if test ! -d $(DESTDIR)$$i; then \ echo "Creating directory $$i"; \ From webhook-mailer at python.org Sat May 8 02:58:34 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 06:58:34 -0000 Subject: [Python-checkins] Fix make libainstall. (GH-25980) Message-ID: https://github.com/python/cpython/commit/a25c46bd7dd47a2f95b32d17ee2f66de214892c6 commit: a25c46bd7dd47a2f95b32d17ee2f66de214892c6 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-05-07T23:58:27-07:00 summary: Fix make libainstall. (GH-25980) Initial patch by Benno Leslie. (cherry picked from commit 80d250d68cf3bb511fd862169c681b28028499c2) Co-authored-by: Senthil Kumaran files: M Makefile.pre.in diff --git a/Makefile.pre.in b/Makefile.pre.in index 0c3981c1323d2..2b68571031883 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1644,7 +1644,7 @@ LIBPL= @LIBPL@ LIBPC= $(LIBDIR)/pkgconfig libainstall: @DEF_MAKE_RULE@ python-config - @for i in $(LIBDIR) $(LIBPL) $(LIBPC); \ + @for i in $(LIBDIR) $(LIBPL) $(LIBPC) $(BINDIR); \ do \ if test ! -d $(DESTDIR)$$i; then \ echo "Creating directory $$i"; \ From webhook-mailer at python.org Sat May 8 02:58:57 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 06:58:57 -0000 Subject: [Python-checkins] Fix make libainstall. (GH-25980) Message-ID: https://github.com/python/cpython/commit/a2c72d52dddefbfbaa0745b0af54330fad03b29e commit: a2c72d52dddefbfbaa0745b0af54330fad03b29e branch: 3.10 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-05-07T23:58:53-07:00 summary: Fix make libainstall. (GH-25980) Initial patch by Benno Leslie. (cherry picked from commit 80d250d68cf3bb511fd862169c681b28028499c2) Co-authored-by: Senthil Kumaran files: M Makefile.pre.in diff --git a/Makefile.pre.in b/Makefile.pre.in index 9c5268a044f05..ec19a9fdc40cd 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1695,7 +1695,7 @@ LIBPL= @LIBPL@ LIBPC= $(LIBDIR)/pkgconfig libainstall: @DEF_MAKE_RULE@ python-config - @for i in $(LIBDIR) $(LIBPL) $(LIBPC); \ + @for i in $(LIBDIR) $(LIBPL) $(LIBPC) $(BINDIR); \ do \ if test ! -d $(DESTDIR)$$i; then \ echo "Creating directory $$i"; \ From webhook-mailer at python.org Sat May 8 04:03:45 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 08:03:45 -0000 Subject: [Python-checkins] bpo-31904: Correct error string in test_file_not_exists() for VxWorks (GH-25965) Message-ID: https://github.com/python/cpython/commit/b063b02eabf91bfd4edc0f3fde7ce8f0ebb392c4 commit: b063b02eabf91bfd4edc0f3fde7ce8f0ebb392c4 branch: main author: pxinwr committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-08T01:03:41-07:00 summary: bpo-31904: Correct error string in test_file_not_exists() for VxWorks (GH-25965) The error string on VxWorks is "no such file or directory" for FileNotFoundError. That is, the 1st letter of the error string has lower case. files: A Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst M Lib/test/test_py_compile.py diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py index b58f28a4bc8885..5ed98dbff1737e 100644 --- a/Lib/test/test_py_compile.py +++ b/Lib/test/test_py_compile.py @@ -276,7 +276,7 @@ def test_file_not_exists(self): rc, stdout, stderr = self.pycompilecmd_failure(self.source_path, should_not_exists) self.assertEqual(rc, 1) self.assertEqual(stdout, b'') - self.assertIn(b'No such file or directory', stderr) + self.assertIn(b'no such file or directory', stderr.lower()) def test_file_not_exists_with_quiet(self): should_not_exists = os.path.join(os.path.dirname(__file__), 'should_not_exists.py') diff --git a/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst b/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst new file mode 100644 index 00000000000000..334878f91ddacd --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst @@ -0,0 +1 @@ +Ignore error string case in test_file_not_exists(). From webhook-mailer at python.org Sat May 8 05:09:33 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 09:09:33 -0000 Subject: [Python-checkins] [3.10] bpo-31904: Correct error string in test_file_not_exists() for VxWorks (GH-25965) (GH-25983) Message-ID: https://github.com/python/cpython/commit/6e7fe1901631dc730abc02d1f546a99fd6b6fe83 commit: 6e7fe1901631dc730abc02d1f546a99fd6b6fe83 branch: 3.10 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-05-08T02:09:29-07:00 summary: [3.10] bpo-31904: Correct error string in test_file_not_exists() for VxWorks (GH-25965) (GH-25983) The error string on VxWorks is "no such file or directory" for FileNotFoundError. That is, the 1st letter of the error string has lower case. (cherry picked from commit b063b02eabf91bfd4edc0f3fde7ce8f0ebb392c4) Co-authored-by: pxinwr Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst M Lib/test/test_py_compile.py diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py index b58f28a4bc888..5ed98dbff1737 100644 --- a/Lib/test/test_py_compile.py +++ b/Lib/test/test_py_compile.py @@ -276,7 +276,7 @@ def test_file_not_exists(self): rc, stdout, stderr = self.pycompilecmd_failure(self.source_path, should_not_exists) self.assertEqual(rc, 1) self.assertEqual(stdout, b'') - self.assertIn(b'No such file or directory', stderr) + self.assertIn(b'no such file or directory', stderr.lower()) def test_file_not_exists_with_quiet(self): should_not_exists = os.path.join(os.path.dirname(__file__), 'should_not_exists.py') diff --git a/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst b/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst new file mode 100644 index 0000000000000..8e81f21997a3a --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-05-07-15-46-04.bpo-31904.8dk3la.rst @@ -0,0 +1 @@ +Ignore error string case in test_py_compile ``test_file_not_exists()``. From webhook-mailer at python.org Sat May 8 07:49:54 2021 From: webhook-mailer at python.org (isidentical) Date: Sat, 08 May 2021 11:49:54 -0000 Subject: [Python-checkins] bpo-42725: mention the changes on what's new (GH-25974) Message-ID: https://github.com/python/cpython/commit/17229ab4a2fd5db20d52ef0f3aca2a8b51869c43 commit: 17229ab4a2fd5db20d52ef0f3aca2a8b51869c43 branch: main author: Batuhan Taskaya committer: isidentical date: 2021-05-08T14:49:40+03:00 summary: bpo-42725: mention the changes on what's new (GH-25974) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b6166f7acdb08..cfc560e1f4435 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -812,6 +812,16 @@ Other Language Changes :ref:`annotations-howto`. (Contributed by Larry Hastings in :issue:`43901`.) +* Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions + are now forbidden under ``from __future__ import annotations`` due to their side + effects. + (Contributed by Batuhan Taskaya in :issue:`42725`.) + +* Usage of unbound variables, ``super()`` and other expressions that might + alter the processing of symbol table as annotations are now rendered + effectless under ``from __future__ import annotations``. + (Contributed by Batuhan Taskaya in :issue:`42725`.) + New Modules =========== From webhook-mailer at python.org Sat May 8 08:20:52 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 12:20:52 -0000 Subject: [Python-checkins] bpo-42725: mention the changes on what's new (GH-25974) Message-ID: https://github.com/python/cpython/commit/90d584a2ab91cc0f30e90a0a99f8c1447eb51302 commit: 90d584a2ab91cc0f30e90a0a99f8c1447eb51302 branch: 3.10 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-05-08T05:20:48-07:00 summary: bpo-42725: mention the changes on what's new (GH-25974) (cherry picked from commit 17229ab4a2fd5db20d52ef0f3aca2a8b51869c43) Co-authored-by: Batuhan Taskaya files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b6166f7acdb084..cfc560e1f4435f 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -812,6 +812,16 @@ Other Language Changes :ref:`annotations-howto`. (Contributed by Larry Hastings in :issue:`43901`.) +* Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions + are now forbidden under ``from __future__ import annotations`` due to their side + effects. + (Contributed by Batuhan Taskaya in :issue:`42725`.) + +* Usage of unbound variables, ``super()`` and other expressions that might + alter the processing of symbol table as annotations are now rendered + effectless under ``from __future__ import annotations``. + (Contributed by Batuhan Taskaya in :issue:`42725`.) + New Modules =========== From webhook-mailer at python.org Sat May 8 12:13:31 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 08 May 2021 16:13:31 -0000 Subject: [Python-checkins] Update references to master to point to main in customsourcelink.html (GH-25993) Message-ID: https://github.com/python/cpython/commit/873275e64aae4caa6ddcea28ca3a026f37659d58 commit: 873275e64aae4caa6ddcea28ca3a026f37659d58 branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-08T17:13:24+01:00 summary: Update references to master to point to main in customsourcelink.html (GH-25993) files: M Doc/tools/templates/customsourcelink.html diff --git a/Doc/tools/templates/customsourcelink.html b/Doc/tools/templates/customsourcelink.html index fca44e9163cac7..eb9db9e341bd75 100644 --- a/Doc/tools/templates/customsourcelink.html +++ b/Doc/tools/templates/customsourcelink.html @@ -4,7 +4,7 @@

{{ _('This Page') }}

  • {% trans %}Report a Bug{% endtrans %}
  • - {{ _('Show Source') }}
  • From webhook-mailer at python.org Sat May 8 12:15:05 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 08 May 2021 16:15:05 -0000 Subject: [Python-checkins] bpo-32924: Fix the Show Source url in the documentation (GH-25994) Message-ID: https://github.com/python/cpython/commit/03acfc50ac0be8b49847b94dee93e21b1efa0e76 commit: 03acfc50ac0be8b49847b94dee93e21b1efa0e76 branch: 3.10 author: Pablo Galindo committer: pablogsal date: 2021-05-08T17:15:01+01:00 summary: bpo-32924: Fix the Show Source url in the documentation (GH-25994) files: M Doc/tools/templates/customsourcelink.html diff --git a/Doc/tools/templates/customsourcelink.html b/Doc/tools/templates/customsourcelink.html index fca44e9163cac7..21af621efce95b 100644 --- a/Doc/tools/templates/customsourcelink.html +++ b/Doc/tools/templates/customsourcelink.html @@ -4,7 +4,7 @@

    {{ _('This Page') }}

    • {% trans %}Report a Bug{% endtrans %}
    • - {{ _('Show Source') }}
    • From webhook-mailer at python.org Sat May 8 14:25:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 18:25:11 -0000 Subject: [Python-checkins] bpo-43149: Correct the syntax error message for multiple exception types (GH-25996) Message-ID: https://github.com/python/cpython/commit/6692dc1ca99fb34a19d0a4b93cf8e10619490001 commit: 6692dc1ca99fb34a19d0a4b93cf8e10619490001 branch: main author: Pablo Galindo committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-08T11:24:41-07:00 summary: bpo-43149: Correct the syntax error message for multiple exception types (GH-25996) Automerge-Triggered-By: GH:pablogsal files: A Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst M Doc/whatsnew/3.10.rst M Grammar/python.gram 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 cfc560e1f4435f..2c6569fccd624d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -248,7 +248,7 @@ have been incorporated. Some of the most notable ones: File "", line 3 except NotEnoughScienceError, NotEnoughResourcesError: ^ - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized (Contributed by Pablo Galindo in :issue:`43149`) diff --git a/Grammar/python.gram b/Grammar/python.gram index 2f553c6d390c71..6b815ab0c518d4 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -956,7 +956,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_STARTING_FROM(a, "exception group must be parenthesized") } + RAISE_SYNTAX_ERROR_STARTING_FROM(a, "multiple exception types must be parenthesized") } | a='except' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } invalid_finally_stmt: diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 9799697b87d3b1..58407212b492f7 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1068,7 +1068,7 @@ ... SyntaxError: invalid syntax -Check that an exception group with missing parentheses +Check that an multiple exception types with missing parentheses raise a custom exception >>> try: @@ -1076,21 +1076,21 @@ ... except A, B: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass ... except A, B, C: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass ... except A, B, C as blech: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass @@ -1099,7 +1099,7 @@ ... finally: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> f(a=23, a=234) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst new file mode 100644 index 00000000000000..cc1983ec3d4648 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst @@ -0,0 +1,2 @@ +Corrent the syntax error message regarding multiple exception types to not +refer to "exception groups". Patch by Pablo Galindo diff --git a/Parser/parser.c b/Parser/parser.c index 6958963dfa39cf..2ca628b59ba869 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -19978,7 +19978,7 @@ invalid_except_stmt_rule(Parser *p) ) { 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_STARTING_FROM ( a , "exception group must be parenthesized" ); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); From webhook-mailer at python.org Sat May 8 14:44:08 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 08 May 2021 18:44:08 -0000 Subject: [Python-checkins] bpo-32924: Fix the Show Source url in the documentation (GH-25994) Message-ID: https://github.com/python/cpython/commit/20fcd8363452506d51bf820c835bd11b6d00e0e7 commit: 20fcd8363452506d51bf820c835bd11b6d00e0e7 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-05-08T11:43:59-07:00 summary: bpo-32924: Fix the Show Source url in the documentation (GH-25994) (cherry picked from commit 03acfc50ac0be8b49847b94dee93e21b1efa0e76) Co-authored-by: Pablo Galindo files: M Doc/tools/templates/customsourcelink.html diff --git a/Doc/tools/templates/customsourcelink.html b/Doc/tools/templates/customsourcelink.html index fca44e9163cac7..21af621efce95b 100644 --- a/Doc/tools/templates/customsourcelink.html +++ b/Doc/tools/templates/customsourcelink.html @@ -4,7 +4,7 @@

      {{ _('This Page') }}

      • {% trans %}Report a Bug{% endtrans %}
      • - {{ _('Show Source') }}
      • From webhook-mailer at python.org Sat May 8 15:33:19 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sat, 08 May 2021 19:33:19 -0000 Subject: [Python-checkins] bpo-28307: Convert simple C-style formatting with literal format into f-string. (GH-5012) Message-ID: https://github.com/python/cpython/commit/a0bd9e9c11f5f52c7ddd19144c8230da016b53c6 commit: a0bd9e9c11f5f52c7ddd19144c8230da016b53c6 branch: main author: Serhiy Storchaka committer: serhiy-storchaka date: 2021-05-08T22:33:10+03:00 summary: bpo-28307: Convert simple C-style formatting with literal format into f-string. (GH-5012) C-style formatting with literal format containing only format codes %s, %r and %a (with optional width, precision and alignment) will be converted to an equivalent f-string expression. It can speed up formatting more than 2 times by eliminating runtime parsing of the format string and creating temporary tuple. files: A Misc/NEWS.d/next/Core and Builtins/2021-05-08-19-54-57.bpo-28307.7ysaVW.rst M Doc/whatsnew/3.11.rst M Python/ast_opt.c M Python/importlib_external.h diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 8e97c092bf57ba..464a97ef6e01eb 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -90,7 +90,10 @@ Improved Modules Optimizations ============= - +* Compiler optimizes now simple C-style formatting with literal format + containing only format codes ``%s``, ``%r`` and ``%a`` and makes it as + fast as corresponding f-string expression. + (Contributed by Serhiy Storchaka in :issue:`28307`.) Build and C API Changes diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-08-19-54-57.bpo-28307.7ysaVW.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-19-54-57.bpo-28307.7ysaVW.rst new file mode 100644 index 00000000000000..86ac3254eaea87 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-19-54-57.bpo-28307.7ysaVW.rst @@ -0,0 +1,3 @@ +Compiler now optimizes simple C-style formatting with literal format +containing only format codes %s, %r and %a by converting them to f-string +expressions. diff --git a/Python/ast_opt.c b/Python/ast_opt.c index c1fdea3a88c9cb..53e089cfab499c 100644 --- a/Python/ast_opt.c +++ b/Python/ast_opt.c @@ -3,6 +3,7 @@ #include "pycore_ast.h" // _PyAST_GetDocString() #include "pycore_compile.h" // _PyASTOptimizeState #include "pycore_pystate.h" // _PyThreadState_GET() +#include "pycore_format.h" // F_LJUST static int @@ -224,17 +225,235 @@ safe_mod(PyObject *v, PyObject *w) return PyNumber_Remainder(v, w); } + +static expr_ty +parse_literal(PyObject *fmt, Py_ssize_t *ppos, PyArena *arena) +{ + const void *data = PyUnicode_DATA(fmt); + int kind = PyUnicode_KIND(fmt); + Py_ssize_t size = PyUnicode_GET_LENGTH(fmt); + Py_ssize_t start, pos; + int has_percents = 0; + start = pos = *ppos; + while (pos < size) { + if (PyUnicode_READ(kind, data, pos) != '%') { + pos++; + } + else if (pos+1 < size && PyUnicode_READ(kind, data, pos+1) == '%') { + has_percents = 1; + pos += 2; + } + else { + break; + } + } + *ppos = pos; + if (pos == start) { + return NULL; + } + PyObject *str = PyUnicode_Substring(fmt, start, pos); + /* str = str.replace('%%', '%') */ + if (str && has_percents) { + _Py_static_string(PyId_double_percent, "%%"); + _Py_static_string(PyId_percent, "%"); + PyObject *double_percent = _PyUnicode_FromId(&PyId_double_percent); + PyObject *percent = _PyUnicode_FromId(&PyId_percent); + if (!double_percent || !percent) { + Py_DECREF(str); + return NULL; + } + Py_SETREF(str, PyUnicode_Replace(str, double_percent, percent, -1)); + } + if (!str) { + return NULL; + } + + if (_PyArena_AddPyObject(arena, str) < 0) { + Py_DECREF(str); + return NULL; + } + return _PyAST_Constant(str, NULL, -1, -1, -1, -1, arena); +} + +#define MAXDIGITS 3 + +static int +simple_format_arg_parse(PyObject *fmt, Py_ssize_t *ppos, + int *spec, int *flags, int *width, int *prec) +{ + Py_ssize_t pos = *ppos, len = PyUnicode_GET_LENGTH(fmt); + Py_UCS4 ch; + +#define NEXTC do { \ + if (pos >= len) { \ + return 0; \ + } \ + ch = PyUnicode_READ_CHAR(fmt, pos); \ + pos++; \ +} while (0) + + *flags = 0; + while (1) { + NEXTC; + switch (ch) { + case '-': *flags |= F_LJUST; continue; + case '+': *flags |= F_SIGN; continue; + case ' ': *flags |= F_BLANK; continue; + case '#': *flags |= F_ALT; continue; + case '0': *flags |= F_ZERO; continue; + } + break; + } + if ('0' <= ch && ch <= '9') { + *width = 0; + int digits = 0; + while ('0' <= ch && ch <= '9') { + *width = *width * 10 + (ch - '0'); + NEXTC; + if (++digits >= MAXDIGITS) { + return 0; + } + } + } + + if (ch == '.') { + NEXTC; + if ('0' <= ch && ch <= '9') { + *prec = 0; + int digits = 0; + while ('0' <= ch && ch <= '9') { + *prec = *prec * 10 + (ch - '0'); + NEXTC; + if (++digits >= MAXDIGITS) { + return 0; + } + } + } + } + *spec = ch; + *ppos = pos; + return 1; + +#undef NEXTC +} + +static expr_ty +parse_format(PyObject *fmt, Py_ssize_t *ppos, expr_ty arg, PyArena *arena) +{ + int spec, flags, width = -1, prec = -1; + if (!simple_format_arg_parse(fmt, ppos, &spec, &flags, &width, &prec)) { + // Unsupported format. + return NULL; + } + if (spec == 's' || spec == 'r' || spec == 'a') { + char buf[1 + MAXDIGITS + 1 + MAXDIGITS + 1], *p = buf; + if (!(flags & F_LJUST) && width > 0) { + *p++ = '>'; + } + if (width >= 0) { + p += snprintf(p, MAXDIGITS + 1, "%d", width); + } + if (prec >= 0) { + p += snprintf(p, MAXDIGITS + 2, ".%d", prec); + } + expr_ty format_spec = NULL; + if (p != buf) { + PyObject *str = PyUnicode_FromString(buf); + if (str == NULL) { + return NULL; + } + if (_PyArena_AddPyObject(arena, str) < 0) { + Py_DECREF(str); + return NULL; + } + format_spec = _PyAST_Constant(str, NULL, -1, -1, -1, -1, arena); + if (format_spec == NULL) { + return NULL; + } + } + return _PyAST_FormattedValue(arg, spec, format_spec, + arg->lineno, arg->col_offset, + arg->end_lineno, arg->end_col_offset, + arena); + } + // Unsupported format. + return NULL; +} + +static int +optimize_format(expr_ty node, PyObject *fmt, asdl_expr_seq *elts, PyArena *arena) +{ + Py_ssize_t pos = 0; + Py_ssize_t cnt = 0; + asdl_expr_seq *seq = _Py_asdl_expr_seq_new(asdl_seq_LEN(elts) * 2 + 1, arena); + if (!seq) { + return 0; + } + seq->size = 0; + + while (1) { + expr_ty lit = parse_literal(fmt, &pos, arena); + if (lit) { + asdl_seq_SET(seq, seq->size++, lit); + } + else if (PyErr_Occurred()) { + return 0; + } + + if (pos >= PyUnicode_GET_LENGTH(fmt)) { + break; + } + if (cnt >= asdl_seq_LEN(elts)) { + // More format units than items. + return 1; + } + assert(PyUnicode_READ_CHAR(fmt, pos) == '%'); + pos++; + expr_ty expr = parse_format(fmt, &pos, asdl_seq_GET(elts, cnt), arena); + cnt++; + if (!expr) { + return !PyErr_Occurred(); + } + asdl_seq_SET(seq, seq->size++, expr); + } + if (cnt < asdl_seq_LEN(elts)) { + // More items than format units. + return 1; + } + expr_ty res = _PyAST_JoinedStr(seq, + node->lineno, node->col_offset, + node->end_lineno, node->end_col_offset, + arena); + if (!res) { + return 0; + } + COPY_NODE(node, res); +// PySys_FormatStderr("format = %R\n", fmt); + return 1; +} + static int fold_binop(expr_ty node, PyArena *arena, _PyASTOptimizeState *state) { expr_ty lhs, rhs; lhs = node->v.BinOp.left; rhs = node->v.BinOp.right; - if (lhs->kind != Constant_kind || rhs->kind != Constant_kind) { + if (lhs->kind != Constant_kind) { return 1; } - PyObject *lv = lhs->v.Constant.value; + + if (node->v.BinOp.op == Mod && + rhs->kind == Tuple_kind && + PyUnicode_Check(lv)) + { + return optimize_format(node, lv, rhs->v.Tuple.elts, arena); + } + + if (rhs->kind != Constant_kind) { + return 1; + } + PyObject *rv = rhs->v.Constant.value; PyObject *newval = NULL; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index b469079c97fd9d..73a21b696689d2 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -657,699 +657,723 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,4,0,0,0,5,0,0,0,31,0,0,0,115,76, 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,142,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,142,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,31,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,114,10,0,0,0,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,86,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,44,2,0,0,115,10,0,0,0,8, - 1,10,1,18,1,2,128,18,1,114,10,0,0,0,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,70,0,0,0,41, - 2,218,10,95,98,111,111,116,115,116,114,97,112,114,159,0, - 0,0,41,3,114,148,0,0,0,114,149,0,0,0,114,159, - 0,0,0,114,7,0,0,0,114,147,0,0,0,114,8,0, - 0,0,218,11,95,99,104,101,99,107,95,110,97,109,101,23, - 2,0,0,115,12,0,0,0,14,8,8,10,8,1,8,2, - 10,6,4,1,114,10,0,0,0,114,161,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,100,0,0,0,114,101,0,0,0,114, - 102,0,0,0,218,11,102,105,110,100,95,108,111,97,100,101, - 114,114,4,0,0,0,114,90,0,0,0,218,13,73,109,112, - 111,114,116,87,97,114,110,105,110,103,41,5,114,144,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,54,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,10,0, - 0,0,114,168,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, + 1,110,18,124,0,106,0,124,1,107,3,114,26,116,1,100, + 1,124,0,106,0,155,1,100,2,124,1,155,1,157,4,124, + 1,100,3,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, + 4,78,122,11,108,111,97,100,101,114,32,102,111,114,32,122, + 15,32,99,97,110,110,111,116,32,104,97,110,100,108,101,32, + 169,1,218,4,110,97,109,101,41,2,114,142,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,142,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, + 31,2,0,0,115,18,0,0,0,8,1,8,1,10,1,4, + 1,12,1,2,255,2,1,6,255,24,2,114,10,0,0,0, + 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,86,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,44,2,0,0,115,10,0,0, + 0,8,1,10,1,18,1,2,128,18,1,114,10,0,0,0, + 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,70,0,0, + 0,41,2,218,10,95,98,111,111,116,115,116,114,97,112,114, + 159,0,0,0,41,3,114,148,0,0,0,114,149,0,0,0, + 114,159,0,0,0,114,7,0,0,0,114,147,0,0,0,114, + 8,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, + 101,23,2,0,0,115,12,0,0,0,14,8,8,10,8,1, + 8,2,10,6,4,1,114,10,0,0,0,114,161,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,100,0,0,0,114,101,0,0, + 0,114,102,0,0,0,218,11,102,105,110,100,95,108,111,97, + 100,101,114,114,4,0,0,0,114,90,0,0,0,218,13,73, + 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,144, + 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,54,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, + 10,0,0,0,114,168,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,160,0,0,0,218,16, - 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, - 114,143,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,142,0,0,0,218,11,101,120,99,95,100,101,116,97,105, - 108,115,90,5,109,97,103,105,99,114,118,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,74,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,10,0,0,0,114,177,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,171,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, - 169,0,0,0,78,114,170,0,0,0,41,4,114,43,0,0, - 0,114,160,0,0,0,114,174,0,0,0,114,143,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,142,0,0,0,114,176,0,0,0,114,118,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,107,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,10,0,0,0,114,181,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,171,0,0,0,114,170,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,143,0, - 0,0,41,4,114,42,0,0,0,218,11,115,111,117,114,99, - 101,95,104,97,115,104,114,142,0,0,0,114,176,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,135,2,0,0,115,14,0,0,0,16,17,2,1, - 8,1,4,255,2,2,6,254,4,255,114,10,0,0,0,114, - 183,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,142,0,0,0,114,66,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,160,0,0, - 0,114,174,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,143, - 0,0,0,114,90,0,0,0,41,5,114,42,0,0,0,114, - 142,0,0,0,114,133,0,0,0,114,135,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,159,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,10,0,0,0,114,190,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,173,0,0,0,218,6,101,120,116,101,110,100,114,37, - 0,0,0,114,185,0,0,0,218,5,100,117,109,112,115,41, - 4,114,189,0,0,0,218,5,109,116,105,109,101,114,180,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,172,2, - 0,0,115,12,0,0,0,8,2,14,1,14,1,14,1,16, - 1,4,1,114,10,0,0,0,114,195,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,171,0,0,0, - 78,41,7,114,191,0,0,0,114,173,0,0,0,114,192,0, - 0,0,114,37,0,0,0,114,4,0,0,0,114,185,0,0, - 0,114,193,0,0,0,41,5,114,189,0,0,0,114,182,0, - 0,0,90,7,99,104,101,99,107,101,100,114,42,0,0,0, + 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,160,0,0,0, + 218,16,95,118,101,114,98,111,115,101,95,109,101,115,115,97, + 103,101,114,143,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,142,0,0,0,218,11,101,120,99,95,100,101,116, + 97,105,108,115,90,5,109,97,103,105,99,114,118,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,182,2,0,0,115,14,0,0,0, - 8,2,12,1,14,1,16,1,10,1,16,1,4,1,114,10, - 0,0,0,114,196,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,92,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,197,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,193,2,0,0,115,10,0,0,0,8,5, - 12,1,10,1,12,1,20,1,114,10,0,0,0,114,201,0, - 0,0,169,2,114,165,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,60, - 1,0,0,124,1,100,1,117,0,114,29,100,2,125,1,116, - 0,124,2,100,3,131,2,114,28,9,0,124,2,160,1,124, - 0,161,1,125,1,110,39,35,0,4,0,116,2,121,157,1, - 0,1,0,1,0,89,0,110,30,37,0,110,28,116,3,160, - 4,124,1,161,1,125,1,116,5,124,1,131,1,115,57,9, - 0,116,6,116,3,160,7,161,0,124,1,131,2,125,1,110, - 10,35,0,4,0,116,8,121,156,1,0,1,0,1,0,89, - 0,110,1,37,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,99,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,96,124, - 5,124,0,124,1,131,2,125,2,124,2,124,4,95,15,1, - 0,113,99,113,75,100,1,83,0,124,3,116,16,117,0,114, - 131,116,0,124,2,100,6,131,2,114,130,9,0,124,2,160, - 17,124,0,161,1,125,7,110,10,35,0,4,0,116,2,121, - 155,1,0,1,0,1,0,89,0,110,10,37,0,124,7,114, - 130,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, - 4,106,18,103,0,107,2,114,153,124,1,114,153,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,154,0,0,0, - 114,204,0,0,0,114,143,0,0,0,114,19,0,0,0,114, - 104,0,0,0,114,87,0,0,0,114,68,0,0,0,114,83, - 0,0,0,114,77,0,0,0,114,160,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,59,0,0,0,114,137,0,0,0,114, - 165,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 207,0,0,0,114,203,0,0,0,114,75,0,0,0,114,62, - 0,0,0,41,9,114,142,0,0,0,90,8,108,111,99,97, - 116,105,111,110,114,165,0,0,0,114,203,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,207,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,210,2,0,0,115,96,0,0,0,8,12,4,4,10, - 1,2,2,12,1,2,128,12,1,4,1,2,128,2,251,10, - 7,8,1,2,1,16,1,2,128,12,1,4,1,2,128,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,12,1,2,128,12,1,4, - 1,2,128,4,2,6,1,2,128,6,2,10,1,4,1,12, - 1,12,1,4,2,2,244,2,228,2,249,115,44,0,0,0, - 140,5,18,0,146,7,27,7,167,7,47,0,175,7,56,7, - 193,45,5,65,51,0,193,51,7,65,60,7,194,27,1,65, - 60,7,194,28,1,56,7,194,29,1,27,7,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,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,52,0,0,0,9,0,116,0,160,1,116,0,106,2, - 124,0,161,2,83,0,35,0,4,0,116,3,121,25,1,0, - 1,0,1,0,116,0,160,1,116,0,106,4,124,0,161,2, - 6,0,89,0,83,0,37,0,119,0,114,70,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,77,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, + 8,0,0,0,218,13,95,99,108,97,115,115,105,102,121,95, + 112,121,99,74,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,10,0,0,0,114,177,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,171,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,169,0,0,0,78,114,170,0,0,0,41,4,114,43, + 0,0,0,114,160,0,0,0,114,174,0,0,0,114,143,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,142,0,0,0,114,176,0,0,0,114,118, 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,39,3,0,0,115,14,0,0,0,2,2,14,1,2, - 128,12,1,18,1,2,128,2,255,115,12,0,0,0,129,6, - 8,0,136,14,24,7,153,1,24,7,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,136,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,9,0, - 124,0,160,6,124,3,161,1,53,0,125,4,116,7,160,8, - 124,4,100,4,161,2,125,5,100,0,4,0,4,0,131,3, - 1,0,110,11,35,0,49,0,115,48,119,4,37,0,1,0, - 1,0,1,0,89,0,1,0,1,0,124,5,83,0,35,0, - 4,0,116,9,121,67,1,0,1,0,1,0,89,0,100,0, - 83,0,37,0,119,0,41,5,78,122,5,37,100,46,37,100, - 114,45,0,0,0,41,2,114,164,0,0,0,90,11,115,121, - 115,95,118,101,114,115,105,111,110,114,11,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, - 90,0,0,0,114,16,0,0,0,218,12,118,101,114,115,105, - 111,110,95,105,110,102,111,114,217,0,0,0,114,216,0,0, - 0,90,10,81,117,101,114,121,86,97,108,117,101,114,77,0, - 0,0,41,6,218,3,99,108,115,114,164,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,46,3,0,0,115,34,0,0,0,6,2,8,1,6, - 2,6,1,16,1,6,255,2,2,12,1,12,1,12,255,22, - 128,4,4,2,128,12,254,6,1,2,128,2,255,115,39,0, - 0,0,153,5,56,0,158,7,43,3,165,6,56,0,171,4, - 47,11,175,1,56,0,176,3,47,11,179,3,56,0,184,7, - 65,2,7,193,3,1,65,2,7,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,117,0, - 114,11,100,0,83,0,9,0,116,1,124,4,131,1,1,0, - 110,11,35,0,4,0,116,2,121,60,1,0,1,0,1,0, - 89,0,100,0,83,0,37,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,57,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,31,100,0,83,0,119,0,41,2,78,114,205,0, - 0,0,41,8,114,224,0,0,0,114,76,0,0,0,114,77, - 0,0,0,114,209,0,0,0,114,59,0,0,0,114,137,0, - 0,0,114,160,0,0,0,218,16,115,112,101,99,95,102,114, - 111,109,95,108,111,97,100,101,114,41,8,114,222,0,0,0, - 114,164,0,0,0,114,66,0,0,0,218,6,116,97,114,103, - 101,116,114,223,0,0,0,114,165,0,0,0,114,213,0,0, - 0,114,211,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, - 61,3,0,0,115,38,0,0,0,10,2,8,1,4,1,2, - 1,10,1,2,128,12,1,6,1,2,128,14,1,14,1,6, - 1,8,1,2,1,6,254,8,3,2,252,4,255,2,254,115, - 12,0,0,0,140,4,17,0,145,7,27,7,188,1,27,7, - 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,100,0,0, - 0,114,101,0,0,0,114,102,0,0,0,114,227,0,0,0, - 114,165,0,0,0,169,4,114,222,0,0,0,114,164,0,0, - 0,114,66,0,0,0,114,211,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,77,3,0,0,115,14,0,0,0, - 6,7,2,2,4,254,12,3,8,1,6,1,4,2,114,10, - 0,0,0,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,70,0,0,0,41, - 15,114,151,0,0,0,114,150,0,0,0,114,152,0,0,0, - 114,153,0,0,0,114,220,0,0,0,114,219,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,218,0,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,217,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,224,0,0,0,114,227,0,0,0,114, - 230,0,0,0,114,7,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,215,0,0,0,27,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,10,0,0,0,114,215,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,98,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,75,0,0,0,114,204,0,0,0,114,126,0,0, - 0,114,105,0,0,0,41,5,114,144,0,0,0,114,164,0, - 0,0,114,121,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,207,0,0,0,99,3,0,0,115,8,0,0,0,18,3, - 16,1,14,1,16,1,114,10,0,0,0,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,144,0,0,0,114,211, - 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,107,3,0,0,243,2,0,0,0,4,0,114,10,0,0, - 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,151, - 0,0,0,114,143,0,0,0,114,90,0,0,0,114,160,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,157,0,0,0,41,3,114,144,0,0,0,218, - 6,109,111,100,117,108,101,114,189,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,110,3,0,0,115,12,0,0, - 0,12,2,8,1,4,1,8,1,4,255,20,2,114,10,0, - 0,0,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, + 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,107,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,10,0,0,0,114,181,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,171,0,0,0,114,170,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, + 143,0,0,0,41,4,114,42,0,0,0,218,11,115,111,117, + 114,99,101,95,104,97,115,104,114,142,0,0,0,114,176,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,135,2,0,0,115,14,0,0,0,16,17, + 2,1,8,1,4,255,2,2,6,254,4,255,114,10,0,0, + 0,114,183,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,142,0,0,0,114, + 66,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,160, + 0,0,0,114,174,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,143,0,0,0,114,90,0,0,0,41,5,114,42,0,0, + 0,114,142,0,0,0,114,133,0,0,0,114,135,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,159,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,10,0,0,0,114,190,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,173,0,0,0,218,6,101,120,116,101,110,100, + 114,37,0,0,0,114,185,0,0,0,218,5,100,117,109,112, + 115,41,4,114,189,0,0,0,218,5,109,116,105,109,101,114, + 180,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, + 172,2,0,0,115,12,0,0,0,8,2,14,1,14,1,14, + 1,16,1,4,1,114,10,0,0,0,114,195,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,171,0, + 0,0,78,41,7,114,191,0,0,0,114,173,0,0,0,114, + 192,0,0,0,114,37,0,0,0,114,4,0,0,0,114,185, + 0,0,0,114,193,0,0,0,41,5,114,189,0,0,0,114, + 182,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,182,2,0,0,115,14,0, + 0,0,8,2,12,1,14,1,16,1,10,1,16,1,4,1, + 114,10,0,0,0,114,196,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,92,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,197,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,193,2,0,0,115,10,0,0,0, + 8,5,12,1,10,1,12,1,20,1,114,10,0,0,0,114, + 201,0,0,0,169,2,114,165,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,60,1,0,0,124,1,100,1,117,0,114,29,100,2,125, + 1,116,0,124,2,100,3,131,2,114,28,9,0,124,2,160, + 1,124,0,161,1,125,1,110,39,35,0,4,0,116,2,121, + 157,1,0,1,0,1,0,89,0,110,30,37,0,110,28,116, + 3,160,4,124,1,161,1,125,1,116,5,124,1,131,1,115, + 57,9,0,116,6,116,3,160,7,161,0,124,1,131,2,125, + 1,110,10,35,0,4,0,116,8,121,156,1,0,1,0,1, + 0,89,0,110,1,37,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,99,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, + 96,124,5,124,0,124,1,131,2,125,2,124,2,124,4,95, + 15,1,0,113,99,113,75,100,1,83,0,124,3,116,16,117, + 0,114,131,116,0,124,2,100,6,131,2,114,130,9,0,124, + 2,160,17,124,0,161,1,125,7,110,10,35,0,4,0,116, + 2,121,155,1,0,1,0,1,0,89,0,110,10,37,0,124, + 7,114,130,103,0,124,4,95,18,110,3,124,3,124,4,95, + 18,124,4,106,18,103,0,107,2,114,153,124,1,114,153,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,154,0, + 0,0,114,204,0,0,0,114,143,0,0,0,114,19,0,0, + 0,114,104,0,0,0,114,87,0,0,0,114,68,0,0,0, + 114,83,0,0,0,114,77,0,0,0,114,160,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,59,0,0,0,114,137,0,0, + 0,114,165,0,0,0,218,9,95,80,79,80,85,76,65,84, + 69,114,207,0,0,0,114,203,0,0,0,114,75,0,0,0, + 114,62,0,0,0,41,9,114,142,0,0,0,90,8,108,111, + 99,97,116,105,111,110,114,165,0,0,0,114,203,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,207, + 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,210,2,0,0,115,96,0,0,0,8,12,4, + 4,10,1,2,2,12,1,2,128,12,1,4,1,2,128,2, + 251,10,7,8,1,2,1,16,1,2,128,12,1,4,1,2, + 128,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,12,1,2,128,12, + 1,4,1,2,128,4,2,6,1,2,128,6,2,10,1,4, + 1,12,1,12,1,4,2,2,244,2,228,2,249,115,44,0, + 0,0,140,5,18,0,146,7,27,7,167,7,47,0,175,7, + 56,7,193,45,5,65,51,0,193,51,7,65,60,7,194,27, + 1,65,60,7,194,28,1,56,7,194,29,1,27,7,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,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,52,0,0,0,9,0,116,0,160,1,116,0, + 106,2,124,0,161,2,83,0,35,0,4,0,116,3,121,25, + 1,0,1,0,1,0,116,0,160,1,116,0,106,4,124,0, + 161,2,6,0,89,0,83,0,37,0,119,0,114,70,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,77,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,39,3,0,0,115,14,0,0,0,2,2,14, + 1,2,128,12,1,18,1,2,128,2,255,115,12,0,0,0, + 129,6,8,0,136,14,24,7,153,1,24,7,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,136,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, + 9,0,124,0,160,6,124,3,161,1,53,0,125,4,116,7, + 160,8,124,4,100,4,161,2,125,5,100,0,4,0,4,0, + 131,3,1,0,110,11,35,0,49,0,115,48,119,4,37,0, + 1,0,1,0,1,0,89,0,1,0,1,0,124,5,83,0, + 35,0,4,0,116,9,121,67,1,0,1,0,1,0,89,0, + 100,0,83,0,37,0,119,0,41,5,78,122,5,37,100,46, + 37,100,114,45,0,0,0,41,2,114,164,0,0,0,90,11, + 115,121,115,95,118,101,114,115,105,111,110,114,11,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,90,0,0,0,114,16,0,0,0,218,12,118,101,114, + 115,105,111,110,95,105,110,102,111,114,217,0,0,0,114,216, + 0,0,0,90,10,81,117,101,114,121,86,97,108,117,101,114, + 77,0,0,0,41,6,218,3,99,108,115,114,164,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,46,3,0,0,115,34,0,0,0,6,2,8, + 1,6,2,6,1,16,1,6,255,2,2,12,1,12,1,12, + 255,22,128,4,4,2,128,12,254,6,1,2,128,2,255,115, + 39,0,0,0,153,5,56,0,158,7,43,3,165,6,56,0, + 171,4,47,11,175,1,56,0,176,3,47,11,179,3,56,0, + 184,7,65,2,7,193,3,1,65,2,7,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, + 117,0,114,11,100,0,83,0,9,0,116,1,124,4,131,1, + 1,0,110,11,35,0,4,0,116,2,121,60,1,0,1,0, + 1,0,89,0,100,0,83,0,37,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,57,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,31,100,0,83,0,119,0,41,2,78,114, + 205,0,0,0,41,8,114,224,0,0,0,114,76,0,0,0, + 114,77,0,0,0,114,209,0,0,0,114,59,0,0,0,114, + 137,0,0,0,114,160,0,0,0,218,16,115,112,101,99,95, + 102,114,111,109,95,108,111,97,100,101,114,41,8,114,222,0, + 0,0,114,164,0,0,0,114,66,0,0,0,218,6,116,97, + 114,103,101,116,114,223,0,0,0,114,165,0,0,0,114,213, + 0,0,0,114,211,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,61,3,0,0,115,38,0,0,0,10,2,8,1,4, + 1,2,1,10,1,2,128,12,1,6,1,2,128,14,1,14, + 1,6,1,8,1,2,1,6,254,8,3,2,252,4,255,2, + 254,115,12,0,0,0,140,4,17,0,145,7,27,7,188,1, + 27,7,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,78,41,2,114,160,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,144,0,0,0,114,164,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,118,3,0,0,115,2,0,0, - 0,12,3,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0, - 114,152,0,0,0,114,153,0,0,0,114,207,0,0,0,114, - 240,0,0,0,114,246,0,0,0,114,249,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,94,3,0,0,115,12,0,0,0, - 8,0,4,2,8,3,8,8,8,3,12,8,114,10,0,0, - 0,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, - 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,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,100, + 0,0,0,114,101,0,0,0,114,102,0,0,0,114,227,0, + 0,0,114,165,0,0,0,169,4,114,222,0,0,0,114,164, + 0,0,0,114,66,0,0,0,114,211,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,77,3,0,0,115,14,0, + 0,0,6,7,2,2,4,254,12,3,8,1,6,1,4,2, + 114,10,0,0,0,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,70,0,0, + 0,41,15,114,151,0,0,0,114,150,0,0,0,114,152,0, + 0,0,114,153,0,0,0,114,220,0,0,0,114,219,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,218,0,0,0,218,12,115,116,97,116,105,99,109, + 101,116,104,111,100,114,217,0,0,0,218,11,99,108,97,115, + 115,109,101,116,104,111,100,114,224,0,0,0,114,227,0,0, + 0,114,230,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,215,0,0,0,27, + 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,10,0,0,0,114,215,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,98,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,75,0,0,0,114,204,0,0,0,114,126, + 0,0,0,114,105,0,0,0,41,5,114,144,0,0,0,114, + 164,0,0,0,114,121,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,207,0,0,0,99,3,0,0,115,8,0,0,0, + 18,3,16,1,14,1,16,1,114,10,0,0,0,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,144,0,0,0, + 114,211,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,107,3,0,0,243,2,0,0,0,4,0,114,10, + 0,0,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,151,0,0,0,114,143,0,0,0,114,90,0,0,0,114, + 160,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,157,0,0,0,41,3,114,144,0,0, + 0,218,6,109,111,100,117,108,101,114,189,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,110,3,0,0,115,12, + 0,0,0,12,2,8,1,4,1,8,1,4,255,20,2,114, + 10,0,0,0,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,160,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,144,0,0,0,114,164,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,118,3,0,0,115,2, + 0,0,0,12,3,114,10,0,0,0,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,151,0,0,0,114,150,0, + 0,0,114,152,0,0,0,114,153,0,0,0,114,207,0,0, + 0,114,240,0,0,0,114,246,0,0,0,114,249,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,94,3,0,0,115,12,0, + 0,0,8,0,4,2,8,3,8,8,8,3,12,8,114,10, + 0,0,0,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,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,77, + 0,0,0,169,2,114,144,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, + 112,97,116,104,95,109,116,105,109,101,126,3,0,0,115,2, + 0,0,0,4,6,114,10,0,0,0,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,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,77,0,0, - 0,169,2,114,144,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,112,97, - 116,104,95,109,116,105,109,101,126,3,0,0,115,2,0,0, - 0,4,6,114,10,0,0,0,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,194,0,0,0,78,41,1,114,252,0,0,0,114, - 251,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,134, - 3,0,0,115,2,0,0,0,14,12,114,10,0,0,0,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, + 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,194,0,0,0,78,41,1,114,252,0,0, + 0,114,251,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,134,3,0,0,115,2,0,0,0,14,12,114,10,0,0, + 0,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,144,0,0,0, + 114,135,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,148,3,0,0,115,2,0,0,0,12, + 8,114,10,0,0,0,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, @@ -1358,1493 +1382,1469 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,144,0,0,0,114,135, - 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,148,3,0,0,115,2,0,0,0,12,8,114, - 10,0,0,0,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,144,0,0,0,114,66,0,0,0,114,42,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,254,0,0,0,158,3,0,0,114,241,0,0,0,114,10, - 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,8,0,0,0,67, - 0,0,0,115,70,0,0,0,124,0,160,0,124,1,161,1, - 125,2,9,0,124,0,160,1,124,2,161,1,125,3,116,4, - 124,3,131,1,83,0,35,0,4,0,116,2,121,34,1,0, - 125,4,1,0,116,3,100,1,124,1,100,2,141,2,124,4, - 130,2,100,3,125,4,126,4,119,1,37,0,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, - 141,0,0,0,78,41,5,114,204,0,0,0,218,8,103,101, - 116,95,100,97,116,97,114,77,0,0,0,114,143,0,0,0, - 114,201,0,0,0,41,5,114,144,0,0,0,114,164,0,0, - 0,114,66,0,0,0,114,199,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,165,3,0,0,115, - 26,0,0,0,10,2,2,1,10,1,8,4,2,128,12,253, - 4,1,2,1,4,255,2,1,2,255,10,128,2,255,115,20, - 0,0,0,134,5,15,0,143,7,33,7,150,7,29,7,157, - 4,33,7,162,1,33,7,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,131,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,244,0,0, - 0,84,41,2,218,12,100,111,110,116,95,105,110,104,101,114, - 105,116,114,109,0,0,0,78,41,3,114,160,0,0,0,114, - 243,0,0,0,218,7,99,111,109,112,105,108,101,41,4,114, - 144,0,0,0,114,42,0,0,0,114,66,0,0,0,114,3, - 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,175,3,0,0,115,6,0,0,0,12,5,4,1,6, - 255,114,10,0,0,0,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,28,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,9, - 0,116,1,124,2,131,1,125,8,110,13,35,0,4,0,116, - 2,144,1,121,13,1,0,1,0,1,0,100,1,125,8,89, - 0,110,147,37,0,9,0,124,0,160,3,124,2,161,1,125, - 9,110,11,35,0,4,0,116,4,144,1,121,12,1,0,1, - 0,1,0,89,0,110,129,37,0,116,5,124,9,100,4,25, - 0,131,1,125,3,9,0,124,0,160,6,124,8,161,1,125, - 10,110,11,35,0,4,0,116,4,144,1,121,11,1,0,1, - 0,1,0,89,0,110,105,37,0,124,1,124,8,100,5,156, - 2,125,11,9,0,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, - 141,124,12,100,9,64,0,100,8,107,3,125,7,116,9,106, - 10,100,10,107,3,114,140,124,7,115,122,116,9,106,10,100, - 11,107,2,114,140,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,110, - 13,35,0,4,0,116,15,116,16,102,2,144,1,121,10,1, - 0,1,0,1,0,89,0,110,16,37,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,114, - 189,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,1,115,7,124,8,100,1,117, - 1,144,1,114,7,124,3,100,1,117,1,144,1,114,7,124, - 6,114,233,124,5,100,1,117,0,114,226,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,9,0,124,0,160,26,124,2,124,8,124,10,161, - 3,1,0,124,14,83,0,35,0,4,0,116,2,144,1,121, - 9,1,0,1,0,1,0,89,0,124,14,83,0,37,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,194,0,0,0,114,184,0,0,0,114,170,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,142,0,0,0,114,133,0,0,0, - 114,135,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,204,0,0, - 0,114,122,0,0,0,114,108,0,0,0,114,253,0,0,0, - 114,77,0,0,0,114,34,0,0,0,114,0,1,0,0,114, - 177,0,0,0,218,10,109,101,109,111,114,121,118,105,101,119, - 114,188,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,182,0,0, - 0,218,17,95,82,65,87,95,77,65,71,73,67,95,78,85, - 77,66,69,82,114,183,0,0,0,114,181,0,0,0,114,143, - 0,0,0,114,175,0,0,0,114,160,0,0,0,114,174,0, - 0,0,114,190,0,0,0,114,6,1,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,196,0,0,0,114,195,0,0,0, - 114,4,0,0,0,114,255,0,0,0,41,15,114,144,0,0, - 0,114,164,0,0,0,114,135,0,0,0,114,179,0,0,0, - 114,199,0,0,0,114,182,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,133,0,0,0,218,2,115,116,114,42,0, - 0,0,114,176,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,242,0,0,0,183,3,0,0,115,188,0, - 0,0,10,7,4,1,4,1,4,1,4,1,4,1,2,1, - 10,1,2,128,14,1,8,1,2,128,2,2,12,1,2,128, - 14,1,4,1,2,128,12,2,2,1,12,1,2,128,14,1, - 4,1,2,128,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,2,128,8,2,2,1,4,255,6,2, - 2,1,2,1,6,254,8,3,10,1,12,1,12,1,18,1, - 6,1,4,255,4,2,8,1,10,1,14,1,6,2,6,1, - 4,255,2,2,14,1,4,3,2,128,14,254,2,1,4,1, - 2,128,4,0,2,254,2,233,2,225,2,250,2,251,115,80, - 0,0,0,144,4,21,0,149,10,33,7,163,5,41,0,169, - 8,51,7,187,5,65,1,0,193,1,8,65,11,7,193,18, - 65,5,66,24,0,194,24,10,66,36,7,195,50,7,67,59, - 0,195,59,8,68,6,7,196,9,1,68,6,7,196,10,1, - 66,36,7,196,11,1,65,11,7,196,12,1,51,7,196,13, - 1,33,7,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,151,0, - 0,0,114,150,0,0,0,114,152,0,0,0,114,252,0,0, - 0,114,253,0,0,0,114,255,0,0,0,114,254,0,0,0, - 114,2,1,0,0,114,6,1,0,0,114,242,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,250,0,0,0,124,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,10,0,0,0,114,250,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,184,0,0,0,41, - 3,114,144,0,0,0,114,164,0,0,0,114,66,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 237,0,0,0,17,4,0,0,115,4,0,0,0,6,3,10, - 1,114,10,0,0,0,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,70,0,0,0,169,2,218,9,95,95,99,108,97,115, - 115,95,95,114,157,0,0,0,169,2,114,144,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,23,4,0, - 0,243,6,0,0,0,12,1,10,1,2,255,114,10,0,0, - 0,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,70,0,0,0,169,3,218,4,104, - 97,115,104,114,142,0,0,0,114,66,0,0,0,169,1,114, - 144,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,27,4,0, - 0,243,2,0,0,0,20,1,114,10,0,0,0,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,12,1,0,0,114,249,0,0,0,114,248,0,0, - 0,169,1,114,15,1,0,0,114,7,0,0,0,114,8,0, - 0,0,114,249,0,0,0,30,4,0,0,115,2,0,0,0, - 16,10,114,10,0,0,0,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,72,0,0,0,114,248,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,204,0,0,0, - 42,4,0,0,243,2,0,0,0,6,3,114,10,0,0,0, - 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,9,0,0,0,67,0, - 0,0,115,136,0,0,0,116,0,124,0,116,1,116,2,102, - 2,131,2,114,38,116,3,160,4,116,5,124,1,131,1,161, - 1,53,0,125,2,124,2,160,6,161,0,2,0,100,1,4, - 0,4,0,131,3,1,0,83,0,35,0,49,0,115,30,119, - 4,37,0,1,0,1,0,1,0,89,0,1,0,1,0,100, - 1,83,0,116,3,160,7,124,1,100,2,161,2,53,0,125, - 2,124,2,160,6,161,0,2,0,100,1,4,0,4,0,131, - 3,1,0,83,0,35,0,49,0,115,60,119,4,37,0,1, - 0,1,0,1,0,89,0,1,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,186,0,0,0,114,250,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, - 92,0,0,0,90,9,111,112,101,110,95,99,111,100,101,114, - 110,0,0,0,90,4,114,101,97,100,114,93,0,0,0,41, - 3,114,144,0,0,0,114,66,0,0,0,114,95,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 0,1,0,0,47,4,0,0,115,22,0,0,0,14,2,16, - 1,6,1,12,255,2,1,26,128,14,2,6,1,12,255,2, - 1,26,128,115,24,0,0,0,142,4,25,3,153,4,29,11, - 158,3,29,11,172,4,55,3,183,4,59,11,188,3,59,11, - 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,32,1,0,0,41,3,114,144,0,0,0,114,245, - 0,0,0,114,32,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,56,4,0,0, - 115,4,0,0,0,12,2,8,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, - 153,0,0,0,114,237,0,0,0,114,17,1,0,0,114,23, - 1,0,0,114,161,0,0,0,114,249,0,0,0,114,204,0, - 0,0,114,0,1,0,0,114,34,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,26,1,0,0,114,8,0,0,0,114, - 12,1,0,0,12,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,10,0,0,0,114,12,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,194,0,0,0,114, - 7,1,0,0,78,41,3,114,76,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,144,0,0,0,114,66,0,0,0,114,11,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 253,0,0,0,66,4,0,0,115,4,0,0,0,8,2,14, - 1,114,10,0,0,0,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,140,0,0,0,114,254,0,0, - 0,41,5,114,144,0,0,0,114,135,0,0,0,114,133,0, - 0,0,114,42,0,0,0,114,79,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,255,0,0,0, - 71,4,0,0,115,4,0,0,0,8,2,16,1,114,10,0, - 0,0,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,88,0,0,0,114,37,1,0,0,99,3, - 0,0,0,0,0,0,0,1,0,0,0,9,0,0,0,9, - 0,0,0,67,0,0,0,115,250,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,47,125,7,116,4,124,4,124,7,131,2,125,4, - 9,0,116,5,160,6,124,4,161,1,1,0,113,35,35,0, - 4,0,116,7,121,58,1,0,1,0,1,0,89,0,113,35, - 4,0,116,8,121,124,1,0,125,8,1,0,116,9,160,10, - 100,1,124,4,124,8,161,3,1,0,89,0,100,2,125,8, - 126,8,1,0,100,2,83,0,100,2,125,8,126,8,119,1, - 37,0,9,0,116,11,124,1,124,2,124,3,131,3,1,0, - 116,9,160,10,100,3,124,1,161,2,1,0,100,2,83,0, - 35,0,4,0,116,8,121,123,1,0,125,8,1,0,116,9, - 160,10,100,1,124,1,124,8,161,3,1,0,89,0,100,2, - 125,8,126,8,100,2,83,0,100,2,125,8,126,8,119,1, - 37,0,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,75,0,0,0,114,84,0,0,0,114,62,0, - 0,0,218,8,114,101,118,101,114,115,101,100,114,68,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,77, - 0,0,0,114,160,0,0,0,114,174,0,0,0,114,96,0, - 0,0,41,9,114,144,0,0,0,114,66,0,0,0,114,42, - 0,0,0,114,38,1,0,0,218,6,112,97,114,101,110,116, - 114,121,0,0,0,114,64,0,0,0,114,69,0,0,0,114, - 1,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,254,0,0,0,76,4,0,0,115,60,0,0, - 0,12,2,4,1,12,2,12,1,10,1,12,254,12,4,10, - 1,2,1,12,1,2,128,12,1,4,2,12,1,6,3,4, - 1,4,255,14,2,10,128,2,1,12,1,16,1,2,128,12, - 1,8,2,2,1,16,255,10,128,2,254,2,247,115,62,0, - 0,0,171,5,49,2,177,7,65,18,9,186,6,65,18,9, - 193,0,7,65,14,9,193,14,4,65,18,9,193,20,12,65, - 34,0,193,34,7,65,58,7,193,41,7,65,54,7,193,54, - 4,65,58,7,193,59,1,65,58,7,193,60,1,65,18,9, - 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,151, - 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, - 0,0,114,253,0,0,0,114,255,0,0,0,114,254,0,0, + 101,115,46,10,32,32,32,32,32,32,32,32,78,114,7,0, + 0,0,41,3,114,144,0,0,0,114,66,0,0,0,114,42, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,254,0,0,0,158,3,0,0,114,241,0,0,0, + 114,10,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,8,0,0, + 0,67,0,0,0,115,70,0,0,0,124,0,160,0,124,1, + 161,1,125,2,9,0,124,0,160,1,124,2,161,1,125,3, + 116,4,124,3,131,1,83,0,35,0,4,0,116,2,121,34, + 1,0,125,4,1,0,116,3,100,1,124,1,100,2,141,2, + 124,4,130,2,100,3,125,4,126,4,119,1,37,0,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,141,0,0,0,78,41,5,114,204,0,0,0,218,8, + 103,101,116,95,100,97,116,97,114,77,0,0,0,114,143,0, + 0,0,114,201,0,0,0,41,5,114,144,0,0,0,114,164, + 0,0,0,114,66,0,0,0,114,199,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,165,3,0, + 0,115,26,0,0,0,10,2,2,1,10,1,8,4,2,128, + 12,253,4,1,2,1,4,255,2,1,2,255,10,128,2,255, + 115,20,0,0,0,134,5,15,0,143,7,33,7,150,7,29, + 7,157,4,33,7,162,1,33,7,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,131,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,244, + 0,0,0,84,41,2,218,12,100,111,110,116,95,105,110,104, + 101,114,105,116,114,109,0,0,0,78,41,3,114,160,0,0, + 0,114,243,0,0,0,218,7,99,111,109,112,105,108,101,41, + 4,114,144,0,0,0,114,42,0,0,0,114,66,0,0,0, + 114,3,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,175,3,0,0,115,6,0,0,0,12,5,4, + 1,6,255,114,10,0,0,0,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,28, + 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,9,0,116,1,124,2,131,1,125,8,110,13,35,0,4, + 0,116,2,144,1,121,13,1,0,1,0,1,0,100,1,125, + 8,89,0,110,147,37,0,9,0,124,0,160,3,124,2,161, + 1,125,9,110,11,35,0,4,0,116,4,144,1,121,12,1, + 0,1,0,1,0,89,0,110,129,37,0,116,5,124,9,100, + 4,25,0,131,1,125,3,9,0,124,0,160,6,124,8,161, + 1,125,10,110,11,35,0,4,0,116,4,144,1,121,11,1, + 0,1,0,1,0,89,0,110,105,37,0,124,1,124,8,100, + 5,156,2,125,11,9,0,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,141,124,12,100,9,64,0,100,8,107,3,125,7,116, + 9,106,10,100,10,107,3,114,140,124,7,115,122,116,9,106, + 10,100,11,107,2,114,140,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,110,13,35,0,4,0,116,15,116,16,102,2,144,1,121, + 10,1,0,1,0,1,0,89,0,110,16,37,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,114,189,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,1,115,7,124,8,100, + 1,117,1,144,1,114,7,124,3,100,1,117,1,144,1,114, + 7,124,6,114,233,124,5,100,1,117,0,114,226,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,9,0,124,0,160,26,124,2,124,8,124, + 10,161,3,1,0,124,14,83,0,35,0,4,0,116,2,144, + 1,121,9,1,0,1,0,1,0,89,0,124,14,83,0,37, + 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,194,0,0,0,114,184,0,0,0,114,170, + 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,142,0,0,0,114,133,0, + 0,0,114,135,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,204, + 0,0,0,114,122,0,0,0,114,108,0,0,0,114,253,0, + 0,0,114,77,0,0,0,114,34,0,0,0,114,0,1,0, + 0,114,177,0,0,0,218,10,109,101,109,111,114,121,118,105, + 101,119,114,188,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,182, + 0,0,0,218,17,95,82,65,87,95,77,65,71,73,67,95, + 78,85,77,66,69,82,114,183,0,0,0,114,181,0,0,0, + 114,143,0,0,0,114,175,0,0,0,114,160,0,0,0,114, + 174,0,0,0,114,190,0,0,0,114,6,1,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,196,0,0,0,114,195,0, + 0,0,114,4,0,0,0,114,255,0,0,0,41,15,114,144, + 0,0,0,114,164,0,0,0,114,135,0,0,0,114,179,0, + 0,0,114,199,0,0,0,114,182,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,133,0,0,0,218,2,115,116,114, + 42,0,0,0,114,176,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,242,0,0,0,183,3,0,0,115, + 188,0,0,0,10,7,4,1,4,1,4,1,4,1,4,1, + 2,1,10,1,2,128,14,1,8,1,2,128,2,2,12,1, + 2,128,14,1,4,1,2,128,12,2,2,1,12,1,2,128, + 14,1,4,1,2,128,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,2,128,8,2,2,1,4,255, + 6,2,2,1,2,1,6,254,8,3,10,1,12,1,12,1, + 18,1,6,1,4,255,4,2,8,1,10,1,14,1,6,2, + 6,1,4,255,2,2,14,1,4,3,2,128,14,254,2,1, + 4,1,2,128,4,0,2,254,2,233,2,225,2,250,2,251, + 115,80,0,0,0,144,4,21,0,149,10,33,7,163,5,41, + 0,169,8,51,7,187,5,65,1,0,193,1,8,65,11,7, + 193,18,65,5,66,24,0,194,24,10,66,36,7,195,50,7, + 67,59,0,195,59,8,68,6,7,196,9,1,68,6,7,196, + 10,1,66,36,7,196,11,1,65,11,7,196,12,1,51,7, + 196,13,1,33,7,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, + 151,0,0,0,114,150,0,0,0,114,152,0,0,0,114,252, + 0,0,0,114,253,0,0,0,114,255,0,0,0,114,254,0, + 0,0,114,2,1,0,0,114,6,1,0,0,114,242,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,35,1,0,0,62,4,0,0,115,10, - 0,0,0,8,0,4,2,8,2,8,5,18,5,114,10,0, - 0,0,114,35,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,184,0,0,0,114,170,0,0,0,41,2,114,142,0, - 0,0,114,133,0,0,0,41,5,114,204,0,0,0,114,0, - 1,0,0,114,177,0,0,0,114,190,0,0,0,114,8,1, - 0,0,41,5,114,144,0,0,0,114,164,0,0,0,114,66, - 0,0,0,114,42,0,0,0,114,176,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,242,0,0, - 0,111,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, - 114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,2,1,0,0,127,4,0,0, - 114,25,0,0,0,114,10,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,151, - 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, - 0,0,114,242,0,0,0,114,2,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,42,1,0,0,107,4,0,0,115,8,0,0,0,8,0, - 4,2,8,2,12,16,114,10,0,0,0,114,42,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,31,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,70, - 0,0,0,114,184,0,0,0,41,3,114,144,0,0,0,114, - 142,0,0,0,114,66,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,237,0,0,0,140,4,0, - 0,115,4,0,0,0,6,1,10,1,114,10,0,0,0,122, - 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 114,8,0,0,0,114,250,0,0,0,124,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,10,0,0,0,114,250,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,184,0,0, + 0,41,3,114,144,0,0,0,114,164,0,0,0,114,66,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,237,0,0,0,17,4,0,0,115,4,0,0,0,6, + 3,10,1,114,10,0,0,0,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,114,13,1,0,0,114,70,0,0,0, - 114,14,1,0,0,114,16,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,17,1,0,0,144,4, - 0,0,114,18,1,0,0,114,10,0,0,0,122,26,69,120, + 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,70,0,0,0,169,2,218,9,95,95,99,108, + 97,115,115,95,95,114,157,0,0,0,169,2,114,144,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,23, + 4,0,0,243,6,0,0,0,12,1,10,1,2,255,114,10, + 0,0,0,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,70,0,0,0,169,3,218, + 4,104,97,115,104,114,142,0,0,0,114,66,0,0,0,169, + 1,114,144,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,27, + 4,0,0,243,2,0,0,0,20,1,114,10,0,0,0,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,12,1,0,0,114,249,0,0,0,114,248, + 0,0,0,169,1,114,15,1,0,0,114,7,0,0,0,114, + 8,0,0,0,114,249,0,0,0,30,4,0,0,115,2,0, + 0,0,16,10,114,10,0,0,0,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,72,0,0,0,114,248,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,204,0, + 0,0,42,4,0,0,243,2,0,0,0,6,3,114,10,0, + 0,0,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,9,0,0,0, + 67,0,0,0,115,136,0,0,0,116,0,124,0,116,1,116, + 2,102,2,131,2,114,38,116,3,160,4,116,5,124,1,131, + 1,161,1,53,0,125,2,124,2,160,6,161,0,2,0,100, + 1,4,0,4,0,131,3,1,0,83,0,35,0,49,0,115, + 30,119,4,37,0,1,0,1,0,1,0,89,0,1,0,1, + 0,100,1,83,0,116,3,160,7,124,1,100,2,161,2,53, + 0,125,2,124,2,160,6,161,0,2,0,100,1,4,0,4, + 0,131,3,1,0,83,0,35,0,49,0,115,60,119,4,37, + 0,1,0,1,0,1,0,89,0,1,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,186,0,0,0,114,250,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,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,19,1,0,0,114,70,0,0,0,114,20,1,0,0, - 114,22,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,23,1,0,0,148,4,0,0,114,24,1, - 0,0,114,10,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,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,160,0,0, - 0,114,243,0,0,0,114,188,0,0,0,90,14,99,114,101, - 97,116,101,95,100,121,110,97,109,105,99,114,174,0,0,0, - 114,142,0,0,0,114,66,0,0,0,41,3,114,144,0,0, - 0,114,211,0,0,0,114,245,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,240,0,0,0,151, - 4,0,0,115,14,0,0,0,4,2,6,1,4,255,6,2, - 8,1,4,255,4,2,114,10,0,0,0,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, - 160,0,0,0,114,243,0,0,0,114,188,0,0,0,90,12, - 101,120,101,99,95,100,121,110,97,109,105,99,114,174,0,0, - 0,114,142,0,0,0,114,66,0,0,0,169,2,114,144,0, - 0,0,114,245,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,246,0,0,0,159,4,0,0,115, - 8,0,0,0,14,2,6,1,8,1,8,255,114,10,0,0, - 0,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,237,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, - 168,4,0,0,115,6,0,0,0,6,128,2,1,20,255,114, - 10,0,0,0,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,75,0,0,0,114, - 66,0,0,0,218,3,97,110,121,114,233,0,0,0,114,248, - 0,0,0,114,7,0,0,0,114,46,1,0,0,114,8,0, - 0,0,114,207,0,0,0,165,4,0,0,115,8,0,0,0, - 14,2,12,1,2,1,8,255,114,10,0,0,0,122,30,69, + 114,114,92,0,0,0,90,9,111,112,101,110,95,99,111,100, + 101,114,110,0,0,0,90,4,114,101,97,100,114,93,0,0, + 0,41,3,114,144,0,0,0,114,66,0,0,0,114,95,0, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,0,1,0,0,47,4,0,0,115,22,0,0,0,14, + 2,16,1,6,1,12,255,2,1,26,128,14,2,6,1,12, + 255,2,1,26,128,115,24,0,0,0,142,4,25,3,153,4, + 29,11,158,3,29,11,172,4,55,3,183,4,59,11,188,3, + 59,11,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,32,1,0,0,41,3,114,144,0,0,0, + 114,245,0,0,0,114,32,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,56,4, + 0,0,115,4,0,0,0,12,2,8,1,114,10,0,0,0, + 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,151,0,0,0,114,150,0,0,0,114,152,0,0, + 0,114,153,0,0,0,114,237,0,0,0,114,17,1,0,0, + 114,23,1,0,0,114,161,0,0,0,114,249,0,0,0,114, + 204,0,0,0,114,0,1,0,0,114,34,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,26,1,0,0,114,8,0,0, + 0,114,12,1,0,0,12,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,10,0,0,0,114,12,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,194,0,0, + 0,114,7,1,0,0,78,41,3,114,76,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,144,0,0,0,114,66,0,0,0,114,11,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,253,0,0,0,66,4,0,0,115,4,0,0,0,8, + 2,14,1,114,10,0,0,0,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,140,0,0,0,114,254, + 0,0,0,41,5,114,144,0,0,0,114,135,0,0,0,114, + 133,0,0,0,114,42,0,0,0,114,79,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,255,0, + 0,0,71,4,0,0,115,4,0,0,0,8,2,16,1,114, + 10,0,0,0,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,88,0,0,0,114,37,1,0,0, + 99,3,0,0,0,0,0,0,0,1,0,0,0,9,0,0, + 0,9,0,0,0,67,0,0,0,115,250,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,47,125,7,116,4,124,4,124,7,131,2, + 125,4,9,0,116,5,160,6,124,4,161,1,1,0,113,35, + 35,0,4,0,116,7,121,58,1,0,1,0,1,0,89,0, + 113,35,4,0,116,8,121,124,1,0,125,8,1,0,116,9, + 160,10,100,1,124,4,124,8,161,3,1,0,89,0,100,2, + 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, + 119,1,37,0,9,0,116,11,124,1,124,2,124,3,131,3, + 1,0,116,9,160,10,100,3,124,1,161,2,1,0,100,2, + 83,0,35,0,4,0,116,8,121,123,1,0,125,8,1,0, + 116,9,160,10,100,1,124,1,124,8,161,3,1,0,89,0, + 100,2,125,8,126,8,100,2,83,0,100,2,125,8,126,8, + 119,1,37,0,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,75,0,0,0,114,84,0,0,0,114, + 62,0,0,0,218,8,114,101,118,101,114,115,101,100,114,68, + 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,77,0,0,0,114,160,0,0,0,114,174,0,0,0,114, + 96,0,0,0,41,9,114,144,0,0,0,114,66,0,0,0, + 114,42,0,0,0,114,38,1,0,0,218,6,112,97,114,101, + 110,116,114,121,0,0,0,114,64,0,0,0,114,69,0,0, + 0,114,1,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,254,0,0,0,76,4,0,0,115,60, + 0,0,0,12,2,4,1,12,2,12,1,10,1,12,254,12, + 4,10,1,2,1,12,1,2,128,12,1,4,2,12,1,6, + 3,4,1,4,255,14,2,10,128,2,1,12,1,16,1,2, + 128,12,1,8,2,2,1,16,255,10,128,2,254,2,247,115, + 62,0,0,0,171,5,49,2,177,7,65,18,9,186,6,65, + 18,9,193,0,7,65,14,9,193,14,4,65,18,9,193,20, + 12,65,34,0,193,34,7,65,58,7,193,41,7,65,54,7, + 193,54,4,65,58,7,193,59,1,65,58,7,193,60,1,65, + 18,9,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, + 153,0,0,0,114,253,0,0,0,114,255,0,0,0,114,254, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,35,1,0,0,62,4,0,0, + 115,10,0,0,0,8,0,4,2,8,2,8,5,18,5,114, + 10,0,0,0,114,35,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,184,0,0,0,114,170,0,0,0,41,2,114, + 142,0,0,0,114,133,0,0,0,41,5,114,204,0,0,0, + 114,0,1,0,0,114,177,0,0,0,114,190,0,0,0,114, + 8,1,0,0,41,5,114,144,0,0,0,114,164,0,0,0, + 114,66,0,0,0,114,42,0,0,0,114,176,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,242, + 0,0,0,111,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,114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,2,1,0,0,127,4, + 0,0,114,25,0,0,0,114,10,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, + 153,0,0,0,114,242,0,0,0,114,2,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,42,1,0,0,107,4,0,0,115,8,0,0,0, + 8,0,4,2,8,2,12,16,114,10,0,0,0,114,42,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,31, + 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,70,0,0,0,114,184,0,0,0,41,3,114,144,0,0, + 0,114,142,0,0,0,114,66,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,237,0,0,0,140, + 4,0,0,115,4,0,0,0,6,1,10,1,114,10,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,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,13,1,0,0,114,70,0, + 0,0,114,14,1,0,0,114,16,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,17,1,0,0, + 144,4,0,0,114,18,1,0,0,114,10,0,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,19,1,0,0,114,70,0,0,0,114,20,1, + 0,0,114,22,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,23,1,0,0,148,4,0,0,114, + 24,1,0,0,114,10,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,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,160, + 0,0,0,114,243,0,0,0,114,188,0,0,0,90,14,99, + 114,101,97,116,101,95,100,121,110,97,109,105,99,114,174,0, + 0,0,114,142,0,0,0,114,66,0,0,0,41,3,114,144, + 0,0,0,114,211,0,0,0,114,245,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, + 0,151,4,0,0,115,14,0,0,0,4,2,6,1,4,255, + 6,2,8,1,4,255,4,2,114,10,0,0,0,122,33,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,248,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,242,0,0,0,171,4,0, - 0,114,25,0,0,0,114,10,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, + 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,160,0,0,0,114,243,0,0,0,114,188,0,0,0, + 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,174, + 0,0,0,114,142,0,0,0,114,66,0,0,0,169,2,114, + 144,0,0,0,114,245,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,246,0,0,0,159,4,0, + 0,115,8,0,0,0,14,2,6,1,8,1,8,255,114,10, + 0,0,0,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,237,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,168,4,0,0,115,6,0,0,0,6,128,2,1,20, + 255,114,10,0,0,0,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,75,0,0, + 0,114,66,0,0,0,218,3,97,110,121,114,233,0,0,0, + 114,248,0,0,0,114,7,0,0,0,114,46,1,0,0,114, + 8,0,0,0,114,207,0,0,0,165,4,0,0,115,8,0, + 0,0,14,2,12,1,2,1,8,255,114,10,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, + 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,248,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,2,1,0,0,175, - 4,0,0,114,25,0,0,0,114,10,0,0,0,122,30,69, + 114,7,0,0,0,114,8,0,0,0,114,242,0,0,0,171, + 4,0,0,114,25,0,0,0,114,10,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,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,27,1,0,0,114,28,1,0,0, - 114,72,0,0,0,114,248,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,204,0,0,0,179,4, - 0,0,114,29,1,0,0,114,10,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0, - 114,153,0,0,0,114,237,0,0,0,114,17,1,0,0,114, - 23,1,0,0,114,240,0,0,0,114,246,0,0,0,114,207, - 0,0,0,114,242,0,0,0,114,2,1,0,0,114,161,0, - 0,0,114,204,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,31,1,0,0, - 132,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,10,0,0,0,114,31,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,70,0,0,0,41,6,218,5,95,110,97,109,101,218,5, - 95,112,97,116,104,114,137,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, - 144,0,0,0,114,142,0,0,0,114,66,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,237,0,0,0,192, - 4,0,0,115,8,0,0,0,6,1,6,1,14,1,10,1, - 114,10,0,0,0,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,98,0,0,0,114,11,0,0,0,41,2, - 114,16,0,0,0,114,66,0,0,0,90,8,95,95,112,97, - 116,104,95,95,78,41,2,114,49,1,0,0,114,105,0,0, - 0,41,4,114,144,0,0,0,114,41,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,198,4, - 0,0,115,8,0,0,0,18,2,8,1,4,2,8,3,114, - 10,0,0,0,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,70,0,0,0,41,4,114,56,1, - 0,0,114,156,0,0,0,114,16,0,0,0,218,7,109,111, - 100,117,108,101,115,41,3,114,144,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, - 51,1,0,0,208,4,0,0,115,4,0,0,0,12,1,16, - 1,114,10,0,0,0,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,70,0,0,0,41,8,114,137,0,0, - 0,114,51,1,0,0,114,52,1,0,0,114,53,1,0,0, - 114,49,1,0,0,114,165,0,0,0,114,203,0,0,0,114, - 50,1,0,0,41,3,114,144,0,0,0,90,11,112,97,114, - 101,110,116,95,112,97,116,104,114,211,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,212,4,0,0,115,16, - 0,0,0,12,2,10,1,14,1,18,3,6,1,8,1,6, - 1,6,1,114,10,0,0,0,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, - 70,0,0,0,41,2,218,4,105,116,101,114,114,58,1,0, - 0,114,22,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,225, - 4,0,0,243,2,0,0,0,12,1,114,10,0,0,0,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,70,0,0,0,169,1,114,58,1,0,0,41,2, - 114,144,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,228,4,0,0,114,62,1,0, - 0,114,10,0,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,70, - 0,0,0,41,1,114,50,1,0,0,41,3,114,144,0,0, - 0,114,64,1,0,0,114,66,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,231,4,0,0,115,2,0,0,0, - 14,1,114,10,0,0,0,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,59,1,0, - 0,114,70,0,0,0,41,2,114,4,0,0,0,114,58,1, - 0,0,114,22,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,234, - 4,0,0,114,62,1,0,0,114,10,0,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,90,0,0,0,114, - 50,1,0,0,114,22,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,237,4,0,0,114,62,1,0,0,114,10,0,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,70,0,0,0,114,63,1,0,0,169,2,114, - 144,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,240,4,0,0,114,62,1,0,0, - 114,10,0,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,70,0,0,0,41,2,114,50,1,0,0,114,62,0,0, - 0,114,70,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,62,0,0,0,243,4,0,0,243,2, - 0,0,0,16,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152, - 0,0,0,114,153,0,0,0,114,237,0,0,0,114,56,1, - 0,0,114,51,1,0,0,114,58,1,0,0,114,61,1,0, - 0,114,65,1,0,0,114,66,1,0,0,114,67,1,0,0, - 114,69,1,0,0,114,72,1,0,0,114,62,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,48,1,0,0,185,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,10,0,0,0, - 114,48,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, - 70,0,0,0,41,2,114,48,1,0,0,114,50,1,0,0, - 114,54,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,237,0,0,0,249,4,0,0,115,2,0, - 0,0,18,1,114,10,0,0,0,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,100,0,0,0,114,101,0,0,0,114,102,0, - 0,0,114,90,0,0,0,114,151,0,0,0,41,1,114,245, - 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,252, - 4,0,0,115,8,0,0,0,6,7,2,1,4,255,12,2, - 114,10,0,0,0,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,248,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,207, - 0,0,0,7,5,0,0,243,2,0,0,0,4,1,114,10, - 0,0,0,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,11,0,0,0,114,7,0,0,0,114,248,0,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 2,1,0,0,10,5,0,0,114,76,1,0,0,114,10,0, - 0,0,122,27,95,78,97,109,101,115,112,97,99,101,76,111, + 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,248,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,2,1,0, + 0,175,4,0,0,114,25,0,0,0,114,10,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, - 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,11,0,0,0,122,8,60,115,116,114,105,110,103,62,114, - 244,0,0,0,84,41,1,114,4,1,0,0,41,1,114,5, - 1,0,0,114,248,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,242,0,0,0,13,5,0,0, - 114,73,1,0,0,114,10,0,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, + 1,0,0,0,67,0,0,0,114,27,1,0,0,114,28,1, + 0,0,114,72,0,0,0,114,248,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,204,0,0,0, + 179,4,0,0,114,29,1,0,0,114,10,0,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,151,0,0,0,114,150,0,0,0,114,152,0, + 0,0,114,153,0,0,0,114,237,0,0,0,114,17,1,0, + 0,114,23,1,0,0,114,240,0,0,0,114,246,0,0,0, + 114,207,0,0,0,114,242,0,0,0,114,2,1,0,0,114, + 161,0,0,0,114,204,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,31,1, + 0,0,132,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,10,0,0,0,114,31,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,70,0,0,0,41,6,218,5,95,110,97,109,101, + 218,5,95,112,97,116,104,114,137,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,144,0,0,0,114,142,0,0,0,114,66,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,237,0,0, + 0,192,4,0,0,115,8,0,0,0,6,1,6,1,14,1, + 10,1,114,10,0,0,0,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,98,0,0,0,114,11,0,0,0, + 41,2,114,16,0,0,0,114,66,0,0,0,90,8,95,95, + 112,97,116,104,95,95,78,41,2,114,49,1,0,0,114,105, + 0,0,0,41,4,114,144,0,0,0,114,41,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, + 198,4,0,0,115,8,0,0,0,18,2,8,1,4,2,8, + 3,114,10,0,0,0,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,70,0,0,0,41,4,114, + 56,1,0,0,114,156,0,0,0,114,16,0,0,0,218,7, + 109,111,100,117,108,101,115,41,3,114,144,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,51,1,0,0,208,4,0,0,115,4,0,0,0,12, + 1,16,1,114,10,0,0,0,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,70,0,0,0,41,8,114,137, + 0,0,0,114,51,1,0,0,114,52,1,0,0,114,53,1, + 0,0,114,49,1,0,0,114,165,0,0,0,114,203,0,0, + 0,114,50,1,0,0,41,3,114,144,0,0,0,90,11,112, + 97,114,101,110,116,95,112,97,116,104,114,211,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,212,4,0,0, + 115,16,0,0,0,12,2,10,1,14,1,18,3,6,1,8, + 1,6,1,6,1,114,10,0,0,0,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,70,0,0,0,41,2,218,4,105,116,101,114,114,58, + 1,0,0,114,22,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,225,4,0,0,243,2,0,0,0,12,1,114,10,0,0, + 0,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,70,0,0,0,169,1,114,58,1,0,0, + 41,2,114,144,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,228,4,0,0,114,62, + 1,0,0,114,10,0,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,70,0,0,0,41,1,114,50,1,0,0,41,3,114,144, + 0,0,0,114,64,1,0,0,114,66,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,231,4,0,0,115,2,0, + 0,0,14,1,114,10,0,0,0,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,59, + 1,0,0,114,70,0,0,0,41,2,114,4,0,0,0,114, + 58,1,0,0,114,22,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,234,4,0,0,114,62,1,0,0,114,10,0,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,90,0,0, + 0,114,50,1,0,0,114,22,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,237,4,0,0,114,62,1,0,0,114,10,0, + 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,70,0,0,0,114,63,1,0,0,169, + 2,114,144,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,240,4,0,0,114,62,1, + 0,0,114,10,0,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,70,0,0,0,41,2,114,50,1,0,0,114,62, + 0,0,0,114,70,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,62,0,0,0,243,4,0,0, + 243,2,0,0,0,16,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0, + 114,152,0,0,0,114,153,0,0,0,114,237,0,0,0,114, + 56,1,0,0,114,51,1,0,0,114,58,1,0,0,114,61, + 1,0,0,114,65,1,0,0,114,66,1,0,0,114,67,1, + 0,0,114,69,1,0,0,114,72,1,0,0,114,62,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,48,1,0,0,185,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,10,0, + 0,0,114,48,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,70,0,0,0,41,2,114,48,1,0,0,114,50,1, + 0,0,114,54,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,237,0,0,0,249,4,0,0,115, + 2,0,0,0,18,1,114,10,0,0,0,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,100,0,0,0,114,101,0,0,0,114, + 102,0,0,0,114,90,0,0,0,114,151,0,0,0,41,1, + 114,245,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,252,4,0,0,115,8,0,0,0,6,7,2,1,4,255, + 12,2,114,10,0,0,0,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,114,238,0,0,0,114,7,0,0,0,114,239,0, + 0,0,0,41,2,78,84,114,7,0,0,0,114,248,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,207,0,0,0,7,5,0,0,243,2,0,0,0,4,1, + 114,10,0,0,0,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,11,0,0,0,114,7,0,0,0,114,248,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,240,0,0,0,16,5,0,0,114,241,0,0,0,114, - 10,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,70,0,0,0,114,7,0,0,0, - 114,43,1,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,246,0,0,0,19,5,0,0,114,76,1, - 0,0,114,10,0,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,160, - 0,0,0,114,174,0,0,0,114,50,1,0,0,114,247,0, - 0,0,114,248,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,249,0,0,0,22,5,0,0,115, - 8,0,0,0,6,7,4,1,4,255,12,3,114,10,0,0, - 0,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,33,1,0,0,114,77,1,0,0,114,50,1,0,0,41, - 3,114,144,0,0,0,114,245,0,0,0,114,77,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 34,1,0,0,34,5,0,0,115,4,0,0,0,12,1,10, - 1,114,10,0,0,0,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, - 151,0,0,0,114,150,0,0,0,114,152,0,0,0,114,237, - 0,0,0,114,234,0,0,0,114,75,1,0,0,114,207,0, - 0,0,114,2,1,0,0,114,242,0,0,0,114,240,0,0, - 0,114,246,0,0,0,114,249,0,0,0,114,34,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,74,1,0,0,248,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,10,0,0,0,114,74,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, - 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,154,0,0,0,114,79,1,0,0,41,2,114,142,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,79,1,0,0,45,5,0, - 0,115,14,0,0,0,22,4,8,1,10,1,10,1,8,1, - 2,128,4,252,114,10,0,0,0,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,78,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,18,125,1,9,0,124,1,124, - 0,131,1,2,0,1,0,83,0,35,0,4,0,116,5,121, - 38,1,0,1,0,1,0,89,0,113,17,37,0,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,100,0,0,0,114,101,0,0,0,114,163,0,0, - 0,114,143,0,0,0,41,2,114,66,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,55, - 5,0,0,115,22,0,0,0,16,3,12,1,10,1,2,1, - 12,1,2,128,12,1,4,1,2,128,4,2,2,253,115,12, - 0,0,0,148,3,26,2,154,7,35,9,166,1,35,9,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,21,9,0,116, - 0,160,1,161,0,125,1,110,11,35,0,4,0,116,2,121, - 51,1,0,1,0,1,0,89,0,100,2,83,0,37,0,9, - 0,116,3,106,4,124,1,25,0,125,2,124,2,83,0,35, - 0,4,0,116,5,121,50,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,37,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,11,0,0,0,78,41,7,114,19,0,0,0, - 114,83,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,81,1, - 0,0,218,8,75,101,121,69,114,114,111,114,114,85,1,0, - 0,41,3,114,222,0,0,0,114,66,0,0,0,114,83,1, + 0,114,2,1,0,0,10,5,0,0,114,76,1,0,0,114, + 10,0,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,11,0,0,0,122,8,60,115,116,114,105,110,103, + 62,114,244,0,0,0,84,41,1,114,4,1,0,0,41,1, + 114,5,1,0,0,114,248,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,242,0,0,0,13,5, + 0,0,114,73,1,0,0,114,10,0,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,238,0,0,0,114,7,0,0,0,114, + 239,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,240,0,0,0,16,5,0,0,114,241,0,0, + 0,114,10,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,70,0,0,0,114,7,0, + 0,0,114,43,1,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,246,0,0,0,19,5,0,0,114, + 76,1,0,0,114,10,0,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,160,0,0,0,114,174,0,0,0,114,50,1,0,0,114, + 247,0,0,0,114,248,0,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,249,0,0,0,22,5,0, + 0,115,8,0,0,0,6,7,4,1,4,255,12,3,114,10, + 0,0,0,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,33,1,0,0,114,77,1,0,0,114,50,1,0, + 0,41,3,114,144,0,0,0,114,245,0,0,0,114,77,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,68,5,0,0,115,36,0,0,0, - 8,8,2,1,10,1,2,128,12,1,6,3,2,128,2,1, - 10,1,4,4,2,128,12,253,10,1,12,1,4,1,2,128, - 2,253,2,250,115,24,0,0,0,133,4,10,0,138,7,20, - 7,150,5,29,0,157,17,49,7,178,1,49,7,179,1,20, - 7,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,162,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,154,0,0,0,114,160,0,0,0,90,12,95,111, - 98,106,101,99,116,95,110,97,109,101,114,100,0,0,0,114, - 101,0,0,0,114,163,0,0,0,114,162,0,0,0,114,230, - 0,0,0,114,225,0,0,0,114,208,0,0,0,114,203,0, - 0,0,41,7,114,222,0,0,0,114,164,0,0,0,114,83, - 1,0,0,114,167,0,0,0,114,165,0,0,0,114,166,0, - 0,0,114,211,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,90,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,114,10,0,0,0, - 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,227,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,186,0,0,0,114,110,0,0,0,218,5,98,121, - 116,101,115,114,88,1,0,0,114,154,0,0,0,114,227,0, - 0,0,114,89,1,0,0,114,165,0,0,0,114,203,0,0, - 0,114,143,0,0,0,114,192,0,0,0,114,160,0,0,0, - 114,208,0,0,0,41,9,114,222,0,0,0,114,164,0,0, - 0,114,66,0,0,0,114,226,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,83,1,0,0,114,211,0,0,0,114,166,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,111,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,114,10, - 0,0,0,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,66, - 0,0,0,114,92,1,0,0,114,165,0,0,0,114,203,0, - 0,0,114,206,0,0,0,114,48,1,0,0,41,6,114,222, - 0,0,0,114,164,0,0,0,114,66,0,0,0,114,226,0, - 0,0,114,211,0,0,0,114,91,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,227,0,0,0, - 143,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,114,10,0,0,0,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,228,0,0, - 0,114,229,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,230,0,0,0,167,5,0,0,115,14, - 0,0,0,6,8,2,2,4,254,12,3,8,1,4,1,6, - 1,114,10,0,0,0,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,93,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,145,0,0, - 0,114,146,0,0,0,114,93,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,94,1,0,0,183, - 5,0,0,115,4,0,0,0,12,10,16,1,114,10,0,0, - 0,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,70,0,0,0,114,231,0,0,0,41,14,114,151,0,0, - 0,114,150,0,0,0,114,152,0,0,0,114,153,0,0,0, - 114,234,0,0,0,114,79,1,0,0,114,85,1,0,0,114, - 235,0,0,0,114,88,1,0,0,114,89,1,0,0,114,92, - 1,0,0,114,227,0,0,0,114,230,0,0,0,114,94,1, + 0,114,34,1,0,0,34,5,0,0,115,4,0,0,0,12, + 1,10,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0, + 114,237,0,0,0,114,234,0,0,0,114,75,1,0,0,114, + 207,0,0,0,114,2,1,0,0,114,242,0,0,0,114,240, + 0,0,0,114,246,0,0,0,114,249,0,0,0,114,34,1, 0,0,114,7,0,0,0,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, - 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,10,0,0,0,114,78,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,70,0,0,0,114,7,0, - 0,0,114,44,1,0,0,169,1,114,165,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,9,0,0,0,212,5,0, - 0,115,4,0,0,0,6,128,18,0,114,10,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,98,0,0,0,114,131,0,0, - 0,78,41,11,114,192,0,0,0,218,8,95,108,111,97,100, - 101,114,115,114,66,0,0,0,114,87,0,0,0,114,68,0, - 0,0,114,19,0,0,0,114,83,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,144,0,0,0,114,66,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,213,0,0,0,114,7,0,0,0,114, - 96,1,0,0,114,8,0,0,0,114,237,0,0,0,206,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,114,10,0,0,0, - 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,131,0,0,0,78,41,1,114,98,1,0,0,114,22,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,79,1,0,0,222,5,0,0,114,82,0,0,0,114, - 10,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,100,0,0,0,114,101, - 0,0,0,114,102,0,0,0,114,227,0,0,0,114,165,0, - 0,0,114,203,0,0,0,41,3,114,144,0,0,0,114,164, - 0,0,0,114,211,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,162,0,0,0,228,5,0,0, - 115,14,0,0,0,6,7,2,2,4,254,10,3,8,1,8, - 1,16,1,114,10,0,0,0,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,202,0,0,0, - 41,1,114,214,0,0,0,41,7,114,144,0,0,0,114,212, - 0,0,0,114,164,0,0,0,114,66,0,0,0,90,4,115, - 109,115,108,114,226,0,0,0,114,165,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,92,1,0, - 0,243,5,0,0,115,8,0,0,0,10,1,8,1,2,1, - 6,255,114,10,0,0,0,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,9,0, - 116,1,124,0,106,2,112,17,116,3,160,4,161,0,131,1, - 106,5,125,5,110,12,35,0,4,0,116,6,121,190,1,0, - 1,0,1,0,100,4,125,5,89,0,110,1,37,0,124,5, - 124,0,106,7,107,3,114,45,124,0,160,8,161,0,1,0, - 124,5,124,0,95,7,116,9,131,0,114,56,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,108,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,103,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,74,116,17,124,8, - 131,1,125,3,124,0,106,14,68,0,93,55,92,2,125,9, - 125,10,9,0,116,13,124,0,106,2,124,4,124,9,23,0, - 131,2,125,12,110,12,35,0,4,0,116,18,121,189,1,0, - 1,0,1,0,89,0,1,0,100,6,83,0,37,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,166,116,15,124,12,131,1, - 114,166,124,0,160,16,124,10,124,1,124,12,100,6,124,2, - 161,5,2,0,1,0,83,0,113,111,124,3,114,187,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, + 0,114,8,0,0,0,114,74,1,0,0,248,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,10,0,0,0,114, + 74,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,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,154,0,0,0,114,79,1,0,0,41,2,114,142, + 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,79,1,0,0,45, + 5,0,0,115,14,0,0,0,22,4,8,1,10,1,10,1, + 8,1,2,128,4,252,114,10,0,0,0,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,78,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,18,125,1,9,0,124, + 1,124,0,131,1,2,0,1,0,83,0,35,0,4,0,116, + 5,121,38,1,0,1,0,1,0,89,0,113,17,37,0,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,100,0,0,0,114,101,0,0,0,114,163, + 0,0,0,114,143,0,0,0,41,2,114,66,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,55,5,0,0,115,22,0,0,0,16,3,12,1,10,1, + 2,1,12,1,2,128,12,1,4,1,2,128,4,2,2,253, + 115,12,0,0,0,148,3,26,2,154,7,35,9,166,1,35, + 9,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,21,9, + 0,116,0,160,1,161,0,125,1,110,11,35,0,4,0,116, + 2,121,51,1,0,1,0,1,0,89,0,100,2,83,0,37, + 0,9,0,116,3,106,4,124,1,25,0,125,2,124,2,83, + 0,35,0,4,0,116,5,121,50,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,37,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,11,0,0,0,78,41,7,114,19,0, + 0,0,114,83,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, + 81,1,0,0,218,8,75,101,121,69,114,114,111,114,114,85, + 1,0,0,41,3,114,222,0,0,0,114,66,0,0,0,114, + 83,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,68,5,0,0,115,36,0, + 0,0,8,8,2,1,10,1,2,128,12,1,6,3,2,128, + 2,1,10,1,4,4,2,128,12,253,10,1,12,1,4,1, + 2,128,2,253,2,250,115,24,0,0,0,133,4,10,0,138, + 7,20,7,150,5,29,0,157,17,49,7,178,1,49,7,179, + 1,20,7,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, + 162,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,154,0,0,0,114,160,0,0,0,90,12, + 95,111,98,106,101,99,116,95,110,97,109,101,114,100,0,0, + 0,114,101,0,0,0,114,163,0,0,0,114,162,0,0,0, + 114,230,0,0,0,114,225,0,0,0,114,208,0,0,0,114, + 203,0,0,0,41,7,114,222,0,0,0,114,164,0,0,0, + 114,83,1,0,0,114,167,0,0,0,114,165,0,0,0,114, + 166,0,0,0,114,211,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,90,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,114,10,0, + 0,0,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,227,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,186,0,0,0,114,110,0,0,0,218,5, + 98,121,116,101,115,114,88,1,0,0,114,154,0,0,0,114, + 227,0,0,0,114,89,1,0,0,114,165,0,0,0,114,203, + 0,0,0,114,143,0,0,0,114,192,0,0,0,114,160,0, + 0,0,114,208,0,0,0,41,9,114,222,0,0,0,114,164, + 0,0,0,114,66,0,0,0,114,226,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,83,1,0,0,114,211,0,0,0,114,166, + 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,111,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, + 114,10,0,0,0,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,66,0,0,0,114,92,1,0,0,114,165,0,0,0,114, + 203,0,0,0,114,206,0,0,0,114,48,1,0,0,41,6, + 114,222,0,0,0,114,164,0,0,0,114,66,0,0,0,114, + 226,0,0,0,114,211,0,0,0,114,91,1,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,227,0, + 0,0,143,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,114,10,0,0,0,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,228, + 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,230,0,0,0,167,5,0,0, + 115,14,0,0,0,6,8,2,2,4,254,12,3,8,1,4, + 1,6,1,114,10,0,0,0,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,93,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,145, + 0,0,0,114,146,0,0,0,114,93,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,94,1,0, + 0,183,5,0,0,115,4,0,0,0,12,10,16,1,114,10, + 0,0,0,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,70,0,0,0,114,231,0,0,0,41,14,114,151, + 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, + 0,0,114,234,0,0,0,114,79,1,0,0,114,85,1,0, + 0,114,235,0,0,0,114,88,1,0,0,114,89,1,0,0, + 114,92,1,0,0,114,227,0,0,0,114,230,0,0,0,114, + 94,1,0,0,114,7,0,0,0,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,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,10,0,0,0,114, + 78,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,70,0,0,0,114, + 7,0,0,0,114,44,1,0,0,169,1,114,165,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,212, + 5,0,0,115,4,0,0,0,6,128,18,0,114,10,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,98,0,0,0,114,131, + 0,0,0,78,41,11,114,192,0,0,0,218,8,95,108,111, + 97,100,101,114,115,114,66,0,0,0,114,87,0,0,0,114, + 68,0,0,0,114,19,0,0,0,114,83,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,144,0,0,0,114,66,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,213,0,0,0,114,7,0,0, + 0,114,96,1,0,0,114,8,0,0,0,114,237,0,0,0, + 206,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,114,10,0, + 0,0,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,131,0,0,0,78,41,1,114,98,1,0,0,114, + 22,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, + 0,0,0,114,79,1,0,0,222,5,0,0,114,82,0,0, + 0,114,10,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,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,98, - 0,0,0,114,45,0,0,0,114,131,0,0,0,114,237,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,105,0,0,0,114,76,0, - 0,0,114,66,0,0,0,114,19,0,0,0,114,83,0,0, - 0,114,36,1,0,0,114,77,0,0,0,114,98,1,0,0, - 218,11,95,102,105,108,108,95,99,97,99,104,101,114,22,0, - 0,0,114,101,1,0,0,114,132,0,0,0,114,100,1,0, - 0,114,68,0,0,0,114,97,1,0,0,114,81,0,0,0, - 114,92,1,0,0,114,84,0,0,0,114,112,0,0,0,114, - 160,0,0,0,114,174,0,0,0,114,208,0,0,0,114,203, - 0,0,0,41,14,114,144,0,0,0,114,164,0,0,0,114, - 226,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, - 194,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,45,1,0,0,114,212,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,211,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,227,0,0, - 0,248,5,0,0,115,94,0,0,0,4,5,14,1,2,1, - 22,1,2,128,12,1,8,1,2,128,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, - 18,1,2,128,12,1,8,1,2,128,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,115,31,0,0,0,138,10,21, - 0,149,9,32,7,193,52,8,65,61,2,193,61,7,66,8, - 9,194,61,1,66,8,9,194,62,1,32,7,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,194,0,0,0, - 124,0,106,0,125,1,9,0,116,1,160,2,124,1,112,11, - 116,1,160,3,161,0,161,1,125,2,110,15,35,0,4,0, - 116,4,116,5,116,6,102,3,121,96,1,0,1,0,1,0, - 103,0,125,2,89,0,110,1,37,0,116,7,106,8,160,9, - 100,1,161,1,115,41,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,67,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,46,124,3,124,0,95,11,116,7,106,8, - 160,9,116,16,161,1,114,94,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, - 98,0,0,0,114,89,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,132,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,14,0,0,0,72,6,0,0,115,2,0,0,0,20, - 0,114,10,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,66,0,0,0,114,19,0,0,0,90,7, - 108,105,115,116,100,105,114,114,83,0,0,0,114,86,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,99,1,0,0,114,100,1,0,0,114, - 127,0,0,0,114,90,0,0,0,114,132,0,0,0,218,3, - 97,100,100,114,28,0,0,0,114,101,1,0,0,41,9,114, - 144,0,0,0,114,66,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,71,1,0,0,114, - 142,0,0,0,114,55,1,0,0,114,45,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,103,1,0,0,43,6,0,0, - 115,42,0,0,0,6,2,2,1,20,1,2,128,18,1,8, - 3,2,128,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,115, - 13,0,0,0,132,9,14,0,142,12,28,7,193,32,1,28, - 7,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,72,0,0,0,78,41,2,114, - 84,0,0,0,114,143,0,0,0,114,72,0,0,0,169,2, - 114,222,0,0,0,114,102,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,84,6, - 0,0,115,6,0,0,0,8,2,12,1,16,1,114,10,0, - 0,0,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,222,0,0,0,114,102,1,0,0,114,108,1,0, - 0,114,7,0,0,0,114,107,1,0,0,114,8,0,0,0, - 218,9,112,97,116,104,95,104,111,111,107,74,6,0,0,115, - 4,0,0,0,14,10,4,6,114,10,0,0,0,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,68,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,90,0,0,0,114,66,0, - 0,0,114,22,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,69,1,0,0,92,6,0,0,114, - 62,1,0,0,114,10,0,0,0,122,19,70,105,108,101,70, - 105,110,100,101,114,46,95,95,114,101,112,114,95,95,114,70, - 0,0,0,41,15,114,151,0,0,0,114,150,0,0,0,114, - 152,0,0,0,114,153,0,0,0,114,237,0,0,0,114,79, - 1,0,0,114,168,0,0,0,114,230,0,0,0,114,162,0, - 0,0,114,92,1,0,0,114,227,0,0,0,114,103,1,0, - 0,114,235,0,0,0,114,109,1,0,0,114,69,1,0,0, - 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,95,1,0,0,197,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,10,0,0,0,114, - 95,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,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,9,0,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,100,0,83,0,35,0,4,0, - 116,5,121,72,1,0,1,0,1,0,89,0,100,0,83,0, - 37,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,96,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, - 165,0,0,0,114,42,1,0,0,114,35,1,0,0,114,214, - 0,0,0,218,9,69,120,99,101,112,116,105,111,110,41,6, - 90,2,110,115,114,142,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,165, - 0,0,0,114,211,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,98,6,0,0,115,40,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,12,1,2,128, - 12,1,6,2,2,128,2,254,115,15,0,0,0,171,16,61, - 0,189,7,65,7,7,193,8,1,65,7,7,114,114,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,31,1,0,0, - 114,188,0,0,0,218,18,101,120,116,101,110,115,105,111,110, - 95,115,117,102,102,105,120,101,115,114,35,1,0,0,114,128, - 0,0,0,114,42,1,0,0,114,114,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,209,0,0, - 0,121,6,0,0,115,8,0,0,0,12,5,8,1,8,1, - 10,1,114,10,0,0,0,114,209,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,70,0,0,0,41,1,114,160,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,132,6,0,0,115,2,0, - 0,0,8,2,114,10,0,0,0,114,117,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,117, - 1,0,0,114,209,0,0,0,114,16,0,0,0,114,84,1, - 0,0,114,192,0,0,0,114,95,1,0,0,114,109,1,0, - 0,218,9,109,101,116,97,95,112,97,116,104,114,62,0,0, - 0,114,78,1,0,0,41,2,114,116,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,137,6,0,0,115,8,0, - 0,0,8,2,6,1,20,1,16,1,114,10,0,0,0,114, - 119,1,0,0,41,1,114,88,0,0,0,114,70,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,153,0,0,0,114,160,0,0,0, - 114,188,0,0,0,114,92,0,0,0,114,16,0,0,0,114, - 100,0,0,0,114,185,0,0,0,114,26,0,0,0,114,232, - 0,0,0,90,2,110,116,114,19,0,0,0,114,216,0,0, - 0,90,5,112,111,115,105,120,114,51,0,0,0,218,3,97, - 108,108,114,60,0,0,0,114,137,0,0,0,114,58,0,0, - 0,114,63,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,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,68,0,0,0,114,75,0,0,0, - 114,76,0,0,0,114,80,0,0,0,114,81,0,0,0,114, - 84,0,0,0,114,87,0,0,0,114,96,0,0,0,218,4, - 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,187, - 0,0,0,114,35,0,0,0,114,173,0,0,0,114,34,0, - 0,0,114,40,0,0,0,114,9,1,0,0,114,117,0,0, - 0,114,113,0,0,0,114,128,0,0,0,114,62,0,0,0, - 114,115,1,0,0,114,233,0,0,0,114,114,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,122,0,0,0,114,129,0,0,0,114, - 136,0,0,0,114,138,0,0,0,114,140,0,0,0,114,161, - 0,0,0,114,168,0,0,0,114,177,0,0,0,114,181,0, - 0,0,114,183,0,0,0,114,190,0,0,0,114,195,0,0, - 0,114,196,0,0,0,114,201,0,0,0,218,6,111,98,106, - 101,99,116,114,210,0,0,0,114,214,0,0,0,114,215,0, - 0,0,114,236,0,0,0,114,250,0,0,0,114,12,1,0, - 0,114,35,1,0,0,114,42,1,0,0,114,31,1,0,0, - 114,48,1,0,0,114,74,1,0,0,114,78,1,0,0,114, - 95,1,0,0,114,114,1,0,0,114,209,0,0,0,114,117, - 1,0,0,114,119,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,31,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,114,10,0,0,0, + 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,100,0,0,0, + 114,101,0,0,0,114,102,0,0,0,114,227,0,0,0,114, + 165,0,0,0,114,203,0,0,0,41,3,114,144,0,0,0, + 114,164,0,0,0,114,211,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,162,0,0,0,228,5, + 0,0,115,14,0,0,0,6,7,2,2,4,254,10,3,8, + 1,8,1,16,1,114,10,0,0,0,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,202,0, + 0,0,41,1,114,214,0,0,0,41,7,114,144,0,0,0, + 114,212,0,0,0,114,164,0,0,0,114,66,0,0,0,90, + 4,115,109,115,108,114,226,0,0,0,114,165,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,92, + 1,0,0,243,5,0,0,115,8,0,0,0,10,1,8,1, + 2,1,6,255,114,10,0,0,0,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, + 9,0,116,1,124,0,106,2,112,17,116,3,160,4,161,0, + 131,1,106,5,125,5,110,12,35,0,4,0,116,6,121,190, + 1,0,1,0,1,0,100,4,125,5,89,0,110,1,37,0, + 124,5,124,0,106,7,107,3,114,45,124,0,160,8,161,0, + 1,0,124,5,124,0,95,7,116,9,131,0,114,56,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,108, + 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,103,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,74,116,17, + 124,8,131,1,125,3,124,0,106,14,68,0,93,55,92,2, + 125,9,125,10,9,0,116,13,124,0,106,2,124,4,124,9, + 23,0,131,2,125,12,110,12,35,0,4,0,116,18,121,189, + 1,0,1,0,1,0,89,0,1,0,100,6,83,0,37,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,166,116,15,124,12, + 131,1,114,166,124,0,160,16,124,10,124,1,124,12,100,6, + 124,2,161,5,2,0,1,0,83,0,113,111,124,3,114,187, + 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,98,0,0,0,114,45,0,0,0,114,131,0,0,0,114, + 237,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,105,0,0,0,114, + 76,0,0,0,114,66,0,0,0,114,19,0,0,0,114,83, + 0,0,0,114,36,1,0,0,114,77,0,0,0,114,98,1, + 0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,114, + 22,0,0,0,114,101,1,0,0,114,132,0,0,0,114,100, + 1,0,0,114,68,0,0,0,114,97,1,0,0,114,81,0, + 0,0,114,92,1,0,0,114,84,0,0,0,114,112,0,0, + 0,114,160,0,0,0,114,174,0,0,0,114,208,0,0,0, + 114,203,0,0,0,41,14,114,144,0,0,0,114,164,0,0, + 0,114,226,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,194,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,45,1,0,0,114,212,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,211,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,227, + 0,0,0,248,5,0,0,115,94,0,0,0,4,5,14,1, + 2,1,22,1,2,128,12,1,8,1,2,128,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,18,1,2,128,12,1,8,1,2,128,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,115,31,0,0,0,138, + 10,21,0,149,9,32,7,193,52,8,65,61,2,193,61,7, + 66,8,9,194,61,1,66,8,9,194,62,1,32,7,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,194,0, + 0,0,124,0,106,0,125,1,9,0,116,1,160,2,124,1, + 112,11,116,1,160,3,161,0,161,1,125,2,110,15,35,0, + 4,0,116,4,116,5,116,6,102,3,121,96,1,0,1,0, + 1,0,103,0,125,2,89,0,110,1,37,0,116,7,106,8, + 160,9,100,1,161,1,115,41,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,67,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,46,124,3,124,0,95,11,116,7, + 106,8,160,9,116,16,161,1,114,94,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,98,0,0,0,114,89,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,132,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,14,0,0,0,72,6,0,0,115,2,0,0, + 0,20,0,114,10,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,66,0,0,0,114,19,0,0,0, + 90,7,108,105,115,116,100,105,114,114,83,0,0,0,114,86, + 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,99,1,0,0,114,100,1,0, + 0,114,127,0,0,0,114,90,0,0,0,114,132,0,0,0, + 218,3,97,100,100,114,28,0,0,0,114,101,1,0,0,41, + 9,114,144,0,0,0,114,66,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,71,1,0, + 0,114,142,0,0,0,114,55,1,0,0,114,45,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,103,1,0,0,43,6, + 0,0,115,42,0,0,0,6,2,2,1,20,1,2,128,18, + 1,8,3,2,128,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,115,13,0,0,0,132,9,14,0,142,12,28,7,193,32, + 1,28,7,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,72,0,0,0,78,41, + 2,114,84,0,0,0,114,143,0,0,0,114,72,0,0,0, + 169,2,114,222,0,0,0,114,102,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, + 84,6,0,0,115,6,0,0,0,8,2,12,1,16,1,114, + 10,0,0,0,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,222,0,0,0,114,102,1,0,0,114,108, + 1,0,0,114,7,0,0,0,114,107,1,0,0,114,8,0, + 0,0,218,9,112,97,116,104,95,104,111,111,107,74,6,0, + 0,115,4,0,0,0,14,10,4,6,114,10,0,0,0,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,68, + 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,90,0,0,0,114, + 66,0,0,0,114,22,1,0,0,114,7,0,0,0,114,7, + 0,0,0,114,8,0,0,0,114,69,1,0,0,92,6,0, + 0,114,62,1,0,0,114,10,0,0,0,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, + 114,70,0,0,0,41,15,114,151,0,0,0,114,150,0,0, + 0,114,152,0,0,0,114,153,0,0,0,114,237,0,0,0, + 114,79,1,0,0,114,168,0,0,0,114,230,0,0,0,114, + 162,0,0,0,114,92,1,0,0,114,227,0,0,0,114,103, + 1,0,0,114,235,0,0,0,114,109,1,0,0,114,69,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,95,1,0,0,197,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,10,0,0, + 0,114,95,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,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,9,0,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,100,0,83,0,35,0, + 4,0,116,5,121,72,1,0,1,0,1,0,89,0,100,0, + 83,0,37,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, + 96,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,165,0,0,0,114,42,1,0,0,114,35,1,0,0, + 114,214,0,0,0,218,9,69,120,99,101,112,116,105,111,110, + 41,6,90,2,110,115,114,142,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,165,0,0,0,114,211,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,98,6,0,0,115,40,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,12,1, + 2,128,12,1,6,2,2,128,2,254,115,15,0,0,0,171, + 16,61,0,189,7,65,7,7,193,8,1,65,7,7,114,114, + 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,31,1, + 0,0,114,188,0,0,0,218,18,101,120,116,101,110,115,105, + 111,110,95,115,117,102,102,105,120,101,115,114,35,1,0,0, + 114,128,0,0,0,114,42,1,0,0,114,114,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,209, + 0,0,0,121,6,0,0,115,8,0,0,0,12,5,8,1, + 8,1,10,1,114,10,0,0,0,114,209,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,70,0,0,0,41,1,114,160,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,132,6,0,0,115, + 2,0,0,0,8,2,114,10,0,0,0,114,117,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,117,1,0,0,114,209,0,0,0,114,16,0,0,0,114, + 84,1,0,0,114,192,0,0,0,114,95,1,0,0,114,109, + 1,0,0,218,9,109,101,116,97,95,112,97,116,104,114,62, + 0,0,0,114,78,1,0,0,41,2,114,116,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,137,6,0,0,115, + 8,0,0,0,8,2,6,1,20,1,16,1,114,10,0,0, + 0,114,119,1,0,0,41,1,114,88,0,0,0,114,70,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,153,0,0,0,114,160,0, + 0,0,114,188,0,0,0,114,92,0,0,0,114,16,0,0, + 0,114,100,0,0,0,114,185,0,0,0,114,26,0,0,0, + 114,232,0,0,0,90,2,110,116,114,19,0,0,0,114,216, + 0,0,0,90,5,112,111,115,105,120,114,51,0,0,0,218, + 3,97,108,108,114,60,0,0,0,114,137,0,0,0,114,58, + 0,0,0,114,63,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,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,68,0,0,0,114,75,0, + 0,0,114,76,0,0,0,114,80,0,0,0,114,81,0,0, + 0,114,84,0,0,0,114,87,0,0,0,114,96,0,0,0, + 218,4,116,121,112,101,218,8,95,95,99,111,100,101,95,95, + 114,187,0,0,0,114,35,0,0,0,114,173,0,0,0,114, + 34,0,0,0,114,40,0,0,0,114,9,1,0,0,114,117, + 0,0,0,114,113,0,0,0,114,128,0,0,0,114,62,0, + 0,0,114,115,1,0,0,114,233,0,0,0,114,114,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,122,0,0,0,114,129,0,0, + 0,114,136,0,0,0,114,138,0,0,0,114,140,0,0,0, + 114,161,0,0,0,114,168,0,0,0,114,177,0,0,0,114, + 181,0,0,0,114,183,0,0,0,114,190,0,0,0,114,195, + 0,0,0,114,196,0,0,0,114,201,0,0,0,218,6,111, + 98,106,101,99,116,114,210,0,0,0,114,214,0,0,0,114, + 215,0,0,0,114,236,0,0,0,114,250,0,0,0,114,12, + 1,0,0,114,35,1,0,0,114,42,1,0,0,114,31,1, + 0,0,114,48,1,0,0,114,74,1,0,0,114,78,1,0, + 0,114,95,1,0,0,114,114,1,0,0,114,209,0,0,0, + 114,117,1,0,0,114,119,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,31,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,114,10,0,0,0, }; From webhook-mailer at python.org Sat May 8 19:32:22 2021 From: webhook-mailer at python.org (isidentical) Date: Sat, 08 May 2021 23:32:22 -0000 Subject: [Python-checkins] bpo-43417: Better buffer handling for ast.unparse (GH-24772) Message-ID: https://github.com/python/cpython/commit/3d98ececda1335c7ed2a6c6a2b0d3bb46f2d3c55 commit: 3d98ececda1335c7ed2a6c6a2b0d3bb46f2d3c55 branch: main author: Batuhan Taskaya committer: isidentical date: 2021-05-09T02:32:04+03:00 summary: bpo-43417: Better buffer handling for ast.unparse (GH-24772) files: M Lib/ast.py M Lib/test/test_unparse.py diff --git a/Lib/ast.py b/Lib/ast.py index 66bcee8a252a0..18163d6b7bd16 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -678,7 +678,6 @@ class _Unparser(NodeVisitor): def __init__(self, *, _avoid_backslashes=False): self._source = [] - self._buffer = [] self._precedences = {} self._type_ignores = {} self._indent = 0 @@ -721,14 +720,15 @@ def write(self, text): """Append a piece of text""" self._source.append(text) - def buffer_writer(self, text): - self._buffer.append(text) + @contextmanager + def buffered(self, buffer = None): + if buffer is None: + buffer = [] - @property - def buffer(self): - value = "".join(self._buffer) - self._buffer.clear() - return value + original_source = self._source + self._source = buffer + yield buffer + self._source = original_source @contextmanager def block(self, *, extra = None): @@ -1127,9 +1127,9 @@ def _write_str_avoiding_backslashes(self, string, *, quote_types=_ALL_QUOTES): def visit_JoinedStr(self, node): self.write("f") if self._avoid_backslashes: - self._fstring_JoinedStr(node, self.buffer_writer) - self._write_str_avoiding_backslashes(self.buffer) - return + with self.buffered() as buffer: + self._write_fstring_inner(node) + return self._write_str_avoiding_backslashes("".join(buffer)) # If we don't need to avoid backslashes globally (i.e., we only need # to avoid them inside FormattedValues), it's cosmetically preferred @@ -1137,60 +1137,62 @@ def visit_JoinedStr(self, node): # for cases like: f"{x}\n". To accomplish this, we keep track of what # in our buffer corresponds to FormattedValues and what corresponds to # Constant parts of the f-string, and allow escapes accordingly. - buffer = [] + fstring_parts = [] for value in node.values: - meth = getattr(self, "_fstring_" + type(value).__name__) - meth(value, self.buffer_writer) - buffer.append((self.buffer, isinstance(value, Constant))) - new_buffer = [] - quote_types = _ALL_QUOTES - for value, is_constant in buffer: - # Repeatedly narrow down the list of possible quote_types + with self.buffered() as buffer: + self._write_fstring_inner(value) + fstring_parts.append( + ("".join(buffer), isinstance(value, Constant)) + ) + + new_fstring_parts = [] + quote_types = list(_ALL_QUOTES) + for value, is_constant in fstring_parts: value, quote_types = self._str_literal_helper( - value, quote_types=quote_types, - escape_special_whitespace=is_constant + value, + quote_types=quote_types, + escape_special_whitespace=is_constant, ) - new_buffer.append(value) - value = "".join(new_buffer) + new_fstring_parts.append(value) + + value = "".join(new_fstring_parts) quote_type = quote_types[0] self.write(f"{quote_type}{value}{quote_type}") + def _write_fstring_inner(self, node): + if isinstance(node, JoinedStr): + # for both the f-string itself, and format_spec + for value in node.values: + self._write_fstring_inner(value) + elif isinstance(node, Constant) and isinstance(node.value, str): + value = node.value.replace("{", "{{").replace("}", "}}") + self.write(value) + elif isinstance(node, FormattedValue): + self.visit_FormattedValue(node) + else: + raise ValueError(f"Unexpected node inside JoinedStr, {node!r}") + def visit_FormattedValue(self, node): - self.write("f") - self._fstring_FormattedValue(node, self.buffer_writer) - self._write_str_avoiding_backslashes(self.buffer) + def unparse_inner(inner): + unparser = type(self)(_avoid_backslashes=True) + unparser.set_precedence(_Precedence.TEST.next(), inner) + return unparser.visit(inner) - def _fstring_JoinedStr(self, node, write): - for value in node.values: - meth = getattr(self, "_fstring_" + type(value).__name__) - meth(value, write) - - def _fstring_Constant(self, node, write): - if not isinstance(node.value, str): - raise ValueError("Constants inside JoinedStr should be a string.") - value = node.value.replace("{", "{{").replace("}", "}}") - write(value) - - def _fstring_FormattedValue(self, node, write): - write("{") - unparser = type(self)(_avoid_backslashes=True) - unparser.set_precedence(_Precedence.TEST.next(), node.value) - expr = unparser.visit(node.value) - if expr.startswith("{"): - write(" ") # Separate pair of opening brackets as "{ {" - if "\\" in expr: - raise ValueError("Unable to avoid backslash in f-string expression part") - write(expr) - if node.conversion != -1: - conversion = chr(node.conversion) - if conversion not in "sra": - raise ValueError("Unknown f-string conversion.") - write(f"!{conversion}") - if node.format_spec: - write(":") - meth = getattr(self, "_fstring_" + type(node.format_spec).__name__) - meth(node.format_spec, write) - write("}") + with self.delimit("{", "}"): + expr = unparse_inner(node.value) + if "\\" in expr: + raise ValueError( + "Unable to avoid backslash in f-string expression part" + ) + if expr.startswith("{"): + # Separate pair of opening brackets as "{ {" + self.write(" ") + self.write(expr) + if node.conversion != -1: + self.write(f"!{chr(node.conversion)}") + if node.format_spec: + self.write(":") + self._write_fstring_inner(node.format_spec) def visit_Name(self, node): self.write(node.id) diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index 9f67b49f3a6b2..534431bc96983 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -149,6 +149,27 @@ class UnparseTestCase(ASTTestCase): # Tests for specific bugs found in earlier versions of unparse def test_fstrings(self): + self.check_ast_roundtrip("f'a'") + self.check_ast_roundtrip("f'{{}}'") + self.check_ast_roundtrip("f'{{5}}'") + self.check_ast_roundtrip("f'{{5}}5'") + self.check_ast_roundtrip("f'X{{}}X'") + self.check_ast_roundtrip("f'{a}'") + self.check_ast_roundtrip("f'{ {1:2}}'") + self.check_ast_roundtrip("f'a{a}a'") + self.check_ast_roundtrip("f'a{a}{a}a'") + self.check_ast_roundtrip("f'a{a}a{a}a'") + self.check_ast_roundtrip("f'{a!r}x{a!s}12{{}}{a!a}'") + self.check_ast_roundtrip("f'{a:10}'") + self.check_ast_roundtrip("f'{a:100_000{10}}'") + self.check_ast_roundtrip("f'{a!r:10}'") + self.check_ast_roundtrip("f'{a:a{b}10}'") + self.check_ast_roundtrip( + "f'a{b}{c!s}{d!r}{e!a}{f:a}{g:a{b}}{h!s:a}" + "{j!s:{a}b}{k!s:a{b}c}{l!a:{b}c{d}}{x+y=}'" + ) + + def test_fstrings_special_chars(self): # See issue 25180 self.check_ast_roundtrip(r"""f'{f"{0}"*3}'""") self.check_ast_roundtrip(r"""f'{f"{y}"*3}'""") @@ -323,15 +344,13 @@ def test_slices(self): def test_invalid_raise(self): self.check_invalid(ast.Raise(exc=None, cause=ast.Name(id="X"))) - def test_invalid_fstring_constant(self): - self.check_invalid(ast.JoinedStr(values=[ast.Constant(value=100)])) - - def test_invalid_fstring_conversion(self): + def test_invalid_fstring_value(self): self.check_invalid( - ast.FormattedValue( - value=ast.Constant(value="a", kind=None), - conversion=ord("Y"), # random character - format_spec=None, + ast.JoinedStr( + values=[ + ast.Name(id="test"), + ast.Constant(value="test") + ] ) ) From webhook-mailer at python.org Sat May 8 22:20:09 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sun, 09 May 2021 02:20:09 -0000 Subject: [Python-checkins] Fix a word in dataclasses docs. (GH-26003) Message-ID: https://github.com/python/cpython/commit/801497a1152504f3181b495c0271bb9ff99df3d1 commit: 801497a1152504f3181b495c0271bb9ff99df3d1 branch: main author: Eric V. Smith committer: ericvsmith date: 2021-05-08T22:20:04-04:00 summary: Fix a word in dataclasses docs. (GH-26003) files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index f06763f94fd396..bfba15e96dce28 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -308,7 +308,7 @@ Module contents - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``, ``compare``, ``metadata``, and ``kw_only`` have the identical - meaning and values as they do in the :func:`field` declaration. + meaning and values as they do in the :func:`field` function. Other attributes may exist, but they are private and must not be inspected or relied on. From webhook-mailer at python.org Sat May 8 22:22:58 2021 From: webhook-mailer at python.org (ericvsmith) Date: Sun, 09 May 2021 02:22:58 -0000 Subject: [Python-checkins] Fix a word in dataclasses docs. (GH-26003) (GH-26004) Message-ID: https://github.com/python/cpython/commit/70ff820046e62fca3bcb165f533b50d65e054153 commit: 70ff820046e62fca3bcb165f533b50d65e054153 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-08T22:22:48-04:00 summary: Fix a word in dataclasses docs. (GH-26003) (GH-26004) (cherry picked from commit 801497a1152504f3181b495c0271bb9ff99df3d1) Co-authored-by: Eric V. Smith Co-authored-by: Eric V. Smith files: M Doc/library/dataclasses.rst diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index f06763f94fd396..bfba15e96dce28 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -308,7 +308,7 @@ Module contents - ``default``, ``default_factory``, ``init``, ``repr``, ``hash``, ``compare``, ``metadata``, and ``kw_only`` have the identical - meaning and values as they do in the :func:`field` declaration. + meaning and values as they do in the :func:`field` function. Other attributes may exist, but they are private and must not be inspected or relied on. From webhook-mailer at python.org Sun May 9 02:58:44 2021 From: webhook-mailer at python.org (zware) Date: Sun, 09 May 2021 06:58:44 -0000 Subject: [Python-checkins] Revert test for Tix deprecation warning (GH-26005) Message-ID: https://github.com/python/cpython/commit/8e8307d70bb9dc18cfeeed3277c076309b27515e commit: 8e8307d70bb9dc18cfeeed3277c076309b27515e branch: main author: Zachary Ware committer: zware date: 2021-05-09T01:58:35-05:00 summary: Revert test for Tix deprecation warning (GH-26005) Added in bpo-41730 (GH-22186), the test apparently causes refleaks. The test isn't worth hunting them down, so it's simply reverted. This partially reverts commit 4a2d98a1e98de25c5114d11fcb0f9fedbb057e51. files: M Lib/test/test_tix.py diff --git a/Lib/test/test_tix.py b/Lib/test/test_tix.py index a2fb357fd0c50..8a60c7c8e1fbd 100644 --- a/Lib/test/test_tix.py +++ b/Lib/test/test_tix.py @@ -26,12 +26,9 @@ def setUp(self): else: self.addCleanup(self.root.destroy) - def test_tix_deprecation(self): - with self.assertWarns(DeprecationWarning): - import_helper.import_fresh_module( - 'tkinter.tix', - fresh=('tkinter.tix',), - ) + def test_tix_available(self): + # this test is just here to make setUp run + pass if __name__ == '__main__': From webhook-mailer at python.org Sun May 9 03:19:50 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 09 May 2021 07:19:50 -0000 Subject: [Python-checkins] Revert test for Tix deprecation warning (GH-26005) Message-ID: https://github.com/python/cpython/commit/c3eb3c18f1472b739db486c99f7f2125c4809680 commit: c3eb3c18f1472b739db486c99f7f2125c4809680 branch: 3.10 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-05-09T00:19:43-07:00 summary: Revert test for Tix deprecation warning (GH-26005) Added in bpo-41730 (GH-22186), the test apparently causes refleaks. The test isn't worth hunting them down, so it's simply reverted. This partially reverts commit 4a2d98a1e98de25c5114d11fcb0f9fedbb057e51. (cherry picked from commit 8e8307d70bb9dc18cfeeed3277c076309b27515e) Co-authored-by: Zachary Ware files: M Lib/test/test_tix.py diff --git a/Lib/test/test_tix.py b/Lib/test/test_tix.py index a2fb357fd0c500..8a60c7c8e1fbd5 100644 --- a/Lib/test/test_tix.py +++ b/Lib/test/test_tix.py @@ -26,12 +26,9 @@ def setUp(self): else: self.addCleanup(self.root.destroy) - def test_tix_deprecation(self): - with self.assertWarns(DeprecationWarning): - import_helper.import_fresh_module( - 'tkinter.tix', - fresh=('tkinter.tix',), - ) + def test_tix_available(self): + # this test is just here to make setUp run + pass if __name__ == '__main__': From webhook-mailer at python.org Sun May 9 17:14:09 2021 From: webhook-mailer at python.org (pablogsal) Date: Sun, 09 May 2021 21:14:09 -0000 Subject: [Python-checkins] bpo-43149: Correct the syntax error message for multiple exception types (GH-25996) GH-25997) Message-ID: https://github.com/python/cpython/commit/9a0e65c8e05fdcd2207650d216ebdacdf0a025e9 commit: 9a0e65c8e05fdcd2207650d216ebdacdf0a025e9 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: pablogsal date: 2021-05-09T22:13:50+01:00 summary: bpo-43149: Correct the syntax error message for multiple exception types (GH-25996) GH-25997) Automerge-Triggered-By: GH:pablogsal (cherry picked from commit 6692dc1ca99fb34a19d0a4b93cf8e10619490001) Co-authored-by: Pablo Galindo Co-authored-by: Pablo Galindo files: A Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst M Doc/whatsnew/3.10.rst M Grammar/python.gram 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 cfc560e1f4435f..2c6569fccd624d 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -248,7 +248,7 @@ have been incorporated. Some of the most notable ones: File "", line 3 except NotEnoughScienceError, NotEnoughResourcesError: ^ - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized (Contributed by Pablo Galindo in :issue:`43149`) diff --git a/Grammar/python.gram b/Grammar/python.gram index 2f553c6d390c71..6b815ab0c518d4 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -956,7 +956,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_STARTING_FROM(a, "exception group must be parenthesized") } + RAISE_SYNTAX_ERROR_STARTING_FROM(a, "multiple exception types must be parenthesized") } | a='except' expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") } invalid_finally_stmt: diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py index 9799697b87d3b1..58407212b492f7 100644 --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -1068,7 +1068,7 @@ ... SyntaxError: invalid syntax -Check that an exception group with missing parentheses +Check that an multiple exception types with missing parentheses raise a custom exception >>> try: @@ -1076,21 +1076,21 @@ ... except A, B: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass ... except A, B, C: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass ... except A, B, C as blech: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> try: ... pass @@ -1099,7 +1099,7 @@ ... finally: ... pass Traceback (most recent call last): - SyntaxError: exception group must be parenthesized + SyntaxError: multiple exception types must be parenthesized >>> f(a=23, a=234) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst new file mode 100644 index 00000000000000..cc1983ec3d4648 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-08-17-18-37.bpo-43149.Kp5FxD.rst @@ -0,0 +1,2 @@ +Corrent the syntax error message regarding multiple exception types to not +refer to "exception groups". Patch by Pablo Galindo diff --git a/Parser/parser.c b/Parser/parser.c index 6958963dfa39cf..2ca628b59ba869 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -19978,7 +19978,7 @@ invalid_except_stmt_rule(Parser *p) ) { 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_STARTING_FROM ( a , "exception group must be parenthesized" ); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); From webhook-mailer at python.org Mon May 10 05:10:49 2021 From: webhook-mailer at python.org (markshannon) Date: Mon, 10 May 2021 09:10:49 -0000 Subject: [Python-checkins] Prevent access outside buffer (GH-26012) Message-ID: https://github.com/python/cpython/commit/45862f9f5ef5d3c9da37f35e4fe4b18618530cfa commit: 45862f9f5ef5d3c9da37f35e4fe4b18618530cfa branch: main author: Dennis Sweeney <36520290+sweeneyde at users.noreply.github.com> committer: markshannon date: 2021-05-10T10:10:22+01:00 summary: Prevent access outside buffer (GH-26012) files: M Python/ceval.c diff --git a/Python/ceval.c b/Python/ceval.c index f7450670691dd..8e1c5bdf03307 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -4794,8 +4794,10 @@ scan_back_to_entry_start(unsigned char *p) { } static inline unsigned char * -skip_to_next_entry(unsigned char *p) { - for (; (p[0]&128) == 0; p++); +skip_to_next_entry(unsigned char *p, unsigned char *end) { + while (p < end && ((p[0] & 128) == 0)) { + p++; + } return p; } @@ -4863,7 +4865,7 @@ get_exception_handler(PyCodeObject *code, int index) parse_block(scan, &res); return res; } - scan = skip_to_next_entry(scan); + scan = skip_to_next_entry(scan, end); } res.b_handler = -1; return res; From webhook-mailer at python.org Mon May 10 09:30:30 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 10 May 2021 13:30:30 -0000 Subject: [Python-checkins] bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) Message-ID: https://github.com/python/cpython/commit/2a031723eefcf6f1d678bbb4f6018610d43623c4 commit: 2a031723eefcf6f1d678bbb4f6018610d43623c4 branch: main author: dhoekstra2000 committer: ericvsmith date: 2021-05-10T09:30:22-04:00 summary: bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) files: A Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index bfba15e96dce28..e203a1a2132df9 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -491,6 +491,27 @@ depend on one or more other fields. For example:: def __post_init__(self): self.c = self.a + self.b +The :meth:`__init__` method generated by :func:`dataclass` does not call base +class :meth:`__init__` methods. If the base class has an :meth:`__init__` method +that has to be called, it is common to call this method in a +:meth:`__post_init__` method:: + + @dataclass + class Rectangle: + height: float + width: float + + @dataclass + class Square(Rectangle): + side: float + + def __post_init__(self): + super().__init__(self.side, self.side) + +Note, however, that in general the dataclass-generated :meth:`__init__` methods +don't need to be called, since the derived dataclass will take care of +initializing all fields of any base class that is a dataclass itself. + See the section below on init-only variables for ways to pass parameters to :meth:`__post_init__`. Also see the warning about how :func:`replace` handles ``init=False`` fields. diff --git a/Misc/ACKS b/Misc/ACKS index 480a486a24c0b0..b023bcb6d72fd3 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -736,6 +736,7 @@ David Hobley Tim Hochberg Benjamin Hodgson Joerg-Cyril Hoehle +Douwe Hoekstra Gregor Hoffleit Chris Hoffman Tim Hoffmann diff --git a/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst new file mode 100644 index 00000000000000..b0ecb171ef7314 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst @@ -0,0 +1,2 @@ +Add the remark to :mod:`dataclasses` documentation that the :meth:`__init__` of any base class +has to be called in :meth:`__post_init__`, along with a code example. \ No newline at end of file From webhook-mailer at python.org Mon May 10 09:38:15 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 10 May 2021 13:38:15 -0000 Subject: [Python-checkins] bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) (GH-26019) Message-ID: https://github.com/python/cpython/commit/4d532d3f8f7970493442d7c217220f60312f92e1 commit: 4d532d3f8f7970493442d7c217220f60312f92e1 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-10T09:38:01-04:00 summary: bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) (GH-26019) (cherry picked from commit 2a031723eefcf6f1d678bbb4f6018610d43623c4) Co-authored-by: dhoekstra2000 Co-authored-by: dhoekstra2000 files: A Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index de5a8e1200ff32..b226cda46c72be 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -422,6 +422,27 @@ depend on one or more other fields. For example:: def __post_init__(self): self.c = self.a + self.b +The :meth:`__init__` method generated by :func:`dataclass` does not call base +class :meth:`__init__` methods. If the base class has an :meth:`__init__` method +that has to be called, it is common to call this method in a +:meth:`__post_init__` method:: + + @dataclass + class Rectangle: + height: float + width: float + + @dataclass + class Square(Rectangle): + side: float + + def __post_init__(self): + super().__init__(self.side, self.side) + +Note, however, that in general the dataclass-generated :meth:`__init__` methods +don't need to be called, since the derived dataclass will take care of +initializing all fields of any base class that is a dataclass itself. + See the section below on init-only variables for ways to pass parameters to :meth:`__post_init__`. Also see the warning about how :func:`replace` handles ``init=False`` fields. diff --git a/Misc/ACKS b/Misc/ACKS index be45273362476e..f01cc5d970bb76 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -725,6 +725,7 @@ David Hobley Tim Hochberg Benjamin Hodgson Joerg-Cyril Hoehle +Douwe Hoekstra Gregor Hoffleit Chris Hoffman Tim Hoffmann diff --git a/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst new file mode 100644 index 00000000000000..b0ecb171ef7314 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst @@ -0,0 +1,2 @@ +Add the remark to :mod:`dataclasses` documentation that the :meth:`__init__` of any base class +has to be called in :meth:`__post_init__`, along with a code example. \ No newline at end of file From webhook-mailer at python.org Mon May 10 09:38:52 2021 From: webhook-mailer at python.org (ericvsmith) Date: Mon, 10 May 2021 13:38:52 -0000 Subject: [Python-checkins] bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) (GH-26018) Message-ID: https://github.com/python/cpython/commit/f47305aa1fa41c38f744e9a16ae33b74c6fd45e7 commit: f47305aa1fa41c38f744e9a16ae33b74c6fd45e7 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ericvsmith date: 2021-05-10T09:38:46-04:00 summary: bpo-43558: Add note about base class initialization to dataclasses doc (GH-25967) (GH-26018) (cherry picked from commit 2a031723eefcf6f1d678bbb4f6018610d43623c4) Co-authored-by: dhoekstra2000 Co-authored-by: dhoekstra2000 files: A Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst M Doc/library/dataclasses.rst M Misc/ACKS diff --git a/Doc/library/dataclasses.rst b/Doc/library/dataclasses.rst index bfba15e96dce28..e203a1a2132df9 100644 --- a/Doc/library/dataclasses.rst +++ b/Doc/library/dataclasses.rst @@ -491,6 +491,27 @@ depend on one or more other fields. For example:: def __post_init__(self): self.c = self.a + self.b +The :meth:`__init__` method generated by :func:`dataclass` does not call base +class :meth:`__init__` methods. If the base class has an :meth:`__init__` method +that has to be called, it is common to call this method in a +:meth:`__post_init__` method:: + + @dataclass + class Rectangle: + height: float + width: float + + @dataclass + class Square(Rectangle): + side: float + + def __post_init__(self): + super().__init__(self.side, self.side) + +Note, however, that in general the dataclass-generated :meth:`__init__` methods +don't need to be called, since the derived dataclass will take care of +initializing all fields of any base class that is a dataclass itself. + See the section below on init-only variables for ways to pass parameters to :meth:`__post_init__`. Also see the warning about how :func:`replace` handles ``init=False`` fields. diff --git a/Misc/ACKS b/Misc/ACKS index 480a486a24c0b0..b023bcb6d72fd3 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -736,6 +736,7 @@ David Hobley Tim Hochberg Benjamin Hodgson Joerg-Cyril Hoehle +Douwe Hoekstra Gregor Hoffleit Chris Hoffman Tim Hoffmann diff --git a/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst new file mode 100644 index 00000000000000..b0ecb171ef7314 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-07-12-27-09.bpo-43558.UGhA8R.rst @@ -0,0 +1,2 @@ +Add the remark to :mod:`dataclasses` documentation that the :meth:`__init__` of any base class +has to be called in :meth:`__post_init__`, along with a code example. \ No newline at end of file From webhook-mailer at python.org Mon May 10 14:34:36 2021 From: webhook-mailer at python.org (pablogsal) Date: Mon, 10 May 2021 18:34:36 -0000 Subject: [Python-checkins] bpo-44074: let patchcheck infer the base branch name (GH-25991) Message-ID: https://github.com/python/cpython/commit/21fbbb98bac8bfe56f8b931258c36750e84f9285 commit: 21fbbb98bac8bfe56f8b931258c36750e84f9285 branch: main author: Leonardo Lai committer: pablogsal date: 2021-05-10T19:34:27+01:00 summary: bpo-44074: let patchcheck infer the base branch name (GH-25991) files: A Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst M Tools/scripts/patchcheck.py diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst new file mode 100644 index 00000000000000..8bccb080a54186 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst @@ -0,0 +1 @@ +Make patchcheck automatically detect the correct base branch name (previously it was hardcoded to 'master') \ No newline at end of file diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index 8a8480a0c22b37..d9cceb5d5acdfd 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -50,7 +50,8 @@ def get_git_branch(): try: return subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return None @@ -64,28 +65,49 @@ def get_git_upstream_remote(): try: subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return "origin" return "upstream" +def get_git_remote_default_branch(remote_name): + """Get the name of the default branch for the given remote + + It is typically called 'main', but may differ + """ + cmd = "git remote show {}".format(remote_name).split() + try: + remote_info = subprocess.check_output(cmd, + stderr=subprocess.DEVNULL, + cwd=SRCDIR, + encoding='UTF-8') + except subprocess.CalledProcessError: + return None + for line in remote_info.splitlines(): + if "HEAD branch:" in line: + base_branch = line.split(":")[1].strip() + return base_branch + return None + + @status("Getting base branch for PR", info=lambda x: x if x is not None else "not a PR branch") def get_base_branch(): if not os.path.exists(os.path.join(SRCDIR, '.git')): # Not a git checkout, so there's no base branch return None + upstream_remote = get_git_upstream_remote() version = sys.version_info if version.releaselevel == 'alpha': - base_branch = "master" + base_branch = get_git_remote_default_branch(upstream_remote) else: base_branch = "{0.major}.{0.minor}".format(version) this_branch = get_git_branch() if this_branch is None or this_branch == base_branch: # Not on a git PR branch, so there's no base branch return None - upstream_remote = get_git_upstream_remote() return upstream_remote + "/" + base_branch From webhook-mailer at python.org Mon May 10 14:58:48 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 10 May 2021 18:58:48 -0000 Subject: [Python-checkins] bpo-44074: let patchcheck infer the base branch name (GH-25991) Message-ID: https://github.com/python/cpython/commit/4cc836983ecc643be776026049bd1bcc826c7a0e commit: 4cc836983ecc643be776026049bd1bcc826c7a0e branch: 3.10 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-05-10T11:58:42-07:00 summary: bpo-44074: let patchcheck infer the base branch name (GH-25991) (cherry picked from commit 21fbbb98bac8bfe56f8b931258c36750e84f9285) Co-authored-by: Leonardo Lai files: A Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst M Tools/scripts/patchcheck.py diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst new file mode 100644 index 00000000000000..8bccb080a54186 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst @@ -0,0 +1 @@ +Make patchcheck automatically detect the correct base branch name (previously it was hardcoded to 'master') \ No newline at end of file diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index 8a8480a0c22b37..d9cceb5d5acdfd 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -50,7 +50,8 @@ def get_git_branch(): try: return subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return None @@ -64,28 +65,49 @@ def get_git_upstream_remote(): try: subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return "origin" return "upstream" +def get_git_remote_default_branch(remote_name): + """Get the name of the default branch for the given remote + + It is typically called 'main', but may differ + """ + cmd = "git remote show {}".format(remote_name).split() + try: + remote_info = subprocess.check_output(cmd, + stderr=subprocess.DEVNULL, + cwd=SRCDIR, + encoding='UTF-8') + except subprocess.CalledProcessError: + return None + for line in remote_info.splitlines(): + if "HEAD branch:" in line: + base_branch = line.split(":")[1].strip() + return base_branch + return None + + @status("Getting base branch for PR", info=lambda x: x if x is not None else "not a PR branch") def get_base_branch(): if not os.path.exists(os.path.join(SRCDIR, '.git')): # Not a git checkout, so there's no base branch return None + upstream_remote = get_git_upstream_remote() version = sys.version_info if version.releaselevel == 'alpha': - base_branch = "master" + base_branch = get_git_remote_default_branch(upstream_remote) else: base_branch = "{0.major}.{0.minor}".format(version) this_branch = get_git_branch() if this_branch is None or this_branch == base_branch: # Not on a git PR branch, so there's no base branch return None - upstream_remote = get_git_upstream_remote() return upstream_remote + "/" + base_branch From webhook-mailer at python.org Mon May 10 14:58:50 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 10 May 2021 18:58:50 -0000 Subject: [Python-checkins] bpo-44074: let patchcheck infer the base branch name (GH-25991) Message-ID: https://github.com/python/cpython/commit/fbd9b9939cffda4936a986bc729833c69b61f4cb commit: fbd9b9939cffda4936a986bc729833c69b61f4cb 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-05-10T11:58:45-07:00 summary: bpo-44074: let patchcheck infer the base branch name (GH-25991) (cherry picked from commit 21fbbb98bac8bfe56f8b931258c36750e84f9285) Co-authored-by: Leonardo Lai files: A Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst M Tools/scripts/patchcheck.py diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst new file mode 100644 index 00000000000000..8bccb080a54186 --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2021-05-08-13-57-00.bpo-44074.F09kCK.rst @@ -0,0 +1 @@ +Make patchcheck automatically detect the correct base branch name (previously it was hardcoded to 'master') \ No newline at end of file diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index 8a8480a0c22b37..d9cceb5d5acdfd 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -50,7 +50,8 @@ def get_git_branch(): try: return subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return None @@ -64,28 +65,49 @@ def get_git_upstream_remote(): try: subprocess.check_output(cmd, stderr=subprocess.DEVNULL, - cwd=SRCDIR) + cwd=SRCDIR, + encoding='UTF-8') except subprocess.CalledProcessError: return "origin" return "upstream" +def get_git_remote_default_branch(remote_name): + """Get the name of the default branch for the given remote + + It is typically called 'main', but may differ + """ + cmd = "git remote show {}".format(remote_name).split() + try: + remote_info = subprocess.check_output(cmd, + stderr=subprocess.DEVNULL, + cwd=SRCDIR, + encoding='UTF-8') + except subprocess.CalledProcessError: + return None + for line in remote_info.splitlines(): + if "HEAD branch:" in line: + base_branch = line.split(":")[1].strip() + return base_branch + return None + + @status("Getting base branch for PR", info=lambda x: x if x is not None else "not a PR branch") def get_base_branch(): if not os.path.exists(os.path.join(SRCDIR, '.git')): # Not a git checkout, so there's no base branch return None + upstream_remote = get_git_upstream_remote() version = sys.version_info if version.releaselevel == 'alpha': - base_branch = "master" + base_branch = get_git_remote_default_branch(upstream_remote) else: base_branch = "{0.major}.{0.minor}".format(version) this_branch = get_git_branch() if this_branch is None or this_branch == base_branch: # Not on a git PR branch, so there's no base branch return None - upstream_remote = get_git_upstream_remote() return upstream_remote + "/" + base_branch From webhook-mailer at python.org Mon May 10 16:45:16 2021 From: webhook-mailer at python.org (giampaolo) Date: Mon, 10 May 2021 20:45:16 -0000 Subject: [Python-checkins] bpo-43743 add comment stating _USE_CP_SENDFILE should not be removed (#26024) Message-ID: https://github.com/python/cpython/commit/c0190137ca67014008c92f04926f0cdf22db84b3 commit: c0190137ca67014008c92f04926f0cdf22db84b3 branch: main author: Giampaolo Rodola committer: giampaolo date: 2021-05-10T22:45:06+02:00 summary: bpo-43743 add comment stating _USE_CP_SENDFILE should not be removed (#26024) files: M Lib/shutil.py diff --git a/Lib/shutil.py b/Lib/shutil.py index e29fe4d83e927..55cfe35ab0697 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -40,6 +40,8 @@ import nt COPY_BUFSIZE = 1024 * 1024 if _WINDOWS else 64 * 1024 +# This should never be removed, see rationale in: +# https://bugs.python.org/issue43743#msg393429 _USE_CP_SENDFILE = hasattr(os, "sendfile") and sys.platform.startswith("linux") _HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS From webhook-mailer at python.org Mon May 10 18:45:58 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 10 May 2021 22:45:58 -0000 Subject: [Python-checkins] bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules (GH-26025) Message-ID: https://github.com/python/cpython/commit/23822e2c654e950bcfa563e27b99bcb46187ac8b commit: 23822e2c654e950bcfa563e27b99bcb46187ac8b branch: 3.9 author: Steve Dower committer: zooba date: 2021-05-10T23:45:50+01:00 summary: bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules (GH-26025) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_importlib/test_spec.py M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 7c4157369d3f9..fe31f437dac2a 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -718,11 +718,6 @@ 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 @@ -1159,6 +1154,11 @@ class ExtensionFileLoader(FileLoader, _LoaderBasics): def __init__(self, name, path): self.name = name + if not _path_isabs(path): + try: + path = _path_join(_os.getcwd(), path) + except OSError: + pass self.path = path def __eq__(self, other): diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index 14aec09d97c90..c6fe9d550b701 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -815,10 +815,10 @@ def test_spec_from_file_location_relative_path(self): self.assertEqual(spec.name, self.name) self.assertEqual(spec.loader, self.fileloader) - self.assertEqual(spec.origin, self.path) + self.assertEqual(spec.origin, os.path.basename(self.path)) self.assertIs(spec.loader_state, None) self.assertIs(spec.submodule_search_locations, None) - self.assertEqual(spec.cached, self.cached) + self.assertEqual(spec.cached, os.path.relpath(self.cached)) self.assertTrue(spec.has_location) (Frozen_FactoryTests, diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst new file mode 100644 index 0000000000000..e40073f3b8b6c --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst @@ -0,0 +1,2 @@ +No longer eagerly makes import filenames absolute, except for extension +modules. diff --git a/Python/importlib_external.h b/Python/importlib_external.h index c47eead1ed7de..6d40249e9cd76 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -969,1856 +969,1857 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 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,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,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,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,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, + 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,0,0,0,0,41,17,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,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,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,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,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,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, + 0,218,14,95,111,112,101,110,95,114,101,103,105,115,116,114, + 121,8,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,15,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,30,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,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,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,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, + 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,46,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,252,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,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, + 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,65,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,73,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,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,76,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,84,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,60,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,91,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,99,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,113,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,123,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,130,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,140,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, + 148,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,89,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,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, - 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,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,238,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,244, + 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,248,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,251,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,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,7,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,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,12,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,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,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, + 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,23,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,29,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,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,33,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,39,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,45,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, + 233,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, + 53,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,58,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,63,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,49,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,104,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,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,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,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, + 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,98,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,114,233,0, - 0,0,114,10,0,0,0,114,234,0,0,0,114,10,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,114,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,94,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,8,0,0,0,67,0,0,0,115,62,0,0,0,124, + 1,124,0,95,0,116,1,124,2,131,1,115,52,122,18,116, + 2,116,3,160,4,161,0,124,2,131,2,125,2,87,0,110, + 18,4,0,116,5,121,50,1,0,1,0,1,0,89,0,110, + 2,48,0,124,2,124,0,95,6,100,0,83,0,114,69,0, + 0,0,41,7,114,140,0,0,0,114,85,0,0,0,114,67, + 0,0,0,114,24,0,0,0,114,81,0,0,0,114,76,0, + 0,0,114,65,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, + 131,4,0,0,115,14,0,0,0,0,1,6,1,8,1,2, + 1,18,1,12,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,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, - 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, + 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, - 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, + 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,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, - 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, + 114,19,1,0,0,123,4,0,0,115,22,0,0,0,8,2, + 4,6,8,9,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,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,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,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, - 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, + 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,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, + 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, - 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, + 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,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, + 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,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,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,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, + 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,68,14, + 64,14,29,16,127,0,17,14,72,18,45,18,26,4,3,18, + 58,14,63,14,42,14,127,0,20,14,127,0,27,10,23,8, + 11,8,57, }; From webhook-mailer at python.org Mon May 10 19:39:25 2021 From: webhook-mailer at python.org (zooba) Date: Mon, 10 May 2021 23:39:25 -0000 Subject: [Python-checkins] bpo-44070: Clarify NEWS message to specify the version when the behaviour was introduced (GH-26029) Message-ID: https://github.com/python/cpython/commit/b4884083aed9bfec22c4da0e0223ad6a04a4bef2 commit: b4884083aed9bfec22c4da0e0223ad6a04a4bef2 branch: 3.9 author: Steve Dower committer: zooba date: 2021-05-11T00:39:17+01:00 summary: bpo-44070: Clarify NEWS message to specify the version when the behaviour was introduced (GH-26029) files: M Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst index e40073f3b8b6c..46bea40031135 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst @@ -1,2 +1,2 @@ No longer eagerly makes import filenames absolute, except for extension -modules. +modules, which was introduced in 3.9.5. From webhook-mailer at python.org Mon May 10 21:27:00 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 01:27:00 -0000 Subject: [Python-checkins] Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) Message-ID: https://github.com/python/cpython/commit/d1b81574edd75e33ae85c525ac988ce772675a07 commit: d1b81574edd75e33ae85c525ac988ce772675a07 branch: main author: Julien Palard committer: orsenthil date: 2021-05-10T18:26:53-07:00 summary: Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) * Doc: http.server: directory is not a class attribute, but an argument. files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 729d7e37137a8..029e9ec5401e0 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -320,9 +320,16 @@ provides three different variants: .. class:: SimpleHTTPRequestHandler(request, client_address, server, directory=None) - This class serves files from the current directory and below, directly + This class serves files from the directory *directory* and below, + or the current directory if *directory* is not provided, directly mapping the directory structure to HTTP requests. + .. versionadded:: 3.7 + The *directory* parameter. + + .. versionchanged:: 3.9 + The *directory* parameter accepts a :term:`path-like object`. + A lot of the work, such as parsing the request, is done by the base class :class:`BaseHTTPRequestHandler`. This class implements the :func:`do_GET` and :func:`do_HEAD` functions. @@ -345,13 +352,6 @@ provides three different variants: This dictionary is no longer filled with the default system mappings, but only contains overrides. - .. attribute:: directory - - If not specified, the directory to serve is the current working directory. - - .. versionchanged:: 3.9 - Accepts a :term:`path-like object`. - The :class:`SimpleHTTPRequestHandler` class defines the following methods: .. method:: do_HEAD() From webhook-mailer at python.org Mon May 10 21:59:32 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 01:59:32 -0000 Subject: [Python-checkins] Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) (GH-26030) Message-ID: https://github.com/python/cpython/commit/1d8c18019d25002fa8a4d548494ef49ce0209651 commit: 1d8c18019d25002fa8a4d548494ef49ce0209651 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-10T18:59:22-07:00 summary: Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) (GH-26030) * Doc: http.server: directory is not a class attribute, but an argument. (cherry picked from commit d1b81574edd75e33ae85c525ac988ce772675a07) Co-authored-by: Julien Palard Co-authored-by: Julien Palard files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 729d7e37137a8..029e9ec5401e0 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -320,9 +320,16 @@ provides three different variants: .. class:: SimpleHTTPRequestHandler(request, client_address, server, directory=None) - This class serves files from the current directory and below, directly + This class serves files from the directory *directory* and below, + or the current directory if *directory* is not provided, directly mapping the directory structure to HTTP requests. + .. versionadded:: 3.7 + The *directory* parameter. + + .. versionchanged:: 3.9 + The *directory* parameter accepts a :term:`path-like object`. + A lot of the work, such as parsing the request, is done by the base class :class:`BaseHTTPRequestHandler`. This class implements the :func:`do_GET` and :func:`do_HEAD` functions. @@ -345,13 +352,6 @@ provides three different variants: This dictionary is no longer filled with the default system mappings, but only contains overrides. - .. attribute:: directory - - If not specified, the directory to serve is the current working directory. - - .. versionchanged:: 3.9 - Accepts a :term:`path-like object`. - The :class:`SimpleHTTPRequestHandler` class defines the following methods: .. method:: do_HEAD() From webhook-mailer at python.org Mon May 10 22:20:32 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 11 May 2021 02:20:32 -0000 Subject: [Python-checkins] Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) Message-ID: https://github.com/python/cpython/commit/90904011bdfee38530918f6fb9f8fbcbe4e82f1c commit: 90904011bdfee38530918f6fb9f8fbcbe4e82f1c branch: 3.10 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-05-10T19:20:22-07:00 summary: Doc: http.server: directory is not a class attribute, but an argument. (GH-26017) * Doc: http.server: directory is not a class attribute, but an argument. (cherry picked from commit d1b81574edd75e33ae85c525ac988ce772675a07) Co-authored-by: Julien Palard files: M Doc/library/http.server.rst diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index 729d7e37137a81..029e9ec5401e08 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -320,9 +320,16 @@ provides three different variants: .. class:: SimpleHTTPRequestHandler(request, client_address, server, directory=None) - This class serves files from the current directory and below, directly + This class serves files from the directory *directory* and below, + or the current directory if *directory* is not provided, directly mapping the directory structure to HTTP requests. + .. versionadded:: 3.7 + The *directory* parameter. + + .. versionchanged:: 3.9 + The *directory* parameter accepts a :term:`path-like object`. + A lot of the work, such as parsing the request, is done by the base class :class:`BaseHTTPRequestHandler`. This class implements the :func:`do_GET` and :func:`do_HEAD` functions. @@ -345,13 +352,6 @@ provides three different variants: This dictionary is no longer filled with the default system mappings, but only contains overrides. - .. attribute:: directory - - If not specified, the directory to serve is the current working directory. - - .. versionchanged:: 3.9 - Accepts a :term:`path-like object`. - The :class:`SimpleHTTPRequestHandler` class defines the following methods: .. method:: do_HEAD() From webhook-mailer at python.org Tue May 11 10:04:42 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 11 May 2021 14:04:42 -0000 Subject: [Python-checkins] bpo-43795: PEP 652 user documentation (GH-25668) Message-ID: https://github.com/python/cpython/commit/b05955d6f5f149523b5855a335444b7c6324bdb7 commit: b05955d6f5f149523b5855a335444b7c6324bdb7 branch: main author: Petr Viktorin committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-11T07:04:33-07:00 summary: bpo-43795: PEP 652 user documentation (GH-25668) - Reformat the C API and ABI Versioning page (and extend/clarify a bit) - Rewrite the stable ABI docs into a general text on C API Compatibility - Add a list of Limited API contents, and notes for the individual items. - Replace `Include/README.rst` with a link to a devguide page with the same info files: M Doc/c-api/apiabiversion.rst M Doc/c-api/stable.rst M Doc/conf.py M Doc/data/stable_abi.dat M Doc/tools/extensions/c_annotations.py M Include/README.rst M Tools/scripts/stable_abi.py diff --git a/Doc/c-api/apiabiversion.rst b/Doc/c-api/apiabiversion.rst index b8a8f2ff886219..04050f7dabe172 100644 --- a/Doc/c-api/apiabiversion.rst +++ b/Doc/c-api/apiabiversion.rst @@ -6,34 +6,57 @@ API and ABI Versioning *********************** -``PY_VERSION_HEX`` is the Python version number encoded in a single integer. - -For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the underlying -version information can be found by treating it as a 32 bit number in -the following manner: - - +-------+-------------------------+------------------------------------------------+ - | Bytes | Bits (big endian order) | Meaning | - +=======+=========================+================================================+ - | ``1`` | ``1-8`` | ``PY_MAJOR_VERSION`` (the ``3`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``2`` | ``9-16`` | ``PY_MINOR_VERSION`` (the ``4`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``3`` | ``17-24`` | ``PY_MICRO_VERSION`` (the ``1`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``4`` | ``25-28`` | ``PY_RELEASE_LEVEL`` (``0xA`` for alpha, | - | | | ``0xB`` for beta, ``0xC`` for release | - | | | candidate and ``0xF`` for final), in this | - | | | case it is alpha. | - +-------+-------------------------+------------------------------------------------+ - | | ``29-32`` | ``PY_RELEASE_SERIAL`` (the ``2`` in | - | | | ``3.4.1a2``, zero for final releases) | - +-------+-------------------------+------------------------------------------------+ - -Thus ``3.4.1a2`` is hexversion ``0x030401a2``. +CPython exposes its version number in the following macros. +Note that these correspond to the version code is **built** with, +not necessarily the version used at **run time**. -All the given macros are defined in :source:`Include/patchlevel.h`. +See :ref:`stable` for a discussion of API and ABI stability across versions. + +.. c:macro:: PY_MAJOR_VERSION + + The ``3`` in ``3.4.1a2``. + +.. c:macro:: PY_MINOR_VERSION + + The ``4`` in ``3.4.1a2``. + +.. c:macro:: PY_MICRO_VERSION + + The ``1`` in ``3.4.1a2``. + +.. c:macro:: PY_RELEASE_LEVEL + + The ``a`` in ``3.4.1a2``. + This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release + candidate or ``0xF`` for final. +.. c:macro:: PY_RELEASE_SERIAL + + The ``2`` in ``3.4.1a2``. Zero for final releases. + +.. c:macro:: PY_VERSION_HEX + + The Python version number encoded in a single integer. + + The underlying version information can be found by treating it as a 32 bit + number in the following manner: + + +-------+-------------------------+-------------------------+--------------------------+ + | Bytes | Bits (big endian order) | Meaning | Value for ``3.4.1a2`` | + +=======+=========================+=========================+==========================+ + | 1 | 1-8 | ``PY_MAJOR_VERSION`` | ``0x03`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 2 | 9-16 | ``PY_MINOR_VERSION`` | ``0x04`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 3 | 17-24 | ``PY_MICRO_VERSION`` | ``0x01`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 4 | 25-28 | ``PY_RELEASE_LEVEL`` | ``0xA`` | + + +-------------------------+-------------------------+--------------------------+ + | | 29-32 | ``PY_RELEASE_SERIAL`` | ``0x2`` | + +-------+-------------------------+-------------------------+--------------------------+ + + Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is + hexversion ``0x030a00f0``. + + +All the given macros are defined in :source:`Include/patchlevel.h`. diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 9c05cb3c82dfbe..2f67b097eae975 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -2,37 +2,157 @@ .. _stable: -*********************************** +*************** +C API Stability +*************** + +Python's C API is covered by the Backwards Compatibility Policy, :pep:`387`. +While the C API will change with every minor release (e.g. from 3.9 to 3.10), +most changes will be source-compatible, typically by only adding new API. +Changing existing API or removing API is only done after a deprecation period +or to fix serious issues. + +CPython's Application Binary Interface (ABI) is forward- and +backwards-compatible across a minor release (if these are compiled the same +way; see :ref:`stable-abi-platform` below). +So, code compiled for Python 3.10.0 will work on 3.10.8 and vice versa, +but will need to be compiled separately for 3.9.x and 3.10.x. + +Names prefixed by an underscore, such as ``_Py_InternalState``, +are private API that can change without notice even in patch releases. + + Stable Application Binary Interface -*********************************** - -Traditionally, the C API of Python will change with every release. Most changes -will be source-compatible, typically by only adding API, rather than changing -existing API or removing API (although some interfaces do get removed after -being deprecated first). - -Unfortunately, the API compatibility does not extend to binary compatibility -(the ABI). The reason is primarily the evolution of struct definitions, where -addition of a new field, or changing the type of a field, might not break the -API, but can break the ABI. As a consequence, extension modules need to be -recompiled for every Python release (although an exception is possible on Unix -when none of the affected interfaces are used). In addition, on Windows, -extension modules link with a specific pythonXY.dll and need to be recompiled to -link with a newer one. - -Since Python 3.2, a subset of the API has been declared to guarantee a stable -ABI. Extension modules wishing to use this API (called "limited API") need to -define ``Py_LIMITED_API``. A number of interpreter details then become hidden -from the extension module; in return, a module is built that works on any 3.x -version (x>=2) without recompilation. - -In some cases, the stable ABI needs to be extended with new functions. -Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API`` -to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python -version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules -will work on all subsequent Python releases, but fail to load (because of -missing symbols) on the older releases. - -As of Python 3.2, the set of functions available to the limited API is -documented in :pep:`384`. In the C API documentation, API elements that are not -part of the limited API are marked as "Not part of the limited API." +=================================== + +Python 3.2 introduced the *Limited API*, a subset of Python's C API. +Extensions that only use the Limited API can be +compiled once and work with multiple versions of Python. +Contents of the Limited API are :ref:`listed below `. + +To enable this, Python provides a *Stable ABI*: a set of symbols that will +remain compatible across Python 3.x versions. The Stable ABI contains symbols +exposed in the Limited API, but also other ones ? for example, functions +necessary to support older versions of the Limited API. + +(For simplicity, this document talks about *extensions*, but the Limited API +and Stable ABI work the same way for all uses of the API ? for example, +embedding Python.) + +.. c:macro:: Py_LIMITED_API + + Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to + opt in to only use the Limited API. + + Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that + the extension will work without recompilation with all Python 3.x releases + (x>=2) on the particular :ref:`platform `. + + Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will + limit the available API so that the extension will work without + recompilation with all Python 3 releases from the specified one. + This will allow using additional API introduced up to this version, + but the extension will lose compatibility with earlier Python versions. + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum + minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when + compiling with future Python versions. + +On Windows, extensions that use the Stable ABI should be linked against +``python3.dll`` rather than a version-specific library such as +``python39.dll``. + +On some platforms, Python will look for and load shared library files named +with the ``abi3`` tag (e.g. ``mymodule.abi3.so``). +It does not check if such extensions conform to a Stable ABI. +The user (or their packaging tools) need to ensure that, for example, +extensions built with the 3.10+ Limited API are not installed for lower +versions of Python. + +All functions in the Stable ABI are present as functions in Python's shared +library, not solely as macros. This makes them usable from languages that don't +use the C preprocessor. + + +Limited API Scope and Performance +--------------------------------- + +The goal for the Limited API is to allow everything that is possible with the +full C API, but possibly with a performance penalty. + +For example, while :c:func:`PyList_GetItem` is available, its ?unsafe? macro +variant :c:func:`PyList_GET_ITEM` is not. +The macro can be faster because it can rely on version-specific implementation +details of the list object. + +Without ``Py_LIMITED_API`` defined, some C API functions are inlined or +replaced by macros. +Defining ``Py_LIMITED_API`` disables this inlining, allowing stability as +Python's data structures are improved, but possibly reducing performance. + +By leaving out the ``Py_LIMITED_API`` definition, it is possible to compile +a Limited API extension with a version-specific ABI. This can improve +performance for that Python version, but will limit compatibility. +Compiling with ``Py_LIMITED_API`` will then yield an extension that can be +distributed where a version-specific one is not available ? for example, +for prereleases of an upcoming Python version. + + +Limited API Caveats +------------------- + +Note that compiling with ``Py_LIMITED_API`` is *not* a complete guarantee that +code conforms to the Limited API or the Stable ABI. ``Py_LIMITED_API`` only +covers definitions, but an API also includes other issues, such as expected +semantics. + +One issue that ``Py_LIMITED_API`` does not guard against is calling a function +with arguments that are invalid in a lower Python version. +For example, consider a function that starts accepting ``NULL`` for an +argument. In Python 3.9, ``NULL`` now selects a default behavior, but in +Python 3.8, the argument will be used directly, causing a ``NULL`` dereference +and crash. A similar argument works for fields of structs. + +Another issue is that some struct fields are currently not hidden when +``Py_LIMITED_API`` is defined, even though they're part of the Limited API. + +For these reasons, we recommend testing an extension with *all* minor Python +versions it supports, and preferably to build with the *lowest* such version. + +We also recommend reviewing documentation of all used API to check +if it is explicitly part of the Limited API. Even with ``Py_LIMITED_API`` +defined, a few private declarations are exposed for technical reasons (or +even unintentionally, as bugs). + +Also note that the Limited API is not necessarily stable: compiling with +``Py_LIMITED_API`` with Python 3.8 means that the extension will +run with Python 3.12, but it will not necessarily *compile* with Python 3.12. +In particular, parts of the Limited API may be deprecated and removed, +provided that the Stable ABI stays stable. + + +.. _stable-abi-platform: + +Platform Considerations +======================= + +ABI stability depends not only on Python, but also on the compiler used, +lower-level libraries and compiler options. For the purposes of the Stable ABI, +these details define a ?platform?. They usually depend on the OS +type and processor architecture + +It is the responsibility of each particular distributor of Python +to ensure that all Python versions on a particular platform are built +in a way that does not break the Stable ABI. +This is the case with Windows and macOS releases from ``python.org`` and many +third-party distributors. + + +.. _stable-abi-list: + +Contents of Limited API +======================= + + +Currently, the Limited API includes the following items: + +.. limited-api-list:: diff --git a/Doc/conf.py b/Doc/conf.py index cf250981f58752..2a1d0e3dfd873e 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -225,8 +225,9 @@ # Options for extensions # ---------------------- -# Relative filename of the reference count data file. +# Relative filename of the data files refcount_file = 'data/refcounts.dat' +stable_abi_file = 'data/stable_abi.dat' # Sphinx 2 and Sphinx 3 compatibility # ----------------------------------- diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 833228f7fd755d..d582204f5626b9 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -1,953 +1,861 @@ -# 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 -PyArg_ParseTupleAndKeywords -PyArg_UnpackTuple -PyArg_VaParse -PyArg_VaParseTupleAndKeywords -PyArg_ValidateKeywordArguments -PyBaseObject_Type -PyBool_FromLong -PyBool_Type -PyByteArrayIter_Type -PyByteArray_AsString -PyByteArray_Concat -PyByteArray_FromObject -PyByteArray_FromStringAndSize -PyByteArray_Resize -PyByteArray_Size -PyByteArray_Type -PyBytesIter_Type -PyBytes_AsString -PyBytes_AsStringAndSize -PyBytes_Concat -PyBytes_ConcatAndDel -PyBytes_DecodeEscape -PyBytes_FromFormat -PyBytes_FromFormatV -PyBytes_FromObject -PyBytes_FromString -PyBytes_FromStringAndSize -PyBytes_Repr -PyBytes_Size -PyBytes_Type -PyCFunction -PyCFunctionWithKeywords -PyCFunction_Call -PyCFunction_GetFlags -PyCFunction_GetFunction -PyCFunction_GetSelf -PyCFunction_New -PyCFunction_NewEx -PyCFunction_Type -PyCMethod_New -PyCallIter_New -PyCallIter_Type -PyCallable_Check -PyCapsule_Destructor -PyCapsule_GetContext -PyCapsule_GetDestructor -PyCapsule_GetName -PyCapsule_GetPointer -PyCapsule_Import -PyCapsule_IsValid -PyCapsule_New -PyCapsule_SetContext -PyCapsule_SetDestructor -PyCapsule_SetName -PyCapsule_SetPointer -PyCapsule_Type -PyClassMethodDescr_Type -PyCodec_BackslashReplaceErrors -PyCodec_Decode -PyCodec_Decoder -PyCodec_Encode -PyCodec_Encoder -PyCodec_IgnoreErrors -PyCodec_IncrementalDecoder -PyCodec_IncrementalEncoder -PyCodec_KnownEncoding -PyCodec_LookupError -PyCodec_NameReplaceErrors -PyCodec_Register -PyCodec_RegisterError -PyCodec_ReplaceErrors -PyCodec_StreamReader -PyCodec_StreamWriter -PyCodec_StrictErrors -PyCodec_Unregister -PyCodec_XMLCharRefReplaceErrors -PyComplex_FromDoubles -PyComplex_ImagAsDouble -PyComplex_RealAsDouble -PyComplex_Type -PyDescr_NewClassMethod -PyDescr_NewGetSet -PyDescr_NewMember -PyDescr_NewMethod -PyDictItems_Type -PyDictIterItem_Type -PyDictIterKey_Type -PyDictIterValue_Type -PyDictKeys_Type -PyDictProxy_New -PyDictProxy_Type -PyDictRevIterItem_Type -PyDictRevIterKey_Type -PyDictRevIterValue_Type -PyDictValues_Type -PyDict_Clear -PyDict_Contains -PyDict_Copy -PyDict_DelItem -PyDict_DelItemString -PyDict_GetItem -PyDict_GetItemString -PyDict_GetItemWithError -PyDict_Items -PyDict_Keys -PyDict_Merge -PyDict_MergeFromSeq2 -PyDict_New -PyDict_Next -PyDict_SetItem -PyDict_SetItemString -PyDict_Size -PyDict_Type -PyDict_Update -PyDict_Values -PyEllipsis_Type -PyEnum_Type -PyErr_BadArgument -PyErr_BadInternalCall -PyErr_CheckSignals -PyErr_Clear -PyErr_Display -PyErr_ExceptionMatches -PyErr_Fetch -PyErr_Format -PyErr_FormatV -PyErr_GetExcInfo -PyErr_GivenExceptionMatches -PyErr_NewException -PyErr_NewExceptionWithDoc -PyErr_NoMemory -PyErr_NormalizeException -PyErr_Occurred -PyErr_Print -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 -PyErr_SetInterruptEx -PyErr_SetNone -PyErr_SetObject -PyErr_SetString -PyErr_SyntaxLocation -PyErr_SyntaxLocationEx -PyErr_WarnEx -PyErr_WarnExplicit -PyErr_WarnFormat -PyErr_WriteUnraisable -PyEval_AcquireLock -PyEval_AcquireThread -PyEval_CallFunction -PyEval_CallMethod -PyEval_CallObjectWithKeywords -PyEval_EvalCode -PyEval_EvalCodeEx -PyEval_EvalFrame -PyEval_EvalFrameEx -PyEval_GetBuiltins -PyEval_GetFrame -PyEval_GetFuncDesc -PyEval_GetFuncName -PyEval_GetGlobals -PyEval_GetLocals -PyEval_InitThreads -PyEval_ReleaseLock -PyEval_ReleaseThread -PyEval_RestoreThread -PyEval_SaveThread -PyEval_ThreadsInitialized -PyExc_ArithmeticError -PyExc_AssertionError -PyExc_AttributeError -PyExc_BaseException -PyExc_BlockingIOError -PyExc_BrokenPipeError -PyExc_BufferError -PyExc_BytesWarning -PyExc_ChildProcessError -PyExc_ConnectionAbortedError -PyExc_ConnectionError -PyExc_ConnectionRefusedError -PyExc_ConnectionResetError -PyExc_DeprecationWarning -PyExc_EOFError -PyExc_EncodingWarning -PyExc_EnvironmentError -PyExc_Exception -PyExc_FileExistsError -PyExc_FileNotFoundError -PyExc_FloatingPointError -PyExc_FutureWarning -PyExc_GeneratorExit -PyExc_IOError -PyExc_ImportError -PyExc_ImportWarning -PyExc_IndentationError -PyExc_IndexError -PyExc_InterruptedError -PyExc_IsADirectoryError -PyExc_KeyError -PyExc_KeyboardInterrupt -PyExc_LookupError -PyExc_MemoryError -PyExc_ModuleNotFoundError -PyExc_NameError -PyExc_NotADirectoryError -PyExc_NotImplementedError -PyExc_OSError -PyExc_OverflowError -PyExc_PendingDeprecationWarning -PyExc_PermissionError -PyExc_ProcessLookupError -PyExc_RecursionError -PyExc_ReferenceError -PyExc_ResourceWarning -PyExc_RuntimeError -PyExc_RuntimeWarning -PyExc_StopAsyncIteration -PyExc_StopIteration -PyExc_SyntaxError -PyExc_SyntaxWarning -PyExc_SystemError -PyExc_SystemExit -PyExc_TabError -PyExc_TimeoutError -PyExc_TypeError -PyExc_UnboundLocalError -PyExc_UnicodeDecodeError -PyExc_UnicodeEncodeError -PyExc_UnicodeError -PyExc_UnicodeTranslateError -PyExc_UnicodeWarning -PyExc_UserWarning -PyExc_ValueError -PyExc_Warning -PyExc_WindowsError -PyExc_ZeroDivisionError -PyExceptionClass_Name -PyException_GetCause -PyException_GetContext -PyException_GetTraceback -PyException_SetCause -PyException_SetContext -PyException_SetTraceback -PyFile_FromFd -PyFile_GetLine -PyFile_WriteObject -PyFile_WriteString -PyFilter_Type -PyFloat_AsDouble -PyFloat_FromDouble -PyFloat_FromString -PyFloat_GetInfo -PyFloat_GetMax -PyFloat_GetMin -PyFloat_Type -PyFrame_GetCode -PyFrame_GetLineNumber -PyFrozenSet_New -PyFrozenSet_Type -PyGC_Collect -PyGC_Disable -PyGC_Enable -PyGC_IsEnabled -PyGILState_Ensure -PyGILState_GetThisThreadState -PyGILState_Release -PyGILState_STATE -PyGetSetDef -PyGetSetDescr_Type -PyImport_AddModule -PyImport_AddModuleObject -PyImport_AppendInittab -PyImport_ExecCodeModule -PyImport_ExecCodeModuleEx -PyImport_ExecCodeModuleObject -PyImport_ExecCodeModuleWithPathnames -PyImport_GetImporter -PyImport_GetMagicNumber -PyImport_GetMagicTag -PyImport_GetModule -PyImport_GetModuleDict -PyImport_Import -PyImport_ImportFrozenModule -PyImport_ImportFrozenModuleObject -PyImport_ImportModule -PyImport_ImportModuleLevel -PyImport_ImportModuleLevelObject -PyImport_ImportModuleNoBlock -PyImport_ReloadModule -PyIndex_Check -PyInterpreterState -PyInterpreterState_Clear -PyInterpreterState_Delete -PyInterpreterState_Get -PyInterpreterState_GetDict -PyInterpreterState_GetID -PyInterpreterState_New -PyIter_Check -PyIter_Next -PyIter_Send -PyListIter_Type -PyListRevIter_Type -PyList_Append -PyList_AsTuple -PyList_GetItem -PyList_GetSlice -PyList_Insert -PyList_New -PyList_Reverse -PyList_SetItem -PyList_SetSlice -PyList_Size -PyList_Sort -PyList_Type -PyLongObject -PyLongRangeIter_Type -PyLong_AsDouble -PyLong_AsLong -PyLong_AsLongAndOverflow -PyLong_AsLongLong -PyLong_AsLongLongAndOverflow -PyLong_AsSize_t -PyLong_AsSsize_t -PyLong_AsUnsignedLong -PyLong_AsUnsignedLongLong -PyLong_AsUnsignedLongLongMask -PyLong_AsUnsignedLongMask -PyLong_AsVoidPtr -PyLong_FromDouble -PyLong_FromLong -PyLong_FromLongLong -PyLong_FromSize_t -PyLong_FromSsize_t -PyLong_FromString -PyLong_FromUnsignedLong -PyLong_FromUnsignedLongLong -PyLong_FromVoidPtr -PyLong_GetInfo -PyLong_Type -PyMap_Type -PyMapping_Check -PyMapping_GetItemString -PyMapping_HasKey -PyMapping_HasKeyString -PyMapping_Items -PyMapping_Keys -PyMapping_Length -PyMapping_SetItemString -PyMapping_Size -PyMapping_Values -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 -PyModule_AddIntConstant -PyModule_AddObject -PyModule_AddObjectRef -PyModule_AddStringConstant -PyModule_AddType -PyModule_Create2 -PyModule_ExecDef -PyModule_FromDefAndSpec2 -PyModule_GetDef -PyModule_GetDict -PyModule_GetFilename -PyModule_GetFilenameObject -PyModule_GetName -PyModule_GetNameObject -PyModule_GetState -PyModule_New -PyModule_NewObject -PyModule_SetDocString -PyModule_Type -PyNumber_Absolute -PyNumber_Add -PyNumber_And -PyNumber_AsSsize_t -PyNumber_Check -PyNumber_Divmod -PyNumber_Float -PyNumber_FloorDivide -PyNumber_InPlaceAdd -PyNumber_InPlaceAnd -PyNumber_InPlaceFloorDivide -PyNumber_InPlaceLshift -PyNumber_InPlaceMatrixMultiply -PyNumber_InPlaceMultiply -PyNumber_InPlaceOr -PyNumber_InPlacePower -PyNumber_InPlaceRemainder -PyNumber_InPlaceRshift -PyNumber_InPlaceSubtract -PyNumber_InPlaceTrueDivide -PyNumber_InPlaceXor -PyNumber_Index -PyNumber_Invert -PyNumber_Long -PyNumber_Lshift -PyNumber_MatrixMultiply -PyNumber_Multiply -PyNumber_Negative -PyNumber_Or -PyNumber_Positive -PyNumber_Power -PyNumber_Remainder -PyNumber_Rshift -PyNumber_Subtract -PyNumber_ToBase -PyNumber_TrueDivide -PyNumber_Xor -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 -PyObject_Call -PyObject_CallFunction -PyObject_CallFunctionObjArgs -PyObject_CallMethod -PyObject_CallMethodObjArgs -PyObject_CallNoArgs -PyObject_CallObject -PyObject_Calloc -PyObject_ClearWeakRefs -PyObject_DelItem -PyObject_DelItemString -PyObject_Dir -PyObject_Format -PyObject_Free -PyObject_GC_Del -PyObject_GC_IsFinalized -PyObject_GC_IsTracked -PyObject_GC_Track -PyObject_GC_UnTrack -PyObject_GenericGetAttr -PyObject_GenericGetDict -PyObject_GenericSetAttr -PyObject_GenericSetDict -PyObject_GetAiter -PyObject_GetAttr -PyObject_GetAttrString -PyObject_GetItem -PyObject_GetIter -PyObject_HasAttr -PyObject_HasAttrString -PyObject_Hash -PyObject_HashNotImplemented -PyObject_Init -PyObject_InitVar -PyObject_IsInstance -PyObject_IsSubclass -PyObject_IsTrue -PyObject_Length -PyObject_Malloc -PyObject_Not -PyObject_Realloc -PyObject_Repr -PyObject_RichCompare -PyObject_RichCompareBool -PyObject_SelfIter -PyObject_SetAttr -PyObject_SetAttrString -PyObject_SetItem -PyObject_Size -PyObject_Str -PyObject_Type -PyProperty_Type -PyRangeIter_Type -PyRange_Type -PyReversed_Type -PySeqIter_New -PySeqIter_Type -PySequence_Check -PySequence_Concat -PySequence_Contains -PySequence_Count -PySequence_DelItem -PySequence_DelSlice -PySequence_Fast -PySequence_GetItem -PySequence_GetSlice -PySequence_In -PySequence_InPlaceConcat -PySequence_InPlaceRepeat -PySequence_Index -PySequence_Length -PySequence_List -PySequence_Repeat -PySequence_SetItem -PySequence_SetSlice -PySequence_Size -PySequence_Tuple -PySetIter_Type -PySet_Add -PySet_Clear -PySet_Contains -PySet_Discard -PySet_New -PySet_Pop -PySet_Size -PySet_Type -PySlice_AdjustIndices -PySlice_GetIndices -PySlice_GetIndicesEx -PySlice_New -PySlice_Type -PySlice_Unpack -PyState_AddModule -PyState_FindModule -PyState_RemoveModule -PyStructSequence_Desc -PyStructSequence_Field -PyStructSequence_GetItem -PyStructSequence_New -PyStructSequence_NewType -PyStructSequence_SetItem -PySuper_Type -PySys_AddWarnOption -PySys_AddWarnOptionUnicode -PySys_AddXOption -PySys_FormatStderr -PySys_FormatStdout -PySys_GetObject -PySys_GetXOptions -PySys_HasWarnOptions -PySys_ResetWarnOptions -PySys_SetArgv -PySys_SetArgvEx -PySys_SetObject -PySys_SetPath -PySys_WriteStderr -PySys_WriteStdout -PyThreadState -PyThreadState_Clear -PyThreadState_Delete -PyThreadState_Get -PyThreadState_GetDict -PyThreadState_GetFrame -PyThreadState_GetID -PyThreadState_GetInterpreter -PyThreadState_New -PyThreadState_SetAsyncExc -PyThreadState_Swap -PyThread_GetInfo -PyThread_ReInitTLS -PyThread_acquire_lock -PyThread_acquire_lock_timed -PyThread_allocate_lock -PyThread_create_key -PyThread_delete_key -PyThread_delete_key_value -PyThread_exit_thread -PyThread_free_lock -PyThread_get_key_value -PyThread_get_stacksize -PyThread_get_thread_ident -PyThread_get_thread_native_id -PyThread_init_thread -PyThread_release_lock -PyThread_set_key_value -PyThread_set_stacksize -PyThread_start_new_thread -PyThread_tss_alloc -PyThread_tss_create -PyThread_tss_delete -PyThread_tss_free -PyThread_tss_get -PyThread_tss_is_created -PyThread_tss_set -PyTraceBack_Here -PyTraceBack_Print -PyTraceBack_Type -PyTupleIter_Type -PyTuple_GetItem -PyTuple_GetSlice -PyTuple_New -PyTuple_Pack -PyTuple_SetItem -PyTuple_Size -PyTuple_Type -PyTypeObject -PyType_ClearCache -PyType_FromModuleAndSpec -PyType_FromSpec -PyType_FromSpecWithBases -PyType_GenericAlloc -PyType_GenericNew -PyType_GetFlags -PyType_GetModule -PyType_GetModuleState -PyType_GetSlot -PyType_IsSubtype -PyType_Modified -PyType_Ready -PyType_Slot -PyType_Spec -PyType_Type -PyUnicodeDecodeError_Create -PyUnicodeDecodeError_GetEncoding -PyUnicodeDecodeError_GetEnd -PyUnicodeDecodeError_GetObject -PyUnicodeDecodeError_GetReason -PyUnicodeDecodeError_GetStart -PyUnicodeDecodeError_SetEnd -PyUnicodeDecodeError_SetReason -PyUnicodeDecodeError_SetStart -PyUnicodeEncodeError_GetEncoding -PyUnicodeEncodeError_GetEnd -PyUnicodeEncodeError_GetObject -PyUnicodeEncodeError_GetReason -PyUnicodeEncodeError_GetStart -PyUnicodeEncodeError_SetEnd -PyUnicodeEncodeError_SetReason -PyUnicodeEncodeError_SetStart -PyUnicodeIter_Type -PyUnicodeTranslateError_GetEnd -PyUnicodeTranslateError_GetObject -PyUnicodeTranslateError_GetReason -PyUnicodeTranslateError_GetStart -PyUnicodeTranslateError_SetEnd -PyUnicodeTranslateError_SetReason -PyUnicodeTranslateError_SetStart -PyUnicode_Append -PyUnicode_AppendAndDel -PyUnicode_AsASCIIString -PyUnicode_AsCharmapString -PyUnicode_AsDecodedObject -PyUnicode_AsDecodedUnicode -PyUnicode_AsEncodedObject -PyUnicode_AsEncodedString -PyUnicode_AsEncodedUnicode -PyUnicode_AsLatin1String -PyUnicode_AsMBCSString -PyUnicode_AsRawUnicodeEscapeString -PyUnicode_AsUCS4 -PyUnicode_AsUCS4Copy -PyUnicode_AsUTF16String -PyUnicode_AsUTF32String -PyUnicode_AsUTF8AndSize -PyUnicode_AsUTF8String -PyUnicode_AsUnicodeEscapeString -PyUnicode_AsWideChar -PyUnicode_AsWideCharString -PyUnicode_BuildEncodingMap -PyUnicode_Compare -PyUnicode_CompareWithASCIIString -PyUnicode_Concat -PyUnicode_Contains -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 -PyUnicode_DecodeUTF32 -PyUnicode_DecodeUTF32Stateful -PyUnicode_DecodeUTF7 -PyUnicode_DecodeUTF7Stateful -PyUnicode_DecodeUTF8 -PyUnicode_DecodeUTF8Stateful -PyUnicode_DecodeUnicodeEscape -PyUnicode_EncodeCodePage -PyUnicode_EncodeFSDefault -PyUnicode_EncodeLocale -PyUnicode_FSConverter -PyUnicode_FSDecoder -PyUnicode_Find -PyUnicode_FindChar -PyUnicode_Format -PyUnicode_FromEncodedObject -PyUnicode_FromFormat -PyUnicode_FromFormatV -PyUnicode_FromObject -PyUnicode_FromOrdinal -PyUnicode_FromString -PyUnicode_FromStringAndSize -PyUnicode_FromWideChar -PyUnicode_GetDefaultEncoding -PyUnicode_GetLength -PyUnicode_GetSize -PyUnicode_InternFromString -PyUnicode_InternImmortal -PyUnicode_InternInPlace -PyUnicode_IsIdentifier -PyUnicode_Join -PyUnicode_Partition -PyUnicode_RPartition -PyUnicode_RSplit -PyUnicode_ReadChar -PyUnicode_Replace -PyUnicode_Resize -PyUnicode_RichCompare -PyUnicode_Split -PyUnicode_Splitlines -PyUnicode_Substring -PyUnicode_Tailmatch -PyUnicode_Translate -PyUnicode_Type -PyUnicode_WriteChar -PyVarObject -PyWeakReference -PyWeakref_GetObject -PyWeakref_NewProxy -PyWeakref_NewRef -PyWrapperDescr_Type -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 -Py_Exit -Py_FatalError -Py_FileSystemDefaultEncodeErrors -Py_FileSystemDefaultEncoding -Py_Finalize -Py_FinalizeEx -Py_FrozenMain -Py_GenericAlias -Py_GenericAliasType -Py_GetBuildInfo -Py_GetCompiler -Py_GetCopyright -Py_GetExecPrefix -Py_GetPath -Py_GetPlatform -Py_GetPrefix -Py_GetProgramFullPath -Py_GetProgramName -Py_GetPythonHome -Py_GetRecursionLimit -Py_GetVersion -Py_HasFileSystemDefaultEncoding -Py_IncRef -Py_Initialize -Py_InitializeEx -Py_Is -Py_IsFalse -Py_IsInitialized -Py_IsNone -Py_IsTrue -Py_LeaveRecursiveCall -Py_Main -Py_MakePendingCalls -Py_NewInterpreter -Py_NewRef -Py_ReprEnter -Py_ReprLeave -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 +role,name,added,ifdef_note +function,PyAiter_Check,3.10, +function,PyArg_Parse,3.2, +function,PyArg_ParseTuple,3.2, +function,PyArg_ParseTupleAndKeywords,3.2, +function,PyArg_UnpackTuple,3.2, +function,PyArg_VaParse,3.2, +function,PyArg_VaParseTupleAndKeywords,3.2, +function,PyArg_ValidateKeywordArguments,3.2, +var,PyBaseObject_Type,3.2, +function,PyBool_FromLong,3.2, +var,PyBool_Type,3.2, +var,PyByteArrayIter_Type,3.2, +function,PyByteArray_AsString,3.2, +function,PyByteArray_Concat,3.2, +function,PyByteArray_FromObject,3.2, +function,PyByteArray_FromStringAndSize,3.2, +function,PyByteArray_Resize,3.2, +function,PyByteArray_Size,3.2, +var,PyByteArray_Type,3.2, +var,PyBytesIter_Type,3.2, +function,PyBytes_AsString,3.2, +function,PyBytes_AsStringAndSize,3.2, +function,PyBytes_Concat,3.2, +function,PyBytes_ConcatAndDel,3.2, +function,PyBytes_DecodeEscape,3.2, +function,PyBytes_FromFormat,3.2, +function,PyBytes_FromFormatV,3.2, +function,PyBytes_FromObject,3.2, +function,PyBytes_FromString,3.2, +function,PyBytes_FromStringAndSize,3.2, +function,PyBytes_Repr,3.2, +function,PyBytes_Size,3.2, +var,PyBytes_Type,3.2, +type,PyCFunction,3.2, +type,PyCFunctionWithKeywords,3.2, +function,PyCFunction_Call,3.2, +function,PyCFunction_GetFlags,3.2, +function,PyCFunction_GetFunction,3.2, +function,PyCFunction_GetSelf,3.2, +function,PyCFunction_New,3.4, +function,PyCFunction_NewEx,3.2, +var,PyCFunction_Type,3.2, +function,PyCMethod_New,3.9, +function,PyCallIter_New,3.2, +var,PyCallIter_Type,3.2, +function,PyCallable_Check,3.2, +type,PyCapsule_Destructor,3.2, +function,PyCapsule_GetContext,3.2, +function,PyCapsule_GetDestructor,3.2, +function,PyCapsule_GetName,3.2, +function,PyCapsule_GetPointer,3.2, +function,PyCapsule_Import,3.2, +function,PyCapsule_IsValid,3.2, +function,PyCapsule_New,3.2, +function,PyCapsule_SetContext,3.2, +function,PyCapsule_SetDestructor,3.2, +function,PyCapsule_SetName,3.2, +function,PyCapsule_SetPointer,3.2, +var,PyCapsule_Type,3.2, +var,PyClassMethodDescr_Type,3.2, +function,PyCodec_BackslashReplaceErrors,3.2, +function,PyCodec_Decode,3.2, +function,PyCodec_Decoder,3.2, +function,PyCodec_Encode,3.2, +function,PyCodec_Encoder,3.2, +function,PyCodec_IgnoreErrors,3.2, +function,PyCodec_IncrementalDecoder,3.2, +function,PyCodec_IncrementalEncoder,3.2, +function,PyCodec_KnownEncoding,3.2, +function,PyCodec_LookupError,3.2, +function,PyCodec_NameReplaceErrors,3.7, +function,PyCodec_Register,3.2, +function,PyCodec_RegisterError,3.2, +function,PyCodec_ReplaceErrors,3.2, +function,PyCodec_StreamReader,3.2, +function,PyCodec_StreamWriter,3.2, +function,PyCodec_StrictErrors,3.2, +function,PyCodec_Unregister,3.10, +function,PyCodec_XMLCharRefReplaceErrors,3.2, +function,PyComplex_FromDoubles,3.2, +function,PyComplex_ImagAsDouble,3.2, +function,PyComplex_RealAsDouble,3.2, +var,PyComplex_Type,3.2, +function,PyDescr_NewClassMethod,3.2, +function,PyDescr_NewGetSet,3.2, +function,PyDescr_NewMember,3.2, +function,PyDescr_NewMethod,3.2, +var,PyDictItems_Type,3.2, +var,PyDictIterItem_Type,3.2, +var,PyDictIterKey_Type,3.2, +var,PyDictIterValue_Type,3.2, +var,PyDictKeys_Type,3.2, +function,PyDictProxy_New,3.2, +var,PyDictProxy_Type,3.2, +var,PyDictRevIterItem_Type,3.8, +var,PyDictRevIterKey_Type,3.8, +var,PyDictRevIterValue_Type,3.8, +var,PyDictValues_Type,3.2, +function,PyDict_Clear,3.2, +function,PyDict_Contains,3.2, +function,PyDict_Copy,3.2, +function,PyDict_DelItem,3.2, +function,PyDict_DelItemString,3.2, +function,PyDict_GetItem,3.2, +function,PyDict_GetItemString,3.2, +function,PyDict_GetItemWithError,3.2, +function,PyDict_Items,3.2, +function,PyDict_Keys,3.2, +function,PyDict_Merge,3.2, +function,PyDict_MergeFromSeq2,3.2, +function,PyDict_New,3.2, +function,PyDict_Next,3.2, +function,PyDict_SetItem,3.2, +function,PyDict_SetItemString,3.2, +function,PyDict_Size,3.2, +var,PyDict_Type,3.2, +function,PyDict_Update,3.2, +function,PyDict_Values,3.2, +var,PyEllipsis_Type,3.2, +var,PyEnum_Type,3.2, +function,PyErr_BadArgument,3.2, +function,PyErr_BadInternalCall,3.2, +function,PyErr_CheckSignals,3.2, +function,PyErr_Clear,3.2, +function,PyErr_Display,3.2, +function,PyErr_ExceptionMatches,3.2, +function,PyErr_Fetch,3.2, +function,PyErr_Format,3.2, +function,PyErr_FormatV,3.5, +function,PyErr_GetExcInfo,3.7, +function,PyErr_GivenExceptionMatches,3.2, +function,PyErr_NewException,3.2, +function,PyErr_NewExceptionWithDoc,3.2, +function,PyErr_NoMemory,3.2, +function,PyErr_NormalizeException,3.2, +function,PyErr_Occurred,3.2, +function,PyErr_Print,3.2, +function,PyErr_PrintEx,3.2, +function,PyErr_ProgramText,3.2, +function,PyErr_ResourceWarning,3.6, +function,PyErr_Restore,3.2, +function,PyErr_SetExcFromWindowsErr,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilename,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilenameObject,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilenameObjects,3.7,on Windows +function,PyErr_SetExcInfo,3.7, +function,PyErr_SetFromErrno,3.2, +function,PyErr_SetFromErrnoWithFilename,3.2, +function,PyErr_SetFromErrnoWithFilenameObject,3.2, +function,PyErr_SetFromErrnoWithFilenameObjects,3.7, +function,PyErr_SetFromWindowsErr,3.7,on Windows +function,PyErr_SetFromWindowsErrWithFilename,3.7,on Windows +function,PyErr_SetImportError,3.7, +function,PyErr_SetImportErrorSubclass,3.6, +function,PyErr_SetInterrupt,3.2, +function,PyErr_SetInterruptEx,3.10, +function,PyErr_SetNone,3.2, +function,PyErr_SetObject,3.2, +function,PyErr_SetString,3.2, +function,PyErr_SyntaxLocation,3.2, +function,PyErr_SyntaxLocationEx,3.7, +function,PyErr_WarnEx,3.2, +function,PyErr_WarnExplicit,3.2, +function,PyErr_WarnFormat,3.2, +function,PyErr_WriteUnraisable,3.2, +function,PyEval_AcquireLock,3.2, +function,PyEval_AcquireThread,3.2, +function,PyEval_CallFunction,3.2, +function,PyEval_CallMethod,3.2, +function,PyEval_CallObjectWithKeywords,3.2, +function,PyEval_EvalCode,3.2, +function,PyEval_EvalCodeEx,3.2, +function,PyEval_EvalFrame,3.2, +function,PyEval_EvalFrameEx,3.2, +function,PyEval_GetBuiltins,3.2, +function,PyEval_GetFrame,3.2, +function,PyEval_GetFuncDesc,3.2, +function,PyEval_GetFuncName,3.2, +function,PyEval_GetGlobals,3.2, +function,PyEval_GetLocals,3.2, +function,PyEval_InitThreads,3.2, +function,PyEval_ReleaseLock,3.2, +function,PyEval_ReleaseThread,3.2, +function,PyEval_RestoreThread,3.2, +function,PyEval_SaveThread,3.2, +function,PyEval_ThreadsInitialized,3.2, +var,PyExc_ArithmeticError,3.2, +var,PyExc_AssertionError,3.2, +var,PyExc_AttributeError,3.2, +var,PyExc_BaseException,3.2, +var,PyExc_BlockingIOError,3.7, +var,PyExc_BrokenPipeError,3.7, +var,PyExc_BufferError,3.2, +var,PyExc_BytesWarning,3.2, +var,PyExc_ChildProcessError,3.7, +var,PyExc_ConnectionAbortedError,3.7, +var,PyExc_ConnectionError,3.7, +var,PyExc_ConnectionRefusedError,3.7, +var,PyExc_ConnectionResetError,3.7, +var,PyExc_DeprecationWarning,3.2, +var,PyExc_EOFError,3.2, +var,PyExc_EncodingWarning,3.10, +var,PyExc_EnvironmentError,3.2, +var,PyExc_Exception,3.2, +var,PyExc_FileExistsError,3.7, +var,PyExc_FileNotFoundError,3.7, +var,PyExc_FloatingPointError,3.2, +var,PyExc_FutureWarning,3.2, +var,PyExc_GeneratorExit,3.2, +var,PyExc_IOError,3.2, +var,PyExc_ImportError,3.2, +var,PyExc_ImportWarning,3.2, +var,PyExc_IndentationError,3.2, +var,PyExc_IndexError,3.2, +var,PyExc_InterruptedError,3.7, +var,PyExc_IsADirectoryError,3.7, +var,PyExc_KeyError,3.2, +var,PyExc_KeyboardInterrupt,3.2, +var,PyExc_LookupError,3.2, +var,PyExc_MemoryError,3.2, +var,PyExc_ModuleNotFoundError,3.6, +var,PyExc_NameError,3.2, +var,PyExc_NotADirectoryError,3.7, +var,PyExc_NotImplementedError,3.2, +var,PyExc_OSError,3.2, +var,PyExc_OverflowError,3.2, +var,PyExc_PendingDeprecationWarning,3.2, +var,PyExc_PermissionError,3.7, +var,PyExc_ProcessLookupError,3.7, +var,PyExc_RecursionError,3.7, +var,PyExc_ReferenceError,3.2, +var,PyExc_ResourceWarning,3.7, +var,PyExc_RuntimeError,3.2, +var,PyExc_RuntimeWarning,3.2, +var,PyExc_StopAsyncIteration,3.7, +var,PyExc_StopIteration,3.2, +var,PyExc_SyntaxError,3.2, +var,PyExc_SyntaxWarning,3.2, +var,PyExc_SystemError,3.2, +var,PyExc_SystemExit,3.2, +var,PyExc_TabError,3.2, +var,PyExc_TimeoutError,3.7, +var,PyExc_TypeError,3.2, +var,PyExc_UnboundLocalError,3.2, +var,PyExc_UnicodeDecodeError,3.2, +var,PyExc_UnicodeEncodeError,3.2, +var,PyExc_UnicodeError,3.2, +var,PyExc_UnicodeTranslateError,3.2, +var,PyExc_UnicodeWarning,3.2, +var,PyExc_UserWarning,3.2, +var,PyExc_ValueError,3.2, +var,PyExc_Warning,3.2, +var,PyExc_WindowsError,3.7,on Windows +var,PyExc_ZeroDivisionError,3.2, +function,PyExceptionClass_Name,3.8, +function,PyException_GetCause,3.2, +function,PyException_GetContext,3.2, +function,PyException_GetTraceback,3.2, +function,PyException_SetCause,3.2, +function,PyException_SetContext,3.2, +function,PyException_SetTraceback,3.2, +function,PyFile_FromFd,3.2, +function,PyFile_GetLine,3.2, +function,PyFile_WriteObject,3.2, +function,PyFile_WriteString,3.2, +var,PyFilter_Type,3.2, +function,PyFloat_AsDouble,3.2, +function,PyFloat_FromDouble,3.2, +function,PyFloat_FromString,3.2, +function,PyFloat_GetInfo,3.2, +function,PyFloat_GetMax,3.2, +function,PyFloat_GetMin,3.2, +var,PyFloat_Type,3.2, +function,PyFrame_GetCode,3.10, +function,PyFrame_GetLineNumber,3.10, +function,PyFrozenSet_New,3.2, +var,PyFrozenSet_Type,3.2, +function,PyGC_Collect,3.2, +function,PyGC_Disable,3.10, +function,PyGC_Enable,3.10, +function,PyGC_IsEnabled,3.10, +function,PyGILState_Ensure,3.2, +function,PyGILState_GetThisThreadState,3.2, +function,PyGILState_Release,3.2, +type,PyGILState_STATE,3.2, +type,PyGetSetDef,3.2, +var,PyGetSetDescr_Type,3.2, +function,PyImport_AddModule,3.2, +function,PyImport_AddModuleObject,3.7, +function,PyImport_AppendInittab,3.2, +function,PyImport_ExecCodeModule,3.2, +function,PyImport_ExecCodeModuleEx,3.2, +function,PyImport_ExecCodeModuleObject,3.7, +function,PyImport_ExecCodeModuleWithPathnames,3.2, +function,PyImport_GetImporter,3.2, +function,PyImport_GetMagicNumber,3.2, +function,PyImport_GetMagicTag,3.2, +function,PyImport_GetModule,3.8, +function,PyImport_GetModuleDict,3.2, +function,PyImport_Import,3.2, +function,PyImport_ImportFrozenModule,3.2, +function,PyImport_ImportFrozenModuleObject,3.7, +function,PyImport_ImportModule,3.2, +function,PyImport_ImportModuleLevel,3.2, +function,PyImport_ImportModuleLevelObject,3.7, +function,PyImport_ImportModuleNoBlock,3.2, +function,PyImport_ReloadModule,3.2, +function,PyIndex_Check,3.8, +type,PyInterpreterState,3.2, +function,PyInterpreterState_Clear,3.2, +function,PyInterpreterState_Delete,3.2, +function,PyInterpreterState_Get,3.9, +function,PyInterpreterState_GetDict,3.8, +function,PyInterpreterState_GetID,3.7, +function,PyInterpreterState_New,3.2, +function,PyIter_Check,3.8, +function,PyIter_Next,3.2, +function,PyIter_Send,3.10, +var,PyListIter_Type,3.2, +var,PyListRevIter_Type,3.2, +function,PyList_Append,3.2, +function,PyList_AsTuple,3.2, +function,PyList_GetItem,3.2, +function,PyList_GetSlice,3.2, +function,PyList_Insert,3.2, +function,PyList_New,3.2, +function,PyList_Reverse,3.2, +function,PyList_SetItem,3.2, +function,PyList_SetSlice,3.2, +function,PyList_Size,3.2, +function,PyList_Sort,3.2, +var,PyList_Type,3.2, +type,PyLongObject,3.2, +var,PyLongRangeIter_Type,3.2, +function,PyLong_AsDouble,3.2, +function,PyLong_AsLong,3.2, +function,PyLong_AsLongAndOverflow,3.2, +function,PyLong_AsLongLong,3.2, +function,PyLong_AsLongLongAndOverflow,3.2, +function,PyLong_AsSize_t,3.2, +function,PyLong_AsSsize_t,3.2, +function,PyLong_AsUnsignedLong,3.2, +function,PyLong_AsUnsignedLongLong,3.2, +function,PyLong_AsUnsignedLongLongMask,3.2, +function,PyLong_AsUnsignedLongMask,3.2, +function,PyLong_AsVoidPtr,3.2, +function,PyLong_FromDouble,3.2, +function,PyLong_FromLong,3.2, +function,PyLong_FromLongLong,3.2, +function,PyLong_FromSize_t,3.2, +function,PyLong_FromSsize_t,3.2, +function,PyLong_FromString,3.2, +function,PyLong_FromUnsignedLong,3.2, +function,PyLong_FromUnsignedLongLong,3.2, +function,PyLong_FromVoidPtr,3.2, +function,PyLong_GetInfo,3.2, +var,PyLong_Type,3.2, +var,PyMap_Type,3.2, +function,PyMapping_Check,3.2, +function,PyMapping_GetItemString,3.2, +function,PyMapping_HasKey,3.2, +function,PyMapping_HasKeyString,3.2, +function,PyMapping_Items,3.2, +function,PyMapping_Keys,3.2, +function,PyMapping_Length,3.2, +function,PyMapping_SetItemString,3.2, +function,PyMapping_Size,3.2, +function,PyMapping_Values,3.2, +function,PyMem_Calloc,3.7, +function,PyMem_Free,3.2, +function,PyMem_Malloc,3.2, +function,PyMem_Realloc,3.2, +type,PyMemberDef,3.2, +var,PyMemberDescr_Type,3.2, +function,PyMemoryView_FromMemory,3.7, +function,PyMemoryView_FromObject,3.2, +function,PyMemoryView_GetContiguous,3.2, +var,PyMemoryView_Type,3.2, +type,PyMethodDef,3.2, +var,PyMethodDescr_Type,3.2, +type,PyModuleDef,3.2, +type,PyModuleDef_Base,3.2, +function,PyModuleDef_Init,3.5, +var,PyModuleDef_Type,3.5, +function,PyModule_AddFunctions,3.7, +function,PyModule_AddIntConstant,3.2, +function,PyModule_AddObject,3.2, +function,PyModule_AddObjectRef,3.10, +function,PyModule_AddStringConstant,3.2, +function,PyModule_AddType,3.10, +function,PyModule_Create2,3.2, +function,PyModule_ExecDef,3.7, +function,PyModule_FromDefAndSpec2,3.7, +function,PyModule_GetDef,3.2, +function,PyModule_GetDict,3.2, +function,PyModule_GetFilename,3.2, +function,PyModule_GetFilenameObject,3.2, +function,PyModule_GetName,3.2, +function,PyModule_GetNameObject,3.7, +function,PyModule_GetState,3.2, +function,PyModule_New,3.2, +function,PyModule_NewObject,3.7, +function,PyModule_SetDocString,3.7, +var,PyModule_Type,3.2, +function,PyNumber_Absolute,3.2, +function,PyNumber_Add,3.2, +function,PyNumber_And,3.2, +function,PyNumber_AsSsize_t,3.2, +function,PyNumber_Check,3.2, +function,PyNumber_Divmod,3.2, +function,PyNumber_Float,3.2, +function,PyNumber_FloorDivide,3.2, +function,PyNumber_InPlaceAdd,3.2, +function,PyNumber_InPlaceAnd,3.2, +function,PyNumber_InPlaceFloorDivide,3.2, +function,PyNumber_InPlaceLshift,3.2, +function,PyNumber_InPlaceMatrixMultiply,3.7, +function,PyNumber_InPlaceMultiply,3.2, +function,PyNumber_InPlaceOr,3.2, +function,PyNumber_InPlacePower,3.2, +function,PyNumber_InPlaceRemainder,3.2, +function,PyNumber_InPlaceRshift,3.2, +function,PyNumber_InPlaceSubtract,3.2, +function,PyNumber_InPlaceTrueDivide,3.2, +function,PyNumber_InPlaceXor,3.2, +function,PyNumber_Index,3.2, +function,PyNumber_Invert,3.2, +function,PyNumber_Long,3.2, +function,PyNumber_Lshift,3.2, +function,PyNumber_MatrixMultiply,3.7, +function,PyNumber_Multiply,3.2, +function,PyNumber_Negative,3.2, +function,PyNumber_Or,3.2, +function,PyNumber_Positive,3.2, +function,PyNumber_Power,3.2, +function,PyNumber_Remainder,3.2, +function,PyNumber_Rshift,3.2, +function,PyNumber_Subtract,3.2, +function,PyNumber_ToBase,3.2, +function,PyNumber_TrueDivide,3.2, +function,PyNumber_Xor,3.2, +function,PyOS_AfterFork,3.2,on platforms with fork() +function,PyOS_AfterFork_Child,3.7,on platforms with fork() +function,PyOS_AfterFork_Parent,3.7,on platforms with fork() +function,PyOS_BeforeFork,3.7,on platforms with fork() +function,PyOS_CheckStack,3.7,on platforms with USE_STACKCHECK +function,PyOS_FSPath,3.6, +var,PyOS_InputHook,3.2, +function,PyOS_InterruptOccurred,3.2, +function,PyOS_double_to_string,3.2, +function,PyOS_getsig,3.2, +function,PyOS_mystricmp,3.2, +function,PyOS_mystrnicmp,3.2, +function,PyOS_setsig,3.2, +type,PyOS_sighandler_t,3.2, +function,PyOS_snprintf,3.2, +function,PyOS_string_to_double,3.2, +function,PyOS_strtol,3.2, +function,PyOS_strtoul,3.2, +function,PyOS_vsnprintf,3.2, +type,PyObject,3.2, +function,PyObject_ASCII,3.2, +function,PyObject_AsFileDescriptor,3.2, +function,PyObject_Bytes,3.2, +function,PyObject_Call,3.2, +function,PyObject_CallFunction,3.2, +function,PyObject_CallFunctionObjArgs,3.2, +function,PyObject_CallMethod,3.2, +function,PyObject_CallMethodObjArgs,3.2, +function,PyObject_CallNoArgs,3.10, +function,PyObject_CallObject,3.2, +function,PyObject_Calloc,3.7, +function,PyObject_ClearWeakRefs,3.2, +function,PyObject_DelItem,3.2, +function,PyObject_DelItemString,3.2, +function,PyObject_Dir,3.2, +function,PyObject_Format,3.2, +function,PyObject_Free,3.2, +function,PyObject_GC_Del,3.2, +function,PyObject_GC_IsFinalized,3.9, +function,PyObject_GC_IsTracked,3.9, +function,PyObject_GC_Track,3.2, +function,PyObject_GC_UnTrack,3.2, +function,PyObject_GenericGetAttr,3.2, +function,PyObject_GenericGetDict,3.10, +function,PyObject_GenericSetAttr,3.2, +function,PyObject_GenericSetDict,3.7, +function,PyObject_GetAiter,3.10, +function,PyObject_GetAttr,3.2, +function,PyObject_GetAttrString,3.2, +function,PyObject_GetItem,3.2, +function,PyObject_GetIter,3.2, +function,PyObject_HasAttr,3.2, +function,PyObject_HasAttrString,3.2, +function,PyObject_Hash,3.2, +function,PyObject_HashNotImplemented,3.2, +function,PyObject_Init,3.2, +function,PyObject_InitVar,3.2, +function,PyObject_IsInstance,3.2, +function,PyObject_IsSubclass,3.2, +function,PyObject_IsTrue,3.2, +function,PyObject_Length,3.2, +function,PyObject_Malloc,3.2, +function,PyObject_Not,3.2, +function,PyObject_Realloc,3.2, +function,PyObject_Repr,3.2, +function,PyObject_RichCompare,3.2, +function,PyObject_RichCompareBool,3.2, +function,PyObject_SelfIter,3.2, +function,PyObject_SetAttr,3.2, +function,PyObject_SetAttrString,3.2, +function,PyObject_SetItem,3.2, +function,PyObject_Size,3.2, +function,PyObject_Str,3.2, +function,PyObject_Type,3.2, +var,PyProperty_Type,3.2, +var,PyRangeIter_Type,3.2, +var,PyRange_Type,3.2, +var,PyReversed_Type,3.2, +function,PySeqIter_New,3.2, +var,PySeqIter_Type,3.2, +function,PySequence_Check,3.2, +function,PySequence_Concat,3.2, +function,PySequence_Contains,3.2, +function,PySequence_Count,3.2, +function,PySequence_DelItem,3.2, +function,PySequence_DelSlice,3.2, +function,PySequence_Fast,3.2, +function,PySequence_GetItem,3.2, +function,PySequence_GetSlice,3.2, +function,PySequence_In,3.2, +function,PySequence_InPlaceConcat,3.2, +function,PySequence_InPlaceRepeat,3.2, +function,PySequence_Index,3.2, +function,PySequence_Length,3.2, +function,PySequence_List,3.2, +function,PySequence_Repeat,3.2, +function,PySequence_SetItem,3.2, +function,PySequence_SetSlice,3.2, +function,PySequence_Size,3.2, +function,PySequence_Tuple,3.2, +var,PySetIter_Type,3.2, +function,PySet_Add,3.2, +function,PySet_Clear,3.2, +function,PySet_Contains,3.2, +function,PySet_Discard,3.2, +function,PySet_New,3.2, +function,PySet_Pop,3.2, +function,PySet_Size,3.2, +var,PySet_Type,3.2, +function,PySlice_AdjustIndices,3.7, +function,PySlice_GetIndices,3.2, +function,PySlice_GetIndicesEx,3.2, +function,PySlice_New,3.2, +var,PySlice_Type,3.2, +function,PySlice_Unpack,3.7, +function,PyState_AddModule,3.3, +function,PyState_FindModule,3.2, +function,PyState_RemoveModule,3.3, +type,PyStructSequence_Desc,3.2, +type,PyStructSequence_Field,3.2, +function,PyStructSequence_GetItem,3.2, +function,PyStructSequence_New,3.2, +function,PyStructSequence_NewType,3.2, +function,PyStructSequence_SetItem,3.2, +var,PySuper_Type,3.2, +function,PySys_AddWarnOption,3.2, +function,PySys_AddWarnOptionUnicode,3.2, +function,PySys_AddXOption,3.7, +function,PySys_FormatStderr,3.2, +function,PySys_FormatStdout,3.2, +function,PySys_GetObject,3.2, +function,PySys_GetXOptions,3.7, +function,PySys_HasWarnOptions,3.2, +function,PySys_ResetWarnOptions,3.2, +function,PySys_SetArgv,3.2, +function,PySys_SetArgvEx,3.2, +function,PySys_SetObject,3.2, +function,PySys_SetPath,3.2, +function,PySys_WriteStderr,3.2, +function,PySys_WriteStdout,3.2, +type,PyThreadState,3.2, +function,PyThreadState_Clear,3.2, +function,PyThreadState_Delete,3.2, +function,PyThreadState_Get,3.2, +function,PyThreadState_GetDict,3.2, +function,PyThreadState_GetFrame,3.10, +function,PyThreadState_GetID,3.10, +function,PyThreadState_GetInterpreter,3.10, +function,PyThreadState_New,3.2, +function,PyThreadState_SetAsyncExc,3.2, +function,PyThreadState_Swap,3.2, +function,PyThread_GetInfo,3.3, +function,PyThread_ReInitTLS,3.2, +function,PyThread_acquire_lock,3.2, +function,PyThread_acquire_lock_timed,3.2, +function,PyThread_allocate_lock,3.2, +function,PyThread_create_key,3.2, +function,PyThread_delete_key,3.2, +function,PyThread_delete_key_value,3.2, +function,PyThread_exit_thread,3.2, +function,PyThread_free_lock,3.2, +function,PyThread_get_key_value,3.2, +function,PyThread_get_stacksize,3.2, +function,PyThread_get_thread_ident,3.2, +function,PyThread_get_thread_native_id,3.2, +function,PyThread_init_thread,3.2, +function,PyThread_release_lock,3.2, +function,PyThread_set_key_value,3.2, +function,PyThread_set_stacksize,3.2, +function,PyThread_start_new_thread,3.2, +function,PyThread_tss_alloc,3.7, +function,PyThread_tss_create,3.7, +function,PyThread_tss_delete,3.7, +function,PyThread_tss_free,3.7, +function,PyThread_tss_get,3.7, +function,PyThread_tss_is_created,3.7, +function,PyThread_tss_set,3.7, +function,PyTraceBack_Here,3.2, +function,PyTraceBack_Print,3.2, +var,PyTraceBack_Type,3.2, +var,PyTupleIter_Type,3.2, +function,PyTuple_GetItem,3.2, +function,PyTuple_GetSlice,3.2, +function,PyTuple_New,3.2, +function,PyTuple_Pack,3.2, +function,PyTuple_SetItem,3.2, +function,PyTuple_Size,3.2, +var,PyTuple_Type,3.2, +type,PyTypeObject,3.2, +function,PyType_ClearCache,3.2, +function,PyType_FromModuleAndSpec,3.10, +function,PyType_FromSpec,3.2, +function,PyType_FromSpecWithBases,3.3, +function,PyType_GenericAlloc,3.2, +function,PyType_GenericNew,3.2, +function,PyType_GetFlags,3.2, +function,PyType_GetModule,3.10, +function,PyType_GetModuleState,3.10, +function,PyType_GetSlot,3.4, +function,PyType_IsSubtype,3.2, +function,PyType_Modified,3.2, +function,PyType_Ready,3.2, +type,PyType_Slot,3.2, +type,PyType_Spec,3.2, +var,PyType_Type,3.2, +function,PyUnicodeDecodeError_Create,3.2, +function,PyUnicodeDecodeError_GetEncoding,3.2, +function,PyUnicodeDecodeError_GetEnd,3.2, +function,PyUnicodeDecodeError_GetObject,3.2, +function,PyUnicodeDecodeError_GetReason,3.2, +function,PyUnicodeDecodeError_GetStart,3.2, +function,PyUnicodeDecodeError_SetEnd,3.2, +function,PyUnicodeDecodeError_SetReason,3.2, +function,PyUnicodeDecodeError_SetStart,3.2, +function,PyUnicodeEncodeError_GetEncoding,3.2, +function,PyUnicodeEncodeError_GetEnd,3.2, +function,PyUnicodeEncodeError_GetObject,3.2, +function,PyUnicodeEncodeError_GetReason,3.2, +function,PyUnicodeEncodeError_GetStart,3.2, +function,PyUnicodeEncodeError_SetEnd,3.2, +function,PyUnicodeEncodeError_SetReason,3.2, +function,PyUnicodeEncodeError_SetStart,3.2, +var,PyUnicodeIter_Type,3.2, +function,PyUnicodeTranslateError_GetEnd,3.2, +function,PyUnicodeTranslateError_GetObject,3.2, +function,PyUnicodeTranslateError_GetReason,3.2, +function,PyUnicodeTranslateError_GetStart,3.2, +function,PyUnicodeTranslateError_SetEnd,3.2, +function,PyUnicodeTranslateError_SetReason,3.2, +function,PyUnicodeTranslateError_SetStart,3.2, +function,PyUnicode_Append,3.2, +function,PyUnicode_AppendAndDel,3.2, +function,PyUnicode_AsASCIIString,3.2, +function,PyUnicode_AsCharmapString,3.2, +function,PyUnicode_AsDecodedObject,3.2, +function,PyUnicode_AsDecodedUnicode,3.2, +function,PyUnicode_AsEncodedObject,3.2, +function,PyUnicode_AsEncodedString,3.2, +function,PyUnicode_AsEncodedUnicode,3.2, +function,PyUnicode_AsLatin1String,3.2, +function,PyUnicode_AsMBCSString,3.7,on Windows +function,PyUnicode_AsRawUnicodeEscapeString,3.2, +function,PyUnicode_AsUCS4,3.7, +function,PyUnicode_AsUCS4Copy,3.7, +function,PyUnicode_AsUTF16String,3.2, +function,PyUnicode_AsUTF32String,3.2, +function,PyUnicode_AsUTF8AndSize,3.10, +function,PyUnicode_AsUTF8String,3.2, +function,PyUnicode_AsUnicodeEscapeString,3.2, +function,PyUnicode_AsWideChar,3.2, +function,PyUnicode_AsWideCharString,3.7, +function,PyUnicode_BuildEncodingMap,3.2, +function,PyUnicode_Compare,3.2, +function,PyUnicode_CompareWithASCIIString,3.2, +function,PyUnicode_Concat,3.2, +function,PyUnicode_Contains,3.2, +function,PyUnicode_Count,3.2, +function,PyUnicode_Decode,3.2, +function,PyUnicode_DecodeASCII,3.2, +function,PyUnicode_DecodeCharmap,3.2, +function,PyUnicode_DecodeCodePageStateful,3.7,on Windows +function,PyUnicode_DecodeFSDefault,3.2, +function,PyUnicode_DecodeFSDefaultAndSize,3.2, +function,PyUnicode_DecodeLatin1,3.2, +function,PyUnicode_DecodeLocale,3.7, +function,PyUnicode_DecodeLocaleAndSize,3.7, +function,PyUnicode_DecodeMBCS,3.7,on Windows +function,PyUnicode_DecodeMBCSStateful,3.7,on Windows +function,PyUnicode_DecodeRawUnicodeEscape,3.2, +function,PyUnicode_DecodeUTF16,3.2, +function,PyUnicode_DecodeUTF16Stateful,3.2, +function,PyUnicode_DecodeUTF32,3.2, +function,PyUnicode_DecodeUTF32Stateful,3.2, +function,PyUnicode_DecodeUTF7,3.2, +function,PyUnicode_DecodeUTF7Stateful,3.2, +function,PyUnicode_DecodeUTF8,3.2, +function,PyUnicode_DecodeUTF8Stateful,3.2, +function,PyUnicode_DecodeUnicodeEscape,3.2, +function,PyUnicode_EncodeCodePage,3.7,on Windows +function,PyUnicode_EncodeFSDefault,3.2, +function,PyUnicode_EncodeLocale,3.7, +function,PyUnicode_FSConverter,3.2, +function,PyUnicode_FSDecoder,3.2, +function,PyUnicode_Find,3.2, +function,PyUnicode_FindChar,3.7, +function,PyUnicode_Format,3.2, +function,PyUnicode_FromEncodedObject,3.2, +function,PyUnicode_FromFormat,3.2, +function,PyUnicode_FromFormatV,3.2, +function,PyUnicode_FromObject,3.2, +function,PyUnicode_FromOrdinal,3.2, +function,PyUnicode_FromString,3.2, +function,PyUnicode_FromStringAndSize,3.2, +function,PyUnicode_FromWideChar,3.2, +function,PyUnicode_GetDefaultEncoding,3.2, +function,PyUnicode_GetLength,3.7, +function,PyUnicode_GetSize,3.2, +function,PyUnicode_InternFromString,3.2, +function,PyUnicode_InternImmortal,3.2, +function,PyUnicode_InternInPlace,3.2, +function,PyUnicode_IsIdentifier,3.2, +function,PyUnicode_Join,3.2, +function,PyUnicode_Partition,3.2, +function,PyUnicode_RPartition,3.2, +function,PyUnicode_RSplit,3.2, +function,PyUnicode_ReadChar,3.7, +function,PyUnicode_Replace,3.2, +function,PyUnicode_Resize,3.2, +function,PyUnicode_RichCompare,3.2, +function,PyUnicode_Split,3.2, +function,PyUnicode_Splitlines,3.2, +function,PyUnicode_Substring,3.7, +function,PyUnicode_Tailmatch,3.2, +function,PyUnicode_Translate,3.2, +var,PyUnicode_Type,3.2, +function,PyUnicode_WriteChar,3.7, +type,PyVarObject,3.2, +type,PyWeakReference,3.2, +function,PyWeakref_GetObject,3.2, +function,PyWeakref_NewProxy,3.2, +function,PyWeakref_NewRef,3.2, +var,PyWrapperDescr_Type,3.2, +function,PyWrapper_New,3.2, +var,PyZip_Type,3.2, +function,Py_AddPendingCall,3.2, +function,Py_AtExit,3.2, +macro,Py_BEGIN_ALLOW_THREADS,3.2, +macro,Py_BLOCK_THREADS,3.2, +function,Py_BuildValue,3.2, +function,Py_BytesMain,3.8, +function,Py_CompileString,3.2, +function,Py_DecRef,3.2, +function,Py_DecodeLocale,3.7, +macro,Py_END_ALLOW_THREADS,3.2, +function,Py_EncodeLocale,3.7, +function,Py_EndInterpreter,3.2, +function,Py_EnterRecursiveCall,3.9, +function,Py_Exit,3.2, +function,Py_FatalError,3.2, +var,Py_FileSystemDefaultEncodeErrors,3.10, +var,Py_FileSystemDefaultEncoding,3.2, +function,Py_Finalize,3.2, +function,Py_FinalizeEx,3.6, +function,Py_FrozenMain,3.10, +function,Py_GenericAlias,3.9, +function,Py_GenericAliasType,3.9, +function,Py_GetBuildInfo,3.2, +function,Py_GetCompiler,3.2, +function,Py_GetCopyright,3.2, +function,Py_GetExecPrefix,3.2, +function,Py_GetPath,3.2, +function,Py_GetPlatform,3.2, +function,Py_GetPrefix,3.2, +function,Py_GetProgramFullPath,3.2, +function,Py_GetProgramName,3.2, +function,Py_GetPythonHome,3.2, +function,Py_GetRecursionLimit,3.2, +function,Py_GetVersion,3.2, +var,Py_HasFileSystemDefaultEncoding,3.2, +function,Py_IncRef,3.2, +function,Py_Initialize,3.2, +function,Py_InitializeEx,3.2, +function,Py_Is,3.10, +function,Py_IsFalse,3.10, +function,Py_IsInitialized,3.2, +function,Py_IsNone,3.10, +function,Py_IsTrue,3.10, +function,Py_LeaveRecursiveCall,3.9, +function,Py_Main,3.2, +function,Py_MakePendingCalls,3.2, +function,Py_NewInterpreter,3.2, +function,Py_NewRef,3.10, +function,Py_ReprEnter,3.2, +function,Py_ReprLeave,3.2, +function,Py_SetPath,3.7, +function,Py_SetProgramName,3.2, +function,Py_SetPythonHome,3.2, +function,Py_SetRecursionLimit,3.2, +type,Py_UCS4,3.2, +macro,Py_UNBLOCK_THREADS,3.2, +var,Py_UTF8Mode,3.8, +function,Py_VaBuildValue,3.2, +function,Py_XNewRef,3.10, +type,Py_intptr_t,3.2, +type,Py_ssize_t,3.2, +type,Py_uintptr_t,3.2, +type,_frame,3.2, +type,_node,3.2, +type,allocfunc,3.2, +type,binaryfunc,3.2, +type,descrgetfunc,3.2, +type,descrsetfunc,3.2, +type,destructor,3.2, +type,getattrfunc,3.2, +type,getattrofunc,3.2, +type,getiterfunc,3.2, +type,getter,3.2, +type,hashfunc,3.2, +type,initproc,3.2, +type,inquiry,3.2, +type,iternextfunc,3.2, +type,lenfunc,3.2, +type,newfunc,3.2, +type,objobjargproc,3.2, +type,objobjproc,3.2, +type,reprfunc,3.2, +type,richcmpfunc,3.2, +type,setattrfunc,3.2, +type,setattrofunc,3.2, +type,setter,3.2, +type,ssizeargfunc,3.2, +type,ssizeobjargproc,3.2, +type,ssizessizeargfunc,3.2, +type,ssizessizeobjargproc,3.2, +type,symtable,3.2, +type,ternaryfunc,3.2, +type,traverseproc,3.2, +type,unaryfunc,3.2, +type,visitproc,3.2, diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py index 76c9d920cbe31f..489f06613eb310 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -10,8 +10,10 @@ * stable API annotations - Usage: Set the `refcount_file` config value to the path to the reference + Usage: + * Set the `refcount_file` config value to the path to the reference count data file. + * Set the `stable_abi_file` config value to the path to stable ABI list. :copyright: Copyright 2007-2014 by Georg Brandl. :license: Python license. @@ -20,11 +22,23 @@ from os import path from docutils import nodes from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from docutils.statemachine import StringList +import csv from sphinx import addnodes from sphinx.domains.c import CObject +REST_ROLE_MAP = { + 'function': 'func', + 'var': 'data', + 'type': 'type', + 'macro': 'macro', + 'type': 'type', +} + + class RCEntry: def __init__(self, name): self.name = name @@ -33,12 +47,10 @@ def __init__(self, name): self.result_refs = None -class Annotations(dict): - @classmethod - def fromfile(cls, filename): - d = cls() - fp = open(filename, 'r') - try: +class Annotations: + def __init__(self, refcount_filename, stable_abi_file): + self.refcount_data = {} + with open(refcount_filename, 'r') as fp: for line in fp: line = line.strip() if line[:1] in ("", "#"): @@ -50,9 +62,9 @@ def fromfile(cls, filename): function, type, arg, refcount, comment = parts # Get the entry, creating it if needed: try: - entry = d[function] + entry = self.refcount_data[function] except KeyError: - entry = d[function] = RCEntry(function) + entry = self.refcount_data[function] = RCEntry(function) if not refcount or refcount == "null": refcount = None else: @@ -64,27 +76,58 @@ def fromfile(cls, filename): else: entry.result_type = type entry.result_refs = refcount - finally: - fp.close() - return d + + self.stable_abi_data = {} + with open(stable_abi_file, 'r') as fp: + for record in csv.DictReader(fp): + role = record['role'] + name = record['name'] + self.stable_abi_data[name] = record def add_annotations(self, app, doctree): for node in doctree.traverse(addnodes.desc_content): par = node.parent if par['domain'] != 'c': continue - if par['stableabi']: - node.insert(0, nodes.emphasis(' Part of the stable ABI.', - ' Part of the stable ABI.', - classes=['stableabi'])) - if par['objtype'] != 'function': - continue if not par[0].has_key('ids') or not par[0]['ids']: continue name = par[0]['ids'][0] if name.startswith("c."): name = name[2:] - entry = self.get(name) + + objtype = par['objtype'] + + # Stable ABI annotation. These have two forms: + # Part of the [Stable ABI](link). + # Part of the [Stable ABI](link) since version X.Y. + record = self.stable_abi_data.get(name) + if record: + if record['role'] != objtype: + raise ValueError( + f"Object type mismatch in limited API annotation " + f"for {name}: {record['role']!r} != {objtype!r}") + stable_added = record['added'] + message = ' Part of the ' + emph_node = nodes.emphasis(message, message, + classes=['stableabi']) + ref_node = addnodes.pending_xref( + 'Stable ABI', refdomain="std", reftarget='stable', + reftype='ref', refexplicit="False") + ref_node += nodes.Text('Stable ABI') + emph_node += ref_node + if record['ifdef_note']: + emph_node += nodes.Text(' ' + record['ifdef_note']) + if stable_added == '3.2': + # Stable ABI was introduced in 3.2. + emph_node += nodes.Text('.') + else: + emph_node += nodes.Text(f' since version {stable_added}.') + node.insert(0, emph_node) + + # Return value annotation + if objtype != 'function': + continue + entry = self.refcount_data.get(name) if not entry: continue elif not entry.result_type.endswith("Object*"): @@ -99,13 +142,36 @@ def add_annotations(self, app, doctree): def init_annotations(app): - refcounts = Annotations.fromfile( - path.join(app.srcdir, app.config.refcount_file)) - app.connect('doctree-read', refcounts.add_annotations) + annotations = Annotations( + path.join(app.srcdir, app.config.refcount_file), + path.join(app.srcdir, app.config.stable_abi_file), + ) + app.connect('doctree-read', annotations.add_annotations) + + class LimitedAPIList(Directive): + + has_content = False + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + + def run(self): + content = [] + for record in annotations.stable_abi_data.values(): + role = REST_ROLE_MAP[record['role']] + name = record['name'] + content.append(f'* :c:{role}:`{name}`') + + pnode = nodes.paragraph() + self.state.nested_parse(StringList(content), 0, pnode) + return [pnode] + + app.add_directive('limited-api-list', LimitedAPIList) def setup(app): app.add_config_value('refcount_file', '', True) + app.add_config_value('stable_abi_file', '', True) app.connect('builder-inited', init_annotations) # monkey-patch C object... diff --git a/Include/README.rst b/Include/README.rst index d2467ca22fa038..f52e690eac9a91 100644 --- a/Include/README.rst +++ b/Include/README.rst @@ -3,66 +3,10 @@ The Python C API The C API is divided into three sections: -1. ``Include/`` -2. ``Include/cpython/`` -3. ``Include/internal/`` +1. ``Include/``: Limited API +2. ``Include/cpython/``: CPython implementation details +3. ``Include/internal/``: The internal API +Information on changing the C API is available `in the developer guide`_ -Include: Limited API -==================== - -``Include/``, excluding the ``cpython`` and ``internal`` subdirectories, -contains the public Limited API (Application Programming Interface). -The Limited API is a subset of the C API, designed to guarantee ABI -stability across Python 3 versions, and is defined in :pep:`384`. - -Guidelines for expanding the Limited API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference -- Macros should not expose implementation details -- Please start a public discussion before expanding the API -- Functions or macros with a ``_Py`` prefix do not belong in ``Include/``. - -It is possible to add a function or macro to the Limited API from a -given Python version. For example, to add a function to the Limited API -from Python 3.10 and onwards, wrap it with -``#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000``. - - -Include/cpython: CPython implementation details -=============================================== - -``Include/cpython/`` contains the public API that is excluded from the -Limited API and the Stable ABI. - -Guidelines for expanding the public API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference - - -Include/internal: The internal API -================================== - - -With PyAPI_FUNC or PyAPI_DATA ------------------------------ - -Functions or structures in ``Include/internal/`` defined with -``PyAPI_FUNC`` or ``PyAPI_DATA`` are internal functions which are -exposed only for specific use cases like debuggers and profilers. - - -With the extern keyword ------------------------ - -Functions in ``Include/internal/`` defined with the ``extern`` keyword -*must not and can not* be used outside the CPython code base. Only -built-in stdlib extensions (built with the ``Py_BUILD_CORE_BUILTIN`` -macro defined) can use such functions. - -When in doubt, new internal C functions should be defined in -``Include/internal`` using the ``extern`` keyword. +.. _in the developer guide: https://devguide.python.org/c-api/ diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 399153db81c254..2ba5b66cd1258b 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -21,6 +21,7 @@ import os.path import io import re +import csv MISSING = object() @@ -45,6 +46,11 @@ MACOS = (sys.platform == "darwin") UNIXY = MACOS or (sys.platform == "linux") # XXX should this be "not Windows"? +IFDEF_DOC_NOTES = { + 'MS_WINDOWS': 'on Windows', + 'HAVE_FORK': 'on platforms with fork()', + 'USE_STACKCHECK': 'on platforms with USE_STACKCHECK', +} # The stable ABI manifest (Misc/stable_abi.txt) exists only to fill the # following dataclasses. @@ -227,16 +233,31 @@ def sort_key(item): key=sort_key): write(f'EXPORT_DATA({item.name})') +REST_ROLES = { + 'function': 'function', + 'data': 'var', + 'struct': 'type', + 'macro': 'macro', + # 'const': 'const', # all undocumented + 'typedef': 'type', +} @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) - + writer = csv.DictWriter( + outfile, ['role', 'name', 'added', 'ifdef_note'], lineterminator='\n') + writer.writeheader() + for item in manifest.select(REST_ROLES.keys(), include_abi_only=False): + if item.ifdef: + ifdef_note = IFDEF_DOC_NOTES[item.ifdef] + else: + ifdef_note = None + writer.writerow({ + 'role': REST_ROLES[item.kind], + 'name': item.name, + 'added': item.added, + 'ifdef_note': ifdef_note}) def generate_or_check(manifest, args, path, func): """Generate/check a file with a single generator From webhook-mailer at python.org Tue May 11 13:55:32 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 17:55:32 -0000 Subject: [Python-checkins] bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (#23192) Message-ID: https://github.com/python/cpython/commit/12e7d10dfd28d4e26304e2c06b2e41c7418ec6f3 commit: 12e7d10dfd28d4e26304e2c06b2e41c7418ec6f3 branch: main author: Irit Katriel committer: iritkatriel date: 2021-05-11T18:55:24+01:00 summary: bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (#23192) files: M Doc/library/threading.rst M Lib/threading.py diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 16f23c3a0c3548..8c7664328a49df 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -121,10 +121,11 @@ This module defines the following functions: .. function:: enumerate() - Return a list of all :class:`Thread` objects currently alive. The list - includes daemonic threads, dummy thread objects created by - :func:`current_thread`, and the main thread. It excludes terminated threads - and threads that have not yet been started. + Return a list of all :class:`Thread` objects currently active. The list + includes daemonic threads and dummy thread objects created by + :func:`current_thread`. It excludes terminated threads and threads + that have not yet been started. However, the main thread is always part + of the result, even when terminated. .. function:: main_thread() diff --git a/Lib/threading.py b/Lib/threading.py index 4dcf84715c439d..fb70abd17aff8b 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1130,8 +1130,8 @@ def is_alive(self): """Return whether the thread is alive. This method returns True just before the run() method starts until just - after the run() method terminates. The module function enumerate() - returns a list of all alive threads. + after the run() method terminates. See also the module function + enumerate(). """ assert self._initialized, "Thread.__init__() not called" From webhook-mailer at python.org Tue May 11 14:19:44 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 18:19:44 -0000 Subject: [Python-checkins] bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (GH-23192) (#26035) Message-ID: https://github.com/python/cpython/commit/7bef7a180da56e0399f4dec2c992bb101470fc73 commit: 7bef7a180da56e0399f4dec2c992bb101470fc73 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-11T19:19:27+01:00 summary: bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (GH-23192) (#26035) (cherry picked from commit 12e7d10dfd28d4e26304e2c06b2e41c7418ec6f3) Co-authored-by: Irit Katriel files: M Doc/library/threading.rst M Lib/threading.py diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 16f23c3a0c3548..8c7664328a49df 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -121,10 +121,11 @@ This module defines the following functions: .. function:: enumerate() - Return a list of all :class:`Thread` objects currently alive. The list - includes daemonic threads, dummy thread objects created by - :func:`current_thread`, and the main thread. It excludes terminated threads - and threads that have not yet been started. + Return a list of all :class:`Thread` objects currently active. The list + includes daemonic threads and dummy thread objects created by + :func:`current_thread`. It excludes terminated threads and threads + that have not yet been started. However, the main thread is always part + of the result, even when terminated. .. function:: main_thread() diff --git a/Lib/threading.py b/Lib/threading.py index 4dcf84715c439d..fb70abd17aff8b 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1130,8 +1130,8 @@ def is_alive(self): """Return whether the thread is alive. This method returns True just before the run() method starts until just - after the run() method terminates. The module function enumerate() - returns a list of all alive threads. + after the run() method terminates. See also the module function + enumerate(). """ assert self._initialized, "Thread.__init__() not called" From webhook-mailer at python.org Tue May 11 14:19:51 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 18:19:51 -0000 Subject: [Python-checkins] bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (GH-23192) (#26036) Message-ID: https://github.com/python/cpython/commit/bde14f7fbd5f11bb40d9c314bd74eaa231236c6b commit: bde14f7fbd5f11bb40d9c314bd74eaa231236c6b branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-11T19:19:42+01:00 summary: bpo-25821: Fix inaccuracy in threading.enumerate/is_alive documentation (GH-23192) (#26036) (cherry picked from commit 12e7d10dfd28d4e26304e2c06b2e41c7418ec6f3) Co-authored-by: Irit Katriel files: M Doc/library/threading.rst M Lib/threading.py diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 2a42018b7bfc7..894bbb11da915 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -110,10 +110,11 @@ This module defines the following functions: .. function:: enumerate() - Return a list of all :class:`Thread` objects currently alive. The list - includes daemonic threads, dummy thread objects created by - :func:`current_thread`, and the main thread. It excludes terminated threads - and threads that have not yet been started. + Return a list of all :class:`Thread` objects currently active. The list + includes daemonic threads and dummy thread objects created by + :func:`current_thread`. It excludes terminated threads and threads + that have not yet been started. However, the main thread is always part + of the result, even when terminated. .. function:: main_thread() diff --git a/Lib/threading.py b/Lib/threading.py index d96d99a713e90..4da5c657b1b73 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1094,8 +1094,8 @@ def is_alive(self): """Return whether the thread is alive. This method returns True just before the run() method starts until just - after the run() method terminates. The module function enumerate() - returns a list of all alive threads. + after the run() method terminates. See also the module function + enumerate(). """ assert self._initialized, "Thread.__init__() not called" From webhook-mailer at python.org Tue May 11 16:47:15 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 20:47:15 -0000 Subject: [Python-checkins] bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) Message-ID: https://github.com/python/cpython/commit/5f2eb87f2893c5e77ade4d662cebcce59d3f2c2f commit: 5f2eb87f2893c5e77ade4d662cebcce59d3f2c2f branch: main author: uniocto committer: orsenthil date: 2021-05-11T13:47:05-07:00 summary: bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) * Document os-system, subprocess Patch * Update Doc/library/os.rst 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: M Doc/library/os.rst M Doc/library/subprocess.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 6f9f3219481c2..24ba15382e9a1 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4211,12 +4211,12 @@ written in Python, such as a mail server's external command delivery program. the Standard C function :c:func:`system`, and has the same limitations. Changes to :data:`sys.stdin`, etc. are not reflected in the environment of the executed command. If *command* generates any output, it will be sent to - the interpreter standard output stream. + the interpreter standard output stream. The C standard does not + specify the meaning of the return value of the C function, so the return + value of the Python function is system-dependent. On Unix, the return value is the exit status of the process encoded in the - format specified for :func:`wait`. Note that POSIX does not specify the - meaning of the return value of the C :c:func:`system` function, so the return - value of the Python function is system-dependent. + format specified for :func:`wait`. On Windows, the return value is that returned by the system shell after running *command*. The shell is given by the Windows environment variable diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index b60db58d182e6..56b6b6e001573 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -1292,11 +1292,17 @@ Replacing :func:`os.system` sts = os.system("mycmd" + " myarg") # becomes - sts = call("mycmd" + " myarg", shell=True) + retcode = call("mycmd" + " myarg", shell=True) Notes: * Calling the program through the shell is usually not required. +* The :func:`call` return value is encoded differently to that of + :func:`os.system`. + +* The :func:`os.system` function ignores SIGINT and SIGQUIT signals while + the command is running, but the caller must do this separately when + using the :mod:`subprocess` module. A more realistic example would look like this:: From webhook-mailer at python.org Tue May 11 16:55:22 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 20:55:22 -0000 Subject: [Python-checkins] bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) (GH-26040) Message-ID: https://github.com/python/cpython/commit/6fc6f4366d02412e3424d2a6da43a28d8f479d7b commit: 6fc6f4366d02412e3424d2a6da43a28d8f479d7b branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-11T13:55:15-07:00 summary: bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) (GH-26040) * Document os-system, subprocess Patch * Update Doc/library/os.rst 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> (cherry picked from commit 5f2eb87f2893c5e77ade4d662cebcce59d3f2c2f) Co-authored-by: uniocto Co-authored-by: uniocto files: M Doc/library/os.rst M Doc/library/subprocess.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 6f9f3219481c2..24ba15382e9a1 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4211,12 +4211,12 @@ written in Python, such as a mail server's external command delivery program. the Standard C function :c:func:`system`, and has the same limitations. Changes to :data:`sys.stdin`, etc. are not reflected in the environment of the executed command. If *command* generates any output, it will be sent to - the interpreter standard output stream. + the interpreter standard output stream. The C standard does not + specify the meaning of the return value of the C function, so the return + value of the Python function is system-dependent. On Unix, the return value is the exit status of the process encoded in the - format specified for :func:`wait`. Note that POSIX does not specify the - meaning of the return value of the C :c:func:`system` function, so the return - value of the Python function is system-dependent. + format specified for :func:`wait`. On Windows, the return value is that returned by the system shell after running *command*. The shell is given by the Windows environment variable diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index b60db58d182e6..56b6b6e001573 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -1292,11 +1292,17 @@ Replacing :func:`os.system` sts = os.system("mycmd" + " myarg") # becomes - sts = call("mycmd" + " myarg", shell=True) + retcode = call("mycmd" + " myarg", shell=True) Notes: * Calling the program through the shell is usually not required. +* The :func:`call` return value is encoded differently to that of + :func:`os.system`. + +* The :func:`os.system` function ignores SIGINT and SIGQUIT signals while + the command is running, but the caller must do this separately when + using the :mod:`subprocess` module. A more realistic example would look like this:: From webhook-mailer at python.org Tue May 11 16:55:28 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 20:55:28 -0000 Subject: [Python-checkins] bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) (GH-26041) Message-ID: https://github.com/python/cpython/commit/390bfe044531a813722919933116ed37fe321861 commit: 390bfe044531a813722919933116ed37fe321861 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-11T13:55:24-07:00 summary: bpo-23750: Document os-system, subprocess. Patch by Martin Panter. (GH-26016) (GH-26041) * Document os-system, subprocess Patch * Update Doc/library/os.rst 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> (cherry picked from commit 5f2eb87f2893c5e77ade4d662cebcce59d3f2c2f) Co-authored-by: uniocto Co-authored-by: uniocto files: M Doc/library/os.rst M Doc/library/subprocess.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 1198c4afb8386..35a9f8cf3adb7 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -3965,12 +3965,12 @@ written in Python, such as a mail server's external command delivery program. the Standard C function :c:func:`system`, and has the same limitations. Changes to :data:`sys.stdin`, etc. are not reflected in the environment of the executed command. If *command* generates any output, it will be sent to - the interpreter standard output stream. + the interpreter standard output stream. The C standard does not + specify the meaning of the return value of the C function, so the return + value of the Python function is system-dependent. On Unix, the return value is the exit status of the process encoded in the - format specified for :func:`wait`. Note that POSIX does not specify the - meaning of the return value of the C :c:func:`system` function, so the return - value of the Python function is system-dependent. + format specified for :func:`wait`. On Windows, the return value is that returned by the system shell after running *command*. The shell is given by the Windows environment variable diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index 3150aa60700ee..762da9b1b4dca 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -1268,11 +1268,17 @@ Replacing :func:`os.system` sts = os.system("mycmd" + " myarg") # becomes - sts = call("mycmd" + " myarg", shell=True) + retcode = call("mycmd" + " myarg", shell=True) Notes: * Calling the program through the shell is usually not required. +* The :func:`call` return value is encoded differently to that of + :func:`os.system`. + +* The :func:`os.system` function ignores SIGINT and SIGQUIT signals while + the command is running, but the caller must do this separately when + using the :mod:`subprocess` module. A more realistic example would look like this:: From webhook-mailer at python.org Tue May 11 17:48:52 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 21:48:52 -0000 Subject: [Python-checkins] bpo-10548: expectedFailure does not apply to fixtures (#23201) Message-ID: https://github.com/python/cpython/commit/23ae2c3bacc167f7bbfea1846bbbc9dde63a1bfd commit: 23ae2c3bacc167f7bbfea1846bbbc9dde63a1bfd branch: main author: Irit Katriel committer: iritkatriel date: 2021-05-11T22:48:20+01:00 summary: bpo-10548: expectedFailure does not apply to fixtures (#23201) files: M Doc/library/unittest.rst diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 0c29408cb1921..99c2f6e029448 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -597,8 +597,9 @@ The following decorators and exception implement test skipping and expected fail .. decorator:: expectedFailure Mark the test as an expected failure or error. If the test fails or errors - it will be considered a success. If the test passes, it will be considered - a failure. + in the test function itself (rather than in one of the :dfn:`test fixture` + methods) then it will be considered a success. If the test passes, it will + be considered a failure. .. exception:: SkipTest(reason) From webhook-mailer at python.org Tue May 11 18:23:49 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 22:23:49 -0000 Subject: [Python-checkins] bpo-10548: expectedFailure does not apply to fixtures (GH-23201) (#26044) Message-ID: https://github.com/python/cpython/commit/1e4ca09d825cc8059bbf80c8137164816b84cfe7 commit: 1e4ca09d825cc8059bbf80c8137164816b84cfe7 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-11T23:23:40+01:00 summary: bpo-10548: expectedFailure does not apply to fixtures (GH-23201) (#26044) (cherry picked from commit 23ae2c3bacc167f7bbfea1846bbbc9dde63a1bfd) Co-authored-by: Irit Katriel files: M Doc/library/unittest.rst diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 0c29408cb1921..99c2f6e029448 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -597,8 +597,9 @@ The following decorators and exception implement test skipping and expected fail .. decorator:: expectedFailure Mark the test as an expected failure or error. If the test fails or errors - it will be considered a success. If the test passes, it will be considered - a failure. + in the test function itself (rather than in one of the :dfn:`test fixture` + methods) then it will be considered a success. If the test passes, it will + be considered a failure. .. exception:: SkipTest(reason) From webhook-mailer at python.org Tue May 11 18:23:59 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 22:23:59 -0000 Subject: [Python-checkins] bpo-10548: expectedFailure does not apply to fixtures (GH-23201) (#26045) Message-ID: https://github.com/python/cpython/commit/c9049cf0aa9917abfd51b27e4258c395c5f66ff4 commit: c9049cf0aa9917abfd51b27e4258c395c5f66ff4 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-11T23:23:54+01:00 summary: bpo-10548: expectedFailure does not apply to fixtures (GH-23201) (#26045) (cherry picked from commit 23ae2c3bacc167f7bbfea1846bbbc9dde63a1bfd) Co-authored-by: Irit Katriel files: M Doc/library/unittest.rst diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index 9541997e3ccca..392cd2473155f 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -597,8 +597,9 @@ The following decorators and exception implement test skipping and expected fail .. decorator:: expectedFailure Mark the test as an expected failure or error. If the test fails or errors - it will be considered a success. If the test passes, it will be considered - a failure. + in the test function itself (rather than in one of the :dfn:`test fixture` + methods) then it will be considered a success. If the test passes, it will + be considered a failure. .. exception:: SkipTest(reason) From webhook-mailer at python.org Tue May 11 18:29:06 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 22:29:06 -0000 Subject: [Python-checkins] Fix typo in blurb entry (GH-26043) Message-ID: https://github.com/python/cpython/commit/37a9d43dd2a7f2b73f60c43a94a1229d6de5d674 commit: 37a9d43dd2a7f2b73f60c43a94a1229d6de5d674 branch: 3.9 author: Jero Bado committer: orsenthil date: 2021-05-11T15:28:57-07:00 summary: Fix typo in blurb entry (GH-26043) files: M Misc/NEWS.d/3.9.5.rst diff --git a/Misc/NEWS.d/3.9.5.rst b/Misc/NEWS.d/3.9.5.rst index 7404f70d947f5..de1debf5af975 100644 --- a/Misc/NEWS.d/3.9.5.rst +++ b/Misc/NEWS.d/3.9.5.rst @@ -160,7 +160,7 @@ version. .. nonce: pedB1E .. section: Library -[Enum] ensure exceptions raised in ``_missing__`` are released +[Enum] ensure exceptions raised in ``_missing_`` are released. .. From webhook-mailer at python.org Tue May 11 19:01:42 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 23:01:42 -0000 Subject: [Python-checkins] Fix import of HTTPError (GH-22304) Message-ID: https://github.com/python/cpython/commit/5fedf71439187f00c661b16b80d398b74b00390e commit: 5fedf71439187f00c661b16b80d398b74b00390e branch: main author: Sebastian Rittau committer: orsenthil date: 2021-05-11T16:01:33-07:00 summary: Fix import of HTTPError (GH-22304) Import HTTPError from urllib.error instead of urllib.request. files: M Lib/distutils/command/upload.py M Lib/distutils/tests/test_upload.py diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py index 95e9fda186fc8f..e0ecb655b93faf 100644 --- a/Lib/distutils/command/upload.py +++ b/Lib/distutils/command/upload.py @@ -9,7 +9,8 @@ import io import hashlib from base64 import standard_b64encode -from urllib.request import urlopen, Request, HTTPError +from urllib.error import HTTPError +from urllib.request import urlopen, Request from urllib.parse import urlparse from distutils.errors import DistutilsError, DistutilsOptionError from distutils.core import PyPIRCCommand diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index bca5516d2f74f6..74f0bc0a67131b 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -2,7 +2,7 @@ import os import unittest import unittest.mock as mock -from urllib.request import HTTPError +from urllib.error import HTTPError from test.support import run_unittest From webhook-mailer at python.org Tue May 11 19:18:17 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 23:18:17 -0000 Subject: [Python-checkins] Fix import of HTTPError (GH-22304) (GH-26047) Message-ID: https://github.com/python/cpython/commit/6098214b98f843fc8fb9d6042b0c9f96eb90957c commit: 6098214b98f843fc8fb9d6042b0c9f96eb90957c branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-11T16:18:13-07:00 summary: Fix import of HTTPError (GH-22304) (GH-26047) Import HTTPError from urllib.error instead of urllib.request. (cherry picked from commit 5fedf71439187f00c661b16b80d398b74b00390e) Co-authored-by: Sebastian Rittau Co-authored-by: Sebastian Rittau files: M Lib/distutils/command/upload.py M Lib/distutils/tests/test_upload.py diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py index 95e9fda186fc8f..e0ecb655b93faf 100644 --- a/Lib/distutils/command/upload.py +++ b/Lib/distutils/command/upload.py @@ -9,7 +9,8 @@ import io import hashlib from base64 import standard_b64encode -from urllib.request import urlopen, Request, HTTPError +from urllib.error import HTTPError +from urllib.request import urlopen, Request from urllib.parse import urlparse from distutils.errors import DistutilsError, DistutilsOptionError from distutils.core import PyPIRCCommand diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index bca5516d2f74f6..74f0bc0a67131b 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -2,7 +2,7 @@ import os import unittest import unittest.mock as mock -from urllib.request import HTTPError +from urllib.error import HTTPError from test.support import run_unittest From webhook-mailer at python.org Tue May 11 19:18:27 2021 From: webhook-mailer at python.org (orsenthil) Date: Tue, 11 May 2021 23:18:27 -0000 Subject: [Python-checkins] Fix import of HTTPError (GH-22304) (GH-26048) Message-ID: https://github.com/python/cpython/commit/7d38b04b610b36af0fdcf82fba15b52c7ce44911 commit: 7d38b04b610b36af0fdcf82fba15b52c7ce44911 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-11T16:18:23-07:00 summary: Fix import of HTTPError (GH-22304) (GH-26048) Import HTTPError from urllib.error instead of urllib.request. (cherry picked from commit 5fedf71439187f00c661b16b80d398b74b00390e) Co-authored-by: Sebastian Rittau Co-authored-by: Sebastian Rittau files: M Lib/distutils/command/upload.py M Lib/distutils/tests/test_upload.py diff --git a/Lib/distutils/command/upload.py b/Lib/distutils/command/upload.py index 95e9fda186fc8f..e0ecb655b93faf 100644 --- a/Lib/distutils/command/upload.py +++ b/Lib/distutils/command/upload.py @@ -9,7 +9,8 @@ import io import hashlib from base64 import standard_b64encode -from urllib.request import urlopen, Request, HTTPError +from urllib.error import HTTPError +from urllib.request import urlopen, Request from urllib.parse import urlparse from distutils.errors import DistutilsError, DistutilsOptionError from distutils.core import PyPIRCCommand diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py index bca5516d2f74f6..74f0bc0a67131b 100644 --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -2,7 +2,7 @@ import os import unittest import unittest.mock as mock -from urllib.request import HTTPError +from urllib.error import HTTPError from test.support import run_unittest From webhook-mailer at python.org Tue May 11 19:22:58 2021 From: webhook-mailer at python.org (pablogsal) Date: Tue, 11 May 2021 23:22:58 -0000 Subject: [Python-checkins] Correct the changelog entry for the syntax error message for multiple exception types (GH-26038) Message-ID: https://github.com/python/cpython/commit/c1df8808e054bbe4fe66f35ccc0f88d8b292778a commit: c1df8808e054bbe4fe66f35ccc0f88d8b292778a branch: main author: Thomas Grainger committer: pablogsal date: 2021-05-12T00:22:50+01:00 summary: Correct the changelog entry for the syntax error message for multiple exception types (GH-26038) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 2c6569fccd624d..cdb15a06e9e3c5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -238,7 +238,7 @@ have been incorporated. Some of the most notable ones: (Contributed by Pablo Galindo in :issue:`43822`) -* Exception groups without parentheses: +* Multiple Exception types without parentheses: .. code-block:: python From webhook-mailer at python.org Tue May 11 19:26:44 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 23:26:44 -0000 Subject: [Python-checkins] bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None. (#25438) Message-ID: https://github.com/python/cpython/commit/8563a7052ccd98e6a381d361664ce567afd5eb6e commit: 8563a7052ccd98e6a381d361664ce567afd5eb6e branch: main author: Erlend Egeberg Aasland committer: iritkatriel date: 2021-05-12T00:26:30+01:00 summary: bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None. (#25438) Co-authored-by: Thomas Kluyver files: A Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 98dc975eafafdc..a888a0a287f9c2 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -752,7 +752,8 @@ def checkline(self, filename, lineno): """ # this method should be callable before starting debugging, so default # to "no globals" if there is no current frame - globs = self.curframe.f_globals if hasattr(self, 'curframe') else None + frame = getattr(self, 'curframe', None) + globs = frame.f_globals if frame else None line = linecache.getline(filename, lineno, globs) if not line: self.message('End of file') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 870eab4e33e633..cd096e7dd56e8d 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -9,6 +9,7 @@ import unittest import subprocess import textwrap +import linecache from contextlib import ExitStack from io import StringIO @@ -1807,10 +1808,47 @@ def test_issue42383(self): self.assertEqual(stdout.split('\n')[6].rstrip('\r'), expected) +class ChecklineTests(unittest.TestCase): + def setUp(self): + linecache.clearcache() # Pdb.checkline() uses linecache.getline() + + def tearDown(self): + os_helper.unlink(os_helper.TESTFN) + + def test_checkline_before_debugging(self): + with open(os_helper.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) + + def test_checkline_after_reset(self): + with open(os_helper.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + db.reset() + self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) + + def test_checkline_is_not_executable(self): + with open(os_helper.TESTFN, "w") as f: + # Test for comments, docstrings and empty lines + s = textwrap.dedent(""" + # Comment + \"\"\" docstring \"\"\" + ''' docstring ''' + + """) + f.write(s) + db = pdb.Pdb() + num_lines = len(s.splitlines()) + 2 # Test for EOF + for lineno in range(num_lines): + self.assertFalse(db.checkline(os_helper.TESTFN, lineno)) + + def load_tests(*args): from test import test_pdb suites = [ unittest.makeSuite(PdbTestCase), + unittest.makeSuite(ChecklineTests), doctest.DocTestSuite(test_pdb) ] return unittest.TestSuite(suites) diff --git a/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst new file mode 100644 index 00000000000000..97731ad882e032 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst @@ -0,0 +1,2 @@ +Fix a bug in :mod:`pdb` where :meth:`~pdb.Pdb.checkline` raises +:exc:`AttributeError` if it is called after :meth:`~pdb.Pdb.reset`. From webhook-mailer at python.org Tue May 11 19:27:30 2021 From: webhook-mailer at python.org (zooba) Date: Tue, 11 May 2021 23:27:30 -0000 Subject: [Python-checkins] bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964) Message-ID: https://github.com/python/cpython/commit/e9d7f88d5643f7e6387bf994c130503766d7eb92 commit: e9d7f88d5643f7e6387bf994c130503766d7eb92 branch: main author: Miguel Brito <5544985+miguendes at users.noreply.github.com> committer: zooba date: 2021-05-12T00:27:22+01:00 summary: bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964) files: A Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst M Lib/pkgutil.py M Lib/test/test_pkgutil.py diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 2c3429856be46d..48c1479ee6cedd 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -413,6 +413,7 @@ def get_importer(path_item): The cache (or part of it) can be cleared manually if a rescan of sys.path_hooks is necessary. """ + path_item = os.fsdecode(path_item) try: importer = sys.path_importer_cache[path_item] except KeyError: diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index 6e3618f6b0f98b..3c29080f2054fc 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -1,3 +1,4 @@ +from pathlib import Path from test.support import run_unittest from test.support.import_helper import unload, CleanImport from test.support.warnings_helper import check_warnings @@ -92,6 +93,45 @@ def test_getdata_zipfile(self): del sys.modules[pkg] + def test_issue44061_iter_modules(self): + #see: issue44061 + zip = 'test_getdata_zipfile.zip' + pkg = 'test_getdata_zipfile' + + # Include a LF and a CRLF, to test that binary data is read back + RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line' + + # Make a package with some resources + zip_file = os.path.join(self.dirname, zip) + z = zipfile.ZipFile(zip_file, 'w') + + # Empty init.py + z.writestr(pkg + '/__init__.py', "") + # Resource files, res.txt + z.writestr(pkg + '/res.txt', RESOURCE_DATA) + z.close() + + # Check we can read the resources + sys.path.insert(0, zip_file) + try: + res = pkgutil.get_data(pkg, 'res.txt') + self.assertEqual(res, RESOURCE_DATA) + + # make sure iter_modules accepts Path objects + names = [] + for moduleinfo in pkgutil.iter_modules([Path(zip_file)]): + self.assertIsInstance(moduleinfo, pkgutil.ModuleInfo) + names.append(moduleinfo.name) + self.assertEqual(names, [pkg]) + finally: + del sys.path[0] + sys.modules.pop(pkg, None) + + # assert path must be None or list of paths + expected_msg = "path must be None or list of paths to look for modules in" + with self.assertRaisesRegex(ValueError, expected_msg): + list(pkgutil.iter_modules("invalid_path")) + def test_unreadable_dir_on_syspath(self): # issue7367 - walk_packages failed if unreadable dir on sys.path package_name = "unreadable_package" @@ -574,6 +614,12 @@ def test_get_importer_avoids_emulation(self): self.assertIsNone(pkgutil.get_importer("*??")) self.assertEqual(len(w.warnings), 0) + def test_issue44061(self): + try: + pkgutil.get_importer(Path("/home")) + except AttributeError: + self.fail("Unexpected AttributeError when calling get_importer") + def test_iter_importers_avoids_emulation(self): with check_warnings() as w: for importer in pkgutil.iter_importers(): pass diff --git a/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst new file mode 100644 index 00000000000000..e41f285fae9491 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst @@ -0,0 +1,2 @@ +Fix regression in previous release when calling :func:`pkgutil.iter_modules` +with a list of :class:`pathlib.Path` objects From webhook-mailer at python.org Tue May 11 19:48:13 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 11 May 2021 23:48:13 -0000 Subject: [Python-checkins] bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None. (GH-25438) (#26050) Message-ID: https://github.com/python/cpython/commit/c90ed8e2e79ebd64f72c621b5a2ab06ec4c7210c commit: c90ed8e2e79ebd64f72c621b5a2ab06ec4c7210c branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-12T00:48:05+01:00 summary: bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None. (GH-25438) (#26050) Co-authored-by: Thomas Kluyver (cherry picked from commit 8563a7052ccd98e6a381d361664ce567afd5eb6e) Co-authored-by: Erlend Egeberg Aasland files: A Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 98dc975eafafdc..a888a0a287f9c2 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -752,7 +752,8 @@ def checkline(self, filename, lineno): """ # this method should be callable before starting debugging, so default # to "no globals" if there is no current frame - globs = self.curframe.f_globals if hasattr(self, 'curframe') else None + frame = getattr(self, 'curframe', None) + globs = frame.f_globals if frame else None line = linecache.getline(filename, lineno, globs) if not line: self.message('End of file') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 870eab4e33e633..cd096e7dd56e8d 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -9,6 +9,7 @@ import unittest import subprocess import textwrap +import linecache from contextlib import ExitStack from io import StringIO @@ -1807,10 +1808,47 @@ def test_issue42383(self): self.assertEqual(stdout.split('\n')[6].rstrip('\r'), expected) +class ChecklineTests(unittest.TestCase): + def setUp(self): + linecache.clearcache() # Pdb.checkline() uses linecache.getline() + + def tearDown(self): + os_helper.unlink(os_helper.TESTFN) + + def test_checkline_before_debugging(self): + with open(os_helper.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) + + def test_checkline_after_reset(self): + with open(os_helper.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + db.reset() + self.assertEqual(db.checkline(os_helper.TESTFN, 1), 1) + + def test_checkline_is_not_executable(self): + with open(os_helper.TESTFN, "w") as f: + # Test for comments, docstrings and empty lines + s = textwrap.dedent(""" + # Comment + \"\"\" docstring \"\"\" + ''' docstring ''' + + """) + f.write(s) + db = pdb.Pdb() + num_lines = len(s.splitlines()) + 2 # Test for EOF + for lineno in range(num_lines): + self.assertFalse(db.checkline(os_helper.TESTFN, lineno)) + + def load_tests(*args): from test import test_pdb suites = [ unittest.makeSuite(PdbTestCase), + unittest.makeSuite(ChecklineTests), doctest.DocTestSuite(test_pdb) ] return unittest.TestSuite(suites) diff --git a/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst new file mode 100644 index 00000000000000..97731ad882e032 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst @@ -0,0 +1,2 @@ +Fix a bug in :mod:`pdb` where :meth:`~pdb.Pdb.checkline` raises +:exc:`AttributeError` if it is called after :meth:`~pdb.Pdb.reset`. From webhook-mailer at python.org Tue May 11 19:58:26 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 11 May 2021 23:58:26 -0000 Subject: [Python-checkins] Correct the changelog entry for the syntax error message for multiple exception types (GH-26038) Message-ID: https://github.com/python/cpython/commit/7e59ef10e8c7339fed61c53c663a962dea0f1ff1 commit: 7e59ef10e8c7339fed61c53c663a962dea0f1ff1 branch: 3.10 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-05-11T16:58:18-07:00 summary: Correct the changelog entry for the syntax error message for multiple exception types (GH-26038) (cherry picked from commit c1df8808e054bbe4fe66f35ccc0f88d8b292778a) Co-authored-by: Thomas Grainger files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 2c6569fccd624d..cdb15a06e9e3c5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -238,7 +238,7 @@ have been incorporated. Some of the most notable ones: (Contributed by Pablo Galindo in :issue:`43822`) -* Exception groups without parentheses: +* Multiple Exception types without parentheses: .. code-block:: python From webhook-mailer at python.org Tue May 11 20:01:52 2021 From: webhook-mailer at python.org (gpshead) Date: Wed, 12 May 2021 00:01:52 -0000 Subject: [Python-checkins] bpo-44002: Switch to lru_cache in urllib.parse. (GH-25798) Message-ID: https://github.com/python/cpython/commit/d597fdc5fd0e8aa73a783fea27287db669950c15 commit: d597fdc5fd0e8aa73a783fea27287db669950c15 branch: main author: Gregory P. Smith committer: gpshead date: 2021-05-11T17:01:44-07:00 summary: bpo-44002: Switch to lru_cache in urllib.parse. (GH-25798) Switch to lru_cache in urllib.parse. urllib.parse now uses functool.lru_cache for its internal URL splitting and quoting caches instead of rolling its own like its the 90s. The undocumented internal Quoted class API is now deprecated as it had no reason to be public and no existing OSS users were found. The clear_cache() API remains undocumented but gets an explicit test as it is used in a few projects' (twisted, gevent) tests as well as our own regrtest. files: A Misc/NEWS.d/next/Library/2021-05-01-15-43-37.bpo-44002.KLT_wd.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 31943f357f49f3..dff9a8ede9b601 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -1044,16 +1044,24 @@ def test_telurl_params(self): self.assertEqual(p1.params, 'phone-context=+1-914-555') def test_Quoter_repr(self): - quoter = urllib.parse.Quoter(urllib.parse._ALWAYS_SAFE) + quoter = urllib.parse._Quoter(urllib.parse._ALWAYS_SAFE) self.assertIn('Quoter', repr(quoter)) + def test_clear_cache_for_code_coverage(self): + urllib.parse.clear_cache() + + def test_urllib_parse_getattr_failure(self): + """Test that urllib.parse.__getattr__() fails correctly.""" + with self.assertRaises(AttributeError): + unused = urllib.parse.this_does_not_exist + def test_all(self): expected = [] undocumented = { 'splitattr', 'splithost', 'splitnport', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', - 'Quoter', 'ResultBase', 'clear_cache', 'to_bytes', 'unwrap', + 'ResultBase', 'clear_cache', 'to_bytes', 'unwrap', } for name in dir(urllib.parse): if name.startswith('_') or name in undocumented: @@ -1245,6 +1253,12 @@ def test_unwrap(self): class DeprecationTest(unittest.TestCase): + def test_Quoter_deprecation(self): + with self.assertWarns(DeprecationWarning) as cm: + old_class = urllib.parse.Quoter + self.assertIs(old_class, urllib.parse._Quoter) + self.assertIn('Quoter will be removed', str(cm.warning)) + def test_splittype_deprecation(self): with self.assertWarns(DeprecationWarning) as cm: urllib.parse.splittype('') diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py index b35997bc00ce16..bf16d0f42e5794 100644 --- a/Lib/urllib/parse.py +++ b/Lib/urllib/parse.py @@ -27,10 +27,11 @@ test_urlparse.py provides a good indicator of parsing behavior. """ +from collections import namedtuple +import functools import re import sys import types -import collections import warnings __all__ = ["urlparse", "urlunparse", "urljoin", "urldefrag", @@ -81,15 +82,10 @@ # 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 = {} - def clear_cache(): - """Clear the parse cache and the quoters cache.""" - _parse_cache.clear() - _safe_quoters.clear() - + """Clear internal performance caches. Undocumented; some tests want it.""" + urlsplit.cache_clear() + _byte_quoter_factory.cache_clear() # Helpers for bytes handling # For 3.2, we deliberately require applications that @@ -243,8 +239,6 @@ def _hostinfo(self): return hostname, port -from collections import namedtuple - _DefragResultBase = namedtuple('DefragResult', 'url fragment') _SplitResultBase = namedtuple( 'SplitResult', 'scheme netloc path query fragment') @@ -434,6 +428,9 @@ def _checknetloc(netloc): raise ValueError("netloc '" + netloc + "' contains invalid " + "characters under NFKC normalization") +# typed=True avoids BytesWarnings being emitted during cache key +# comparison since this API supports both bytes and str input. + at functools.lru_cache(typed=True) def urlsplit(url, scheme='', allow_fragments=True): """Parse a URL into 5 components: :///?# @@ -462,12 +459,6 @@ def urlsplit(url, scheme='', allow_fragments=True): scheme = scheme.replace(b, "") allow_fragments = bool(allow_fragments) - key = url, scheme, allow_fragments, type(url), type(scheme) - cached = _parse_cache.get(key, None) - if cached: - return _coerce_result(cached) - if len(_parse_cache) >= MAX_CACHE_SIZE: # avoid runaway growth - clear_cache() netloc = query = fragment = '' i = url.find(':') if i > 0: @@ -488,7 +479,6 @@ def urlsplit(url, scheme='', allow_fragments=True): url, query = url.split('?', 1) _checknetloc(netloc) v = SplitResult(scheme, netloc, url, query, fragment) - _parse_cache[key] = v return _coerce_result(v) def urlunparse(components): @@ -791,23 +781,30 @@ def unquote_plus(string, encoding='utf-8', errors='replace'): b'0123456789' b'_.-~') _ALWAYS_SAFE_BYTES = bytes(_ALWAYS_SAFE) -_safe_quoters = {} -class Quoter(collections.defaultdict): - """A mapping from bytes (in range(0,256)) to strings. +def __getattr__(name): + if name == 'Quoter': + warnings.warn('Deprecated in 3.11. ' + 'urllib.parse.Quoter will be removed in Python 3.14. ' + 'It was not intended to be a public API.', + DeprecationWarning, stacklevel=2) + return _Quoter + raise AttributeError(f'module {__name__!r} has no attribute {name!r}') + +class _Quoter(dict): + """A mapping from bytes numbers (in range(0,256)) to strings. String values are percent-encoded byte values, unless the key < 128, and - in the "safe" set (either the specified safe set, or default set). + in either of the specified safe set, or the always safe set. """ - # Keeps a cache internally, using defaultdict, for efficiency (lookups + # Keeps a cache internally, via __missing__, for efficiency (lookups # of cached keys don't call Python code at all). def __init__(self, safe): """safe: bytes object.""" self.safe = _ALWAYS_SAFE.union(safe) def __repr__(self): - # Without this, will just display as a defaultdict - return "<%s %r>" % (self.__class__.__name__, dict(self)) + return f"" def __missing__(self, b): # Handle a cache miss. Store quoted string in cache and return. @@ -886,6 +883,11 @@ def quote_plus(string, safe='', encoding=None, errors=None): string = quote(string, safe + space, encoding, errors) return string.replace(' ', '+') +# Expectation: A typical program is unlikely to create more than 5 of these. + at functools.lru_cache +def _byte_quoter_factory(safe): + return _Quoter(safe).__getitem__ + def quote_from_bytes(bs, safe='/'): """Like quote(), but accepts a bytes object rather than a str, and does not perform string-to-bytes encoding. It always returns an ASCII string. @@ -899,13 +901,11 @@ def quote_from_bytes(bs, safe='/'): # Normalize 'safe' by converting to bytes and removing non-ASCII chars safe = safe.encode('ascii', 'ignore') else: + # List comprehensions are faster than generator expressions. safe = bytes([c for c in safe if c < 128]) if not bs.rstrip(_ALWAYS_SAFE_BYTES + safe): return bs.decode() - try: - quoter = _safe_quoters[safe] - except KeyError: - _safe_quoters[safe] = quoter = Quoter(safe).__getitem__ + quoter = _byte_quoter_factory(safe) return ''.join([quoter(char) for char in bs]) def urlencode(query, doseq=False, safe='', encoding=None, errors=None, diff --git a/Misc/NEWS.d/next/Library/2021-05-01-15-43-37.bpo-44002.KLT_wd.rst b/Misc/NEWS.d/next/Library/2021-05-01-15-43-37.bpo-44002.KLT_wd.rst new file mode 100644 index 00000000000000..9d662d9827a91d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-01-15-43-37.bpo-44002.KLT_wd.rst @@ -0,0 +1,5 @@ +:mod:`urllib.parse` now uses :func:`functool.lru_cache` for its internal URL +splitting and quoting caches instead of rolling its own like its the '90s. + +The undocumented internal :mod:`urllib.parse` ``Quoted`` class API is now +deprecated, for removal in 3.14. From webhook-mailer at python.org Wed May 12 05:04:24 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 09:04:24 -0000 Subject: [Python-checkins] [3.9] bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None (GH-25438) (GH-26053) Message-ID: https://github.com/python/cpython/commit/6c190b5ae5887d592bc8915148440a63da8b7cdd commit: 6c190b5ae5887d592bc8915148440a63da8b7cdd branch: 3.9 author: Erlend Egeberg Aasland committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-12T02:04:10-07:00 summary: [3.9] bpo-28528: Fix pdb.checkline() attribute error when 'curframe' is None (GH-25438) (GH-26053) Co-authored-by: Thomas Kluyver (cherry picked from commit 8563a7052ccd98e6a381d361664ce567afd5eb6e) Co-authored-by: Erlend Egeberg Aasland Automerge-Triggered-By: GH:iritkatriel files: A Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst M Lib/pdb.py M Lib/test/test_pdb.py diff --git a/Lib/pdb.py b/Lib/pdb.py index 98dc975eafafdc..a888a0a287f9c2 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -752,7 +752,8 @@ def checkline(self, filename, lineno): """ # this method should be callable before starting debugging, so default # to "no globals" if there is no current frame - globs = self.curframe.f_globals if hasattr(self, 'curframe') else None + frame = getattr(self, 'curframe', None) + globs = frame.f_globals if frame else None line = linecache.getline(filename, lineno, globs) if not line: self.message('End of file') diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 2523a5d691ac7e..b1cad22c830ffe 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -9,6 +9,7 @@ import unittest import subprocess import textwrap +import linecache from contextlib import ExitStack from io import StringIO @@ -1743,10 +1744,47 @@ def test_issue42383(self): self.assertEqual(stdout.split('\n')[6].rstrip('\r'), expected) +class ChecklineTests(unittest.TestCase): + def setUp(self): + linecache.clearcache() # Pdb.checkline() uses linecache.getline() + + def tearDown(self): + support.unlink(support.TESTFN) + + def test_checkline_before_debugging(self): + with open(support.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + self.assertEqual(db.checkline(support.TESTFN, 1), 1) + + def test_checkline_after_reset(self): + with open(support.TESTFN, "w") as f: + f.write("print(123)") + db = pdb.Pdb() + db.reset() + self.assertEqual(db.checkline(support.TESTFN, 1), 1) + + def test_checkline_is_not_executable(self): + with open(support.TESTFN, "w") as f: + # Test for comments, docstrings and empty lines + s = textwrap.dedent(""" + # Comment + \"\"\" docstring \"\"\" + ''' docstring ''' + + """) + f.write(s) + db = pdb.Pdb() + num_lines = len(s.splitlines()) + 2 # Test for EOF + for lineno in range(num_lines): + self.assertFalse(db.checkline(support.TESTFN, lineno)) + + def load_tests(*args): from test import test_pdb suites = [ unittest.makeSuite(PdbTestCase), + unittest.makeSuite(ChecklineTests), doctest.DocTestSuite(test_pdb) ] return unittest.TestSuite(suites) diff --git a/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst new file mode 100644 index 00000000000000..97731ad882e032 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-04-29-00-48-00.bpo-28528.JLAVWj.rst @@ -0,0 +1,2 @@ +Fix a bug in :mod:`pdb` where :meth:`~pdb.Pdb.checkline` raises +:exc:`AttributeError` if it is called after :meth:`~pdb.Pdb.reset`. From webhook-mailer at python.org Wed May 12 05:48:58 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 12 May 2021 09:48:58 -0000 Subject: [Python-checkins] bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964) (GH-26052) Message-ID: https://github.com/python/cpython/commit/0cb9775a85a051556461ea9c3089244601b7d4f8 commit: 0cb9775a85a051556461ea9c3089244601b7d4f8 branch: 3.9 author: Steve Dower committer: ambv date: 2021-05-12T11:48:50+02:00 summary: bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964) (GH-26052) Co-authored-by: Miguel Brito <5544985+miguendes at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst M Lib/pkgutil.py M Lib/test/test_pkgutil.py diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 4c184678a2912..1d623e621f09c 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -412,6 +412,7 @@ def get_importer(path_item): The cache (or part of it) can be cleared manually if a rescan of sys.path_hooks is necessary. """ + path_item = os.fsdecode(path_item) try: importer = sys.path_importer_cache[path_item] except KeyError: diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index b162f9949ff69..54725dc641b1d 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -1,3 +1,4 @@ +from pathlib import Path from test.support import run_unittest, unload, check_warnings, CleanImport import unittest import sys @@ -90,6 +91,45 @@ def test_getdata_zipfile(self): del sys.modules[pkg] + def test_issue44061_iter_modules(self): + #see: issue44061 + zip = 'test_getdata_zipfile.zip' + pkg = 'test_getdata_zipfile' + + # Include a LF and a CRLF, to test that binary data is read back + RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line' + + # Make a package with some resources + zip_file = os.path.join(self.dirname, zip) + z = zipfile.ZipFile(zip_file, 'w') + + # Empty init.py + z.writestr(pkg + '/__init__.py', "") + # Resource files, res.txt + z.writestr(pkg + '/res.txt', RESOURCE_DATA) + z.close() + + # Check we can read the resources + sys.path.insert(0, zip_file) + try: + res = pkgutil.get_data(pkg, 'res.txt') + self.assertEqual(res, RESOURCE_DATA) + + # make sure iter_modules accepts Path objects + names = [] + for moduleinfo in pkgutil.iter_modules([Path(zip_file)]): + self.assertIsInstance(moduleinfo, pkgutil.ModuleInfo) + names.append(moduleinfo.name) + self.assertEqual(names, [pkg]) + finally: + del sys.path[0] + sys.modules.pop(pkg, None) + + # assert path must be None or list of paths + expected_msg = "path must be None or list of paths to look for modules in" + with self.assertRaisesRegex(ValueError, expected_msg): + list(pkgutil.iter_modules("invalid_path")) + def test_unreadable_dir_on_syspath(self): # issue7367 - walk_packages failed if unreadable dir on sys.path package_name = "unreadable_package" @@ -571,6 +611,12 @@ def test_get_importer_avoids_emulation(self): self.assertIsNone(pkgutil.get_importer("*??")) self.assertEqual(len(w.warnings), 0) + def test_issue44061(self): + try: + pkgutil.get_importer(Path("/home")) + except AttributeError: + self.fail("Unexpected AttributeError when calling get_importer") + def test_iter_importers_avoids_emulation(self): with check_warnings() as w: for importer in pkgutil.iter_importers(): pass diff --git a/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst new file mode 100644 index 0000000000000..e41f285fae949 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst @@ -0,0 +1,2 @@ +Fix regression in previous release when calling :func:`pkgutil.iter_modules` +with a list of :class:`pathlib.Path` objects From webhook-mailer at python.org Wed May 12 05:57:42 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 12 May 2021 09:57:42 -0000 Subject: [Python-checkins] bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules (GH-26025) (#26028) Message-ID: https://github.com/python/cpython/commit/378211f7789c4edf7385ff619fa74d6615bef242 commit: 378211f7789c4edf7385ff619fa74d6615bef242 branch: 3.8 author: Steve Dower committer: ambv date: 2021-05-12T11:57:37+02:00 summary: bpo-44070: No longer eagerly makes import filenames absolute, except for extension modules (GH-26025) (#26028) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst M Lib/importlib/_bootstrap_external.py M Lib/test/test_importlib/test_spec.py M Python/importlib_external.h diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index a00f35cdce9d07..509f99ae8eff77 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -711,11 +711,6 @@ 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 @@ -1152,6 +1147,11 @@ class ExtensionFileLoader(FileLoader, _LoaderBasics): def __init__(self, name, path): self.name = name + if not _path_isabs(path): + try: + path = _path_join(_os.getcwd(), path) + except OSError: + pass self.path = path def __eq__(self, other): diff --git a/Lib/test/test_importlib/test_spec.py b/Lib/test/test_importlib/test_spec.py index 14aec09d97c90f..c6fe9d550b701c 100644 --- a/Lib/test/test_importlib/test_spec.py +++ b/Lib/test/test_importlib/test_spec.py @@ -815,10 +815,10 @@ def test_spec_from_file_location_relative_path(self): self.assertEqual(spec.name, self.name) self.assertEqual(spec.loader, self.fileloader) - self.assertEqual(spec.origin, self.path) + self.assertEqual(spec.origin, os.path.basename(self.path)) self.assertIs(spec.loader_state, None) self.assertIs(spec.submodule_search_locations, None) - self.assertEqual(spec.cached, self.cached) + self.assertEqual(spec.cached, os.path.relpath(self.cached)) self.assertTrue(spec.has_location) (Frozen_FactoryTests, diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst new file mode 100644 index 00000000000000..6f7f307bda0770 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-22-30-12.bpo-44070.5bBtKx.rst @@ -0,0 +1,2 @@ +No longer eagerly makes import filenames absolute, except for extension +modules, which was introduced in 3.8.10. diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 3327c3328236a5..8e0650a7dc65c3 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -961,1866 +961,1866 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, + 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,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,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, - 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,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, + 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,0,0,0,0,41,17,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,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,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,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,1,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,8,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,23,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,39,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, - 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, + 214,0,0,0,245,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,58,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, - 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, + 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, - 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,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, + 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,66, + 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,69,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,77,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,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, + 114,231,0,0,0,53,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,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,84,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,92,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,106,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,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,116,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,123,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,133,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,141,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,82,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,231,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,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, + 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,237,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,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,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,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, + 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,241,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,244,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,0,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,5,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,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, - 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,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, + 218,19,103,101,116,95,114,101,115,111,117,114,99,101,95,114, + 101,97,100,101,114,16,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, - 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, + 13,111,112,101,110,95,114,101,115,111,117,114,99,101,22,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,26,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,32, + 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,38,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,226,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,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,46,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,51,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,56,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,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, + 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,42,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,91,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, - 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, + 252,0,0,0,107,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,87,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,8, + 0,0,0,67,0,0,0,115,64,0,0,0,124,1,124,0, + 95,0,116,1,124,2,131,1,115,54,122,18,116,2,116,3, + 160,4,161,0,124,2,131,2,125,2,87,0,110,20,4,0, + 116,5,107,10,114,52,1,0,1,0,1,0,89,0,110,2, + 88,0,124,2,124,0,95,6,100,0,83,0,114,68,0,0, + 0,41,7,114,140,0,0,0,114,84,0,0,0,114,66,0, + 0,0,114,21,0,0,0,114,80,0,0,0,114,75,0,0, + 0,114,64,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,124, + 4,0,0,115,14,0,0,0,0,1,6,1,8,1,2,1, + 18,1,14,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,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,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,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, - 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, + 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,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,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,116,4,0,0,115,22, + 0,0,0,8,2,4,6,8,9,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,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, + 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,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,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, + 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, - 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,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,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, + 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,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, + 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,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,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,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,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,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,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,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,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,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,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,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,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,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, + 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,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,68,14,64,14,29,16,127,0,17,14,72,18,45,18,26, + 4,3,18,58,14,63,14,42,14,127,0,20,14,127,0,27, + 10,23,8,11,8,65, }; From webhook-mailer at python.org Wed May 12 06:18:12 2021 From: webhook-mailer at python.org (ambv) Date: Wed, 12 May 2021 10:18:12 -0000 Subject: [Python-checkins] [3.8] bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964). (GH-26056) Message-ID: https://github.com/python/cpython/commit/4844abdd700120120fc76c29d911bcb547700baf commit: 4844abdd700120120fc76c29d911bcb547700baf branch: 3.8 author: ?ukasz Langa committer: ambv date: 2021-05-12T12:18:07+02:00 summary: [3.8] bpo-44061: Fix pkgutil.iter_modules regression when passed a pathlib.Path object (GH-25964). (GH-26056) (cherry picked from commit e9d7f88d5643f7e6387bf994c130503766d7eb92) Co-authored-by: Miguel Brito <5544985+miguendes at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst M Lib/pkgutil.py M Lib/test/test_pkgutil.py diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 8474a773e7c732..3344d9dac98a83 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -411,6 +411,7 @@ def get_importer(path_item): The cache (or part of it) can be cleared manually if a rescan of sys.path_hooks is necessary. """ + path_item = os.fsdecode(path_item) try: importer = sys.path_importer_cache[path_item] except KeyError: diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py index 2887ce6cc055da..a7a14969a93b45 100644 --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -1,4 +1,5 @@ from test.support import run_unittest, unload, check_warnings, CleanImport +from pathlib import Path import unittest import sys import importlib @@ -90,6 +91,45 @@ def test_getdata_zipfile(self): del sys.modules[pkg] + def test_issue44061_iter_modules(self): + #see: issue44061 + zip = 'test_getdata_zipfile.zip' + pkg = 'test_getdata_zipfile' + + # Include a LF and a CRLF, to test that binary data is read back + RESOURCE_DATA = b'Hello, world!\nSecond line\r\nThird line' + + # Make a package with some resources + zip_file = os.path.join(self.dirname, zip) + z = zipfile.ZipFile(zip_file, 'w') + + # Empty init.py + z.writestr(pkg + '/__init__.py', "") + # Resource files, res.txt + z.writestr(pkg + '/res.txt', RESOURCE_DATA) + z.close() + + # Check we can read the resources + sys.path.insert(0, zip_file) + try: + res = pkgutil.get_data(pkg, 'res.txt') + self.assertEqual(res, RESOURCE_DATA) + + # make sure iter_modules accepts Path objects + names = [] + for moduleinfo in pkgutil.iter_modules([Path(zip_file)]): + self.assertIsInstance(moduleinfo, pkgutil.ModuleInfo) + names.append(moduleinfo.name) + self.assertEqual(names, [pkg]) + finally: + del sys.path[0] + sys.modules.pop(pkg, None) + + # assert path must be None or list of paths + expected_msg = "path must be None or list of paths to look for modules in" + with self.assertRaisesRegex(ValueError, expected_msg): + list(pkgutil.iter_modules("invalid_path")) + def test_unreadable_dir_on_syspath(self): # issue7367 - walk_packages failed if unreadable dir on sys.path package_name = "unreadable_package" @@ -480,6 +520,12 @@ def test_get_importer_avoids_emulation(self): self.assertIsNone(pkgutil.get_importer("*??")) self.assertEqual(len(w.warnings), 0) + def test_issue44061(self): + try: + pkgutil.get_importer(Path("/home")) + except AttributeError: + self.fail("Unexpected AttributeError when calling get_importer") + def test_iter_importers_avoids_emulation(self): with check_warnings() as w: for importer in pkgutil.iter_importers(): pass diff --git a/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst new file mode 100644 index 00000000000000..e41f285fae9491 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-07-08-39-23.bpo-44061.MvElG6.rst @@ -0,0 +1,2 @@ +Fix regression in previous release when calling :func:`pkgutil.iter_modules` +with a list of :class:`pathlib.Path` objects From webhook-mailer at python.org Wed May 12 06:23:07 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 10:23:07 -0000 Subject: [Python-checkins] bpo-40640: doc -- add missing ... in example of Continue (#26055) Message-ID: https://github.com/python/cpython/commit/6574334a68aa324394a6fd1f855ecbad20432b1e commit: 6574334a68aa324394a6fd1f855ecbad20432b1e branch: main author: Irit Katriel committer: iritkatriel date: 2021-05-12T11:23:03+01:00 summary: bpo-40640: doc -- add missing ... in example of Continue (#26055) Co-authored-by: Chas Belov <59780179+ChasBelov at users.noreply.github.com> files: M Doc/tutorial/controlflow.rst diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst index 0b09c18170dd84..ee2c3e5b5853c7 100644 --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -214,6 +214,7 @@ iteration of the loop:: ... print("Found an even number", num) ... continue ... print("Found an odd number", num) + ... Found an even number 2 Found an odd number 3 Found an even number 4 From webhook-mailer at python.org Wed May 12 06:25:49 2021 From: webhook-mailer at python.org (markshannon) Date: Wed, 12 May 2021 10:25:49 -0000 Subject: [Python-checkins] bpo-43933: Force RETURN_VALUE bytecodes to have line numbers (GH-26054) Message-ID: https://github.com/python/cpython/commit/cb6f3d7163c611a7772da8969475e47fbdd147af commit: cb6f3d7163c611a7772da8969475e47fbdd147af branch: main author: Mark Shannon committer: markshannon date: 2021-05-12T11:25:44+01:00 summary: bpo-43933: Force RETURN_VALUE bytecodes to have line numbers (GH-26054) files: M Lib/test/test_sys_settrace.py M Python/compile.c M Python/importlib.h M Python/importlib_external.h diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 12d4c288e2311a..578726957f3911 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -976,6 +976,26 @@ class A: (3, 'return'), (1, 'return')]) + def test_try_in_try(self): + def func(): + try: + try: + pass + except Exception as ex: + pass + except Exception: + pass + + # This doesn't conform to PEP 626 + self.run_and_compare(func, + [(0, 'call'), + (1, 'line'), + (2, 'line'), + (3, 'line'), + (5, 'line'), + (5, 'return')]) + + class SkipLineEventsTraceTestCase(TraceTestCase): """Repeat the trace tests, but with per-line events skipped""" @@ -1647,6 +1667,7 @@ async def test_no_jump_forwards_into_async_for_block(output): output.append(1) async for i in asynciter([1, 2]): output.append(3) + pass @jump_test(3, 2, [2, 2], (ValueError, 'into')) def test_no_jump_backwards_into_for_block(output): diff --git a/Python/compile.c b/Python/compile.c index 013ee4b6c84c88..071dabc825bbb7 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -7276,6 +7276,34 @@ insert_generator_prefix(struct compiler *c, basicblock *entryblock) { return 0; } +/* Make sure that all returns have a line number, even if early passes + * have failed to propagate a correct line number. + * The resulting line number may not be correct according to PEP 626, + * but should be "good enough", and no worse than in older versions. */ +static void +guarantee_lineno_for_exits(struct assembler *a, int firstlineno) { + int lineno = firstlineno; + assert(lineno > 0); + for (basicblock *b = a->a_entry; b != NULL; b = b->b_next) { + if (b->b_iused == 0) { + continue; + } + struct instr *last = &b->b_instr[b->b_iused-1]; + if (last->i_lineno < 0) { + if (last->i_opcode == RETURN_VALUE) + { + for (int i = 0; i < b->b_iused; i++) { + assert(b->b_instr[i].i_lineno < 0); + b->b_instr[i].i_lineno = lineno; + } + } + } + else { + lineno = last->i_lineno; + } + } +} + static PyCodeObject * assemble(struct compiler *c, int addNone) { @@ -7338,6 +7366,7 @@ assemble(struct compiler *c, int addNone) if (optimize_cfg(c, &a, consts)) { goto error; } + guarantee_lineno_for_exits(&a, c->u->u_firstlineno); int maxdepth = stackdepth(c); if (maxdepth < 0) { diff --git a/Python/importlib.h b/Python/importlib.h index 7ceb7e7d67bc5c..17d5ed321465f8 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -213,1756 +213,1757 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 110,116,105,109,101,69,114,114,111,114,114,31,0,0,0,114, 32,0,0,0,114,29,0,0,0,114,45,0,0,0,114,46, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,45,0,0,0,125,0,0,0,115,26,0,0,0, + 0,0,114,45,0,0,0,125,0,0,0,115,28,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,14,247,26,128,115,15,0,0,0,135, - 47,61,3,189,4,65,1,11,193,2,3,65,1,11,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,21,0,0,0,218,2, - 105,100,169,1,114,34,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,114,18,0, - 0,0,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, - 35,0,0,0,114,42,0,0,0,114,44,0,0,0,114,45, - 0,0,0,114,54,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,5,0,0,0,114,6,0,0,0,114,24,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,18,0,0,0,114,24,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,25,0,0,0,41, - 2,114,21,0,0,0,114,31,0,0,0,114,33,0,0,0, - 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 35,0,0,0,146,0,0,0,243,4,0,0,0,6,1,10, - 1,114,18,0,0,0,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,43,0,0,0,84,41,1,114,31,0,0, - 0,114,53,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,44,0,0,0,150,0,0,0,115,4, - 0,0,0,14,1,4,1,114,18,0,0,0,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,26,0,0,0, - 114,47,0,0,0,114,43,0,0,0,41,2,114,31,0,0, - 0,114,48,0,0,0,114,53,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,45,0,0,0,154, - 0,0,0,115,6,0,0,0,10,1,8,1,18,1,114,18, - 0,0,0,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,49,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,50,0,0, - 0,114,53,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,54,0,0,0,159,0,0,0,114,55, - 0,0,0,114,18,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,35,0,0,0,114, - 44,0,0,0,114,45,0,0,0,114,54,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,56,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,18,0,0, - 0,114,56,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, + 6,1,14,1,10,1,14,247,22,128,4,0,115,15,0,0, + 0,135,47,61,3,189,4,65,1,11,193,2,3,65,1,11, + 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,21,0,0,0, + 218,2,105,100,169,1,114,34,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,114, + 18,0,0,0,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,35,0,0,0,114,42,0,0,0,114,44,0,0,0, + 114,45,0,0,0,114,54,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,24, + 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,18,0,0,0,114, + 24,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,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,33,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,35,0,0,0,165,0,0,0,114,57, - 0,0,0,114,18,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,59,0,0,0,114,60,0,0,0, - 114,44,0,0,0,114,53,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,114,18,0,0,0,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,60,0,0,0,114,45,0,0, - 0,41,3,114,34,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,114,18,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,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,35, - 0,0,0,114,62,0,0,0,114,64,0,0,0,114,5,0, + 95,0,100,1,124,0,95,1,100,0,83,0,114,25,0,0, + 0,41,2,114,21,0,0,0,114,31,0,0,0,114,33,0, 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, - 0,114,58,0,0,0,163,0,0,0,115,8,0,0,0,8, - 0,8,2,8,4,12,4,114,18,0,0,0,114,58,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,138,0,0,0,116, - 0,160,1,161,0,1,0,9,0,9,0,116,2,124,0,25, - 0,131,0,125,1,110,12,35,0,4,0,116,3,121,68,1, - 0,1,0,1,0,100,1,125,1,89,0,110,1,37,0,124, - 1,100,1,117,0,114,55,116,4,100,1,117,0,114,37,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,116,0,160, - 9,161,0,1,0,124,1,83,0,35,0,116,0,160,9,161, - 0,1,0,119,0,37,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,56,0,0,0,116,0,160,1,161,0,1,0,9, - 0,116,2,160,3,124,1,161,1,124,0,117,0,114,15,116, - 2,124,1,61,0,116,0,160,4,161,0,1,0,100,0,83, - 0,35,0,116,0,160,4,161,0,1,0,119,0,37,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,39,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,21,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, - 16,0,0,0,8,1,2,1,14,4,6,1,12,2,2,128, - 10,0,2,128,115,8,0,0,0,133,10,21,0,149,6,27, - 7,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,65,0,0,0,114,66,0,0,0,114,67,0,0,0, - 218,8,75,101,121,69,114,114,111,114,114,27,0,0,0,114, - 56,0,0,0,114,24,0,0,0,218,8,95,119,101,97,107, - 114,101,102,114,69,0,0,0,114,68,0,0,0,41,3,114, - 21,0,0,0,114,28,0,0,0,114,70,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,61,0, - 0,0,179,0,0,0,115,40,0,0,0,8,6,2,1,2, - 1,12,1,2,128,12,1,8,1,2,128,8,2,8,1,10, - 1,8,2,12,2,16,11,8,2,4,2,2,128,10,254,2, - 128,2,234,115,26,0,0,0,134,5,12,0,139,1,61,0, - 140,9,23,7,149,34,61,0,189,6,65,3,7,193,4,1, - 23,7,114,61,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,56,0,0,0,116,0,124,0,131,1,125,1,9,0,124, - 1,160,1,161,0,1,0,110,11,35,0,4,0,116,2,121, - 27,1,0,1,0,1,0,89,0,100,1,83,0,37,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,61,0,0,0,114,44,0,0,0,114,23,0,0,0, - 114,45,0,0,0,41,2,114,21,0,0,0,114,28,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,18,0,0,0,8,6, - 2,1,10,1,2,128,12,1,6,3,2,128,12,2,2,251, - 115,12,0,0,0,133,4,10,0,138,7,20,7,155,1,20, - 7,114,73,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,63,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,18,0,0,0,114,75,0,0,0,114,43,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,19,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,51,0,0, - 0,218,6,115,116,100,101,114,114,41,3,218,7,109,101,115, - 115,97,103,101,114,76,0,0,0,114,63,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,18,0,0,0,114,84,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, - 20,0,0,0,41,4,114,19,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,51, - 0,0,0,169,2,114,34,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, + 0,114,35,0,0,0,146,0,0,0,243,4,0,0,0,6, + 1,10,1,114,18,0,0,0,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,43,0,0,0,84,41,1,114,31, + 0,0,0,114,53,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,44,0,0,0,150,0,0,0, + 115,4,0,0,0,14,1,4,1,114,18,0,0,0,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,26,0, + 0,0,114,47,0,0,0,114,43,0,0,0,41,2,114,31, + 0,0,0,114,48,0,0,0,114,53,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,6,0,0,0,114,45,0,0, + 0,154,0,0,0,115,6,0,0,0,10,1,8,1,18,1, + 114,18,0,0,0,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,49,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,50, + 0,0,0,114,53,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,54,0,0,0,159,0,0,0, + 114,55,0,0,0,114,18,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,35,0,0, + 0,114,44,0,0,0,114,45,0,0,0,114,54,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,56,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,18, + 0,0,0,114,56,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,33,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,35,0,0,0,165,0,0,0, + 114,57,0,0,0,114,18,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,59,0,0,0,114,60,0, + 0,0,114,44,0,0,0,114,53,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,114,18,0,0,0,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,60,0,0,0,114,45, + 0,0,0,41,3,114,34,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,114,18,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,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,35,0,0,0,114,62,0,0,0,114,64,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, + 0,0,0,114,58,0,0,0,163,0,0,0,115,8,0,0, + 0,8,0,8,2,8,4,12,4,114,18,0,0,0,114,58, + 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,138,0,0, + 0,116,0,160,1,161,0,1,0,9,0,9,0,116,2,124, + 0,25,0,131,0,125,1,110,12,35,0,4,0,116,3,121, + 68,1,0,1,0,1,0,100,1,125,1,89,0,110,1,37, + 0,124,1,100,1,117,0,114,55,116,4,100,1,117,0,114, + 37,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,116, + 0,160,9,161,0,1,0,124,1,83,0,35,0,116,0,160, + 9,161,0,1,0,119,0,37,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,56,0,0,0,116,0,160,1,161,0,1, + 0,9,0,116,2,160,3,124,1,161,1,124,0,117,0,114, + 15,116,2,124,1,61,0,116,0,160,4,161,0,1,0,100, + 0,83,0,35,0,116,0,160,4,161,0,1,0,119,0,37, + 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,39,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,21,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,16,0,0,0,8,1,2,1,14,4,6,1,12,2, + 2,128,10,0,2,128,115,8,0,0,0,133,10,21,0,149, + 6,27,7,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,65,0,0,0,114,66,0,0,0,114,67,0, + 0,0,218,8,75,101,121,69,114,114,111,114,114,27,0,0, + 0,114,56,0,0,0,114,24,0,0,0,218,8,95,119,101, + 97,107,114,101,102,114,69,0,0,0,114,68,0,0,0,41, + 3,114,21,0,0,0,114,28,0,0,0,114,70,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 61,0,0,0,179,0,0,0,115,40,0,0,0,8,6,2, + 1,2,1,12,1,2,128,12,1,8,1,2,128,8,2,8, + 1,10,1,8,2,12,2,16,11,8,2,4,2,2,128,10, + 254,2,128,2,234,115,26,0,0,0,134,5,12,0,139,1, + 61,0,140,9,23,7,149,34,61,0,189,6,65,3,7,193, + 4,1,23,7,114,61,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,56,0,0,0,116,0,124,0,131,1,125,1,9, + 0,124,1,160,1,161,0,1,0,110,11,35,0,4,0,116, + 2,121,27,1,0,1,0,1,0,89,0,100,1,83,0,37, + 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,61,0,0,0,114,44,0,0,0,114,23,0, + 0,0,114,45,0,0,0,41,2,114,21,0,0,0,114,28, + 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,18,0,0,0, + 8,6,2,1,10,1,2,128,12,1,6,3,2,128,12,2, + 2,251,115,12,0,0,0,133,4,10,0,138,7,20,7,155, + 1,20,7,114,73,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,63,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,18,0,0,0,114,75,0,0,0,114,43, + 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,19,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,51, + 0,0,0,218,6,115,116,100,101,114,114,41,3,218,7,109, + 101,115,115,97,103,101,114,76,0,0,0,114,63,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,18,0,0,0,114,84,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,20,0,0,0,41,4,114,19,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,51,0,0,0,169,2,114,34,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,114,18,0,0,0,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, - 254,0,0,0,243,10,0,0,0,10,1,10,1,2,1,6, - 255,10,2,114,18,0,0,0,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,92,0,0,0,114,93,0, - 0,0,114,5,0,0,0,114,91,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,18,0,0,0,114,96,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,85,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,20,0,0,0,41,4,114,65,0,0,0,218,9, - 105,115,95,102,114,111,122,101,110,114,88,0,0,0,114,51, - 0,0,0,114,89,0,0,0,114,91,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,94,0,0,0,114,18,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, + 78,169,1,114,17,0,0,0,41,2,114,92,0,0,0,114, + 93,0,0,0,114,5,0,0,0,114,91,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,18,0,0,0,114,96,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,85,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,20,0,0,0,41,4,114,65,0,0,0, + 218,9,105,115,95,102,114,111,122,101,110,114,88,0,0,0, + 114,51,0,0,0,114,89,0,0,0,114,91,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,78,114,95,0,0,0,41,2,114,92,0,0,0, - 114,100,0,0,0,114,5,0,0,0,114,91,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,97,0,0,0,114, - 18,0,0,0,114,101,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,19,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,34,0,0,0,114,90,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,18,0,0,0,114,112,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,194,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,39,9,0,124,1,160,3,124,0,161,1, - 83,0,35,0,4,0,116,4,121,96,1,0,1,0,1,0, - 89,0,110,1,37,0,9,0,124,0,106,5,125,3,110,12, - 35,0,4,0,116,6,121,95,1,0,1,0,1,0,100,5, - 125,3,89,0,110,1,37,0,9,0,124,0,106,7,125,4, - 110,27,35,0,4,0,116,6,121,94,1,0,1,0,1,0, - 124,1,100,2,117,0,114,79,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,37,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,115,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,51,0,0,0,41,5,114,111, - 0,0,0,218,6,108,111,97,100,101,114,114,110,0,0,0, - 114,21,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,56,0,0,0,12,2,16,1,8,1,10,1,2,1,10, - 1,2,128,12,1,4,1,2,128,2,2,8,1,2,128,12, - 1,8,1,2,128,2,1,8,1,2,128,12,1,8,1,14, - 1,16,2,2,128,12,2,2,250,2,252,2,251,115,47,0, - 0,0,152,4,29,0,157,7,38,7,168,3,44,0,172,9, - 55,7,185,3,61,0,189,16,65,23,7,193,15,6,65,23, - 7,193,30,1,65,23,7,193,31,1,55,7,193,32,1,38, - 7,114,125,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,21,0,0,0,114,123,0, - 0,0,114,127,0,0,0,114,128,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,34,0,0,0,114,21,0,0,0,114,123,0,0, - 0,114,127,0,0,0,114,128,0,0,0,114,129,0,0,0, + 112,101,114,9,1,0,0,114,94,0,0,0,114,18,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,95,0,0,0,41,2,114,92,0, + 0,0,114,100,0,0,0,114,5,0,0,0,114,91,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,97,0,0, + 0,114,18,0,0,0,114,101,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,19,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,34,0,0,0,114, + 90,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,18,0,0,0,114,112,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,194,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,39,9,0,124,1,160,3,124,0, + 161,1,83,0,35,0,4,0,116,4,121,96,1,0,1,0, + 1,0,89,0,110,1,37,0,9,0,124,0,106,5,125,3, + 110,12,35,0,4,0,116,6,121,95,1,0,1,0,1,0, + 100,5,125,3,89,0,110,1,37,0,9,0,124,0,106,7, + 125,4,110,27,35,0,4,0,116,6,121,94,1,0,1,0, + 1,0,124,1,100,2,117,0,114,79,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,37,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,115,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,51,0,0,0,41,5, + 114,111,0,0,0,218,6,108,111,97,100,101,114,114,110,0, + 0,0,114,21,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,56,0,0,0,12,2,16,1,8,1,10,1,2, + 1,10,1,2,128,12,1,4,1,2,128,2,2,8,1,2, + 128,12,1,8,1,2,128,2,1,8,1,2,128,12,1,8, + 1,14,1,16,2,2,128,12,2,2,250,2,252,2,251,115, + 47,0,0,0,152,4,29,0,157,7,38,7,168,3,44,0, + 172,9,55,7,185,3,61,0,189,16,65,23,7,193,15,6, + 65,23,7,193,30,1,65,23,7,193,31,1,55,7,193,32, + 1,38,7,114,125,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,21,0,0,0,114, + 123,0,0,0,114,127,0,0,0,114,128,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,34,0,0,0,114,21,0,0,0,114,123, + 0,0,0,114,127,0,0,0,114,128,0,0,0,114,129,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,35,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,114,18,0, + 0,0,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,51,0,0,0,114,21,0,0,0,114,123,0,0,0,114, + 127,0,0,0,218,6,97,112,112,101,110,100,114,130,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,34,0,0,0,114,63, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, + 0,0,114,54,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,114,18,0,0,0,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,104,0,0,0,124,0,106,0, + 125,2,9,0,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,83,0,35,0,4,0,116,6, + 121,51,1,0,1,0,1,0,116,7,6,0,89,0,83,0, + 37,0,119,0,114,0,0,0,0,41,8,114,130,0,0,0, + 114,21,0,0,0,114,123,0,0,0,114,127,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,34,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,36,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,2,251,2,128,12,6,8,1,2,128, + 2,255,115,12,0,0,0,132,34,39,0,167,9,50,7,179, + 1,50,7,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,132,0,0,0,114,127,0,0,0,114, + 131,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,53,0,0,0, 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, - 35,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,114,18,0,0,0, - 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,51, - 0,0,0,114,21,0,0,0,114,123,0,0,0,114,127,0, - 0,0,218,6,97,112,112,101,110,100,114,130,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,34,0,0,0,114,63,0,0, + 136,0,0,0,135,1,0,0,115,12,0,0,0,10,2,16, + 1,8,1,4,1,14,1,6,1,114,18,0,0,0,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,132,0,0,0,41,2,114,34,0,0,0,114,136,0,0, 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,54,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,114,18,0,0,0,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,104,0,0,0,124,0,106,0,125,2, - 9,0,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,83,0,35,0,4,0,116,6,121,51, - 1,0,1,0,1,0,116,7,6,0,89,0,83,0,37,0, - 119,0,114,0,0,0,0,41,8,114,130,0,0,0,114,21, - 0,0,0,114,123,0,0,0,114,127,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,34,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,36,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,2,251,2,128,12,6,8,1,2,128,2,255, - 115,12,0,0,0,132,34,39,0,167,9,50,7,179,1,50, - 7,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,132,0,0,0,114,127,0,0,0,114,131,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,53,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,136,0, - 0,0,135,1,0,0,115,12,0,0,0,10,2,16,1,8, - 1,4,1,14,1,6,1,114,18,0,0,0,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,132, - 0,0,0,41,2,114,34,0,0,0,114,136,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,136, - 0,0,0,144,1,0,0,115,2,0,0,0,10,2,114,18, - 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,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,26,0,0,0,41,3, - 114,130,0,0,0,114,21,0,0,0,218,10,114,112,97,114, - 116,105,116,105,111,110,114,53,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,114,18,0,0,0,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,131,0,0,0,114,53,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,137,0, - 0,0,156,1,0,0,115,2,0,0,0,6,2,114,18,0, - 0,0,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,131,0,0,0,41,2,114,34,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,137,0,0,0,160,1,0,0,115, - 2,0,0,0,14,2,114,18,0,0,0,41,12,114,9,0, - 0,0,114,8,0,0,0,114,1,0,0,0,114,10,0,0, - 0,114,35,0,0,0,114,54,0,0,0,114,139,0,0,0, - 218,8,112,114,111,112,101,114,116,121,114,136,0,0,0,218, - 6,115,101,116,116,101,114,114,144,0,0,0,114,137,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,126,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,18,0,0,0,114,126,0,0,0,169, - 2,114,127,0,0,0,114,129,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,152,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,67,116,0,124,1,100, - 5,131,2,114,65,9,0,124,1,160,4,124,0,161,1,125, - 3,110,14,35,0,4,0,116,5,121,75,1,0,1,0,1, - 0,100,2,125,3,89,0,110,3,37,0,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,123,0,0,0, - 41,2,114,123,0,0,0,114,130,0,0,0,114,129,0,0, - 0,70,114,149,0,0,0,41,7,114,11,0,0,0,114,140, - 0,0,0,114,141,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,129,0,0,0,114,88,0,0,0,114,126,0,0,0, - 41,6,114,21,0,0,0,114,123,0,0,0,114,127,0,0, - 0,114,129,0,0,0,114,150,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,105,0,0,0,165,1,0,0,115,42,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,12,1,2,128,12,1, - 8,1,2,128,4,3,16,2,2,250,115,15,0,0,0,175, - 5,53,0,181,9,65,0,7,193,11,1,65,0,7,114,105, - 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,50,1,0, - 0,9,0,124,0,106,0,125,3,110,10,35,0,4,0,116, - 1,121,152,1,0,1,0,1,0,89,0,110,7,37,0,124, - 3,100,0,117,1,114,21,124,3,83,0,124,0,106,2,125, - 4,124,1,100,0,117,0,114,43,9,0,124,0,106,3,125, - 1,110,10,35,0,4,0,116,1,121,151,1,0,1,0,1, - 0,89,0,110,1,37,0,9,0,124,0,106,4,125,5,110, - 12,35,0,4,0,116,1,121,150,1,0,1,0,1,0,100, - 0,125,5,89,0,110,1,37,0,124,2,100,0,117,0,114, - 87,124,5,100,0,117,0,114,85,9,0,124,1,106,5,125, - 2,110,14,35,0,4,0,116,1,121,149,1,0,1,0,1, - 0,100,0,125,2,89,0,110,3,37,0,124,5,125,2,9, - 0,124,0,106,6,125,6,110,12,35,0,4,0,116,1,121, - 148,1,0,1,0,1,0,100,0,125,6,89,0,110,1,37, - 0,9,0,116,7,124,0,106,8,131,1,125,7,110,12,35, - 0,4,0,116,1,121,147,1,0,1,0,1,0,100,0,125, - 7,89,0,110,1,37,0,116,9,124,4,124,1,124,2,100, - 1,141,3,125,3,124,5,100,0,117,0,114,136,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,127,0,0,0,70,84,41, - 13,114,114,0,0,0,114,2,0,0,0,114,9,0,0,0, - 114,113,0,0,0,114,122,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, - 126,0,0,0,114,131,0,0,0,114,136,0,0,0,114,130, - 0,0,0,41,8,114,111,0,0,0,114,123,0,0,0,114, - 127,0,0,0,114,110,0,0,0,114,21,0,0,0,90,8, - 108,111,99,97,116,105,111,110,114,136,0,0,0,114,130,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,108,0,0,0,2,2,8, - 1,2,128,12,1,4,1,2,128,8,2,4,1,6,2,8, - 1,2,1,8,1,2,128,12,1,4,2,2,128,2,1,8, - 1,2,128,12,1,8,1,2,128,8,1,8,1,2,1,8, - 1,2,128,12,1,8,1,2,128,4,2,2,1,8,1,2, - 128,12,1,8,1,2,128,2,1,12,1,2,128,12,1,8, - 1,2,128,14,2,18,1,6,1,6,1,4,1,2,249,2, - 252,2,250,2,250,2,251,2,246,115,93,0,0,0,129,3, - 5,0,133,7,14,7,157,3,33,0,161,7,42,7,172,3, - 48,0,176,9,59,7,193,5,3,65,9,0,193,9,9,65, - 20,7,193,24,3,65,28,0,193,28,9,65,39,7,193,41, - 5,65,47,0,193,47,9,65,58,7,194,19,1,65,58,7, - 194,20,1,65,39,7,194,21,1,65,20,7,194,22,1,59, - 7,194,23,1,42,7,194,24,1,14,7,114,156,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,204,1,0,0,124,2,115,10,116, - 0,124,1,100,1,100,0,131,3,100,0,117,0,114,26,9, - 0,124,0,106,1,124,1,95,2,110,10,35,0,4,0,116, - 3,121,229,1,0,1,0,1,0,89,0,110,1,37,0,124, - 2,115,36,116,0,124,1,100,2,100,0,131,3,100,0,117, - 0,114,87,124,0,106,4,125,3,124,3,100,0,117,0,114, - 72,124,0,106,5,100,0,117,1,114,72,116,6,100,0,117, - 0,114,54,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,9,0,124,3,124, - 1,95,12,110,10,35,0,4,0,116,3,121,228,1,0,1, - 0,1,0,89,0,110,1,37,0,124,2,115,97,116,0,124, - 1,100,3,100,0,131,3,100,0,117,0,114,113,9,0,124, - 0,106,13,124,1,95,14,110,10,35,0,4,0,116,3,121, - 227,1,0,1,0,1,0,89,0,110,1,37,0,9,0,124, - 0,124,1,95,15,110,10,35,0,4,0,116,3,121,226,1, - 0,1,0,1,0,89,0,110,1,37,0,124,2,115,138,116, - 0,124,1,100,4,100,0,131,3,100,0,117,0,114,159,124, - 0,106,5,100,0,117,1,114,159,9,0,124,0,106,5,124, - 1,95,16,110,10,35,0,4,0,116,3,121,225,1,0,1, - 0,1,0,89,0,110,1,37,0,124,0,106,17,114,221,124, - 2,115,172,116,0,124,1,100,5,100,0,131,3,100,0,117, - 0,114,188,9,0,124,0,106,18,124,1,95,11,110,10,35, - 0,4,0,116,3,121,224,1,0,1,0,1,0,89,0,110, - 1,37,0,124,2,115,198,116,0,124,1,100,6,100,0,131, - 3,100,0,117,0,114,221,124,0,106,19,100,0,117,1,114, - 221,9,0,124,0,106,19,124,1,95,20,124,1,83,0,35, - 0,4,0,116,3,121,223,1,0,1,0,1,0,89,0,124, - 1,83,0,37,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, - 113,0,0,0,218,11,95,95,112,97,99,107,97,103,101,95, - 95,114,155,0,0,0,114,122,0,0,0,114,153,0,0,0, - 41,21,114,13,0,0,0,114,21,0,0,0,114,9,0,0, - 0,114,2,0,0,0,114,123,0,0,0,114,130,0,0,0, - 114,140,0,0,0,114,141,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,122,0,0, - 0,114,113,0,0,0,114,144,0,0,0,114,159,0,0,0, - 114,114,0,0,0,114,155,0,0,0,114,137,0,0,0,114, - 127,0,0,0,114,136,0,0,0,114,153,0,0,0,41,5, - 114,110,0,0,0,114,111,0,0,0,114,158,0,0,0,114, - 123,0,0,0,114,160,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,142,0,0,0,20,4,2,1,10,1,2,128,12,1,4, - 1,2,128,20,2,6,1,8,1,10,2,8,1,4,1,6, - 1,10,2,8,1,6,1,6,11,2,1,8,1,2,128,12, - 1,4,1,2,128,20,2,2,1,10,1,2,128,12,1,4, - 1,2,128,2,2,8,1,2,128,12,1,4,1,2,128,20, - 2,10,1,2,1,10,1,2,128,12,1,4,1,2,128,6, - 2,20,1,2,1,10,1,2,128,12,1,4,1,2,128,20, - 2,10,1,2,1,8,1,4,3,2,128,12,254,2,1,4, - 1,2,128,4,0,2,254,2,249,2,249,2,249,2,251,2, - 250,2,228,115,121,0,0,0,139,4,16,0,144,7,25,7, - 193,9,3,65,13,0,193,13,7,65,22,7,193,34,4,65, - 39,0,193,39,7,65,48,7,193,50,3,65,54,0,193,54, - 7,65,63,7,194,16,4,66,21,0,194,21,7,66,30,7, - 194,45,4,66,50,0,194,50,7,66,59,7,195,12,4,67, - 18,0,195,18,7,67,28,7,195,31,1,67,28,7,195,32, - 1,66,59,7,195,33,1,66,30,7,195,34,1,65,63,7, - 195,35,1,65,48,7,195,36,1,65,22,7,195,37,1,25, - 7,114,162,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,123,0, - 0,0,114,163,0,0,0,114,88,0,0,0,114,22,0,0, - 0,114,21,0,0,0,114,162,0,0,0,169,2,114,110,0, - 0,0,114,111,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,18,0,0,0,114,166,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,116,0,0,0,114, - 117,0,0,0,114,118,0,0,0,114,119,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,21,0,0,0,114,127,0,0,0,114,123, - 0,0,0,114,51,0,0,0,114,137,0,0,0,41,2,114, - 110,0,0,0,114,21,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,6,0,0,0,114,120,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,18,0,0,0,114,120,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,32,1,0,0,124,0, - 106,0,125,2,116,1,124,2,131,1,53,0,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,9,0,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,116,2,106,3,160,17,124,0, + 114,136,0,0,0,144,1,0,0,115,2,0,0,0,10,2, + 114,18,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,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,26,0,0,0, + 41,3,114,130,0,0,0,114,21,0,0,0,218,10,114,112, + 97,114,116,105,116,105,111,110,114,53,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,114,18,0,0,0,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,131,0,0,0,114,53,0,0,0, + 114,5,0,0,0,114,5,0,0,0,114,6,0,0,0,114, + 137,0,0,0,156,1,0,0,115,2,0,0,0,6,2,114, + 18,0,0,0,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,131,0,0,0,41,2,114,34,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,137,0,0,0,160,1,0, + 0,115,2,0,0,0,14,2,114,18,0,0,0,41,12,114, + 9,0,0,0,114,8,0,0,0,114,1,0,0,0,114,10, + 0,0,0,114,35,0,0,0,114,54,0,0,0,114,139,0, + 0,0,218,8,112,114,111,112,101,114,116,121,114,136,0,0, + 0,218,6,115,101,116,116,101,114,114,144,0,0,0,114,137, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,126,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,18,0,0,0,114,126,0,0, + 0,169,2,114,127,0,0,0,114,129,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,152,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,67,116,0,124, + 1,100,5,131,2,114,65,9,0,124,1,160,4,124,0,161, + 1,125,3,110,14,35,0,4,0,116,5,121,75,1,0,1, + 0,1,0,100,2,125,3,89,0,110,3,37,0,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,123,0, + 0,0,41,2,114,123,0,0,0,114,130,0,0,0,114,129, + 0,0,0,70,114,149,0,0,0,41,7,114,11,0,0,0, + 114,140,0,0,0,114,141,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,129,0,0,0,114,88,0,0,0,114,126,0, + 0,0,41,6,114,21,0,0,0,114,123,0,0,0,114,127, + 0,0,0,114,129,0,0,0,114,150,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,105,0,0,0,165,1,0,0,115,42,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,12,1,2,128, + 12,1,8,1,2,128,4,3,16,2,2,250,115,15,0,0, + 0,175,5,53,0,181,9,65,0,7,193,11,1,65,0,7, + 114,105,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,50, + 1,0,0,9,0,124,0,106,0,125,3,110,10,35,0,4, + 0,116,1,121,152,1,0,1,0,1,0,89,0,110,7,37, + 0,124,3,100,0,117,1,114,21,124,3,83,0,124,0,106, + 2,125,4,124,1,100,0,117,0,114,43,9,0,124,0,106, + 3,125,1,110,10,35,0,4,0,116,1,121,151,1,0,1, + 0,1,0,89,0,110,1,37,0,9,0,124,0,106,4,125, + 5,110,12,35,0,4,0,116,1,121,150,1,0,1,0,1, + 0,100,0,125,5,89,0,110,1,37,0,124,2,100,0,117, + 0,114,87,124,5,100,0,117,0,114,85,9,0,124,1,106, + 5,125,2,110,14,35,0,4,0,116,1,121,149,1,0,1, + 0,1,0,100,0,125,2,89,0,110,3,37,0,124,5,125, + 2,9,0,124,0,106,6,125,6,110,12,35,0,4,0,116, + 1,121,148,1,0,1,0,1,0,100,0,125,6,89,0,110, + 1,37,0,9,0,116,7,124,0,106,8,131,1,125,7,110, + 12,35,0,4,0,116,1,121,147,1,0,1,0,1,0,100, + 0,125,7,89,0,110,1,37,0,116,9,124,4,124,1,124, + 2,100,1,141,3,125,3,124,5,100,0,117,0,114,136,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,127,0,0,0,70, + 84,41,13,114,114,0,0,0,114,2,0,0,0,114,9,0, + 0,0,114,113,0,0,0,114,122,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,126,0,0,0,114,131,0,0,0,114,136,0,0,0, + 114,130,0,0,0,41,8,114,111,0,0,0,114,123,0,0, + 0,114,127,0,0,0,114,110,0,0,0,114,21,0,0,0, + 90,8,108,111,99,97,116,105,111,110,114,136,0,0,0,114, + 130,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,108,0,0,0,2, + 2,8,1,2,128,12,1,4,1,2,128,8,2,4,1,6, + 2,8,1,2,1,8,1,2,128,12,1,4,2,2,128,2, + 1,8,1,2,128,12,1,8,1,2,128,8,1,8,1,2, + 1,8,1,2,128,12,1,8,1,2,128,4,2,2,1,8, + 1,2,128,12,1,8,1,2,128,2,1,12,1,2,128,12, + 1,8,1,2,128,14,2,18,1,6,1,6,1,4,1,2, + 249,2,252,2,250,2,250,2,251,2,246,115,93,0,0,0, + 129,3,5,0,133,7,14,7,157,3,33,0,161,7,42,7, + 172,3,48,0,176,9,59,7,193,5,3,65,9,0,193,9, + 9,65,20,7,193,24,3,65,28,0,193,28,9,65,39,7, + 193,41,5,65,47,0,193,47,9,65,58,7,194,19,1,65, + 58,7,194,20,1,65,39,7,194,21,1,65,20,7,194,22, + 1,59,7,194,23,1,42,7,194,24,1,14,7,114,156,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,204,1,0,0,124,2,115, + 10,116,0,124,1,100,1,100,0,131,3,100,0,117,0,114, + 26,9,0,124,0,106,1,124,1,95,2,110,10,35,0,4, + 0,116,3,121,229,1,0,1,0,1,0,89,0,110,1,37, + 0,124,2,115,36,116,0,124,1,100,2,100,0,131,3,100, + 0,117,0,114,87,124,0,106,4,125,3,124,3,100,0,117, + 0,114,72,124,0,106,5,100,0,117,1,114,72,116,6,100, + 0,117,0,114,54,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,9,0,124, + 3,124,1,95,12,110,10,35,0,4,0,116,3,121,228,1, + 0,1,0,1,0,89,0,110,1,37,0,124,2,115,97,116, + 0,124,1,100,3,100,0,131,3,100,0,117,0,114,113,9, + 0,124,0,106,13,124,1,95,14,110,10,35,0,4,0,116, + 3,121,227,1,0,1,0,1,0,89,0,110,1,37,0,9, + 0,124,0,124,1,95,15,110,10,35,0,4,0,116,3,121, + 226,1,0,1,0,1,0,89,0,110,1,37,0,124,2,115, + 138,116,0,124,1,100,4,100,0,131,3,100,0,117,0,114, + 159,124,0,106,5,100,0,117,1,114,159,9,0,124,0,106, + 5,124,1,95,16,110,10,35,0,4,0,116,3,121,225,1, + 0,1,0,1,0,89,0,110,1,37,0,124,0,106,17,114, + 221,124,2,115,172,116,0,124,1,100,5,100,0,131,3,100, + 0,117,0,114,188,9,0,124,0,106,18,124,1,95,11,110, + 10,35,0,4,0,116,3,121,224,1,0,1,0,1,0,89, + 0,110,1,37,0,124,2,115,198,116,0,124,1,100,6,100, + 0,131,3,100,0,117,0,114,221,124,0,106,19,100,0,117, + 1,114,221,9,0,124,0,106,19,124,1,95,20,124,1,83, + 0,35,0,4,0,116,3,121,223,1,0,1,0,1,0,89, + 0,124,1,83,0,37,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,113,0,0,0,218,11,95,95,112,97,99,107,97,103, + 101,95,95,114,155,0,0,0,114,122,0,0,0,114,153,0, + 0,0,41,21,114,13,0,0,0,114,21,0,0,0,114,9, + 0,0,0,114,2,0,0,0,114,123,0,0,0,114,130,0, + 0,0,114,140,0,0,0,114,141,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,122, + 0,0,0,114,113,0,0,0,114,144,0,0,0,114,159,0, + 0,0,114,114,0,0,0,114,155,0,0,0,114,137,0,0, + 0,114,127,0,0,0,114,136,0,0,0,114,153,0,0,0, + 41,5,114,110,0,0,0,114,111,0,0,0,114,158,0,0, + 0,114,123,0,0,0,114,160,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,142,0,0,0,20,4,2,1,10,1,2,128,12, + 1,4,1,2,128,20,2,6,1,8,1,10,2,8,1,4, + 1,6,1,10,2,8,1,6,1,6,11,2,1,8,1,2, + 128,12,1,4,1,2,128,20,2,2,1,10,1,2,128,12, + 1,4,1,2,128,2,2,8,1,2,128,12,1,4,1,2, + 128,20,2,10,1,2,1,10,1,2,128,12,1,4,1,2, + 128,6,2,20,1,2,1,10,1,2,128,12,1,4,1,2, + 128,20,2,10,1,2,1,8,1,4,3,2,128,12,254,2, + 1,4,1,2,128,4,0,2,254,2,249,2,249,2,249,2, + 251,2,250,2,228,115,121,0,0,0,139,4,16,0,144,7, + 25,7,193,9,3,65,13,0,193,13,7,65,22,7,193,34, + 4,65,39,0,193,39,7,65,48,7,193,50,3,65,54,0, + 193,54,7,65,63,7,194,16,4,66,21,0,194,21,7,66, + 30,7,194,45,4,66,50,0,194,50,7,66,59,7,195,12, + 4,67,18,0,195,18,7,67,28,7,195,31,1,67,28,7, + 195,32,1,66,59,7,195,33,1,66,30,7,195,34,1,65, + 63,7,195,35,1,65,48,7,195,36,1,65,22,7,195,37, + 1,25,7,114,162,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, + 123,0,0,0,114,163,0,0,0,114,88,0,0,0,114,22, + 0,0,0,114,21,0,0,0,114,162,0,0,0,169,2,114, + 110,0,0,0,114,111,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,18,0,0,0,114,166,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,116,0,0, + 0,114,117,0,0,0,114,118,0,0,0,114,119,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,21,0,0,0,114,127,0,0,0, + 114,123,0,0,0,114,51,0,0,0,114,137,0,0,0,41, + 2,114,110,0,0,0,114,21,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,120,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,18,0,0,0,114,120,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,32,1,0,0, + 124,0,106,0,125,2,116,1,124,2,131,1,53,0,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,9,0,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,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,16,35,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,16,35,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, - 119,0,37,0,9,0,100,3,4,0,4,0,131,3,1,0, - 124,1,83,0,35,0,49,0,115,136,119,4,37,0,1,0, - 1,0,1,0,89,0,1,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,20,0,0,0,78,250,14, - 109,105,115,115,105,110,103,32,108,111,97,100,101,114,84,114, - 157,0,0,0,114,164,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,21,0,0,0,114,58,0,0,0,114,19, - 0,0,0,114,106,0,0,0,114,39,0,0,0,114,51,0, - 0,0,114,88,0,0,0,114,123,0,0,0,114,130,0,0, - 0,114,162,0,0,0,114,11,0,0,0,114,7,0,0,0, - 114,102,0,0,0,114,103,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,164,0,0,0,218,3,112,111,112, - 41,4,114,110,0,0,0,114,111,0,0,0,114,21,0,0, - 0,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,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,14,4,14,1,2,128,14,255,18,1,10,233,4, - 24,22,128,4,0,115,41,0,0,0,135,20,66,3,3,156, - 65,1,65,43,2,193,29,14,66,3,3,193,43,15,65,58, - 9,193,58,1,66,3,3,194,3,4,66,7,11,194,8,3, - 66,7,11,114,107,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,22,1,0,0,9,0,124,0,106,0,160,1,124,0, - 106,2,161,1,1,0,110,25,35,0,1,0,1,0,1,0, - 124,0,106,2,116,3,106,4,118,0,114,32,116,3,106,4, + 60,0,119,0,37,0,9,0,100,3,4,0,4,0,131,3, + 1,0,124,1,83,0,35,0,49,0,115,136,119,4,37,0, + 1,0,1,0,1,0,89,0,1,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,20,0,0,0,78, + 250,14,109,105,115,115,105,110,103,32,108,111,97,100,101,114, + 84,114,157,0,0,0,114,164,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,21,0,0,0,114,58,0,0,0, + 114,19,0,0,0,114,106,0,0,0,114,39,0,0,0,114, + 51,0,0,0,114,88,0,0,0,114,123,0,0,0,114,130, + 0,0,0,114,162,0,0,0,114,11,0,0,0,114,7,0, + 0,0,114,102,0,0,0,114,103,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,164,0,0,0,218,3,112, + 111,112,41,4,114,110,0,0,0,114,111,0,0,0,114,21, + 0,0,0,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,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,14,4,14,1,2,128,14,255,18,1,10, + 233,4,24,22,128,4,0,115,41,0,0,0,135,20,66,3, + 3,156,65,1,65,43,2,193,29,14,66,3,3,193,43,15, + 65,58,9,193,58,1,66,3,3,194,3,4,66,7,11,194, + 8,3,66,7,11,114,107,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,22,1,0,0,9,0,124,0,106,0,160,1, + 124,0,106,2,161,1,1,0,110,25,35,0,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,37,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,130,0,37,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,71,9,0,124,0,106,0,124,1,95,7,110,10, - 35,0,4,0,116,8,121,138,1,0,1,0,1,0,89,0, - 110,1,37,0,116,6,124,1,100,2,100,0,131,3,100,0, - 117,0,114,109,9,0,124,1,106,9,124,1,95,10,116,11, - 124,1,100,3,131,2,115,98,124,0,106,2,160,12,100,4, - 161,1,100,5,25,0,124,1,95,10,110,10,35,0,4,0, - 116,8,121,137,1,0,1,0,1,0,89,0,110,1,37,0, - 116,6,124,1,100,6,100,0,131,3,100,0,117,0,114,134, - 9,0,124,0,124,1,95,13,124,1,83,0,35,0,4,0, - 116,8,121,136,1,0,1,0,1,0,89,0,124,1,83,0, - 37,0,124,1,83,0,119,0,119,0,119,0,41,7,78,114, - 113,0,0,0,114,159,0,0,0,114,155,0,0,0,114,142, - 0,0,0,114,26,0,0,0,114,114,0,0,0,41,14,114, - 123,0,0,0,114,171,0,0,0,114,21,0,0,0,114,19, - 0,0,0,114,106,0,0,0,114,172,0,0,0,114,13,0, - 0,0,114,113,0,0,0,114,2,0,0,0,114,9,0,0, - 0,114,159,0,0,0,114,11,0,0,0,114,143,0,0,0, - 114,114,0,0,0,114,165,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,80,0,0,0,2,3,16, - 1,2,128,6,1,12,1,14,1,12,1,2,1,2,128,14, - 3,12,1,16,1,2,1,10,1,2,128,12,1,4,1,2, - 128,16,1,2,1,8,4,10,1,18,1,4,128,12,1,4, - 1,2,128,16,1,2,1,6,1,4,3,2,128,12,254,2, - 1,4,1,2,128,4,0,2,254,2,251,2,246,115,59,0, - 0,0,129,7,9,0,137,24,33,7,184,4,61,0,189,7, - 65,6,7,193,16,18,65,35,0,193,35,7,65,44,7,193, - 54,3,65,59,0,193,59,7,66,5,7,194,8,1,66,5, - 7,194,9,1,65,44,7,194,10,1,65,6,7,114,173,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,248,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,9,0,124,2,116,9,106,10, - 124,0,106,11,60,0,9,0,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,110,22,35,0,1,0,1,0, - 1,0,9,0,116,9,106,10,124,0,106,11,61,0,130,0, - 35,0,4,0,116,15,121,123,1,0,1,0,1,0,89,0, - 130,0,37,0,37,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, - 100,7,124,0,95,8,124,2,83,0,35,0,100,7,124,0, - 95,8,119,0,37,0,119,0,41,8,78,114,164,0,0,0, - 114,169,0,0,0,84,114,168,0,0,0,114,20,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,123,0,0,0,114,11,0,0, - 0,114,7,0,0,0,114,102,0,0,0,114,103,0,0,0, - 114,170,0,0,0,114,173,0,0,0,114,166,0,0,0,90, - 13,95,105,110,105,116,105,97,108,105,122,105,110,103,114,19, - 0,0,0,114,106,0,0,0,114,21,0,0,0,114,130,0, - 0,0,114,88,0,0,0,114,164,0,0,0,114,71,0,0, - 0,114,172,0,0,0,114,84,0,0,0,41,3,114,110,0, - 0,0,114,109,0,0,0,114,111,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, - 66,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,10,1,2,3,2,128,12,254, - 2,1,2,1,4,128,14,5,12,1,16,1,6,2,4,2, - 2,128,10,254,2,245,115,64,0,0,0,165,6,65,53,0, - 172,24,65,5,0,193,4,1,65,53,0,193,5,4,65,26, - 7,193,10,5,65,16,6,193,15,1,65,26,7,193,16,7, - 65,25,13,193,23,3,65,26,7,193,26,22,65,53,0,193, - 53,5,65,58,7,193,59,1,65,25,13,114,174,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,9,0,0,0,67,0,0,0,115,58,0,0,0,116,0, - 124,0,106,1,131,1,53,0,1,0,116,2,124,0,131,1, - 2,0,100,1,4,0,4,0,131,3,1,0,83,0,35,0, - 49,0,115,21,119,4,37,0,1,0,1,0,1,0,89,0, - 1,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,58, - 0,0,0,114,21,0,0,0,114,174,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,108,0,0,0,197,2,0,0,115,10,0,0, - 0,12,9,6,1,12,255,2,1,26,128,115,12,0,0,0, - 133,4,16,3,144,4,20,11,149,3,20,11,114,108,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,102,0,0,0,114,103, - 0,0,0,114,104,0,0,0,114,9,0,0,0,114,176,0, - 0,0,114,152,0,0,0,169,1,114,111,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,115,0, - 0,0,223,2,0,0,115,8,0,0,0,6,7,2,1,4, - 255,22,2,114,18,0,0,0,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,151,0,0,0,41,4,114,65,0,0,0,90,10,105, - 115,95,98,117,105,108,116,105,110,114,105,0,0,0,114,152, - 0,0,0,169,4,218,3,99,108,115,114,90,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,114,18,0,0,0,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, + 124,0,106,2,60,0,116,6,124,1,100,1,100,0,131,3, + 100,0,117,0,114,71,9,0,124,0,106,0,124,1,95,7, + 110,10,35,0,4,0,116,8,121,138,1,0,1,0,1,0, + 89,0,110,1,37,0,116,6,124,1,100,2,100,0,131,3, + 100,0,117,0,114,109,9,0,124,1,106,9,124,1,95,10, + 116,11,124,1,100,3,131,2,115,98,124,0,106,2,160,12, + 100,4,161,1,100,5,25,0,124,1,95,10,110,10,35,0, + 4,0,116,8,121,137,1,0,1,0,1,0,89,0,110,1, + 37,0,116,6,124,1,100,6,100,0,131,3,100,0,117,0, + 114,134,9,0,124,0,124,1,95,13,124,1,83,0,35,0, + 4,0,116,8,121,136,1,0,1,0,1,0,89,0,124,1, + 83,0,37,0,124,1,83,0,119,0,119,0,119,0,41,7, + 78,114,113,0,0,0,114,159,0,0,0,114,155,0,0,0, + 114,142,0,0,0,114,26,0,0,0,114,114,0,0,0,41, + 14,114,123,0,0,0,114,171,0,0,0,114,21,0,0,0, + 114,19,0,0,0,114,106,0,0,0,114,172,0,0,0,114, + 13,0,0,0,114,113,0,0,0,114,2,0,0,0,114,9, + 0,0,0,114,159,0,0,0,114,11,0,0,0,114,143,0, + 0,0,114,114,0,0,0,114,165,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,80,0,0,0,2, + 3,16,1,2,128,6,1,12,1,14,1,12,1,2,1,2, + 128,14,3,12,1,16,1,2,1,10,1,2,128,12,1,4, + 1,2,128,16,1,2,1,8,4,10,1,18,1,4,128,12, + 1,4,1,2,128,16,1,2,1,6,1,4,3,2,128,12, + 254,2,1,4,1,2,128,4,0,2,254,2,251,2,246,115, + 59,0,0,0,129,7,9,0,137,24,33,7,184,4,61,0, + 189,7,65,6,7,193,16,18,65,35,0,193,35,7,65,44, + 7,193,54,3,65,59,0,193,59,7,66,5,7,194,8,1, + 66,5,7,194,9,1,65,44,7,194,10,1,65,6,7,114, + 173,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,248,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,9,0,124,2,116,9, + 106,10,124,0,106,11,60,0,9,0,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,110,22,35,0,1,0, + 1,0,1,0,9,0,116,9,106,10,124,0,106,11,61,0, + 130,0,35,0,4,0,116,15,121,123,1,0,1,0,1,0, + 89,0,130,0,37,0,37,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,100,7,124,0,95,8,124,2,83,0,35,0,100,7, + 124,0,95,8,119,0,37,0,119,0,41,8,78,114,164,0, + 0,0,114,169,0,0,0,84,114,168,0,0,0,114,20,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,123,0,0,0,114,11, + 0,0,0,114,7,0,0,0,114,102,0,0,0,114,103,0, + 0,0,114,170,0,0,0,114,173,0,0,0,114,166,0,0, + 0,90,13,95,105,110,105,116,105,97,108,105,122,105,110,103, + 114,19,0,0,0,114,106,0,0,0,114,21,0,0,0,114, + 130,0,0,0,114,88,0,0,0,114,164,0,0,0,114,71, + 0,0,0,114,172,0,0,0,114,84,0,0,0,41,3,114, + 110,0,0,0,114,109,0,0,0,114,111,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,66,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,10,1,2,3,2,128, + 12,254,2,1,2,1,4,128,14,5,12,1,16,1,6,2, + 4,2,2,128,10,254,2,245,115,64,0,0,0,165,6,65, + 53,0,172,24,65,5,0,193,4,1,65,53,0,193,5,4, + 65,26,7,193,10,5,65,16,6,193,15,1,65,26,7,193, + 16,7,65,25,13,193,23,3,65,26,7,193,26,22,65,53, + 0,193,53,5,65,58,7,193,59,1,65,25,13,114,174,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,9,0,0,0,67,0,0,0,115,58,0,0,0, + 116,0,124,0,106,1,131,1,53,0,1,0,116,2,124,0, + 131,1,2,0,100,1,4,0,4,0,131,3,1,0,83,0, + 35,0,49,0,115,21,119,4,37,0,1,0,1,0,1,0, + 89,0,1,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,58,0,0,0,114,21,0,0,0,114,174,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,108,0,0,0,197,2,0,0,115,12, + 0,0,0,12,9,6,1,12,255,2,1,22,128,4,0,115, + 12,0,0,0,133,4,16,3,144,4,20,11,149,3,20,11, + 114,108,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,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,102,0,0,0,114,103,0,0,0,114,104, - 0,0,0,114,184,0,0,0,114,123,0,0,0,41,4,114, - 181,0,0,0,114,90,0,0,0,114,182,0,0,0,114,110, - 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,114,18,0,0,0,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,86,0,0, - 0,114,20,0,0,0,78,41,8,114,21,0,0,0,114,19, - 0,0,0,114,87,0,0,0,114,88,0,0,0,114,51,0, - 0,0,114,75,0,0,0,114,65,0,0,0,90,14,99,114, - 101,97,116,101,95,98,117,105,108,116,105,110,114,175,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,163,0,0,0,2,3,0,0,115,10,0,0,0,12,3, - 12,1,4,1,6,255,12,2,114,18,0,0,0,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,75,0,0,0,114,65,0,0, - 0,90,12,101,120,101,99,95,98,117,105,108,116,105,110,114, - 178,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,164,0,0,0,10,3,0,0,115,2,0,0, - 0,16,3,114,18,0,0,0,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,181,0,0, - 0,114,90,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,114,18,0,0,0,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,186,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,187,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,189,0, - 0,0,114,18,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,186,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,187,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,129,0,0,0,27,3,0,0,114,189,0, - 0,0,114,18,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,152,0,0,0,218,12,115,116,97,116,105,99,109, - 101,116,104,111,100,114,115,0,0,0,218,11,99,108,97,115, - 115,109,101,116,104,111,100,114,184,0,0,0,114,185,0,0, - 0,114,163,0,0,0,114,164,0,0,0,114,96,0,0,0, - 114,188,0,0,0,114,190,0,0,0,114,129,0,0,0,114, - 112,0,0,0,114,171,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,176,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,18,0,0,0,114,176, - 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,177,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,167, - 0,0,0,78,41,7,114,102,0,0,0,114,103,0,0,0, - 114,104,0,0,0,114,51,0,0,0,114,9,0,0,0,114, - 194,0,0,0,114,152,0,0,0,41,1,218,1,109,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,115,0, - 0,0,47,3,0,0,115,8,0,0,0,6,7,2,1,4, - 255,16,2,114,18,0,0,0,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,179,0,0,0,41,4,114,65,0,0,0,114,99,0, - 0,0,114,105,0,0,0,114,152,0,0,0,114,180,0,0, - 0,114,5,0,0,0,114,5,0,0,0,114,6,0,0,0, - 114,184,0,0,0,58,3,0,0,115,6,0,0,0,10,2, - 16,1,4,2,114,18,0,0,0,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, + 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,102,0, + 0,0,114,103,0,0,0,114,104,0,0,0,114,9,0,0, + 0,114,176,0,0,0,114,152,0,0,0,169,1,114,111,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,115,0,0,0,223,2,0,0,115,8,0,0,0,6, + 7,2,1,4,255,22,2,114,18,0,0,0,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,151,0,0,0,41,4,114,65,0,0, + 0,90,10,105,115,95,98,117,105,108,116,105,110,114,105,0, + 0,0,114,152,0,0,0,169,4,218,3,99,108,115,114,90, + 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,114,18, + 0,0,0,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,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,116,101,97,100,78,41,5,114,102,0,0,0,114,103,0, + 0,0,114,104,0,0,0,114,184,0,0,0,114,123,0,0, + 0,41,4,114,181,0,0,0,114,90,0,0,0,114,182,0, + 0,0,114,110,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,114,18,0,0,0,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,86,0,0,0,114,20,0,0,0,78,41,8,114,21,0, + 0,0,114,19,0,0,0,114,87,0,0,0,114,88,0,0, + 0,114,51,0,0,0,114,75,0,0,0,114,65,0,0,0, + 90,14,99,114,101,97,116,101,95,98,117,105,108,116,105,110, + 114,175,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,163,0,0,0,2,3,0,0,115,10,0, + 0,0,12,3,12,1,4,1,6,255,12,2,114,18,0,0, + 0,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,75,0,0,0, + 114,65,0,0,0,90,12,101,120,101,99,95,98,117,105,108, + 116,105,110,114,178,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,164,0,0,0,10,3,0,0, + 115,2,0,0,0,16,3,114,18,0,0,0,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,181,0,0,0,114,90,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,114,18, + 0,0,0,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,186,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,187,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,189,0,0,0,114,18,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,186,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,187,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,129,0,0,0,27,3,0, + 0,114,189,0,0,0,114,18,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,152,0,0,0,218,12,115,116,97, + 116,105,99,109,101,116,104,111,100,114,115,0,0,0,218,11, + 99,108,97,115,115,109,101,116,104,111,100,114,184,0,0,0, + 114,185,0,0,0,114,163,0,0,0,114,164,0,0,0,114, + 96,0,0,0,114,188,0,0,0,114,190,0,0,0,114,129, + 0,0,0,114,112,0,0,0,114,171,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,176,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,18,0, + 0,0,114,176,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,177,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,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,102, - 0,0,0,114,103,0,0,0,114,104,0,0,0,114,65,0, - 0,0,114,99,0,0,0,41,3,114,181,0,0,0,114,90, - 0,0,0,114,182,0,0,0,114,5,0,0,0,114,5,0, - 0,0,114,6,0,0,0,114,185,0,0,0,65,3,0,0, - 115,8,0,0,0,6,7,2,2,4,254,18,3,114,18,0, - 0,0,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,186,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,175,0,0,0,114,5,0,0,0,114,5,0,0,0,114, - 6,0,0,0,114,163,0,0,0,77,3,0,0,115,2,0, - 0,0,4,0,114,18,0,0,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, + 49,50,114,167,0,0,0,78,41,7,114,102,0,0,0,114, + 103,0,0,0,114,104,0,0,0,114,51,0,0,0,114,9, + 0,0,0,114,194,0,0,0,114,152,0,0,0,41,1,218, + 1,109,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,115,0,0,0,47,3,0,0,115,8,0,0,0,6, + 7,2,1,4,255,16,2,114,18,0,0,0,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,179,0,0,0,41,4,114,65,0,0, + 0,114,99,0,0,0,114,105,0,0,0,114,152,0,0,0, + 114,180,0,0,0,114,5,0,0,0,114,5,0,0,0,114, + 6,0,0,0,114,184,0,0,0,58,3,0,0,115,6,0, + 0,0,10,2,16,1,4,2,114,18,0,0,0,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,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,98,0,0,0,41,10,114,114,0,0, - 0,114,21,0,0,0,114,65,0,0,0,114,99,0,0,0, - 114,88,0,0,0,114,51,0,0,0,114,75,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, - 111,0,0,0,114,21,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,164, - 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,114,18,0,0,0,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, + 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,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,112,0,0,0,114,187, + 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,102,0,0,0,114,103,0,0,0,114,104,0,0, + 0,114,65,0,0,0,114,99,0,0,0,41,3,114,181,0, + 0,0,114,90,0,0,0,114,182,0,0,0,114,5,0,0, + 0,114,5,0,0,0,114,6,0,0,0,114,185,0,0,0, + 65,3,0,0,115,8,0,0,0,6,7,2,2,4,254,18, + 3,114,18,0,0,0,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,186,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,175,0,0,0,114,5,0,0,0,114,5, + 0,0,0,114,6,0,0,0,114,163,0,0,0,77,3,0, + 0,115,2,0,0,0,4,0,114,18,0,0,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,98,0,0,0,41,10, + 114,114,0,0,0,114,21,0,0,0,114,65,0,0,0,114, + 99,0,0,0,114,88,0,0,0,114,51,0,0,0,114,75, + 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,111,0,0,0,114,21,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,164,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,114,18, + 0,0,0,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,112,0, + 0,0,114,187,0,0,0,114,5,0,0,0,114,5,0,0, + 0,114,6,0,0,0,114,171,0,0,0,90,3,0,0,115, + 2,0,0,0,10,8,114,18,0,0,0,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,65,0,0,0,114,196,0,0,0,114,187,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,188,0,0,0,100,3,0,0,243,2,0,0,0,10, + 4,114,18,0,0,0,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,186,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,187,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,190,0,0,0,106,3,0,0,114,189,0,0,0,114, + 18,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,199,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,65,0,0,0,90,17,105,115,95,102,114,111,122, + 101,110,95,112,97,99,107,97,103,101,114,187,0,0,0,114, + 5,0,0,0,114,5,0,0,0,114,6,0,0,0,114,129, + 0,0,0,112,3,0,0,114,200,0,0,0,114,18,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,191,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,152,0,0, + 0,114,192,0,0,0,114,115,0,0,0,114,193,0,0,0, + 114,184,0,0,0,114,185,0,0,0,114,163,0,0,0,114, + 164,0,0,0,114,171,0,0,0,114,101,0,0,0,114,188, + 0,0,0,114,190,0,0,0,114,129,0,0,0,114,5,0, + 0,0,114,5,0,0,0,114,5,0,0,0,114,6,0,0, + 0,114,194,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, + 18,0,0,0,114,194,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,65,0,0, + 0,114,66,0,0,0,114,53,0,0,0,114,5,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,62,0,0,0,125, + 3,0,0,243,2,0,0,0,12,2,114,18,0,0,0,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,202,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,65, + 0,0,0,114,68,0,0,0,41,4,114,34,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,64,0,0,0,129,3,0,0,114,203,0,0,0, + 114,18,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,62,0,0,0,114,64, + 0,0,0,114,5,0,0,0,114,5,0,0,0,114,5,0, + 0,0,114,6,0,0,0,114,201,0,0,0,121,3,0,0, + 115,8,0,0,0,8,0,4,2,8,2,12,4,114,18,0, + 0,0,114,201,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,142,0,0,0, + 114,43,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,26,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,88,0,0,0,114,51,0,0,0,41, + 5,114,21,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,18,0,0,0,114,212,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,102,0,0,0,114,103,0, + 0,0,114,170,0,0,0,114,185,0,0,0,114,105,0,0, + 0,41,5,218,6,102,105,110,100,101,114,114,21,0,0,0, + 114,182,0,0,0,114,109,0,0,0,114,123,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,18,0,0,0,114,214,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,30,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,112,125,5,116,7,131,0,53,0,1,0,9,0, + 124,5,106,8,125,6,110,27,35,0,4,0,116,9,121,142, + 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,61,89,0,100,1,4,0, + 4,0,131,3,1,0,113,26,89,0,110,7,37,0,124,6, + 124,0,124,1,124,2,131,3,125,7,100,1,4,0,4,0, + 131,3,1,0,110,11,35,0,49,0,115,81,119,4,37,0, + 1,0,1,0,1,0,89,0,1,0,1,0,124,7,100,1, + 117,1,114,138,124,4,115,134,124,0,116,0,106,6,118,0, + 114,134,116,0,106,6,124,0,25,0,125,8,9,0,124,8, + 106,11,125,9,110,14,35,0,4,0,116,9,121,141,1,0, + 1,0,1,0,124,7,6,0,89,0,2,0,1,0,83,0, + 37,0,124,9,100,1,117,0,114,130,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,19,0,0,0,218,9,109,101, + 116,97,95,112,97,116,104,114,88,0,0,0,114,102,0,0, + 0,114,103,0,0,0,114,170,0,0,0,114,106,0,0,0, + 114,201,0,0,0,114,184,0,0,0,114,2,0,0,0,114, + 214,0,0,0,114,114,0,0,0,41,10,114,21,0,0,0, + 114,182,0,0,0,114,183,0,0,0,114,215,0,0,0,90, + 9,105,115,95,114,101,108,111,97,100,114,213,0,0,0,114, + 184,0,0,0,114,110,0,0,0,114,111,0,0,0,114,114, 0,0,0,114,5,0,0,0,114,5,0,0,0,114,6,0, - 0,0,114,171,0,0,0,90,3,0,0,115,2,0,0,0, - 10,8,114,18,0,0,0,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, - 65,0,0,0,114,196,0,0,0,114,187,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,188,0, - 0,0,100,3,0,0,243,2,0,0,0,10,4,114,18,0, - 0,0,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,186,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,187,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,190,0, - 0,0,106,3,0,0,114,189,0,0,0,114,18,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,199,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,65, - 0,0,0,90,17,105,115,95,102,114,111,122,101,110,95,112, - 97,99,107,97,103,101,114,187,0,0,0,114,5,0,0,0, - 114,5,0,0,0,114,6,0,0,0,114,129,0,0,0,112, - 3,0,0,114,200,0,0,0,114,18,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,191,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,152,0,0,0,114,192,0, - 0,0,114,115,0,0,0,114,193,0,0,0,114,184,0,0, - 0,114,185,0,0,0,114,163,0,0,0,114,164,0,0,0, - 114,171,0,0,0,114,101,0,0,0,114,188,0,0,0,114, - 190,0,0,0,114,129,0,0,0,114,5,0,0,0,114,5, - 0,0,0,114,5,0,0,0,114,6,0,0,0,114,194,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,18,0,0,0, - 114,194,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,65,0,0,0,114,66,0, - 0,0,114,53,0,0,0,114,5,0,0,0,114,5,0,0, - 0,114,6,0,0,0,114,62,0,0,0,125,3,0,0,243, - 2,0,0,0,12,2,114,18,0,0,0,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,202,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,65,0,0,0,114, - 68,0,0,0,41,4,114,34,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,64, - 0,0,0,129,3,0,0,114,203,0,0,0,114,18,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,62,0,0,0,114,64,0,0,0,114, - 5,0,0,0,114,5,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,201,0,0,0,121,3,0,0,115,8,0,0, - 0,8,0,4,2,8,2,12,4,114,18,0,0,0,114,201, - 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,142,0,0,0,114,43,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,26,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,88,0,0,0,114,51,0,0,0,41,5,114,21,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, - 18,0,0,0,114,212,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,102,0,0,0,114,103,0,0,0,114,170, - 0,0,0,114,185,0,0,0,114,105,0,0,0,41,5,218, - 6,102,105,110,100,101,114,114,21,0,0,0,114,182,0,0, - 0,114,109,0,0,0,114,123,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,18,0,0,0,114,214,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,30,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,112, - 125,5,116,7,131,0,53,0,1,0,9,0,124,5,106,8, - 125,6,110,27,35,0,4,0,116,9,121,142,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,61,89,0,100,1,4,0,4,0,131,3, - 1,0,113,26,89,0,110,7,37,0,124,6,124,0,124,1, - 124,2,131,3,125,7,100,1,4,0,4,0,131,3,1,0, - 110,11,35,0,49,0,115,81,119,4,37,0,1,0,1,0, - 1,0,89,0,1,0,1,0,124,7,100,1,117,1,114,138, - 124,4,115,134,124,0,116,0,106,6,118,0,114,134,116,0, - 106,6,124,0,25,0,125,8,9,0,124,8,106,11,125,9, - 110,14,35,0,4,0,116,9,121,141,1,0,1,0,1,0, - 124,7,6,0,89,0,2,0,1,0,83,0,37,0,124,9, - 100,1,117,0,114,130,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,19,0,0,0,218,9,109,101,116,97,95,112, - 97,116,104,114,88,0,0,0,114,102,0,0,0,114,103,0, - 0,0,114,170,0,0,0,114,106,0,0,0,114,201,0,0, - 0,114,184,0,0,0,114,2,0,0,0,114,214,0,0,0, - 114,114,0,0,0,41,10,114,21,0,0,0,114,182,0,0, - 0,114,183,0,0,0,114,215,0,0,0,90,9,105,115,95, - 114,101,108,111,97,100,114,213,0,0,0,114,184,0,0,0, - 114,110,0,0,0,114,111,0,0,0,114,114,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,78, - 0,0,0,6,2,8,1,8,2,4,3,12,1,10,5,8, - 1,8,1,2,1,8,1,2,128,12,1,12,1,8,1,2, - 1,10,250,2,6,4,255,2,128,12,3,12,248,22,128,8, - 9,14,2,10,1,2,1,8,1,2,128,12,1,12,4,2, - 128,8,2,8,1,8,2,8,2,2,239,4,19,2,243,2, - 244,115,63,0,0,0,159,1,65,12,5,161,3,37,4,164, - 1,65,12,5,165,17,63,11,182,1,65,12,5,189,9,65, - 12,5,193,12,4,65,16,13,193,17,3,65,16,13,193,40, - 3,65,44,2,193,44,9,65,57,9,194,13,1,65,57,9, - 194,14,1,63,11,114,216,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,26,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,51,0,0,0, - 114,3,0,0,0,218,10,86,97,108,117,101,69,114,114,111, - 114,114,88,0,0,0,169,3,114,21,0,0,0,114,210,0, - 0,0,114,211,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,18,0,0,0,114,222,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,20,1,0,0,100,0,125,2,124,0,160,0,100,1, - 161,1,100,2,25,0,125,3,124,3,114,64,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,9,0, - 124,4,106,4,125,2,110,23,35,0,4,0,116,5,121,137, - 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,37,0,116,9,124,0,124,2,131,2,125,6, - 124,6,100,0,117,0,114,82,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,134,116,1,106,2,124,3,25,0,125,4, - 124,0,160,0,100,1,161,1,100,5,25,0,125,8,9,0, - 116,11,124,4,124,8,124,7,131,3,1,0,124,7,83,0, - 35,0,4,0,116,5,121,136,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, - 37,0,124,7,83,0,119,0,119,0,41,8,78,114,142,0, - 0,0,114,26,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,20,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,143,0, - 0,0,114,19,0,0,0,114,106,0,0,0,114,75,0,0, - 0,114,155,0,0,0,114,2,0,0,0,218,8,95,69,82, - 82,95,77,83,71,114,51,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, - 216,0,0,0,114,174,0,0,0,114,12,0,0,0,114,102, - 0,0,0,114,103,0,0,0,114,170,0,0,0,41,9,114, - 21,0,0,0,218,7,105,109,112,111,114,116,95,114,182,0, - 0,0,114,144,0,0,0,90,13,112,97,114,101,110,116,95, - 109,111,100,117,108,101,114,109,0,0,0,114,110,0,0,0, - 114,111,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,68,0,0,0,4,1,14, - 1,4,1,10,1,10,1,10,2,10,1,10,1,2,1,8, - 1,2,128,12,1,16,1,14,1,2,128,10,1,8,1,18, - 1,8,2,4,1,10,2,14,1,2,1,12,1,4,4,2, - 128,12,253,16,1,14,1,4,1,2,128,4,0,2,253,2, - 242,115,31,0,0,0,165,3,41,0,169,22,63,7,193,37, - 6,65,45,0,193,45,21,66,5,7,194,8,1,66,5,7, - 194,9,1,63,7,114,227,0,0,0,99,2,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,9,0,0,0,67, - 0,0,0,115,132,0,0,0,116,0,124,0,131,1,53,0, - 1,0,116,1,106,2,160,3,124,0,116,4,161,2,125,2, - 124,2,116,4,117,0,114,27,116,5,124,0,124,1,131,2, - 2,0,100,1,4,0,4,0,131,3,1,0,83,0,9,0, - 100,1,4,0,4,0,131,3,1,0,110,11,35,0,49,0, - 115,39,119,4,37,0,1,0,1,0,1,0,89,0,1,0, - 1,0,124,2,100,1,117,0,114,60,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,20,0,0,0,41,9,114,58,0,0,0, - 114,19,0,0,0,114,106,0,0,0,114,39,0,0,0,218, - 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, - 227,0,0,0,114,51,0,0,0,114,225,0,0,0,114,73, - 0,0,0,41,4,114,21,0,0,0,114,226,0,0,0,114, - 111,0,0,0,114,83,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,32,0,0, - 0,10,2,14,1,8,1,8,1,12,253,2,3,2,255,12, - 254,22,128,8,5,2,1,6,1,2,255,12,2,8,2,4, - 1,115,12,0,0,0,132,16,34,3,162,4,38,11,167,3, - 38,11,114,229,0,0,0,114,26,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,26,0, - 0,0,78,41,4,114,222,0,0,0,114,212,0,0,0,114, - 229,0,0,0,218,11,95,103,99,100,95,105,109,112,111,114, - 116,114,221,0,0,0,114,5,0,0,0,114,5,0,0,0, - 114,6,0,0,0,114,230,0,0,0,14,4,0,0,115,8, - 0,0,0,12,9,8,1,12,1,10,1,114,18,0,0,0, - 114,230,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,9,0,0,0,67,0,0,0,115,216,0,0,0, - 124,1,68,0,93,102,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,104,100,9,160,8,124,0,106,2,124,4,161,2, - 125,6,9,0,116,9,124,2,124,6,131,2,1,0,113,2, - 35,0,4,0,116,10,121,107,1,0,125,7,1,0,124,7, - 106,11,124,6,107,2,114,98,116,12,106,13,160,14,124,6, - 116,15,161,2,100,10,117,1,114,98,89,0,100,10,125,7, - 126,7,113,2,130,0,100,10,125,7,126,7,119,1,37,0, - 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,231, - 0,0,0,114,207,0,0,0,78,41,16,114,217,0,0,0, - 114,218,0,0,0,114,9,0,0,0,114,219,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,234,0,0,0, - 114,51,0,0,0,114,75,0,0,0,114,225,0,0,0,114, - 21,0,0,0,114,19,0,0,0,114,106,0,0,0,114,39, - 0,0,0,114,228,0,0,0,41,8,114,111,0,0,0,218, - 8,102,114,111,109,108,105,115,116,114,226,0,0,0,114,232, - 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,235,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,12,1,2,128, - 12,1,10,4,16,1,2,255,10,2,2,1,10,128,2,245, - 4,12,2,248,115,36,0,0,0,193,2,5,65,8,2,193, - 8,7,65,39,9,193,15,14,65,35,9,193,34,1,65,35, - 9,193,35,4,65,39,9,193,43,1,65,39,9,114,235,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,159,0, - 0,0,114,114,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,155,0,0,0,114,142,0,0,0, - 114,26,0,0,0,41,6,114,39,0,0,0,114,144,0,0, - 0,114,102,0,0,0,114,103,0,0,0,114,170,0,0,0, - 114,143,0,0,0,41,3,218,7,103,108,111,98,97,108,115, - 114,210,0,0,0,114,110,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, - 18,0,0,0,114,241,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,26,0,0,0,78,114,142, - 0,0,0,114,155,0,0,0,41,9,114,230,0,0,0,114, - 241,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114, - 209,0,0,0,114,19,0,0,0,114,106,0,0,0,114,9, - 0,0,0,114,11,0,0,0,114,235,0,0,0,41,9,114, - 21,0,0,0,114,240,0,0,0,218,6,108,111,99,97,108, - 115,114,236,0,0,0,114,211,0,0,0,114,111,0,0,0, - 90,8,103,108,111,98,97,108,115,95,114,210,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,18,0,0,0,114, - 244,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,176,0,0,0,114,184,0, - 0,0,114,88,0,0,0,114,174,0,0,0,41,2,114,21, - 0,0,0,114,110,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,18,0,0, - 0,114,245,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,27,0,0,0,114, - 102,0,0,0,114,72,0,0,0,78,41,15,114,65,0,0, - 0,114,19,0,0,0,114,3,0,0,0,114,106,0,0,0, - 218,5,105,116,101,109,115,114,217,0,0,0,114,87,0,0, - 0,114,176,0,0,0,114,99,0,0,0,114,194,0,0,0, - 114,156,0,0,0,114,162,0,0,0,114,9,0,0,0,114, - 245,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,21,0,0,0,114,111,0,0,0,114,123,0,0,0, - 114,110,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, + 0,0,218,10,95,102,105,110,100,95,115,112,101,99,153,3, + 0,0,115,78,0,0,0,6,2,8,1,8,2,4,3,12, + 1,10,5,8,1,8,1,2,1,8,1,2,128,12,1,12, + 1,8,1,2,1,10,250,2,6,4,255,2,128,12,3,12, + 248,22,128,8,9,14,2,10,1,2,1,8,1,2,128,12, + 1,12,4,2,128,8,2,8,1,8,2,8,2,2,239,4, + 19,2,243,2,244,115,63,0,0,0,159,1,65,12,5,161, + 3,37,4,164,1,65,12,5,165,17,63,11,182,1,65,12, + 5,189,9,65,12,5,193,12,4,65,16,13,193,17,3,65, + 16,13,193,40,3,65,44,2,193,44,9,65,57,9,194,13, + 1,65,57,9,194,14,1,63,11,114,216,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,26,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, + 51,0,0,0,114,3,0,0,0,218,10,86,97,108,117,101, + 69,114,114,111,114,114,88,0,0,0,169,3,114,21,0,0, + 0,114,210,0,0,0,114,211,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,18,0,0,0,114, + 222,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,20,1,0,0,100,0,125,2,124,0, + 160,0,100,1,161,1,100,2,25,0,125,3,124,3,114,64, + 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,9,0,124,4,106,4,125,2,110,23,35,0,4,0, + 116,5,121,137,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,37,0,116,9,124,0,124,2, + 131,2,125,6,124,6,100,0,117,0,114,82,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,134,116,1,106,2,124,3, + 25,0,125,4,124,0,160,0,100,1,161,1,100,5,25,0, + 125,8,9,0,116,11,124,4,124,8,124,7,131,3,1,0, + 124,7,83,0,35,0,4,0,116,5,121,136,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,37,0,124,7,83,0,119,0,119,0,41,8, + 78,114,142,0,0,0,114,26,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,20,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,143,0,0,0,114,19,0,0,0,114,106,0,0,0, + 114,75,0,0,0,114,155,0,0,0,114,2,0,0,0,218, + 8,95,69,82,82,95,77,83,71,114,51,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,216,0,0,0,114,174,0,0,0,114,12,0, + 0,0,114,102,0,0,0,114,103,0,0,0,114,170,0,0, + 0,41,9,114,21,0,0,0,218,7,105,109,112,111,114,116, + 95,114,182,0,0,0,114,144,0,0,0,90,13,112,97,114, + 101,110,116,95,109,111,100,117,108,101,114,109,0,0,0,114, + 110,0,0,0,114,111,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, - 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,18,0,0,0,114,249,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,249,0, - 0,0,114,19,0,0,0,114,215,0,0,0,114,133,0,0, - 0,114,176,0,0,0,114,194,0,0,0,41,2,114,247,0, - 0,0,114,248,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, - 18,0,0,0,114,250,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,26,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,140,0,0,0,114,250,0, - 0,0,114,19,0,0,0,114,106,0,0,0,114,9,0,0, - 0,41,1,114,251,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,18,0,0,0,114,252,0,0,0,114,191,0, - 0,0,114,0,0,0,0,114,25,0,0,0,41,4,78,78, - 114,5,0,0,0,114,26,0,0,0,41,54,114,10,0,0, - 0,114,7,0,0,0,114,27,0,0,0,114,102,0,0,0, - 114,72,0,0,0,114,140,0,0,0,114,17,0,0,0,114, - 22,0,0,0,114,67,0,0,0,114,38,0,0,0,114,48, - 0,0,0,114,23,0,0,0,114,24,0,0,0,114,56,0, - 0,0,114,58,0,0,0,114,61,0,0,0,114,73,0,0, - 0,114,75,0,0,0,114,84,0,0,0,114,96,0,0,0, - 114,101,0,0,0,114,112,0,0,0,114,125,0,0,0,114, - 126,0,0,0,114,105,0,0,0,114,156,0,0,0,114,162, - 0,0,0,114,166,0,0,0,114,120,0,0,0,114,107,0, - 0,0,114,173,0,0,0,114,174,0,0,0,114,108,0,0, - 0,114,176,0,0,0,114,194,0,0,0,114,201,0,0,0, - 114,212,0,0,0,114,214,0,0,0,114,216,0,0,0,114, - 222,0,0,0,90,15,95,69,82,82,95,77,83,71,95,80, - 82,69,70,73,88,114,224,0,0,0,114,227,0,0,0,218, - 6,111,98,106,101,99,116,114,228,0,0,0,114,229,0,0, - 0,114,230,0,0,0,114,235,0,0,0,114,241,0,0,0, - 114,244,0,0,0,114,245,0,0,0,114,249,0,0,0,114, - 250,0,0,0,114,252,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,114,18,0,0,0, + 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,68,0,0, + 0,4,1,14,1,4,1,10,1,10,1,10,2,10,1,10, + 1,2,1,8,1,2,128,12,1,16,1,14,1,2,128,10, + 1,8,1,18,1,8,2,4,1,10,2,14,1,2,1,12, + 1,4,4,2,128,12,253,16,1,14,1,4,1,2,128,4, + 0,2,253,2,242,115,31,0,0,0,165,3,41,0,169,22, + 63,7,193,37,6,65,45,0,193,45,21,66,5,7,194,8, + 1,66,5,7,194,9,1,63,7,114,227,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,9, + 0,0,0,67,0,0,0,115,132,0,0,0,116,0,124,0, + 131,1,53,0,1,0,116,1,106,2,160,3,124,0,116,4, + 161,2,125,2,124,2,116,4,117,0,114,27,116,5,124,0, + 124,1,131,2,2,0,100,1,4,0,4,0,131,3,1,0, + 83,0,9,0,100,1,4,0,4,0,131,3,1,0,110,11, + 35,0,49,0,115,39,119,4,37,0,1,0,1,0,1,0, + 89,0,1,0,1,0,124,2,100,1,117,0,114,60,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,20,0,0,0,41,9,114, + 58,0,0,0,114,19,0,0,0,114,106,0,0,0,114,39, + 0,0,0,218,14,95,78,69,69,68,83,95,76,79,65,68, + 73,78,71,114,227,0,0,0,114,51,0,0,0,114,225,0, + 0,0,114,73,0,0,0,41,4,114,21,0,0,0,114,226, + 0,0,0,114,111,0,0,0,114,83,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,32,0,0,0,10,2,14,1,8,1,8,1,12,253,2, + 3,2,255,12,254,22,128,8,5,2,1,6,1,2,255,12, + 2,8,2,4,1,115,12,0,0,0,132,16,34,3,162,4, + 38,11,167,3,38,11,114,229,0,0,0,114,26,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,26,0,0,0,78,41,4,114,222,0,0,0,114,212, + 0,0,0,114,229,0,0,0,218,11,95,103,99,100,95,105, + 109,112,111,114,116,114,221,0,0,0,114,5,0,0,0,114, + 5,0,0,0,114,6,0,0,0,114,230,0,0,0,14,4, + 0,0,115,8,0,0,0,12,9,8,1,12,1,10,1,114, + 18,0,0,0,114,230,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,9,0,0,0,67,0,0,0,115, + 216,0,0,0,124,1,68,0,93,102,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,104,100,9,160,8,124,0,106,2, + 124,4,161,2,125,6,9,0,116,9,124,2,124,6,131,2, + 1,0,113,2,35,0,4,0,116,10,121,107,1,0,125,7, + 1,0,124,7,106,11,124,6,107,2,114,98,116,12,106,13, + 160,14,124,6,116,15,161,2,100,10,117,1,114,98,89,0, + 100,10,125,7,126,7,113,2,130,0,100,10,125,7,126,7, + 119,1,37,0,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,231,0,0,0,114,207,0,0,0,78,41,16,114, + 217,0,0,0,114,218,0,0,0,114,9,0,0,0,114,219, + 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, + 234,0,0,0,114,51,0,0,0,114,75,0,0,0,114,225, + 0,0,0,114,21,0,0,0,114,19,0,0,0,114,106,0, + 0,0,114,39,0,0,0,114,228,0,0,0,41,8,114,111, + 0,0,0,218,8,102,114,111,109,108,105,115,116,114,226,0, + 0,0,114,232,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,235,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, + 12,1,2,128,12,1,10,4,16,1,2,255,10,2,2,1, + 10,128,2,245,4,12,2,248,115,36,0,0,0,193,2,5, + 65,8,2,193,8,7,65,39,9,193,15,14,65,35,9,193, + 34,1,65,35,9,193,35,4,65,39,9,193,43,1,65,39, + 9,114,235,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,159,0,0,0,114,114,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,155,0,0,0,114, + 142,0,0,0,114,26,0,0,0,41,6,114,39,0,0,0, + 114,144,0,0,0,114,102,0,0,0,114,103,0,0,0,114, + 170,0,0,0,114,143,0,0,0,41,3,218,7,103,108,111, + 98,97,108,115,114,210,0,0,0,114,110,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,18,0,0,0,114,241,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,26,0,0, + 0,78,114,142,0,0,0,114,155,0,0,0,41,9,114,230, + 0,0,0,114,241,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,209,0,0,0,114,19,0,0,0,114,106,0, + 0,0,114,9,0,0,0,114,11,0,0,0,114,235,0,0, + 0,41,9,114,21,0,0,0,114,240,0,0,0,218,6,108, + 111,99,97,108,115,114,236,0,0,0,114,211,0,0,0,114, + 111,0,0,0,90,8,103,108,111,98,97,108,115,95,114,210, + 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,18, + 0,0,0,114,244,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,176,0,0, + 0,114,184,0,0,0,114,88,0,0,0,114,174,0,0,0, + 41,2,114,21,0,0,0,114,110,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,18,0,0,0,114,245,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,27, + 0,0,0,114,102,0,0,0,114,72,0,0,0,78,41,15, + 114,65,0,0,0,114,19,0,0,0,114,3,0,0,0,114, + 106,0,0,0,218,5,105,116,101,109,115,114,217,0,0,0, + 114,87,0,0,0,114,176,0,0,0,114,99,0,0,0,114, + 194,0,0,0,114,156,0,0,0,114,162,0,0,0,114,9, + 0,0,0,114,245,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,21,0,0,0,114,111,0,0,0,114, + 123,0,0,0,114,110,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,18,0,0, + 0,114,249,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,249,0,0,0,114,19,0,0,0,114,215,0,0,0, + 114,133,0,0,0,114,176,0,0,0,114,194,0,0,0,41, + 2,114,247,0,0,0,114,248,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,18,0,0,0,114,250,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,26,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,140,0,0, + 0,114,250,0,0,0,114,19,0,0,0,114,106,0,0,0, + 114,9,0,0,0,41,1,114,251,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,18,0,0,0,114,252,0,0, + 0,114,191,0,0,0,114,0,0,0,0,114,25,0,0,0, + 41,4,78,78,114,5,0,0,0,114,26,0,0,0,41,54, + 114,10,0,0,0,114,7,0,0,0,114,27,0,0,0,114, + 102,0,0,0,114,72,0,0,0,114,140,0,0,0,114,17, + 0,0,0,114,22,0,0,0,114,67,0,0,0,114,38,0, + 0,0,114,48,0,0,0,114,23,0,0,0,114,24,0,0, + 0,114,56,0,0,0,114,58,0,0,0,114,61,0,0,0, + 114,73,0,0,0,114,75,0,0,0,114,84,0,0,0,114, + 96,0,0,0,114,101,0,0,0,114,112,0,0,0,114,125, + 0,0,0,114,126,0,0,0,114,105,0,0,0,114,156,0, + 0,0,114,162,0,0,0,114,166,0,0,0,114,120,0,0, + 0,114,107,0,0,0,114,173,0,0,0,114,174,0,0,0, + 114,108,0,0,0,114,176,0,0,0,114,194,0,0,0,114, + 201,0,0,0,114,212,0,0,0,114,214,0,0,0,114,216, + 0,0,0,114,222,0,0,0,90,15,95,69,82,82,95,77, + 83,71,95,80,82,69,70,73,88,114,224,0,0,0,114,227, + 0,0,0,218,6,111,98,106,101,99,116,114,228,0,0,0, + 114,229,0,0,0,114,230,0,0,0,114,235,0,0,0,114, + 241,0,0,0,114,244,0,0,0,114,245,0,0,0,114,249, + 0,0,0,114,250,0,0,0,114,252,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,114,18,0,0, + 0, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 73a21b696689d2..0786f310b4e0ed 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1625,1226 +1625,1226 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,114,110,0,0,0,90,4,114,101,97,100,114,93,0,0, 0,41,3,114,144,0,0,0,114,66,0,0,0,114,95,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,0,1,0,0,47,4,0,0,115,22,0,0,0,14, - 2,16,1,6,1,12,255,2,1,26,128,14,2,6,1,12, - 255,2,1,26,128,115,24,0,0,0,142,4,25,3,153,4, - 29,11,158,3,29,11,172,4,55,3,183,4,59,11,188,3, - 59,11,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,32,1,0,0,41,3,114,144,0,0,0, - 114,245,0,0,0,114,32,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,56,4, - 0,0,115,4,0,0,0,12,2,8,1,114,10,0,0,0, - 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,151,0,0,0,114,150,0,0,0,114,152,0,0, - 0,114,153,0,0,0,114,237,0,0,0,114,17,1,0,0, - 114,23,1,0,0,114,161,0,0,0,114,249,0,0,0,114, - 204,0,0,0,114,0,1,0,0,114,34,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,26,1,0,0,114,8,0,0, - 0,114,12,1,0,0,12,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,10,0,0,0,114,12,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,194,0,0, - 0,114,7,1,0,0,78,41,3,114,76,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,144,0,0,0,114,66,0,0,0,114,11,1, + 0,114,0,1,0,0,47,4,0,0,115,26,0,0,0,14, + 2,16,1,6,1,12,255,2,1,22,128,4,0,14,2,6, + 1,12,255,2,1,22,128,4,0,115,24,0,0,0,142,4, + 25,3,153,4,29,11,158,3,29,11,172,4,55,3,183,4, + 59,11,188,3,59,11,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,32,1,0,0,41,3,114, + 144,0,0,0,114,245,0,0,0,114,32,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,56,4,0,0,115,4,0,0,0,12,2,8,1,114, + 10,0,0,0,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,151,0,0,0,114,150,0,0,0, + 114,152,0,0,0,114,153,0,0,0,114,237,0,0,0,114, + 17,1,0,0,114,23,1,0,0,114,161,0,0,0,114,249, + 0,0,0,114,204,0,0,0,114,0,1,0,0,114,34,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,26,1,0,0, + 114,8,0,0,0,114,12,1,0,0,12,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,10,0,0,0, + 114,12,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,194,0,0,0,114,7,1,0,0,78,41,3,114,76,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,144,0,0,0,114,66,0,0, + 0,114,11,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,253,0,0,0,66,4,0,0,115,4, + 0,0,0,8,2,14,1,114,10,0,0,0,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,140,0, + 0,0,114,254,0,0,0,41,5,114,144,0,0,0,114,135, + 0,0,0,114,133,0,0,0,114,42,0,0,0,114,79,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,253,0,0,0,66,4,0,0,115,4,0,0,0,8, - 2,14,1,114,10,0,0,0,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,140,0,0,0,114,254, - 0,0,0,41,5,114,144,0,0,0,114,135,0,0,0,114, - 133,0,0,0,114,42,0,0,0,114,79,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,255,0, - 0,0,71,4,0,0,115,4,0,0,0,8,2,16,1,114, - 10,0,0,0,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,88,0,0,0,114,37,1,0,0, - 99,3,0,0,0,0,0,0,0,1,0,0,0,9,0,0, - 0,9,0,0,0,67,0,0,0,115,250,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,47,125,7,116,4,124,4,124,7,131,2, - 125,4,9,0,116,5,160,6,124,4,161,1,1,0,113,35, - 35,0,4,0,116,7,121,58,1,0,1,0,1,0,89,0, - 113,35,4,0,116,8,121,124,1,0,125,8,1,0,116,9, - 160,10,100,1,124,4,124,8,161,3,1,0,89,0,100,2, - 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, - 119,1,37,0,9,0,116,11,124,1,124,2,124,3,131,3, - 1,0,116,9,160,10,100,3,124,1,161,2,1,0,100,2, - 83,0,35,0,4,0,116,8,121,123,1,0,125,8,1,0, - 116,9,160,10,100,1,124,1,124,8,161,3,1,0,89,0, - 100,2,125,8,126,8,100,2,83,0,100,2,125,8,126,8, - 119,1,37,0,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,75,0,0,0,114,84,0,0,0,114, - 62,0,0,0,218,8,114,101,118,101,114,115,101,100,114,68, - 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,77,0,0,0,114,160,0,0,0,114,174,0,0,0,114, - 96,0,0,0,41,9,114,144,0,0,0,114,66,0,0,0, - 114,42,0,0,0,114,38,1,0,0,218,6,112,97,114,101, - 110,116,114,121,0,0,0,114,64,0,0,0,114,69,0,0, - 0,114,1,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,254,0,0,0,76,4,0,0,115,60, - 0,0,0,12,2,4,1,12,2,12,1,10,1,12,254,12, - 4,10,1,2,1,12,1,2,128,12,1,4,2,12,1,6, - 3,4,1,4,255,14,2,10,128,2,1,12,1,16,1,2, - 128,12,1,8,2,2,1,16,255,10,128,2,254,2,247,115, - 62,0,0,0,171,5,49,2,177,7,65,18,9,186,6,65, - 18,9,193,0,7,65,14,9,193,14,4,65,18,9,193,20, - 12,65,34,0,193,34,7,65,58,7,193,41,7,65,54,7, - 193,54,4,65,58,7,193,59,1,65,58,7,193,60,1,65, - 18,9,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, - 153,0,0,0,114,253,0,0,0,114,255,0,0,0,114,254, - 0,0,0,114,7,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,35,1,0,0,62,4,0,0, - 115,10,0,0,0,8,0,4,2,8,2,8,5,18,5,114, - 10,0,0,0,114,35,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,184,0,0,0,114,170,0,0,0,41,2,114, - 142,0,0,0,114,133,0,0,0,41,5,114,204,0,0,0, - 114,0,1,0,0,114,177,0,0,0,114,190,0,0,0,114, - 8,1,0,0,41,5,114,144,0,0,0,114,164,0,0,0, - 114,66,0,0,0,114,42,0,0,0,114,176,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,242, - 0,0,0,111,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,114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,2,1,0,0,127,4, - 0,0,114,25,0,0,0,114,10,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0,114, - 153,0,0,0,114,242,0,0,0,114,2,1,0,0,114,7, + 0,114,255,0,0,0,71,4,0,0,115,4,0,0,0,8, + 2,16,1,114,10,0,0,0,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,88,0,0,0,114, + 37,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, + 0,9,0,0,0,9,0,0,0,67,0,0,0,115,250,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,47,125,7,116,4,124,4, + 124,7,131,2,125,4,9,0,116,5,160,6,124,4,161,1, + 1,0,113,35,35,0,4,0,116,7,121,58,1,0,1,0, + 1,0,89,0,113,35,4,0,116,8,121,124,1,0,125,8, + 1,0,116,9,160,10,100,1,124,4,124,8,161,3,1,0, + 89,0,100,2,125,8,126,8,1,0,100,2,83,0,100,2, + 125,8,126,8,119,1,37,0,9,0,116,11,124,1,124,2, + 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, + 1,0,100,2,83,0,35,0,4,0,116,8,121,123,1,0, + 125,8,1,0,116,9,160,10,100,1,124,1,124,8,161,3, + 1,0,89,0,100,2,125,8,126,8,100,2,83,0,100,2, + 125,8,126,8,119,1,37,0,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,75,0,0,0,114,84, + 0,0,0,114,62,0,0,0,218,8,114,101,118,101,114,115, + 101,100,114,68,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,77,0,0,0,114,160,0,0,0,114,174, + 0,0,0,114,96,0,0,0,41,9,114,144,0,0,0,114, + 66,0,0,0,114,42,0,0,0,114,38,1,0,0,218,6, + 112,97,114,101,110,116,114,121,0,0,0,114,64,0,0,0, + 114,69,0,0,0,114,1,1,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,254,0,0,0,76,4, + 0,0,115,60,0,0,0,12,2,4,1,12,2,12,1,10, + 1,12,254,12,4,10,1,2,1,12,1,2,128,12,1,4, + 2,12,1,6,3,4,1,4,255,14,2,10,128,2,1,12, + 1,16,1,2,128,12,1,8,2,2,1,16,255,10,128,2, + 254,2,247,115,62,0,0,0,171,5,49,2,177,7,65,18, + 9,186,6,65,18,9,193,0,7,65,14,9,193,14,4,65, + 18,9,193,20,12,65,34,0,193,34,7,65,58,7,193,41, + 7,65,54,7,193,54,4,65,58,7,193,59,1,65,58,7, + 193,60,1,65,18,9,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,151,0,0,0,114,150,0,0,0,114,152, + 0,0,0,114,153,0,0,0,114,253,0,0,0,114,255,0, + 0,0,114,254,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,35,1,0,0, + 62,4,0,0,115,10,0,0,0,8,0,4,2,8,2,8, + 5,18,5,114,10,0,0,0,114,35,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,184,0,0,0,114,170,0,0, + 0,41,2,114,142,0,0,0,114,133,0,0,0,41,5,114, + 204,0,0,0,114,0,1,0,0,114,177,0,0,0,114,190, + 0,0,0,114,8,1,0,0,41,5,114,144,0,0,0,114, + 164,0,0,0,114,66,0,0,0,114,42,0,0,0,114,176, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,42,1,0,0,107,4,0,0,115,8,0,0,0, - 8,0,4,2,8,2,12,16,114,10,0,0,0,114,42,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,31, - 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,70,0,0,0,114,184,0,0,0,41,3,114,144,0,0, - 0,114,142,0,0,0,114,66,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,237,0,0,0,140, - 4,0,0,115,4,0,0,0,6,1,10,1,114,10,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,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,13,1,0,0,114,70,0, - 0,0,114,14,1,0,0,114,16,1,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,17,1,0,0, - 144,4,0,0,114,18,1,0,0,114,10,0,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,19,1,0,0,114,70,0,0,0,114,20,1, - 0,0,114,22,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,23,1,0,0,148,4,0,0,114, - 24,1,0,0,114,10,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,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,160, - 0,0,0,114,243,0,0,0,114,188,0,0,0,90,14,99, - 114,101,97,116,101,95,100,121,110,97,109,105,99,114,174,0, - 0,0,114,142,0,0,0,114,66,0,0,0,41,3,114,144, - 0,0,0,114,211,0,0,0,114,245,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,240,0,0, - 0,151,4,0,0,115,14,0,0,0,4,2,6,1,4,255, - 6,2,8,1,4,255,4,2,114,10,0,0,0,122,33,69, + 0,0,114,242,0,0,0,111,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,114,10,0,0,0,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,248,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,2,1, + 0,0,127,4,0,0,114,25,0,0,0,114,10,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,151,0,0,0,114,150,0,0,0,114,152, + 0,0,0,114,153,0,0,0,114,242,0,0,0,114,2,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, + 0,114,8,0,0,0,114,42,1,0,0,107,4,0,0,115, + 8,0,0,0,8,0,4,2,8,2,12,16,114,10,0,0, + 0,114,42,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,31,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,70,0,0,0,114,184,0,0,0,41,3, + 114,144,0,0,0,114,142,0,0,0,114,66,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,237, + 0,0,0,140,4,0,0,115,4,0,0,0,6,1,10,1, + 114,10,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,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,13,1,0, + 0,114,70,0,0,0,114,14,1,0,0,114,16,1,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 17,1,0,0,144,4,0,0,114,18,1,0,0,114,10,0, + 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,19,1,0,0,114,70,0,0, + 0,114,20,1,0,0,114,22,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,23,1,0,0,148, + 4,0,0,114,24,1,0,0,114,10,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,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,160,0,0,0,114,243,0,0,0,114,188,0,0,0, - 90,12,101,120,101,99,95,100,121,110,97,109,105,99,114,174, - 0,0,0,114,142,0,0,0,114,66,0,0,0,169,2,114, - 144,0,0,0,114,245,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,246,0,0,0,159,4,0, - 0,115,8,0,0,0,14,2,6,1,8,1,8,255,114,10, - 0,0,0,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, + 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,160,0,0,0,114,243,0,0,0,114,188,0,0, + 0,90,14,99,114,101,97,116,101,95,100,121,110,97,109,105, + 99,114,174,0,0,0,114,142,0,0,0,114,66,0,0,0, + 41,3,114,144,0,0,0,114,211,0,0,0,114,245,0,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,240,0,0,0,151,4,0,0,115,14,0,0,0,4,2, + 6,1,4,255,6,2,8,1,4,255,4,2,114,10,0,0, + 0,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,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,237,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,168,4,0,0,115,6,0,0,0,6,128,2,1,20, - 255,114,10,0,0,0,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,75,0,0, - 0,114,66,0,0,0,218,3,97,110,121,114,233,0,0,0, - 114,248,0,0,0,114,7,0,0,0,114,46,1,0,0,114, - 8,0,0,0,114,207,0,0,0,165,4,0,0,115,8,0, - 0,0,14,2,12,1,2,1,8,255,114,10,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, + 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,160,0,0,0,114,243,0,0,0,114, + 188,0,0,0,90,12,101,120,101,99,95,100,121,110,97,109, + 105,99,114,174,0,0,0,114,142,0,0,0,114,66,0,0, + 0,169,2,114,144,0,0,0,114,245,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,246,0,0, + 0,159,4,0,0,115,8,0,0,0,14,2,6,1,8,1, + 8,255,114,10,0,0,0,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,237,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,168,4,0,0,115,6,0,0,0,6, + 128,2,1,20,255,114,10,0,0,0,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,75,0,0,0,114,66,0,0,0,218,3,97,110,121,114, + 233,0,0,0,114,248,0,0,0,114,7,0,0,0,114,46, + 1,0,0,114,8,0,0,0,114,207,0,0,0,165,4,0, + 0,115,8,0,0,0,14,2,12,1,2,1,8,255,114,10, + 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,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,248,0,0,0,114, + 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,242, + 0,0,0,171,4,0,0,114,25,0,0,0,114,10,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, - 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,248,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,242,0,0,0,171, - 4,0,0,114,25,0,0,0,114,10,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,248,0,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,2,1,0, - 0,175,4,0,0,114,25,0,0,0,114,10,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,27,1,0,0,114,28,1, - 0,0,114,72,0,0,0,114,248,0,0,0,114,7,0,0, - 0,114,7,0,0,0,114,8,0,0,0,114,204,0,0,0, - 179,4,0,0,114,29,1,0,0,114,10,0,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,151,0,0,0,114,150,0,0,0,114,152,0, - 0,0,114,153,0,0,0,114,237,0,0,0,114,17,1,0, - 0,114,23,1,0,0,114,240,0,0,0,114,246,0,0,0, - 114,207,0,0,0,114,242,0,0,0,114,2,1,0,0,114, - 161,0,0,0,114,204,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,31,1, - 0,0,132,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,10,0,0,0,114,31,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,70,0,0,0,41,6,218,5,95,110,97,109,101, - 218,5,95,112,97,116,104,114,137,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,144,0,0,0,114,142,0,0,0,114,66,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,237,0,0, - 0,192,4,0,0,115,8,0,0,0,6,1,6,1,14,1, - 10,1,114,10,0,0,0,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,98,0,0,0,114,11,0,0,0, - 41,2,114,16,0,0,0,114,66,0,0,0,90,8,95,95, - 112,97,116,104,95,95,78,41,2,114,49,1,0,0,114,105, - 0,0,0,41,4,114,144,0,0,0,114,41,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, - 198,4,0,0,115,8,0,0,0,18,2,8,1,4,2,8, - 3,114,10,0,0,0,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,70,0,0,0,41,4,114, - 56,1,0,0,114,156,0,0,0,114,16,0,0,0,218,7, - 109,111,100,117,108,101,115,41,3,114,144,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,51,1,0,0,208,4,0,0,115,4,0,0,0,12, - 1,16,1,114,10,0,0,0,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,70,0,0,0,41,8,114,137, - 0,0,0,114,51,1,0,0,114,52,1,0,0,114,53,1, - 0,0,114,49,1,0,0,114,165,0,0,0,114,203,0,0, - 0,114,50,1,0,0,41,3,114,144,0,0,0,90,11,112, - 97,114,101,110,116,95,112,97,116,104,114,211,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,212,4,0,0, - 115,16,0,0,0,12,2,10,1,14,1,18,3,6,1,8, - 1,6,1,6,1,114,10,0,0,0,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,70,0,0,0,41,2,218,4,105,116,101,114,114,58, - 1,0,0,114,22,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,225,4,0,0,243,2,0,0,0,12,1,114,10,0,0, - 0,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,70,0,0,0,169,1,114,58,1,0,0, - 41,2,114,144,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,228,4,0,0,114,62, - 1,0,0,114,10,0,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,70,0,0,0,41,1,114,50,1,0,0,41,3,114,144, - 0,0,0,114,64,1,0,0,114,66,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,231,4,0,0,115,2,0, - 0,0,14,1,114,10,0,0,0,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,59, - 1,0,0,114,70,0,0,0,41,2,114,4,0,0,0,114, - 58,1,0,0,114,22,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,234,4,0,0,114,62,1,0,0,114,10,0,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,90,0,0, - 0,114,50,1,0,0,114,22,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,237,4,0,0,114,62,1,0,0,114,10,0, - 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,70,0,0,0,114,63,1,0,0,169, - 2,114,144,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,240,4,0,0,114,62,1, - 0,0,114,10,0,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,70,0,0,0,41,2,114,50,1,0,0,114,62, - 0,0,0,114,70,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,62,0,0,0,243,4,0,0, - 243,2,0,0,0,16,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0, - 114,152,0,0,0,114,153,0,0,0,114,237,0,0,0,114, - 56,1,0,0,114,51,1,0,0,114,58,1,0,0,114,61, - 1,0,0,114,65,1,0,0,114,66,1,0,0,114,67,1, - 0,0,114,69,1,0,0,114,72,1,0,0,114,62,0,0, - 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,48,1,0,0,185,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,10,0, - 0,0,114,48,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,70,0,0,0,41,2,114,48,1,0,0,114,50,1, - 0,0,114,54,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,237,0,0,0,249,4,0,0,115, - 2,0,0,0,18,1,114,10,0,0,0,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,100,0,0,0,114,101,0,0,0,114, - 102,0,0,0,114,90,0,0,0,114,151,0,0,0,41,1, - 114,245,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,252,4,0,0,115,8,0,0,0,6,7,2,1,4,255, - 12,2,114,10,0,0,0,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,248,0,0, + 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,248,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,207,0,0,0,7,5,0,0,243,2,0,0,0,4,1, - 114,10,0,0,0,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,11,0,0,0,114,7,0,0,0,114,248,0, - 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,2,1,0,0,10,5,0,0,114,76,1,0,0,114, - 10,0,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,11,0,0,0,122,8,60,115,116,114,105,110,103, - 62,114,244,0,0,0,84,41,1,114,4,1,0,0,41,1, - 114,5,1,0,0,114,248,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,242,0,0,0,13,5, - 0,0,114,73,1,0,0,114,10,0,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,238,0,0,0,114,7,0,0,0,114, - 239,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,240,0,0,0,16,5,0,0,114,241,0,0, - 0,114,10,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,70,0,0,0,114,7,0, - 0,0,114,43,1,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,246,0,0,0,19,5,0,0,114, - 76,1,0,0,114,10,0,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,160,0,0,0,114,174,0,0,0,114,50,1,0,0,114, - 247,0,0,0,114,248,0,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,249,0,0,0,22,5,0, - 0,115,8,0,0,0,6,7,4,1,4,255,12,3,114,10, - 0,0,0,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,33,1,0,0,114,77,1,0,0,114,50,1,0, - 0,41,3,114,144,0,0,0,114,245,0,0,0,114,77,1, + 114,2,1,0,0,175,4,0,0,114,25,0,0,0,114,10, + 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,27,1,0, + 0,114,28,1,0,0,114,72,0,0,0,114,248,0,0,0, + 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, + 204,0,0,0,179,4,0,0,114,29,1,0,0,114,10,0, + 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,151,0,0,0,114,150,0,0, + 0,114,152,0,0,0,114,153,0,0,0,114,237,0,0,0, + 114,17,1,0,0,114,23,1,0,0,114,240,0,0,0,114, + 246,0,0,0,114,207,0,0,0,114,242,0,0,0,114,2, + 1,0,0,114,161,0,0,0,114,204,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,34,5,0,0,115,4,0,0,0,12, - 1,10,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114,152,0,0,0, - 114,237,0,0,0,114,234,0,0,0,114,75,1,0,0,114, - 207,0,0,0,114,2,1,0,0,114,242,0,0,0,114,240, - 0,0,0,114,246,0,0,0,114,249,0,0,0,114,34,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,74,1,0,0,248,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,10,0,0,0,114, - 74,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,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,154,0,0,0,114,79,1,0,0,41,2,114,142, - 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,79,1,0,0,45, - 5,0,0,115,14,0,0,0,22,4,8,1,10,1,10,1, - 8,1,2,128,4,252,114,10,0,0,0,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,78,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,18,125,1,9,0,124, - 1,124,0,131,1,2,0,1,0,83,0,35,0,4,0,116, - 5,121,38,1,0,1,0,1,0,89,0,113,17,37,0,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,100,0,0,0,114,101,0,0,0,114,163, - 0,0,0,114,143,0,0,0,41,2,114,66,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,55,5,0,0,115,22,0,0,0,16,3,12,1,10,1, - 2,1,12,1,2,128,12,1,4,1,2,128,4,2,2,253, - 115,12,0,0,0,148,3,26,2,154,7,35,9,166,1,35, - 9,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,21,9, - 0,116,0,160,1,161,0,125,1,110,11,35,0,4,0,116, - 2,121,51,1,0,1,0,1,0,89,0,100,2,83,0,37, - 0,9,0,116,3,106,4,124,1,25,0,125,2,124,2,83, - 0,35,0,4,0,116,5,121,50,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,37,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,11,0,0,0,78,41,7,114,19,0, - 0,0,114,83,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, - 81,1,0,0,218,8,75,101,121,69,114,114,111,114,114,85, - 1,0,0,41,3,114,222,0,0,0,114,66,0,0,0,114, - 83,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,68,5,0,0,115,36,0, - 0,0,8,8,2,1,10,1,2,128,12,1,6,3,2,128, - 2,1,10,1,4,4,2,128,12,253,10,1,12,1,4,1, - 2,128,2,253,2,250,115,24,0,0,0,133,4,10,0,138, - 7,20,7,150,5,29,0,157,17,49,7,178,1,49,7,179, - 1,20,7,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, - 162,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,154,0,0,0,114,160,0,0,0,90,12, - 95,111,98,106,101,99,116,95,110,97,109,101,114,100,0,0, - 0,114,101,0,0,0,114,163,0,0,0,114,162,0,0,0, - 114,230,0,0,0,114,225,0,0,0,114,208,0,0,0,114, - 203,0,0,0,41,7,114,222,0,0,0,114,164,0,0,0, - 114,83,1,0,0,114,167,0,0,0,114,165,0,0,0,114, - 166,0,0,0,114,211,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,90,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,114,10,0, - 0,0,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,227,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,186,0,0,0,114,110,0,0,0,218,5, - 98,121,116,101,115,114,88,1,0,0,114,154,0,0,0,114, - 227,0,0,0,114,89,1,0,0,114,165,0,0,0,114,203, - 0,0,0,114,143,0,0,0,114,192,0,0,0,114,160,0, - 0,0,114,208,0,0,0,41,9,114,222,0,0,0,114,164, - 0,0,0,114,66,0,0,0,114,226,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,83,1,0,0,114,211,0,0,0,114,166, + 0,114,31,1,0,0,132,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,10,0,0,0,114,31,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,70,0,0,0,41,6,218,5,95, + 110,97,109,101,218,5,95,112,97,116,104,114,137,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,144,0,0,0,114,142,0,0,0,114, + 66,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,237,0,0,0,192,4,0,0,115,8,0,0,0,6,1, + 6,1,14,1,10,1,114,10,0,0,0,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,98,0,0,0,114, + 11,0,0,0,41,2,114,16,0,0,0,114,66,0,0,0, + 90,8,95,95,112,97,116,104,95,95,78,41,2,114,49,1, + 0,0,114,105,0,0,0,41,4,114,144,0,0,0,114,41, + 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,198,4,0,0,115,8,0,0,0,18,2,8, + 1,4,2,8,3,114,10,0,0,0,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,70,0,0, + 0,41,4,114,56,1,0,0,114,156,0,0,0,114,16,0, + 0,0,218,7,109,111,100,117,108,101,115,41,3,114,144,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,51,1,0,0,208,4,0,0,115,4, + 0,0,0,12,1,16,1,114,10,0,0,0,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,70,0,0,0, + 41,8,114,137,0,0,0,114,51,1,0,0,114,52,1,0, + 0,114,53,1,0,0,114,49,1,0,0,114,165,0,0,0, + 114,203,0,0,0,114,50,1,0,0,41,3,114,144,0,0, + 0,90,11,112,97,114,101,110,116,95,112,97,116,104,114,211, 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,111,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, - 114,10,0,0,0,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,66,0,0,0,114,92,1,0,0,114,165,0,0,0,114, - 203,0,0,0,114,206,0,0,0,114,48,1,0,0,41,6, - 114,222,0,0,0,114,164,0,0,0,114,66,0,0,0,114, - 226,0,0,0,114,211,0,0,0,114,91,1,0,0,114,7, - 0,0,0,114,7,0,0,0,114,8,0,0,0,114,227,0, - 0,0,143,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,114,10,0,0,0,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, + 0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101, + 212,4,0,0,115,16,0,0,0,12,2,10,1,14,1,18, + 3,6,1,8,1,6,1,6,1,114,10,0,0,0,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,70,0,0,0,41,2,218,4,105,116, + 101,114,114,58,1,0,0,114,22,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,225,4,0,0,243,2,0,0,0,12,1, + 114,10,0,0,0,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,70,0,0,0,169,1,114, + 58,1,0,0,41,2,114,144,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,228,4, + 0,0,114,62,1,0,0,114,10,0,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,70,0,0,0,41,1,114,50,1,0,0, + 41,3,114,144,0,0,0,114,64,1,0,0,114,66,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,231,4,0, + 0,115,2,0,0,0,14,1,114,10,0,0,0,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,59,1,0,0,114,70,0,0,0,41,2,114,4, + 0,0,0,114,58,1,0,0,114,22,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,234,4,0,0,114,62,1,0,0,114,10, + 0,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,90,0,0,0,114,50,1,0,0,114,22,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,237,4,0,0,114,62,1,0, + 0,114,10,0,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,70,0,0,0,114,63, + 1,0,0,169,2,114,144,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,240,4,0, + 0,114,62,1,0,0,114,10,0,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,70,0,0,0,41,2,114,50,1, + 0,0,114,62,0,0,0,114,70,1,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,62,0,0,0, + 243,4,0,0,243,2,0,0,0,16,1,114,10,0,0,0, + 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,151,0,0,0,114, + 150,0,0,0,114,152,0,0,0,114,153,0,0,0,114,237, + 0,0,0,114,56,1,0,0,114,51,1,0,0,114,58,1, + 0,0,114,61,1,0,0,114,65,1,0,0,114,66,1,0, + 0,114,67,1,0,0,114,69,1,0,0,114,72,1,0,0, + 114,62,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 7,0,0,0,114,8,0,0,0,114,48,1,0,0,185,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,10,0,0,0,114,48,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,70,0,0,0,41,2,114,48,1,0, + 0,114,50,1,0,0,114,54,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,237,0,0,0,249, + 4,0,0,115,2,0,0,0,18,1,114,10,0,0,0,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,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,228, - 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,230,0,0,0,167,5,0,0, - 115,14,0,0,0,6,8,2,2,4,254,12,3,8,1,4, - 1,6,1,114,10,0,0,0,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,93,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,145, - 0,0,0,114,146,0,0,0,114,93,1,0,0,114,7,0, - 0,0,114,7,0,0,0,114,8,0,0,0,114,94,1,0, - 0,183,5,0,0,115,4,0,0,0,12,10,16,1,114,10, - 0,0,0,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,70,0,0,0,114,231,0,0,0,41,14,114,151, - 0,0,0,114,150,0,0,0,114,152,0,0,0,114,153,0, - 0,0,114,234,0,0,0,114,79,1,0,0,114,85,1,0, - 0,114,235,0,0,0,114,88,1,0,0,114,89,1,0,0, - 114,92,1,0,0,114,227,0,0,0,114,230,0,0,0,114, - 94,1,0,0,114,7,0,0,0,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,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,10,0,0,0,114, - 78,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,70,0,0,0,114, - 7,0,0,0,114,44,1,0,0,169,1,114,165,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,9,0,0,0,212, - 5,0,0,115,4,0,0,0,6,128,18,0,114,10,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,98,0,0,0,114,131, - 0,0,0,78,41,11,114,192,0,0,0,218,8,95,108,111, - 97,100,101,114,115,114,66,0,0,0,114,87,0,0,0,114, - 68,0,0,0,114,19,0,0,0,114,83,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,144,0,0,0,114,66,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,213,0,0,0,114,7,0,0, - 0,114,96,1,0,0,114,8,0,0,0,114,237,0,0,0, - 206,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,114,10,0, - 0,0,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,131,0,0,0,78,41,1,114,98,1,0,0,114, - 22,1,0,0,114,7,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,79,1,0,0,222,5,0,0,114,82,0,0, - 0,114,10,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, + 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,100,0,0,0,114,101, + 0,0,0,114,102,0,0,0,114,90,0,0,0,114,151,0, + 0,0,41,1,114,245,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,252,4,0,0,115,8,0,0,0,6,7, + 2,1,4,255,12,2,114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,207,0,0,0,7,5,0,0,243,2,0, + 0,0,4,1,114,10,0,0,0,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,11,0,0,0,114,7,0,0, + 0,114,248,0,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,2,1,0,0,10,5,0,0,114,76, + 1,0,0,114,10,0,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,11,0,0,0,122,8,60,115,116, + 114,105,110,103,62,114,244,0,0,0,84,41,1,114,4,1, + 0,0,41,1,114,5,1,0,0,114,248,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,242,0, + 0,0,13,5,0,0,114,73,1,0,0,114,10,0,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,238,0,0,0,114,7, + 0,0,0,114,239,0,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,240,0,0,0,16,5,0,0, + 114,241,0,0,0,114,10,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,70,0,0, + 0,114,7,0,0,0,114,43,1,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,246,0,0,0,19, + 5,0,0,114,76,1,0,0,114,10,0,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,160,0,0,0,114,174,0,0,0,114,50, + 1,0,0,114,247,0,0,0,114,248,0,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,249,0,0, + 0,22,5,0,0,115,8,0,0,0,6,7,4,1,4,255, + 12,3,114,10,0,0,0,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,33,1,0,0,114,77,1,0,0, + 114,50,1,0,0,41,3,114,144,0,0,0,114,245,0,0, + 0,114,77,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,34,1,0,0,34,5,0,0,115,4, + 0,0,0,12,1,10,1,114,10,0,0,0,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,151,0,0,0,114,150,0,0,0,114, + 152,0,0,0,114,237,0,0,0,114,234,0,0,0,114,75, + 1,0,0,114,207,0,0,0,114,2,1,0,0,114,242,0, + 0,0,114,240,0,0,0,114,246,0,0,0,114,249,0,0, + 0,114,34,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,74,1,0,0,248, + 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,10, + 0,0,0,114,74,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,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,154,0,0,0,114,79,1,0,0, + 41,2,114,142,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,79, + 1,0,0,45,5,0,0,115,14,0,0,0,22,4,8,1, + 10,1,10,1,8,1,2,128,4,252,114,10,0,0,0,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,78,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,18,125, + 1,9,0,124,1,124,0,131,1,2,0,1,0,83,0,35, + 0,4,0,116,5,121,38,1,0,1,0,1,0,89,0,113, + 17,37,0,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,100,0,0,0,114,101,0, + 0,0,114,163,0,0,0,114,143,0,0,0,41,2,114,66, + 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,55,5,0,0,115,22,0,0,0,16,3, + 12,1,10,1,2,1,12,1,2,128,12,1,4,1,2,128, + 4,2,2,253,115,12,0,0,0,148,3,26,2,154,7,35, + 9,166,1,35,9,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,21,9,0,116,0,160,1,161,0,125,1,110,11,35, + 0,4,0,116,2,121,51,1,0,1,0,1,0,89,0,100, + 2,83,0,37,0,9,0,116,3,106,4,124,1,25,0,125, + 2,124,2,83,0,35,0,4,0,116,5,121,50,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,37,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,11,0,0,0,78,41, + 7,114,19,0,0,0,114,83,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,81,1,0,0,218,8,75,101,121,69,114,114, + 111,114,114,85,1,0,0,41,3,114,222,0,0,0,114,66, + 0,0,0,114,83,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,68,5,0, + 0,115,36,0,0,0,8,8,2,1,10,1,2,128,12,1, + 6,3,2,128,2,1,10,1,4,4,2,128,12,253,10,1, + 12,1,4,1,2,128,2,253,2,250,115,24,0,0,0,133, + 4,10,0,138,7,20,7,150,5,29,0,157,17,49,7,178, + 1,49,7,179,1,20,7,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,162,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,154,0,0,0,114,160,0, + 0,0,90,12,95,111,98,106,101,99,116,95,110,97,109,101, + 114,100,0,0,0,114,101,0,0,0,114,163,0,0,0,114, + 162,0,0,0,114,230,0,0,0,114,225,0,0,0,114,208, + 0,0,0,114,203,0,0,0,41,7,114,222,0,0,0,114, + 164,0,0,0,114,83,1,0,0,114,167,0,0,0,114,165, + 0,0,0,114,166,0,0,0,114,211,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,90,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,114,10,0,0,0,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,227,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,186,0,0,0,114,110,0, + 0,0,218,5,98,121,116,101,115,114,88,1,0,0,114,154, + 0,0,0,114,227,0,0,0,114,89,1,0,0,114,165,0, + 0,0,114,203,0,0,0,114,143,0,0,0,114,192,0,0, + 0,114,160,0,0,0,114,208,0,0,0,41,9,114,222,0, + 0,0,114,164,0,0,0,114,66,0,0,0,114,226,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,83,1,0,0,114,211,0, + 0,0,114,166,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,111,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,114,10,0,0,0,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,66,0,0,0,114,92,1,0,0,114,165, + 0,0,0,114,203,0,0,0,114,206,0,0,0,114,48,1, + 0,0,41,6,114,222,0,0,0,114,164,0,0,0,114,66, + 0,0,0,114,226,0,0,0,114,211,0,0,0,114,91,1, + 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, + 0,114,227,0,0,0,143,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,114,10,0,0,0,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,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,100,0,0,0, - 114,101,0,0,0,114,102,0,0,0,114,227,0,0,0,114, - 165,0,0,0,114,203,0,0,0,41,3,114,144,0,0,0, - 114,164,0,0,0,114,211,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,162,0,0,0,228,5, - 0,0,115,14,0,0,0,6,7,2,2,4,254,10,3,8, - 1,8,1,16,1,114,10,0,0,0,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,202,0, - 0,0,41,1,114,214,0,0,0,41,7,114,144,0,0,0, - 114,212,0,0,0,114,164,0,0,0,114,66,0,0,0,90, - 4,115,109,115,108,114,226,0,0,0,114,165,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,92, - 1,0,0,243,5,0,0,115,8,0,0,0,10,1,8,1, - 2,1,6,255,114,10,0,0,0,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, - 9,0,116,1,124,0,106,2,112,17,116,3,160,4,161,0, - 131,1,106,5,125,5,110,12,35,0,4,0,116,6,121,190, - 1,0,1,0,1,0,100,4,125,5,89,0,110,1,37,0, - 124,5,124,0,106,7,107,3,114,45,124,0,160,8,161,0, - 1,0,124,5,124,0,95,7,116,9,131,0,114,56,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,108, - 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,103,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,74,116,17, - 124,8,131,1,125,3,124,0,106,14,68,0,93,55,92,2, - 125,9,125,10,9,0,116,13,124,0,106,2,124,4,124,9, - 23,0,131,2,125,12,110,12,35,0,4,0,116,18,121,189, - 1,0,1,0,1,0,89,0,1,0,100,6,83,0,37,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,166,116,15,124,12, - 131,1,114,166,124,0,160,16,124,10,124,1,124,12,100,6, - 124,2,161,5,2,0,1,0,83,0,113,111,124,3,114,187, - 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,98,0,0,0,114,45,0,0,0,114,131,0,0,0,114, - 237,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,105,0,0,0,114, - 76,0,0,0,114,66,0,0,0,114,19,0,0,0,114,83, - 0,0,0,114,36,1,0,0,114,77,0,0,0,114,98,1, - 0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,114, - 22,0,0,0,114,101,1,0,0,114,132,0,0,0,114,100, - 1,0,0,114,68,0,0,0,114,97,1,0,0,114,81,0, - 0,0,114,92,1,0,0,114,84,0,0,0,114,112,0,0, - 0,114,160,0,0,0,114,174,0,0,0,114,208,0,0,0, - 114,203,0,0,0,41,14,114,144,0,0,0,114,164,0,0, - 0,114,226,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,194,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,45,1,0,0,114,212,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,211,0,0,0,114, - 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,227, - 0,0,0,248,5,0,0,115,94,0,0,0,4,5,14,1, - 2,1,22,1,2,128,12,1,8,1,2,128,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,18,1,2,128,12,1,8,1,2,128,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,115,31,0,0,0,138, - 10,21,0,149,9,32,7,193,52,8,65,61,2,193,61,7, - 66,8,9,194,61,1,66,8,9,194,62,1,32,7,122,20, + 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,228,0,0,0,114,229,0,0,0,114,7,0,0, + 0,114,7,0,0,0,114,8,0,0,0,114,230,0,0,0, + 167,5,0,0,115,14,0,0,0,6,8,2,2,4,254,12, + 3,8,1,4,1,6,1,114,10,0,0,0,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,93,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,145,0,0,0,114,146,0,0,0,114,93,1,0, + 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, + 114,94,1,0,0,183,5,0,0,115,4,0,0,0,12,10, + 16,1,114,10,0,0,0,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,70,0,0,0,114,231,0,0,0, + 41,14,114,151,0,0,0,114,150,0,0,0,114,152,0,0, + 0,114,153,0,0,0,114,234,0,0,0,114,79,1,0,0, + 114,85,1,0,0,114,235,0,0,0,114,88,1,0,0,114, + 89,1,0,0,114,92,1,0,0,114,227,0,0,0,114,230, + 0,0,0,114,94,1,0,0,114,7,0,0,0,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,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,10, + 0,0,0,114,78,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,70, + 0,0,0,114,7,0,0,0,114,44,1,0,0,169,1,114, + 165,0,0,0,114,7,0,0,0,114,8,0,0,0,114,9, + 0,0,0,212,5,0,0,115,4,0,0,0,6,128,18,0, + 114,10,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,98,0, + 0,0,114,131,0,0,0,78,41,11,114,192,0,0,0,218, + 8,95,108,111,97,100,101,114,115,114,66,0,0,0,114,87, + 0,0,0,114,68,0,0,0,114,19,0,0,0,114,83,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,144,0,0,0,114,66,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,213,0,0,0, + 114,7,0,0,0,114,96,1,0,0,114,8,0,0,0,114, + 237,0,0,0,206,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,114,10,0,0,0,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,131,0,0,0,78,41,1,114,98, + 1,0,0,114,22,1,0,0,114,7,0,0,0,114,7,0, + 0,0,114,8,0,0,0,114,79,1,0,0,222,5,0,0, + 114,82,0,0,0,114,10,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, + 100,0,0,0,114,101,0,0,0,114,102,0,0,0,114,227, + 0,0,0,114,165,0,0,0,114,203,0,0,0,41,3,114, + 144,0,0,0,114,164,0,0,0,114,211,0,0,0,114,7, + 0,0,0,114,7,0,0,0,114,8,0,0,0,114,162,0, + 0,0,228,5,0,0,115,14,0,0,0,6,7,2,2,4, + 254,10,3,8,1,8,1,16,1,114,10,0,0,0,122,22, 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,194,0, - 0,0,124,0,106,0,125,1,9,0,116,1,160,2,124,1, - 112,11,116,1,160,3,161,0,161,1,125,2,110,15,35,0, - 4,0,116,4,116,5,116,6,102,3,121,96,1,0,1,0, - 1,0,103,0,125,2,89,0,110,1,37,0,116,7,106,8, - 160,9,100,1,161,1,115,41,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,67,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,46,124,3,124,0,95,11,116,7, - 106,8,160,9,116,16,161,1,114,94,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,98,0,0,0,114,89,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,132,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,14,0,0,0,72,6,0,0,115,2,0,0, - 0,20,0,114,10,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,66,0,0,0,114,19,0,0,0, - 90,7,108,105,115,116,100,105,114,114,83,0,0,0,114,86, - 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,99,1,0,0,114,100,1,0, - 0,114,127,0,0,0,114,90,0,0,0,114,132,0,0,0, - 218,3,97,100,100,114,28,0,0,0,114,101,1,0,0,41, - 9,114,144,0,0,0,114,66,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,71,1,0, - 0,114,142,0,0,0,114,55,1,0,0,114,45,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,103,1,0,0,43,6, - 0,0,115,42,0,0,0,6,2,2,1,20,1,2,128,18, - 1,8,3,2,128,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,115,13,0,0,0,132,9,14,0,142,12,28,7,193,32, - 1,28,7,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,72,0,0,0,78,41, - 2,114,84,0,0,0,114,143,0,0,0,114,72,0,0,0, - 169,2,114,222,0,0,0,114,102,1,0,0,114,7,0,0, - 0,114,8,0,0,0,218,24,112,97,116,104,95,104,111,111, + 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,202,0,0,0,41,1,114,214,0,0,0,41,7,114, + 144,0,0,0,114,212,0,0,0,114,164,0,0,0,114,66, + 0,0,0,90,4,115,109,115,108,114,226,0,0,0,114,165, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,92,1,0,0,243,5,0,0,115,8,0,0,0, + 10,1,8,1,2,1,6,255,114,10,0,0,0,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,9,0,116,1,124,0,106,2,112,17,116,3, + 160,4,161,0,131,1,106,5,125,5,110,12,35,0,4,0, + 116,6,121,190,1,0,1,0,1,0,100,4,125,5,89,0, + 110,1,37,0,124,5,124,0,106,7,107,3,114,45,124,0, + 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, + 114,56,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,108,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,103,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,74,116,17,124,8,131,1,125,3,124,0,106,14,68,0, + 93,55,92,2,125,9,125,10,9,0,116,13,124,0,106,2, + 124,4,124,9,23,0,131,2,125,12,110,12,35,0,4,0, + 116,18,121,189,1,0,1,0,1,0,89,0,1,0,100,6, + 83,0,37,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,166, + 116,15,124,12,131,1,114,166,124,0,160,16,124,10,124,1, + 124,12,100,6,124,2,161,5,2,0,1,0,83,0,113,111, + 124,3,114,187,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,98,0,0,0,114,45,0,0,0,114,131, + 0,0,0,114,237,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,105, + 0,0,0,114,76,0,0,0,114,66,0,0,0,114,19,0, + 0,0,114,83,0,0,0,114,36,1,0,0,114,77,0,0, + 0,114,98,1,0,0,218,11,95,102,105,108,108,95,99,97, + 99,104,101,114,22,0,0,0,114,101,1,0,0,114,132,0, + 0,0,114,100,1,0,0,114,68,0,0,0,114,97,1,0, + 0,114,81,0,0,0,114,92,1,0,0,114,84,0,0,0, + 114,112,0,0,0,114,160,0,0,0,114,174,0,0,0,114, + 208,0,0,0,114,203,0,0,0,41,14,114,144,0,0,0, + 114,164,0,0,0,114,226,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,194,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,45,1,0,0,114, + 212,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,211, + 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, + 0,0,114,227,0,0,0,248,5,0,0,115,94,0,0,0, + 4,5,14,1,2,1,22,1,2,128,12,1,8,1,2,128, + 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,18,1,2,128,12,1,8,1,2,128, + 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,115,31, + 0,0,0,138,10,21,0,149,9,32,7,193,52,8,65,61, + 2,193,61,7,66,8,9,194,61,1,66,8,9,194,62,1, + 32,7,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,194,0,0,0,124,0,106,0,125,1,9,0,116,1, + 160,2,124,1,112,11,116,1,160,3,161,0,161,1,125,2, + 110,15,35,0,4,0,116,4,116,5,116,6,102,3,121,96, + 1,0,1,0,1,0,103,0,125,2,89,0,110,1,37,0, + 116,7,106,8,160,9,100,1,161,1,115,41,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,67,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,46,124,3,124,0, + 95,11,116,7,106,8,160,9,116,16,161,1,114,94,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,98,0,0,0,114,89,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,132,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,14,0,0,0,72,6,0,0, + 115,2,0,0,0,20,0,114,10,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,66,0,0,0,114, + 19,0,0,0,90,7,108,105,115,116,100,105,114,114,83,0, + 0,0,114,86,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,99,1,0,0, + 114,100,1,0,0,114,127,0,0,0,114,90,0,0,0,114, + 132,0,0,0,218,3,97,100,100,114,28,0,0,0,114,101, + 1,0,0,41,9,114,144,0,0,0,114,66,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,71,1,0,0,114,142,0,0,0,114,55,1,0,0,114, + 45,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,103,1, + 0,0,43,6,0,0,115,42,0,0,0,6,2,2,1,20, + 1,2,128,18,1,8,3,2,128,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,115,13,0,0,0,132,9,14,0,142,12, + 28,7,193,32,1,28,7,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,72,0, + 0,0,78,41,2,114,84,0,0,0,114,143,0,0,0,114, + 72,0,0,0,169,2,114,222,0,0,0,114,102,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,84,6,0,0,115,6,0,0,0,8,2,12, + 1,16,1,114,10,0,0,0,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, - 84,6,0,0,115,6,0,0,0,8,2,12,1,16,1,114, - 10,0,0,0,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,222,0,0,0,114,102,1,0,0,114,108, - 1,0,0,114,7,0,0,0,114,107,1,0,0,114,8,0, - 0,0,218,9,112,97,116,104,95,104,111,111,107,74,6,0, - 0,115,4,0,0,0,14,10,4,6,114,10,0,0,0,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,68, - 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,90,0,0,0,114, - 66,0,0,0,114,22,1,0,0,114,7,0,0,0,114,7, - 0,0,0,114,8,0,0,0,114,69,1,0,0,92,6,0, - 0,114,62,1,0,0,114,10,0,0,0,122,19,70,105,108, - 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, - 114,70,0,0,0,41,15,114,151,0,0,0,114,150,0,0, - 0,114,152,0,0,0,114,153,0,0,0,114,237,0,0,0, - 114,79,1,0,0,114,168,0,0,0,114,230,0,0,0,114, - 162,0,0,0,114,92,1,0,0,114,227,0,0,0,114,103, - 1,0,0,114,235,0,0,0,114,109,1,0,0,114,69,1, - 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,95,1,0,0,197,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,10,0,0, - 0,114,95,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,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,9,0,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,100,0,83,0,35,0, - 4,0,116,5,121,72,1,0,1,0,1,0,89,0,100,0, - 83,0,37,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, - 96,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,165,0,0,0,114,42,1,0,0,114,35,1,0,0, - 114,214,0,0,0,218,9,69,120,99,101,112,116,105,111,110, - 41,6,90,2,110,115,114,142,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,165,0,0,0,114,211,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,98,6,0,0,115,40,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,12,1, - 2,128,12,1,6,2,2,128,2,254,115,15,0,0,0,171, - 16,61,0,189,7,65,7,7,193,8,1,65,7,7,114,114, - 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,31,1, - 0,0,114,188,0,0,0,218,18,101,120,116,101,110,115,105, - 111,110,95,115,117,102,102,105,120,101,115,114,35,1,0,0, - 114,128,0,0,0,114,42,1,0,0,114,114,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,209, - 0,0,0,121,6,0,0,115,8,0,0,0,12,5,8,1, - 8,1,10,1,114,10,0,0,0,114,209,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,70,0,0,0,41,1,114,160,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,132,6,0,0,115, - 2,0,0,0,8,2,114,10,0,0,0,114,117,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,117,1,0,0,114,209,0,0,0,114,16,0,0,0,114, - 84,1,0,0,114,192,0,0,0,114,95,1,0,0,114,109, - 1,0,0,218,9,109,101,116,97,95,112,97,116,104,114,62, - 0,0,0,114,78,1,0,0,41,2,114,116,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,137,6,0,0,115, - 8,0,0,0,8,2,6,1,20,1,16,1,114,10,0,0, - 0,114,119,1,0,0,41,1,114,88,0,0,0,114,70,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,153,0,0,0,114,160,0, - 0,0,114,188,0,0,0,114,92,0,0,0,114,16,0,0, - 0,114,100,0,0,0,114,185,0,0,0,114,26,0,0,0, - 114,232,0,0,0,90,2,110,116,114,19,0,0,0,114,216, - 0,0,0,90,5,112,111,115,105,120,114,51,0,0,0,218, - 3,97,108,108,114,60,0,0,0,114,137,0,0,0,114,58, - 0,0,0,114,63,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,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,68,0,0,0,114,75,0, - 0,0,114,76,0,0,0,114,80,0,0,0,114,81,0,0, - 0,114,84,0,0,0,114,87,0,0,0,114,96,0,0,0, - 218,4,116,121,112,101,218,8,95,95,99,111,100,101,95,95, - 114,187,0,0,0,114,35,0,0,0,114,173,0,0,0,114, - 34,0,0,0,114,40,0,0,0,114,9,1,0,0,114,117, - 0,0,0,114,113,0,0,0,114,128,0,0,0,114,62,0, - 0,0,114,115,1,0,0,114,233,0,0,0,114,114,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,122,0,0,0,114,129,0,0, - 0,114,136,0,0,0,114,138,0,0,0,114,140,0,0,0, - 114,161,0,0,0,114,168,0,0,0,114,177,0,0,0,114, - 181,0,0,0,114,183,0,0,0,114,190,0,0,0,114,195, - 0,0,0,114,196,0,0,0,114,201,0,0,0,218,6,111, - 98,106,101,99,116,114,210,0,0,0,114,214,0,0,0,114, - 215,0,0,0,114,236,0,0,0,114,250,0,0,0,114,12, - 1,0,0,114,35,1,0,0,114,42,1,0,0,114,31,1, - 0,0,114,48,1,0,0,114,74,1,0,0,114,78,1,0, - 0,114,95,1,0,0,114,114,1,0,0,114,209,0,0,0, - 114,117,1,0,0,114,119,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,31,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,114,10,0,0,0, + 78,114,7,0,0,0,41,3,114,222,0,0,0,114,102,1, + 0,0,114,108,1,0,0,114,7,0,0,0,114,107,1,0, + 0,114,8,0,0,0,218,9,112,97,116,104,95,104,111,111, + 107,74,6,0,0,115,4,0,0,0,14,10,4,6,114,10, + 0,0,0,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,68,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,90, + 0,0,0,114,66,0,0,0,114,22,1,0,0,114,7,0, + 0,0,114,7,0,0,0,114,8,0,0,0,114,69,1,0, + 0,92,6,0,0,114,62,1,0,0,114,10,0,0,0,122, + 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, + 112,114,95,95,114,70,0,0,0,41,15,114,151,0,0,0, + 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, + 237,0,0,0,114,79,1,0,0,114,168,0,0,0,114,230, + 0,0,0,114,162,0,0,0,114,92,1,0,0,114,227,0, + 0,0,114,103,1,0,0,114,235,0,0,0,114,109,1,0, + 0,114,69,1,0,0,114,7,0,0,0,114,7,0,0,0, + 114,7,0,0,0,114,8,0,0,0,114,95,1,0,0,197, + 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,10,0,0,0,114,95,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,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,9,0,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,100,0, + 83,0,35,0,4,0,116,5,121,72,1,0,1,0,1,0, + 89,0,100,0,83,0,37,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,96,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,165,0,0,0,114,42,1,0,0,114, + 35,1,0,0,114,214,0,0,0,218,9,69,120,99,101,112, + 116,105,111,110,41,6,90,2,110,115,114,142,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,165,0,0,0,114,211,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,98,6,0, + 0,115,40,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,12,1,2,128,12,1,6,2,2,128,2,254,115,15, + 0,0,0,171,16,61,0,189,7,65,7,7,193,8,1,65, + 7,7,114,114,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,31,1,0,0,114,188,0,0,0,218,18,101,120,116, + 101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114, + 35,1,0,0,114,128,0,0,0,114,42,1,0,0,114,114, + 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,209,0,0,0,121,6,0,0,115,8,0,0,0, + 12,5,8,1,8,1,10,1,114,10,0,0,0,114,209,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,70,0,0,0,41,1,114, + 160,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,132, + 6,0,0,115,2,0,0,0,8,2,114,10,0,0,0,114, + 117,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,117,1,0,0,114,209,0,0,0,114,16, + 0,0,0,114,84,1,0,0,114,192,0,0,0,114,95,1, + 0,0,114,109,1,0,0,218,9,109,101,116,97,95,112,97, + 116,104,114,62,0,0,0,114,78,1,0,0,41,2,114,116, + 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,137, + 6,0,0,115,8,0,0,0,8,2,6,1,20,1,16,1, + 114,10,0,0,0,114,119,1,0,0,41,1,114,88,0,0, + 0,114,70,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,153,0,0, + 0,114,160,0,0,0,114,188,0,0,0,114,92,0,0,0, + 114,16,0,0,0,114,100,0,0,0,114,185,0,0,0,114, + 26,0,0,0,114,232,0,0,0,90,2,110,116,114,19,0, + 0,0,114,216,0,0,0,90,5,112,111,115,105,120,114,51, + 0,0,0,218,3,97,108,108,114,60,0,0,0,114,137,0, + 0,0,114,58,0,0,0,114,63,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,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,68,0,0, + 0,114,75,0,0,0,114,76,0,0,0,114,80,0,0,0, + 114,81,0,0,0,114,84,0,0,0,114,87,0,0,0,114, + 96,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, + 100,101,95,95,114,187,0,0,0,114,35,0,0,0,114,173, + 0,0,0,114,34,0,0,0,114,40,0,0,0,114,9,1, + 0,0,114,117,0,0,0,114,113,0,0,0,114,128,0,0, + 0,114,62,0,0,0,114,115,1,0,0,114,233,0,0,0, + 114,114,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,122,0,0,0, + 114,129,0,0,0,114,136,0,0,0,114,138,0,0,0,114, + 140,0,0,0,114,161,0,0,0,114,168,0,0,0,114,177, + 0,0,0,114,181,0,0,0,114,183,0,0,0,114,190,0, + 0,0,114,195,0,0,0,114,196,0,0,0,114,201,0,0, + 0,218,6,111,98,106,101,99,116,114,210,0,0,0,114,214, + 0,0,0,114,215,0,0,0,114,236,0,0,0,114,250,0, + 0,0,114,12,1,0,0,114,35,1,0,0,114,42,1,0, + 0,114,31,1,0,0,114,48,1,0,0,114,74,1,0,0, + 114,78,1,0,0,114,95,1,0,0,114,114,1,0,0,114, + 209,0,0,0,114,117,1,0,0,114,119,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,31,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,114,10,0,0,0, }; From webhook-mailer at python.org Wed May 12 06:25:59 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 10:25:59 -0000 Subject: [Python-checkins] bpo-40640: doc -- add missing ... in example of Continue (GH-26055) (GH-26057) Message-ID: https://github.com/python/cpython/commit/48cb11bf5b426bd3f1d010f987c03115661261b7 commit: 48cb11bf5b426bd3f1d010f987c03115661261b7 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-12T11:25:54+01:00 summary: bpo-40640: doc -- add missing ... in example of Continue (GH-26055) (GH-26057) Co-authored-by: Chas Belov <59780179+ChasBelov at users.noreply.github.com> (cherry picked from commit 6574334a68aa324394a6fd1f855ecbad20432b1e) Co-authored-by: Irit Katriel files: M Doc/tutorial/controlflow.rst diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst index 0b09c18170dd84..ee2c3e5b5853c7 100644 --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -214,6 +214,7 @@ iteration of the loop:: ... print("Found an even number", num) ... continue ... print("Found an odd number", num) + ... Found an even number 2 Found an odd number 3 Found an even number 4 From webhook-mailer at python.org Wed May 12 06:28:14 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 10:28:14 -0000 Subject: [Python-checkins] bpo-40640: doc -- add missing ... in example of Continue (GH-26055) (GH-26058) Message-ID: https://github.com/python/cpython/commit/ada9cdb94158a101db65af17b62cdd2ae6c3e782 commit: ada9cdb94158a101db65af17b62cdd2ae6c3e782 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-12T11:28:10+01:00 summary: bpo-40640: doc -- add missing ... in example of Continue (GH-26055) (GH-26058) Co-authored-by: Chas Belov <59780179+ChasBelov at users.noreply.github.com> (cherry picked from commit 6574334a68aa324394a6fd1f855ecbad20432b1e) files: M Doc/tutorial/controlflow.rst diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst index 284b68c0010aac..44417134a92ad9 100644 --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -208,6 +208,7 @@ iteration of the loop:: ... print("Found an even number", num) ... continue ... print("Found an odd number", num) + ... Found an even number 2 Found an odd number 3 Found an even number 4 From webhook-mailer at python.org Wed May 12 06:31:53 2021 From: webhook-mailer at python.org (markshannon) Date: Wed, 12 May 2021 10:31:53 -0000 Subject: [Python-checkins] bpo-40222: Mention zero-cost exceptions in whats-new for 3.11 (GH-26021) Message-ID: https://github.com/python/cpython/commit/78b2abca8e96b43f56ab1b9ad673aaa6bbe7e790 commit: 78b2abca8e96b43f56ab1b9ad673aaa6bbe7e790 branch: main author: Mark Shannon committer: markshannon date: 2021-05-12T11:31:48+01:00 summary: bpo-40222: Mention zero-cost exceptions in whats-new for 3.11 (GH-26021) files: M Doc/whatsnew/3.11.rst diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 464a97ef6e01e..dfb85e374439f 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -95,6 +95,9 @@ Optimizations fast as corresponding f-string expression. (Contributed by Serhiy Storchaka in :issue:`28307`.) +* "Zero-cost" exceptions are implemented. The cost of ``try`` statements is + almost eliminated when no exception is raised. + (Contributed by Mark Shannon in :issue:`40222`.) Build and C API Changes ======================= From webhook-mailer at python.org Wed May 12 09:04:46 2021 From: webhook-mailer at python.org (markshannon) Date: Wed, 12 May 2021 13:04:46 -0000 Subject: [Python-checkins] Remove PyTryblock struct (GH-26059) Message-ID: https://github.com/python/cpython/commit/117bfd2b7141127b18d5ca4d6bbc4b3068bbce33 commit: 117bfd2b7141127b18d5ca4d6bbc4b3068bbce33 branch: main author: Mark Shannon committer: markshannon date: 2021-05-12T14:04:38+01:00 summary: Remove PyTryblock struct (GH-26059) files: M Include/cpython/frameobject.h M Python/ceval.c diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h index 0c2206c0b92b6d..581664775cdedc 100644 --- a/Include/cpython/frameobject.h +++ b/Include/cpython/frameobject.h @@ -19,12 +19,6 @@ enum _framestate { typedef signed char PyFrameState; -typedef struct { - int b_type; /* what kind of block this is */ - int b_handler; /* where to jump to find handler */ - int b_level; /* value stack level to pop to */ -} PyTryBlock; - struct _frame { PyObject_VAR_HEAD struct _frame *f_back; /* previous frame, or NULL */ diff --git a/Python/ceval.c b/Python/ceval.c index 8e1c5bdf033074..2e15eea48003e0 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -95,7 +95,7 @@ static PyObject * special_lookup(PyThreadState *, PyObject *, _Py_Identifier *); static int check_args_iterable(PyThreadState *, PyObject *func, PyObject *vararg); static void format_kwargs_error(PyThreadState *, PyObject *func, PyObject *kwargs); static void format_awaitable_error(PyThreadState *, PyTypeObject *, int, int); -static PyTryBlock get_exception_handler(PyCodeObject *, int); +static int get_exception_handler(PyCodeObject *, int, int*, int*, int*); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" @@ -4461,21 +4461,20 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) exception_unwind: f->f_state = FRAME_UNWINDING; /* We can't use f->f_lasti here, as RERAISE may have set it */ - int lasti = INSTR_OFFSET()-1; - PyTryBlock from_table = get_exception_handler(co, lasti); - if (from_table.b_handler < 0) { + int offset = INSTR_OFFSET()-1; + int level, handler, lasti; + if (get_exception_handler(co, offset, &level, &handler, &lasti) == 0) { // No handlers, so exit. break; } - assert(STACK_LEVEL() >= from_table.b_level); - while (STACK_LEVEL() > from_table.b_level) { + assert(STACK_LEVEL() >= level); + while (STACK_LEVEL() > level) { PyObject *v = POP(); Py_XDECREF(v); } PyObject *exc, *val, *tb; - int handler = from_table.b_handler; - if (from_table.b_type) { + if (lasti) { PyObject *lasti = PyLong_FromLong(f->f_lasti); if (lasti == NULL) { goto exception_unwind; @@ -4811,21 +4810,11 @@ parse_range(unsigned char *p, int *start, int*end) return p; } -static inline void -parse_block(unsigned char *p, PyTryBlock *block) { - int depth_and_lasti; - p = parse_varint(p, &block->b_handler); - p = parse_varint(p, &depth_and_lasti); - block->b_level = depth_and_lasti >> 1; - block->b_type = depth_and_lasti & 1; -} - #define MAX_LINEAR_SEARCH 40 -static PyTryBlock -get_exception_handler(PyCodeObject *code, int index) +static int +get_exception_handler(PyCodeObject *code, int index, int *level, int *handler, int *lasti) { - PyTryBlock res; unsigned char *start = (unsigned char *)PyBytes_AS_STRING(code->co_exceptiontable); unsigned char *end = start + PyBytes_GET_SIZE(code->co_exceptiontable); /* Invariants: @@ -4837,8 +4826,7 @@ get_exception_handler(PyCodeObject *code, int index) int offset; parse_varint(start, &offset); if (offset > index) { - res.b_handler = -1; - return res; + return 0; } do { unsigned char * mid = start + ((end-start)>>1); @@ -4862,13 +4850,16 @@ get_exception_handler(PyCodeObject *code, int index) } scan = parse_varint(scan, &size); if (start_offset + size > index) { - parse_block(scan, &res); - return res; + scan = parse_varint(scan, handler); + int depth_and_lasti; + parse_varint(scan, &depth_and_lasti); + *level = depth_and_lasti >> 1; + *lasti = depth_and_lasti & 1; + return 1; } scan = skip_to_next_entry(scan, end); } - res.b_handler = -1; - return res; + return 0; } PyFrameObject * From webhook-mailer at python.org Wed May 12 09:05:51 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 13:05:51 -0000 Subject: [Python-checkins] bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) Message-ID: https://github.com/python/cpython/commit/5010c044c73ee55d0fd578cfecd3f4c3f01a4140 commit: 5010c044c73ee55d0fd578cfecd3f4c3f01a4140 branch: main author: Karl Dubost committer: iritkatriel date: 2021-05-12T14:05:45+01:00 summary: bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) Co-authored-by: Szymon Trapp files: M Lib/test/test_abc.py diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 3d603e7734d87..c1d750dba83f9 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -459,6 +459,24 @@ class S(metaclass=abc_ABCMeta): with self.assertRaisesRegex(Exception, exc_msg): issubclass(int, S) + def test_subclasshook(self): + class A(metaclass=abc.ABCMeta): + @classmethod + def __subclasshook__(cls, C): + if cls is A: + return 'foo' in C.__dict__ + return NotImplemented + self.assertFalse(issubclass(A, A)) + self.assertFalse(issubclass(A, (A,))) + class B: + foo = 42 + self.assertTrue(issubclass(B, A)) + self.assertTrue(issubclass(B, (A,))) + class C: + spam = 42 + self.assertFalse(issubclass(C, A)) + self.assertFalse(issubclass(C, (A,))) + def test_all_new_methods_are_called(self): class A(metaclass=abc_ABCMeta): pass From webhook-mailer at python.org Wed May 12 09:45:28 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 13:45:28 -0000 Subject: [Python-checkins] bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) (GH-26063) Message-ID: https://github.com/python/cpython/commit/1be93960612b29686d42c021f842e63e5143a625 commit: 1be93960612b29686d42c021f842e63e5143a625 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-12T14:45:18+01:00 summary: bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) (GH-26063) Co-authored-by: Szymon Trapp (cherry picked from commit 5010c044c73ee55d0fd578cfecd3f4c3f01a4140) Co-authored-by: Karl Dubost files: M Lib/test/test_abc.py diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 7e9c47b3cacb9..3f668e9187d9b 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -459,6 +459,24 @@ class S(metaclass=abc_ABCMeta): with self.assertRaisesRegex(Exception, exc_msg): issubclass(int, S) + def test_subclasshook(self): + class A(metaclass=abc.ABCMeta): + @classmethod + def __subclasshook__(cls, C): + if cls is A: + return 'foo' in C.__dict__ + return NotImplemented + self.assertFalse(issubclass(A, A)) + self.assertFalse(issubclass(A, (A,))) + class B: + foo = 42 + self.assertTrue(issubclass(B, A)) + self.assertTrue(issubclass(B, (A,))) + class C: + spam = 42 + self.assertFalse(issubclass(C, A)) + self.assertFalse(issubclass(C, (A,))) + def test_all_new_methods_are_called(self): class A(metaclass=abc_ABCMeta): pass From webhook-mailer at python.org Wed May 12 09:47:22 2021 From: webhook-mailer at python.org (orsenthil) Date: Wed, 12 May 2021 13:47:22 -0000 Subject: [Python-checkins] bpo-44089: Allow subclassing of ``csv.Error`` (GH-26008) Message-ID: https://github.com/python/cpython/commit/2b458c1dba4058c808fde25226bb2d91c5a909ca commit: 2b458c1dba4058c808fde25226bb2d91c5a909ca branch: main author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: orsenthil date: 2021-05-12T06:47:11-07:00 summary: bpo-44089: Allow subclassing of ``csv.Error`` (GH-26008) * fix subclass error * Update 2021-05-09-22-52-34.bpo-44089.IoANsN.rst files: A Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst M Lib/test/test_csv.py M Modules/_csv.c diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 2411a91110dd43..a1e050acd2a0c6 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -1237,6 +1237,9 @@ def test__all__(self): extra = {'__doc__', '__version__'} support.check__all__(self, csv, ('csv', '_csv'), extra=extra) + def test_subclassable(self): + # issue 44089 + class Foo(csv.Error): ... if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst b/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst new file mode 100644 index 00000000000000..b9bd963582fdc2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst @@ -0,0 +1,2 @@ +Allow subclassing ``csv.Error`` in 3.10 (it was allowed in 3.9 and earlier but +was disallowed in early versions of 3.10). diff --git a/Modules/_csv.c b/Modules/_csv.c index cade1ca9d47f06..bdb67fdb4876fe 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -1515,7 +1515,7 @@ static PyType_Slot error_slots[] = { PyType_Spec error_spec = { .name = "_csv.Error", - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, .slots = error_slots, }; From webhook-mailer at python.org Wed May 12 10:02:51 2021 From: webhook-mailer at python.org (orsenthil) Date: Wed, 12 May 2021 14:02:51 -0000 Subject: [Python-checkins] bpo-44089: Allow subclassing of ``csv.Error`` (GH-26008) (GH-26066) Message-ID: https://github.com/python/cpython/commit/3e44e9af9ea4c5e82912a01f256d4abcae96f32b commit: 3e44e9af9ea4c5e82912a01f256d4abcae96f32b branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-12T07:02:46-07:00 summary: bpo-44089: Allow subclassing of ``csv.Error`` (GH-26008) (GH-26066) * fix subclass error * Update 2021-05-09-22-52-34.bpo-44089.IoANsN.rst (cherry picked from commit 2b458c1dba4058c808fde25226bb2d91c5a909ca) 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-05-09-22-52-34.bpo-44089.IoANsN.rst M Lib/test/test_csv.py M Modules/_csv.c diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 2411a91110dd43..a1e050acd2a0c6 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -1237,6 +1237,9 @@ def test__all__(self): extra = {'__doc__', '__version__'} support.check__all__(self, csv, ('csv', '_csv'), extra=extra) + def test_subclassable(self): + # issue 44089 + class Foo(csv.Error): ... if __name__ == '__main__': unittest.main() diff --git a/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst b/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst new file mode 100644 index 00000000000000..b9bd963582fdc2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-09-22-52-34.bpo-44089.IoANsN.rst @@ -0,0 +1,2 @@ +Allow subclassing ``csv.Error`` in 3.10 (it was allowed in 3.9 and earlier but +was disallowed in early versions of 3.10). diff --git a/Modules/_csv.c b/Modules/_csv.c index cade1ca9d47f06..bdb67fdb4876fe 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -1515,7 +1515,7 @@ static PyType_Slot error_slots[] = { PyType_Spec error_spec = { .name = "_csv.Error", - .flags = Py_TPFLAGS_DEFAULT, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, .slots = error_slots, }; From webhook-mailer at python.org Wed May 12 10:06:39 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 12 May 2021 14:06:39 -0000 Subject: [Python-checkins] [3.10] bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) (GH-26065) Message-ID: https://github.com/python/cpython/commit/bd5dfd6c8c133ccda4dddcba3a8c5a9ea1aa1d6b commit: bd5dfd6c8c133ccda4dddcba3a8c5a9ea1aa1d6b branch: 3.10 author: Irit Katriel committer: iritkatriel date: 2021-05-12T15:06:34+01:00 summary: [3.10] bpo-25479: add unit test for __subclasshook__ in test_abc.py (GH-24034) (GH-26065) Co-authored-by: Szymon Trapp (cherry picked from commit 5010c044c73ee55d0fd578cfecd3f4c3f01a4140) Co-authored-by: Karl Dubost files: M Lib/test/test_abc.py diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index 3d603e7734d87..c1d750dba83f9 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -459,6 +459,24 @@ class S(metaclass=abc_ABCMeta): with self.assertRaisesRegex(Exception, exc_msg): issubclass(int, S) + def test_subclasshook(self): + class A(metaclass=abc.ABCMeta): + @classmethod + def __subclasshook__(cls, C): + if cls is A: + return 'foo' in C.__dict__ + return NotImplemented + self.assertFalse(issubclass(A, A)) + self.assertFalse(issubclass(A, (A,))) + class B: + foo = 42 + self.assertTrue(issubclass(B, A)) + self.assertTrue(issubclass(B, (A,))) + class C: + spam = 42 + self.assertFalse(issubclass(C, A)) + self.assertFalse(issubclass(C, (A,))) + def test_all_new_methods_are_called(self): class A(metaclass=abc_ABCMeta): pass From webhook-mailer at python.org Wed May 12 11:09:41 2021 From: webhook-mailer at python.org (corona10) Date: Wed, 12 May 2021 15:09:41 -0000 Subject: [Python-checkins] Use get_binascii_state instead of PyModule_GetState (GH-26069) Message-ID: https://github.com/python/cpython/commit/9b06e4b535a3a0af495604778d4010a4677478cc commit: 9b06e4b535a3a0af495604778d4010a4677478cc branch: main author: Dong-hee Na committer: corona10 date: 2021-05-13T00:09:30+09:00 summary: Use get_binascii_state instead of PyModule_GetState (GH-26069) files: M Modules/binascii.c diff --git a/Modules/binascii.c b/Modules/binascii.c index 1f3248b6049b31..59e4b0a4a784ee 100644 --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -66,7 +66,7 @@ typedef struct binascii_state { PyObject *Incomplete; } binascii_state; -static binascii_state * +static inline binascii_state * get_binascii_state(PyObject *module) { return (binascii_state *)PyModule_GetState(module); @@ -312,7 +312,7 @@ binascii_a2b_uu_impl(PyObject *module, Py_buffer *data) ** '`' as zero instead of space. */ if ( this_ch < ' ' || this_ch > (' ' + 64)) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -344,7 +344,7 @@ binascii_a2b_uu_impl(PyObject *module, Py_buffer *data) /* Extra '`' may be written as padding in some cases */ if ( this_ch != ' ' && this_ch != ' '+64 && this_ch != '\n' && this_ch != '\r' ) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -385,7 +385,7 @@ binascii_b2a_uu_impl(PyObject *module, Py_buffer *data, int backtick) bin_len = data->len; if ( bin_len > 45 ) { /* The 45 is a limit that appears in all uuencode's */ - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -505,9 +505,9 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data) } if (quad_pos != 0) { - binascii_state *state = PyModule_GetState(module); + binascii_state *state = get_binascii_state(module); if (state == NULL) { - /* error already set, from PyModule_GetState */ + /* error already set, from get_binascii_state */ } else if (quad_pos == 1) { /* ** There is exactly one extra valid, non-padding, base64 character. @@ -562,7 +562,7 @@ binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline) assert(bin_len >= 0); if ( bin_len > BASE64_MAXBIN ) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -657,7 +657,7 @@ binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data) if ( this_ch == SKIP ) continue; if ( this_ch == FAIL ) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -682,7 +682,7 @@ binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data) } if ( leftbits && !done ) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -878,7 +878,7 @@ binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) #define INBYTE(b) \ do { \ if ( --in_len < 0 ) { \ - state = PyModule_GetState(module); \ + state = get_binascii_state(module); \ if (state == NULL) { \ return NULL; \ } \ @@ -904,7 +904,7 @@ binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) /* Note Error, not Incomplete (which is at the end ** of the string only). This is a programmer error. */ - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -1235,7 +1235,7 @@ binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr) * raise an exception. */ if (arglen % 2) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } @@ -1252,7 +1252,7 @@ binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr) unsigned int top = _PyLong_DigitValue[Py_CHARMASK(argbuf[i])]; unsigned int bot = _PyLong_DigitValue[Py_CHARMASK(argbuf[i+1])]; if (top >= 16 || bot >= 16) { - state = PyModule_GetState(module); + state = get_binascii_state(module); if (state == NULL) { return NULL; } From webhook-mailer at python.org Wed May 12 11:47:57 2021 From: webhook-mailer at python.org (gvanrossum) Date: Wed, 12 May 2021 15:47:57 -0000 Subject: [Python-checkins] bpo-38908: Fix issue when non runtime_protocol failed to raise TypeError (#26067) Message-ID: https://github.com/python/cpython/commit/c40486a32d7e37b01ead94e701d69847f5b60e30 commit: c40486a32d7e37b01ead94e701d69847f5b60e30 branch: main author: Yurii Karabas <1998uriyyo at gmail.com> committer: gvanrossum date: 2021-05-12T08:47:49-07:00 summary: bpo-38908: Fix issue when non runtime_protocol failed to raise TypeError (#26067) files: A Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.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 47dc0b9358d7d..a2a5d8f41019e 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1422,6 +1422,14 @@ class CustomProtocol(TestCase, Protocol): class CustomContextManager(typing.ContextManager, Protocol): pass + def test_non_runtime_protocol_isinstance_check(self): + class P(Protocol): + x: int + + with self.assertRaisesRegex(TypeError, "@runtime_checkable"): + isinstance(1, P) + + class GenericTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index a51452bfec357..ca47a6f58453a 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1343,14 +1343,14 @@ def _no_init(self, *args, **kwargs): raise TypeError('Protocols cannot be instantiated') -def _allow_reckless_class_checks(): +def _allow_reckless_class_checks(depth=3): """Allow instance and class checks for special stdlib modules. The abc and functools modules indiscriminately call isinstance() and issubclass() on the whole MRO of a user class, which may contain protocols. """ try: - return sys._getframe(3).f_globals['__name__'] in ['abc', 'functools'] + return sys._getframe(depth).f_globals['__name__'] in ['abc', 'functools'] except (AttributeError, ValueError): # For platforms without _getframe(). return True @@ -1370,6 +1370,14 @@ class _ProtocolMeta(ABCMeta): def __instancecheck__(cls, instance): # We need this method for situations where attributes are # assigned in __init__. + if ( + getattr(cls, '_is_protocol', False) and + not getattr(cls, '_is_runtime_protocol', False) and + not _allow_reckless_class_checks(depth=2) + ): + raise TypeError("Instance and class checks can only be used with" + " @runtime_checkable protocols") + if ((not getattr(cls, '_is_protocol', False) or _is_callable_members_only(cls)) and issubclass(instance.__class__, cls)): diff --git a/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst new file mode 100644 index 0000000000000..b72936c205f67 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst @@ -0,0 +1,5 @@ +Fix issue where :mod:`typing` protocols without the ``@runtime_checkable`` +decorator did not raise a ``TypeError`` when used with ``issubclass`` and +``isinstance``. Now, subclassses of ``typing.Protocol`` will raise a +``TypeError`` when used with with those checks. +Patch provided by Yurii Karabas. From webhook-mailer at python.org Wed May 12 12:04:43 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 16:04:43 -0000 Subject: [Python-checkins] bpo-40645: Fix reference leak in the _hashopenssl extension (GH-26072) Message-ID: https://github.com/python/cpython/commit/3611db53f5b854cb6d01ee5ebb5e11c87bcc2df5 commit: 3611db53f5b854cb6d01ee5ebb5e11c87bcc2df5 branch: main author: Petr Viktorin committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-12T09:04:34-07:00 summary: bpo-40645: Fix reference leak in the _hashopenssl extension (GH-26072) The `PyModule_AddObjectRef` function doesn't steal a reference, so an extra `Py_DECREF` is needed. Automerge-Triggered-By: GH:tiran files: M Modules/_hashopenssl.c diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index b2c67759e95ea..13634a579f0dd 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -2109,6 +2109,7 @@ hashlib_init_constructors(PyObject *module) if (PyModule_AddObjectRef(module, "_constructors", proxy) < 0) { return -1; } + Py_DECREF(proxy); return 0; } From webhook-mailer at python.org Wed May 12 12:09:13 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 16:09:13 -0000 Subject: [Python-checkins] bpo-38908: Fix issue when non runtime_protocol failed to raise TypeError (GH-26067) Message-ID: https://github.com/python/cpython/commit/a2d94a0a9b8ae95d7d2b7fc34b501da5242ec22c commit: a2d94a0a9b8ae95d7d2b7fc34b501da5242ec22c branch: 3.10 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-05-12T09:09:04-07:00 summary: bpo-38908: Fix issue when non runtime_protocol failed to raise TypeError (GH-26067) (cherry picked from commit c40486a32d7e37b01ead94e701d69847f5b60e30) Co-authored-by: Yurii Karabas <1998uriyyo at gmail.com> files: A Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.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 47dc0b9358d7d..a2a5d8f41019e 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1422,6 +1422,14 @@ class CustomProtocol(TestCase, Protocol): class CustomContextManager(typing.ContextManager, Protocol): pass + def test_non_runtime_protocol_isinstance_check(self): + class P(Protocol): + x: int + + with self.assertRaisesRegex(TypeError, "@runtime_checkable"): + isinstance(1, P) + + class GenericTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index 301a47745d837..26efe4a4600ac 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1343,14 +1343,14 @@ def _no_init(self, *args, **kwargs): raise TypeError('Protocols cannot be instantiated') -def _allow_reckless_class_checks(): +def _allow_reckless_class_checks(depth=3): """Allow instance and class checks for special stdlib modules. The abc and functools modules indiscriminately call isinstance() and issubclass() on the whole MRO of a user class, which may contain protocols. """ try: - return sys._getframe(3).f_globals['__name__'] in ['abc', 'functools'] + return sys._getframe(depth).f_globals['__name__'] in ['abc', 'functools'] except (AttributeError, ValueError): # For platforms without _getframe(). return True @@ -1370,6 +1370,14 @@ class _ProtocolMeta(ABCMeta): def __instancecheck__(cls, instance): # We need this method for situations where attributes are # assigned in __init__. + if ( + getattr(cls, '_is_protocol', False) and + not getattr(cls, '_is_runtime_protocol', False) and + not _allow_reckless_class_checks(depth=2) + ): + raise TypeError("Instance and class checks can only be used with" + " @runtime_checkable protocols") + if ((not getattr(cls, '_is_protocol', False) or _is_callable_members_only(cls)) and issubclass(instance.__class__, cls)): diff --git a/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst new file mode 100644 index 0000000000000..b72936c205f67 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst @@ -0,0 +1,5 @@ +Fix issue where :mod:`typing` protocols without the ``@runtime_checkable`` +decorator did not raise a ``TypeError`` when used with ``issubclass`` and +``isinstance``. Now, subclassses of ``typing.Protocol`` will raise a +``TypeError`` when used with with those checks. +Patch provided by Yurii Karabas. From webhook-mailer at python.org Wed May 12 12:46:38 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 12 May 2021 16:46:38 -0000 Subject: [Python-checkins] bpo-44117: Add C API section to What's New in Python 3.11 (GH-26071) Message-ID: https://github.com/python/cpython/commit/ff230153fd2b1d0576df21ae6c29f0f2fdb0244f commit: ff230153fd2b1d0576df21ae6c29f0f2fdb0244f branch: main author: Victor Stinner committer: vstinner date: 2021-05-12T18:46:29+02:00 summary: bpo-44117: Add C API section to What's New in Python 3.11 (GH-26071) Add also references to PyFrame_BlockPop() removal. files: M Doc/whatsnew/3.11.rst diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index dfb85e374439f..2cca9921bf009 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -99,10 +99,10 @@ Optimizations almost eliminated when no exception is raised. (Contributed by Mark Shannon in :issue:`40222`.) -Build and C API Changes -======================= -* :c:func:`PyFrame_BlockSetup` and :c:func:`PyFrame_BlockPop` have been removed. +Build Changes +============= + Deprecated ========== @@ -119,3 +119,23 @@ Porting to Python 3.11 This section lists previously described changes and other bugfixes that may require changes to your code. + + +C API Changes +============= + +New Features +------------ + +Porting to Python 3.11 +---------------------- + +Deprecated +---------- + +Removed +------- + +* :c:func:`PyFrame_BlockSetup` and :c:func:`PyFrame_BlockPop` have been + removed. + (Contributed by Mark Shannon in :issue:`40222`.) From webhook-mailer at python.org Wed May 12 13:04:55 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 17:04:55 -0000 Subject: [Python-checkins] [3.9] bpo-38908: Fix issue when non runtime_protocol does not raise TypeError (GH-26067) (GH-26075) Message-ID: https://github.com/python/cpython/commit/88136bbd0500b688c05e914be031cd3c243e42d8 commit: 88136bbd0500b688c05e914be031cd3c243e42d8 branch: 3.9 author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-12T10:04:43-07:00 summary: [3.9] bpo-38908: Fix issue when non runtime_protocol does not raise TypeError (GH-26067) (GH-26075) (cherry picked from commit c40486a) Co-authored-by: Yurii Karabas 1998uriyyo at gmail.com Automerge-Triggered-By: GH:gvanrossum files: A Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.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 4bdb2a0fad6c7..d91363eb37960 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1422,6 +1422,14 @@ class CustomProtocol(TestCase, Protocol): class CustomContextManager(typing.ContextManager, Protocol): pass + def test_non_runtime_protocol_isinstance_check(self): + class P(Protocol): + x: int + + with self.assertRaisesRegex(TypeError, "@runtime_checkable"): + isinstance(1, P) + + class GenericTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index 123fbc2c45010..c3844cf3083e1 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1079,14 +1079,14 @@ def _no_init(self, *args, **kwargs): raise TypeError('Protocols cannot be instantiated') -def _allow_reckless_class_cheks(): +def _allow_reckless_class_checks(depth=3): """Allow instance and class checks for special stdlib modules. The abc and functools modules indiscriminately call isinstance() and issubclass() on the whole MRO of a user class, which may contain protocols. """ try: - return sys._getframe(3).f_globals['__name__'] in ['abc', 'functools'] + return sys._getframe(depth).f_globals['__name__'] in ['abc', 'functools'] except (AttributeError, ValueError): # For platforms without _getframe(). return True @@ -1106,6 +1106,14 @@ class _ProtocolMeta(ABCMeta): def __instancecheck__(cls, instance): # We need this method for situations where attributes are # assigned in __init__. + if ( + getattr(cls, '_is_protocol', False) and + not getattr(cls, '_is_runtime_protocol', False) and + not _allow_reckless_class_checks(depth=2) + ): + raise TypeError("Instance and class checks can only be used with" + " @runtime_checkable protocols") + if ((not getattr(cls, '_is_protocol', False) or _is_callable_members_only(cls)) and issubclass(instance.__class__, cls)): @@ -1168,12 +1176,12 @@ def _proto_hook(other): # First, perform various sanity checks. if not getattr(cls, '_is_runtime_protocol', False): - if _allow_reckless_class_cheks(): + if _allow_reckless_class_checks(): return NotImplemented raise TypeError("Instance and class checks can only be used with" " @runtime_checkable protocols") if not _is_callable_members_only(cls): - if _allow_reckless_class_cheks(): + if _allow_reckless_class_checks(): return NotImplemented raise TypeError("Protocols with non-method members" " don't support issubclass()") diff --git a/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst new file mode 100644 index 0000000000000..b72936c205f67 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst @@ -0,0 +1,5 @@ +Fix issue where :mod:`typing` protocols without the ``@runtime_checkable`` +decorator did not raise a ``TypeError`` when used with ``issubclass`` and +``isinstance``. Now, subclassses of ``typing.Protocol`` will raise a +``TypeError`` when used with with those checks. +Patch provided by Yurii Karabas. From webhook-mailer at python.org Wed May 12 13:44:22 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 17:44:22 -0000 Subject: [Python-checkins] [3.9] Revert "[3.9] bpo-38908: Fix issue when non runtime_protocol does not raise TypeError (GH-26067)" (GH-26077) Message-ID: https://github.com/python/cpython/commit/9b90ce68503f4861ce4e9ac9444d9a82b3d943a5 commit: 9b90ce68503f4861ce4e9ac9444d9a82b3d943a5 branch: 3.9 author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-12T10:44:14-07:00 summary: [3.9] Revert "[3.9] bpo-38908: Fix issue when non runtime_protocol does not raise TypeError (GH-26067)" (GH-26077) Reverts python/cpython#26075 Automerge-Triggered-By: GH:gvanrossum files: D Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.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 d91363eb37960..4bdb2a0fad6c7 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1422,14 +1422,6 @@ class CustomProtocol(TestCase, Protocol): class CustomContextManager(typing.ContextManager, Protocol): pass - def test_non_runtime_protocol_isinstance_check(self): - class P(Protocol): - x: int - - with self.assertRaisesRegex(TypeError, "@runtime_checkable"): - isinstance(1, P) - - class GenericTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index c3844cf3083e1..123fbc2c45010 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1079,14 +1079,14 @@ def _no_init(self, *args, **kwargs): raise TypeError('Protocols cannot be instantiated') -def _allow_reckless_class_checks(depth=3): +def _allow_reckless_class_cheks(): """Allow instance and class checks for special stdlib modules. The abc and functools modules indiscriminately call isinstance() and issubclass() on the whole MRO of a user class, which may contain protocols. """ try: - return sys._getframe(depth).f_globals['__name__'] in ['abc', 'functools'] + return sys._getframe(3).f_globals['__name__'] in ['abc', 'functools'] except (AttributeError, ValueError): # For platforms without _getframe(). return True @@ -1106,14 +1106,6 @@ class _ProtocolMeta(ABCMeta): def __instancecheck__(cls, instance): # We need this method for situations where attributes are # assigned in __init__. - if ( - getattr(cls, '_is_protocol', False) and - not getattr(cls, '_is_runtime_protocol', False) and - not _allow_reckless_class_checks(depth=2) - ): - raise TypeError("Instance and class checks can only be used with" - " @runtime_checkable protocols") - if ((not getattr(cls, '_is_protocol', False) or _is_callable_members_only(cls)) and issubclass(instance.__class__, cls)): @@ -1176,12 +1168,12 @@ def _proto_hook(other): # First, perform various sanity checks. if not getattr(cls, '_is_runtime_protocol', False): - if _allow_reckless_class_checks(): + if _allow_reckless_class_cheks(): return NotImplemented raise TypeError("Instance and class checks can only be used with" " @runtime_checkable protocols") if not _is_callable_members_only(cls): - if _allow_reckless_class_checks(): + if _allow_reckless_class_cheks(): return NotImplemented raise TypeError("Protocols with non-method members" " don't support issubclass()") diff --git a/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst b/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst deleted file mode 100644 index b72936c205f67..0000000000000 --- a/Misc/NEWS.d/next/Library/2021-05-12-16-43-21.bpo-38908.nM2_rO.rst +++ /dev/null @@ -1,5 +0,0 @@ -Fix issue where :mod:`typing` protocols without the ``@runtime_checkable`` -decorator did not raise a ``TypeError`` when used with ``issubclass`` and -``isinstance``. Now, subclassses of ``typing.Protocol`` will raise a -``TypeError`` when used with with those checks. -Patch provided by Yurii Karabas. From webhook-mailer at python.org Wed May 12 14:19:13 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 12 May 2021 18:19:13 -0000 Subject: [Python-checkins] bpo-44116: Add GC support to _csv heap types (GH-26074) Message-ID: https://github.com/python/cpython/commit/e5ba1fe995d4b4f3f6a089a7ec4dd186dd573830 commit: e5ba1fe995d4b4f3f6a089a7ec4dd186dd573830 branch: main author: Erlend Egeberg Aasland committer: pablogsal date: 2021-05-12T19:18:58+01:00 summary: bpo-44116: Add GC support to _csv heap types (GH-26074) files: M Modules/_csv.c diff --git a/Modules/_csv.c b/Modules/_csv.c index bdb67fdb4876f..a213734f50806 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -316,17 +316,12 @@ static void Dialect_dealloc(DialectObj *self) { PyTypeObject *tp = Py_TYPE(self); - Py_CLEAR(self->lineterminator); - tp->tp_free((PyObject *)self); + PyObject_GC_UnTrack(self); + tp->tp_clear((PyObject *)self); + PyObject_GC_Del(self); Py_DECREF(tp); } -static void -Dialect_finalize(DialectObj *self) -{ - Py_CLEAR(self->lineterminator); -} - static char *dialect_kws[] = { "dialect", "delimiter", @@ -512,21 +507,37 @@ PyDoc_STRVAR(Dialect_Type_doc, "\n" "The Dialect type records CSV parsing and generation options.\n"); +static int +Dialect_clear(DialectObj *self) +{ + Py_CLEAR(self->lineterminator); + return 0; +} + +static int +Dialect_traverse(DialectObj *self, visitproc visit, void *arg) +{ + Py_VISIT(self->lineterminator); + Py_VISIT(Py_TYPE(self)); + return 0; +} + static PyType_Slot Dialect_Type_slots[] = { {Py_tp_doc, (char*)Dialect_Type_doc}, {Py_tp_members, Dialect_memberlist}, {Py_tp_getset, Dialect_getsetlist}, {Py_tp_new, dialect_new}, {Py_tp_methods, dialect_methods}, - {Py_tp_finalize, Dialect_finalize}, {Py_tp_dealloc, Dialect_dealloc}, + {Py_tp_clear, Dialect_clear}, + {Py_tp_traverse, Dialect_traverse}, {0, NULL} }; PyType_Spec Dialect_Type_spec = { .name = "_csv.Dialect", .basicsize = sizeof(DialectObj), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, .slots = Dialect_Type_slots, }; @@ -885,9 +896,7 @@ Reader_dealloc(ReaderObj *self) { PyTypeObject *tp = Py_TYPE(self); PyObject_GC_UnTrack(self); - Py_CLEAR(self->dialect); - Py_CLEAR(self->input_iter); - Py_CLEAR(self->fields); + tp->tp_clear((PyObject *)self); if (self->field != NULL) { PyMem_Free(self->field); self->field = NULL; @@ -896,24 +905,13 @@ Reader_dealloc(ReaderObj *self) Py_DECREF(tp); } -static void -Reader_finalize(ReaderObj *self) -{ - Py_CLEAR(self->dialect); - Py_CLEAR(self->input_iter); - Py_CLEAR(self->fields); - if (self->field != NULL) { - PyMem_Free(self->field); - self->field = NULL; - } -} - static int Reader_traverse(ReaderObj *self, visitproc visit, void *arg) { Py_VISIT(self->dialect); Py_VISIT(self->input_iter); Py_VISIT(self->fields); + Py_VISIT(Py_TYPE(self)); return 0; } @@ -948,12 +946,11 @@ static struct PyMemberDef Reader_memberlist[] = { static PyType_Slot Reader_Type_slots[] = { {Py_tp_doc, (char*)Reader_Type_doc}, {Py_tp_traverse, Reader_traverse}, - {Py_tp_clear, Reader_clear}, {Py_tp_iter, PyObject_SelfIter}, {Py_tp_iternext, Reader_iternext}, {Py_tp_methods, Reader_methods}, {Py_tp_members, Reader_memberlist}, - {Py_tp_finalize, Reader_finalize}, + {Py_tp_clear, Reader_clear}, {Py_tp_dealloc, Reader_dealloc}, {0, NULL} }; @@ -1339,6 +1336,7 @@ Writer_traverse(WriterObj *self, visitproc visit, void *arg) Py_VISIT(self->dialect); Py_VISIT(self->write); Py_VISIT(self->error_obj); + Py_VISIT(Py_TYPE(self)); return 0; } @@ -1352,12 +1350,16 @@ Writer_clear(WriterObj *self) } static void -Writer_finalize(WriterObj *self) +Writer_dealloc(WriterObj *self) { - Writer_clear(self); + PyTypeObject *tp = Py_TYPE(self); + PyObject_GC_UnTrack(self); + tp->tp_clear((PyObject *)self); if (self->rec != NULL) { PyMem_Free(self->rec); } + PyObject_GC_Del(self); + Py_DECREF(tp); } PyDoc_STRVAR(Writer_Type_doc, @@ -1368,10 +1370,10 @@ PyDoc_STRVAR(Writer_Type_doc, ); static PyType_Slot Writer_Type_slots[] = { - {Py_tp_finalize, Writer_finalize}, {Py_tp_doc, (char*)Writer_Type_doc}, {Py_tp_traverse, Writer_traverse}, {Py_tp_clear, Writer_clear}, + {Py_tp_dealloc, Writer_dealloc}, {Py_tp_methods, Writer_methods}, {Py_tp_members, Writer_memberlist}, {0, NULL} From webhook-mailer at python.org Wed May 12 14:20:46 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 12 May 2021 18:20:46 -0000 Subject: [Python-checkins] bpo-40645: Fix ref leaks in _hashopenssl (GH-26079) Message-ID: https://github.com/python/cpython/commit/504ffdae4e0cb7775f3e584c3b1d20c262fdfd7e commit: 504ffdae4e0cb7775f3e584c3b1d20c262fdfd7e branch: main author: Erlend Egeberg Aasland committer: pablogsal date: 2021-05-12T19:20:41+01:00 summary: bpo-40645: Fix ref leaks in _hashopenssl (GH-26079) files: M Modules/_hashopenssl.c diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 13634a579f0dd..e4a2885377567 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -2093,23 +2093,27 @@ hashlib_init_constructors(PyObject *module) } func = PyObject_GetAttrString(module, fdef->ml_name); if (func == NULL) { + Py_DECREF(name_obj); return -1; } - if (PyDict_SetItem(state->constructs, func, name_obj) < 0) { - return -1; - } + int rc = PyDict_SetItem(state->constructs, func, name_obj); Py_DECREF(func); Py_DECREF(name_obj); + if (rc < 0) { + return -1; + } } proxy = PyDictProxy_New(state->constructs); if (proxy == NULL) { return -1; } - if (PyModule_AddObjectRef(module, "_constructors", proxy) < 0) { + + int rc = PyModule_AddObjectRef(module, "_constructors", proxy); + Py_DECREF(proxy); + if (rc < 0) { return -1; } - Py_DECREF(proxy); return 0; } From webhook-mailer at python.org Wed May 12 14:45:33 2021 From: webhook-mailer at python.org (miss-islington) Date: Wed, 12 May 2021 18:45:33 -0000 Subject: [Python-checkins] bpo-40645: Fix ref leaks in _hashopenssl (GH-26079) Message-ID: https://github.com/python/cpython/commit/1ee58f252454072a1c9da77999db8e6417a307a0 commit: 1ee58f252454072a1c9da77999db8e6417a307a0 branch: 3.10 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-05-12T11:45:06-07:00 summary: bpo-40645: Fix ref leaks in _hashopenssl (GH-26079) (cherry picked from commit 504ffdae4e0cb7775f3e584c3b1d20c262fdfd7e) Co-authored-by: Erlend Egeberg Aasland files: M Modules/_hashopenssl.c diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index b2c67759e95ea..e4a2885377567 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -2093,20 +2093,25 @@ hashlib_init_constructors(PyObject *module) } func = PyObject_GetAttrString(module, fdef->ml_name); if (func == NULL) { + Py_DECREF(name_obj); return -1; } - if (PyDict_SetItem(state->constructs, func, name_obj) < 0) { - return -1; - } + int rc = PyDict_SetItem(state->constructs, func, name_obj); Py_DECREF(func); Py_DECREF(name_obj); + if (rc < 0) { + return -1; + } } proxy = PyDictProxy_New(state->constructs); if (proxy == NULL) { return -1; } - if (PyModule_AddObjectRef(module, "_constructors", proxy) < 0) { + + int rc = PyModule_AddObjectRef(module, "_constructors", proxy); + Py_DECREF(proxy); + if (rc < 0) { return -1; } return 0; From webhook-mailer at python.org Wed May 12 14:56:28 2021 From: webhook-mailer at python.org (pablogsal) Date: Wed, 12 May 2021 18:56:28 -0000 Subject: [Python-checkins] bpo-44116: Add GC support to _csv heap types (GH-26074) (GH-26081) Message-ID: https://github.com/python/cpython/commit/ba260acb22f3a6de434dc7a159ddb94a6a8c9b7c commit: ba260acb22f3a6de434dc7a159ddb94a6a8c9b7c branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: pablogsal date: 2021-05-12T19:56:19+01:00 summary: bpo-44116: Add GC support to _csv heap types (GH-26074) (GH-26081) (cherry picked from commit e5ba1fe995d4b4f3f6a089a7ec4dd186dd573830) files: M Modules/_csv.c diff --git a/Modules/_csv.c b/Modules/_csv.c index bdb67fdb4876f..a213734f50806 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -316,17 +316,12 @@ static void Dialect_dealloc(DialectObj *self) { PyTypeObject *tp = Py_TYPE(self); - Py_CLEAR(self->lineterminator); - tp->tp_free((PyObject *)self); + PyObject_GC_UnTrack(self); + tp->tp_clear((PyObject *)self); + PyObject_GC_Del(self); Py_DECREF(tp); } -static void -Dialect_finalize(DialectObj *self) -{ - Py_CLEAR(self->lineterminator); -} - static char *dialect_kws[] = { "dialect", "delimiter", @@ -512,21 +507,37 @@ PyDoc_STRVAR(Dialect_Type_doc, "\n" "The Dialect type records CSV parsing and generation options.\n"); +static int +Dialect_clear(DialectObj *self) +{ + Py_CLEAR(self->lineterminator); + return 0; +} + +static int +Dialect_traverse(DialectObj *self, visitproc visit, void *arg) +{ + Py_VISIT(self->lineterminator); + Py_VISIT(Py_TYPE(self)); + return 0; +} + static PyType_Slot Dialect_Type_slots[] = { {Py_tp_doc, (char*)Dialect_Type_doc}, {Py_tp_members, Dialect_memberlist}, {Py_tp_getset, Dialect_getsetlist}, {Py_tp_new, dialect_new}, {Py_tp_methods, dialect_methods}, - {Py_tp_finalize, Dialect_finalize}, {Py_tp_dealloc, Dialect_dealloc}, + {Py_tp_clear, Dialect_clear}, + {Py_tp_traverse, Dialect_traverse}, {0, NULL} }; PyType_Spec Dialect_Type_spec = { .name = "_csv.Dialect", .basicsize = sizeof(DialectObj), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, .slots = Dialect_Type_slots, }; @@ -885,9 +896,7 @@ Reader_dealloc(ReaderObj *self) { PyTypeObject *tp = Py_TYPE(self); PyObject_GC_UnTrack(self); - Py_CLEAR(self->dialect); - Py_CLEAR(self->input_iter); - Py_CLEAR(self->fields); + tp->tp_clear((PyObject *)self); if (self->field != NULL) { PyMem_Free(self->field); self->field = NULL; @@ -896,24 +905,13 @@ Reader_dealloc(ReaderObj *self) Py_DECREF(tp); } -static void -Reader_finalize(ReaderObj *self) -{ - Py_CLEAR(self->dialect); - Py_CLEAR(self->input_iter); - Py_CLEAR(self->fields); - if (self->field != NULL) { - PyMem_Free(self->field); - self->field = NULL; - } -} - static int Reader_traverse(ReaderObj *self, visitproc visit, void *arg) { Py_VISIT(self->dialect); Py_VISIT(self->input_iter); Py_VISIT(self->fields); + Py_VISIT(Py_TYPE(self)); return 0; } @@ -948,12 +946,11 @@ static struct PyMemberDef Reader_memberlist[] = { static PyType_Slot Reader_Type_slots[] = { {Py_tp_doc, (char*)Reader_Type_doc}, {Py_tp_traverse, Reader_traverse}, - {Py_tp_clear, Reader_clear}, {Py_tp_iter, PyObject_SelfIter}, {Py_tp_iternext, Reader_iternext}, {Py_tp_methods, Reader_methods}, {Py_tp_members, Reader_memberlist}, - {Py_tp_finalize, Reader_finalize}, + {Py_tp_clear, Reader_clear}, {Py_tp_dealloc, Reader_dealloc}, {0, NULL} }; @@ -1339,6 +1336,7 @@ Writer_traverse(WriterObj *self, visitproc visit, void *arg) Py_VISIT(self->dialect); Py_VISIT(self->write); Py_VISIT(self->error_obj); + Py_VISIT(Py_TYPE(self)); return 0; } @@ -1352,12 +1350,16 @@ Writer_clear(WriterObj *self) } static void -Writer_finalize(WriterObj *self) +Writer_dealloc(WriterObj *self) { - Writer_clear(self); + PyTypeObject *tp = Py_TYPE(self); + PyObject_GC_UnTrack(self); + tp->tp_clear((PyObject *)self); if (self->rec != NULL) { PyMem_Free(self->rec); } + PyObject_GC_Del(self); + Py_DECREF(tp); } PyDoc_STRVAR(Writer_Type_doc, @@ -1368,10 +1370,10 @@ PyDoc_STRVAR(Writer_Type_doc, ); static PyType_Slot Writer_Type_slots[] = { - {Py_tp_finalize, Writer_finalize}, {Py_tp_doc, (char*)Writer_Type_doc}, {Py_tp_traverse, Writer_traverse}, {Py_tp_clear, Writer_clear}, + {Py_tp_dealloc, Writer_dealloc}, {Py_tp_methods, Writer_methods}, {Py_tp_members, Writer_memberlist}, {0, NULL} From webhook-mailer at python.org Wed May 12 17:59:34 2021 From: webhook-mailer at python.org (vstinner) Date: Wed, 12 May 2021 21:59:34 -0000 Subject: [Python-checkins] bpo-44113: Deprecate old functions to config Python init (GH-26060) Message-ID: https://github.com/python/cpython/commit/6cd0446ef72c6676b292d7f54b1ddb8ae5e1fb8d commit: 6cd0446ef72c6676b292d7f54b1ddb8ae5e1fb8d branch: main author: Victor Stinner committer: vstinner date: 2021-05-12T23:59:25+02:00 summary: bpo-44113: Deprecate old functions to config Python init (GH-26060) Deprecate the following functions to configure the Python initialization: * PySys_AddWarnOption() * PySys_AddWarnOptionUnicode() * PySys_AddXOption() * PySys_HasWarnOptions() * Py_SetPath() * Py_SetProgramName() * Py_SetPythonHome() * Py_SetStandardStreamEncoding() * _Py_SetProgramFullPath() Use the new PyConfig API of the Python Initialization Configuration instead (PEP 587). files: A Misc/NEWS.d/next/C API/2021-05-12-12-24-45.bpo-44113.DcgOqE.rst M Doc/c-api/init.rst M Doc/c-api/memory.rst M Doc/c-api/sys.rst M Doc/whatsnew/3.11.rst M Include/cpython/pylifecycle.h M Include/pylifecycle.h M Include/sysmodule.h M Programs/_testembed.c diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index 0f759732b35ea8..60564241bfd61e 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -323,6 +323,11 @@ Process-wide parameters single: main() triple: stdin; stdout; sdterr + This API is kept for backward compatibility: setting + :c:member:`PyConfig.stdio_encoding` and :c:member:`PyConfig.stdio_errors` + should be used instead, see :ref:`Python Initialization Configuration + `. + This function should be called before :c:func:`Py_Initialize`, if it is called at all. It specifies which encoding and error handling to use with standard IO, with the same meanings as in :func:`str.encode`. @@ -345,6 +350,8 @@ Process-wide parameters .. versionadded:: 3.4 + .. deprecated:: 3.11 + .. c:function:: void Py_SetProgramName(const wchar_t *name) @@ -353,6 +360,10 @@ Process-wide parameters single: main() single: Py_GetPath() + This API is kept for backward compatibility: setting + :c:member:`PyConfig.program_name` should be used instead, see :ref:`Python + Initialization Configuration `. + This function should be called before :c:func:`Py_Initialize` is called for the first time, if it is called at all. It tells the interpreter the value of the ``argv[0]`` argument to the :c:func:`main` function of the program @@ -367,6 +378,8 @@ Process-wide parameters Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a :c:type:`wchar_*` string. + .. deprecated:: 3.11 + .. c:function:: wchar* Py_GetProgramName() @@ -495,6 +508,11 @@ Process-wide parameters single: path (in module sys) single: Py_GetPath() + This API is kept for backward compatibility: setting + :c:member:`PyConfig.module_search_paths` and + :c:member:`PyConfig.module_search_paths_set` should be used instead, see + :ref:`Python Initialization Configuration `. + Set the default module search path. If this function is called before :c:func:`Py_Initialize`, then :c:func:`Py_GetPath` won't attempt to compute a default search path but uses the one provided instead. This is useful if @@ -518,6 +536,8 @@ Process-wide parameters The program full path is now used for :data:`sys.executable`, instead of the program name. + .. deprecated:: 3.11 + .. c:function:: const char* Py_GetVersion() @@ -617,6 +637,9 @@ Process-wide parameters Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a :c:type:`wchar_*` string. + See also :c:member:`PyConfig.orig_argv` and :c:member:`PyConfig.argv` + members of the :ref:`Python Initialization Configuration `. + .. note:: It is recommended that applications embedding the Python interpreter for purposes other than executing a single script pass ``0`` as *updatepath*, @@ -644,11 +667,18 @@ Process-wide parameters Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a :c:type:`wchar_*` string. + See also :c:member:`PyConfig.orig_argv` and :c:member:`PyConfig.argv` + members of the :ref:`Python Initialization Configuration `. + .. versionchanged:: 3.4 The *updatepath* value depends on :option:`-I`. .. c:function:: void Py_SetPythonHome(const wchar_t *home) + This API is kept for backward compatibility: setting + :c:member:`PyConfig.home` should be used instead, see :ref:`Python + Initialization Configuration `. + Set the default "home" directory, that is, the location of the standard Python libraries. See :envvar:`PYTHONHOME` for the meaning of the argument string. @@ -661,6 +691,8 @@ Process-wide parameters Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a :c:type:`wchar_*` string. + .. deprecated:: 3.11 + .. c:function:: w_char* Py_GetPythonHome() diff --git a/Doc/c-api/memory.rst b/Doc/c-api/memory.rst index efddc6f7be5e71..3cc9dff2d4cc35 100644 --- a/Doc/c-api/memory.rst +++ b/Doc/c-api/memory.rst @@ -476,6 +476,8 @@ Customize Memory Allocators the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the debug hooks on top on the new allocator. + See also :c:member:`PyPreConfig.allocator` and :ref:`Preinitialize Python + with PyPreConfig `. .. c:function:: void PyMem_SetupDebugHooks(void) diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst index 97717f5fc19230..cca8b7bb6d6448 100644 --- a/Doc/c-api/sys.rst +++ b/Doc/c-api/sys.rst @@ -237,11 +237,21 @@ accessible to C code. They all work with the current interpreter thread's .. c:function:: void PySys_AddWarnOption(const wchar_t *s) + This API is kept for backward compatibility: setting + :c:member:`PyConfig.warnoptions` should be used instead, see :ref:`Python + Initialization Configuration `. + Append *s* to :data:`sys.warnoptions`. This function must be called prior to :c:func:`Py_Initialize` in order to affect the warnings filter list. + .. deprecated:: 3.11 + .. c:function:: void PySys_AddWarnOptionUnicode(PyObject *unicode) + This API is kept for backward compatibility: setting + :c:member:`PyConfig.warnoptions` should be used instead, see :ref:`Python + Initialization Configuration `. + Append *unicode* to :data:`sys.warnoptions`. Note: this function is not currently usable from outside the CPython @@ -250,6 +260,8 @@ accessible to C code. They all work with the current interpreter thread's called until enough of the runtime has been initialized to permit the creation of Unicode objects. + .. deprecated:: 3.11 + .. c:function:: void PySys_SetPath(const wchar_t *path) Set :data:`sys.path` to a list object of paths found in *path* which should @@ -294,12 +306,18 @@ accessible to C code. They all work with the current interpreter thread's .. c:function:: void PySys_AddXOption(const wchar_t *s) + This API is kept for backward compatibility: setting + :c:member:`PyConfig.xoptions` should be used instead, see :ref:`Python + Initialization Configuration `. + Parse *s* as a set of :option:`-X` options and add them to the current options mapping as returned by :c:func:`PySys_GetXOptions`. This function may be called prior to :c:func:`Py_Initialize`. .. versionadded:: 3.2 + .. deprecated:: 3.11 + .. c:function:: PyObject *PySys_GetXOptions() Return the current dictionary of :option:`-X` options, similarly to diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 2cca9921bf0091..503688294072a3 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -139,3 +139,19 @@ Removed * :c:func:`PyFrame_BlockSetup` and :c:func:`PyFrame_BlockPop` have been removed. (Contributed by Mark Shannon in :issue:`40222`.) + +* Deprecate the following functions to configure the Python initialization: + + * :c:func:`PySys_AddWarnOptionUnicode` + * :c:func:`PySys_AddWarnOption` + * :c:func:`PySys_AddXOption` + * :c:func:`PySys_HasWarnOptions` + * :c:func:`Py_SetPath` + * :c:func:`Py_SetProgramName` + * :c:func:`Py_SetPythonHome` + * :c:func:`Py_SetStandardStreamEncoding` + * :c:func:`_Py_SetProgramFullPath` + + Use the new :c:type:`PyConfig` API of the :ref:`Python Initialization Configuration + ` instead (:pep:`587`). + (Contributed by Victor Stinner in :issue:`44113`.) diff --git a/Include/cpython/pylifecycle.h b/Include/cpython/pylifecycle.h index 13f7a26ba12d02..6fe46a544016f4 100644 --- a/Include/cpython/pylifecycle.h +++ b/Include/cpython/pylifecycle.h @@ -5,8 +5,9 @@ /* Only used by applications that embed the interpreter and need to * override the standard encoding determination mechanism */ -PyAPI_FUNC(int) Py_SetStandardStreamEncoding(const char *encoding, - const char *errors); +Py_DEPRECATED(3.11) PyAPI_FUNC(int) Py_SetStandardStreamEncoding( + const char *encoding, + const char *errors); /* PEP 432 Multi-phase initialization API (Private while provisional!) */ @@ -41,7 +42,7 @@ PyAPI_FUNC(void) _Py_RestoreSignals(void); PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); PyAPI_FUNC(int) _Py_FdIsInteractive(FILE *fp, PyObject *filename); -PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) _Py_SetProgramFullPath(const wchar_t *); PyAPI_FUNC(const char *) _Py_gitidentifier(void); PyAPI_FUNC(const char *) _Py_gitversion(void); diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h index 783fcb455eb528..7925eafc660474 100644 --- a/Include/pylifecycle.h +++ b/Include/pylifecycle.h @@ -37,10 +37,10 @@ PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv); PyAPI_FUNC(int) Py_BytesMain(int argc, char **argv); /* In pathconfig.c */ -PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetProgramName(const wchar_t *); PyAPI_FUNC(wchar_t *) Py_GetProgramName(void); -PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetPythonHome(const wchar_t *); PyAPI_FUNC(wchar_t *) Py_GetPythonHome(void); PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void); @@ -48,7 +48,7 @@ PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void); PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); PyAPI_FUNC(wchar_t *) Py_GetPath(void); -PyAPI_FUNC(void) Py_SetPath(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) Py_SetPath(const wchar_t *); #ifdef MS_WINDOWS int _Py_CheckPython3(void); #endif diff --git a/Include/sysmodule.h b/Include/sysmodule.h index 670e5d283f7701..8c8f7c425942a5 100644 --- a/Include/sysmodule.h +++ b/Include/sysmodule.h @@ -22,11 +22,11 @@ PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); PyAPI_FUNC(void) PySys_ResetWarnOptions(void); -PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *); -PyAPI_FUNC(void) PySys_AddWarnOptionUnicode(PyObject *); -PyAPI_FUNC(int) PySys_HasWarnOptions(void); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_AddWarnOptionUnicode(PyObject *); +Py_DEPRECATED(3.11) PyAPI_FUNC(int) PySys_HasWarnOptions(void); -PyAPI_FUNC(void) PySys_AddXOption(const wchar_t *); +Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_AddXOption(const wchar_t *); PyAPI_FUNC(PyObject *) PySys_GetXOptions(void); #ifndef Py_LIMITED_API diff --git a/Misc/NEWS.d/next/C API/2021-05-12-12-24-45.bpo-44113.DcgOqE.rst b/Misc/NEWS.d/next/C API/2021-05-12-12-24-45.bpo-44113.DcgOqE.rst new file mode 100644 index 00000000000000..45f67efa10573b --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-12-12-24-45.bpo-44113.DcgOqE.rst @@ -0,0 +1,14 @@ +Deprecate the following functions to configure the Python initialization: + +* :c:func:`PySys_AddWarnOptionUnicode` +* :c:func:`PySys_AddWarnOption` +* :c:func:`PySys_AddXOption` +* :c:func:`PySys_HasWarnOptions` +* :c:func:`Py_SetPath` +* :c:func:`Py_SetProgramName` +* :c:func:`Py_SetPythonHome` +* :c:func:`Py_SetStandardStreamEncoding` +* :c:func:`_Py_SetProgramFullPath` + +Use the new :c:type:`PyConfig` API of the :ref:`Python Initialization +Configuration ` instead (:pep:`587`). diff --git a/Programs/_testembed.c b/Programs/_testembed.c index 0901933bfbb857..21b24f7d51e402 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -22,6 +22,11 @@ /* Use path starting with "./" avoids a search along the PATH */ #define PROGRAM_NAME L"./_testembed" +// Ignore Py_DEPRECATED() compiler warnings: deprecated functions are +// tested on purpose here. +_Py_COMP_DIAG_PUSH +_Py_COMP_DIAG_IGNORE_DEPR_DECLS + static void _testembed_Py_Initialize(void) { Py_SetProgramName(PROGRAM_NAME); From webhook-mailer at python.org Wed May 12 19:22:35 2021 From: webhook-mailer at python.org (corona10) Date: Wed, 12 May 2021 23:22:35 -0000 Subject: [Python-checkins] bpo-44113: Update __xxtestfuzz not to use Py_SetProgramName (GH-26083) Message-ID: https://github.com/python/cpython/commit/a0ccc404ca649c2a1635511a09df2454e47b4d66 commit: a0ccc404ca649c2a1635511a09df2454e47b4d66 branch: main author: Dong-hee Na committer: corona10 date: 2021-05-13T08:22:18+09:00 summary: bpo-44113: Update __xxtestfuzz not to use Py_SetProgramName (GH-26083) files: M Modules/_xxtestfuzz/fuzzer.c diff --git a/Modules/_xxtestfuzz/fuzzer.c b/Modules/_xxtestfuzz/fuzzer.c index acbf068637b4ea..e1256f59cc9c28 100644 --- a/Modules/_xxtestfuzz/fuzzer.c +++ b/Modules/_xxtestfuzz/fuzzer.c @@ -411,9 +411,26 @@ int __lsan_is_turned_off(void) { return 1; } int LLVMFuzzerInitialize(int *argc, char ***argv) { - wchar_t* wide_program_name = Py_DecodeLocale(*argv[0], NULL); - Py_SetProgramName(wide_program_name); + PyConfig config; + PyConfig_InitPythonConfig(&config); + config.install_signal_handlers = 0; + PyStatus status; + status = PyConfig_SetBytesString(&config, &config.program_name, *argv[0]); + if (PyStatus_Exception(status)) { + goto fail; + } + + status = Py_InitializeFromConfig(&config); + if (PyStatus_Exception(status)) { + goto fail; + } + PyConfig_Clear(&config); + return 0; + +fail: + PyConfig_Clear(&config); + Py_ExitStatusException(status); } /* Fuzz test interface. @@ -424,12 +441,7 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) { (And we bitwise or when running multiple tests to verify that normally we only return 0.) */ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { - if (!Py_IsInitialized()) { - /* LLVMFuzzerTestOneInput is called repeatedly from the same process, - with no separate initialization phase, sadly, so we need to - initialize CPython ourselves on the first run. */ - Py_InitializeEx(0); - } + assert(Py_IsInitialized()); int rv = 0; From webhook-mailer at python.org Wed May 12 20:11:56 2021 From: webhook-mailer at python.org (iritkatriel) Date: Thu, 13 May 2021 00:11:56 -0000 Subject: [Python-checkins] bpo-44030: Fix formatting error in exceptions docs (GH-25929) Message-ID: https://github.com/python/cpython/commit/8ea350ee9055435c4267834cdaf85f1a2d4a1ed1 commit: 8ea350ee9055435c4267834cdaf85f1a2d4a1ed1 branch: main author: Miguel Brito <5544985+miguendes at users.noreply.github.com> committer: iritkatriel date: 2021-05-13T01:11:36+01:00 summary: bpo-44030: Fix formatting error in exceptions docs (GH-25929) files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index c83daae302c19..173c1c285f01a 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -96,7 +96,7 @@ The following exceptions are used mostly as base classes for other exceptions. instance of ``OtherException`` while preserving the traceback. Once raised, the current frame is pushed onto the traceback of the ``OtherException``, as would have happened to the traceback of the - original ``SomeException`` had we allowed it to propagate to the caller. + original ``SomeException`` had we allowed it to propagate to the caller. :: try: ... From webhook-mailer at python.org Wed May 12 20:27:16 2021 From: webhook-mailer at python.org (iritkatriel) Date: Thu, 13 May 2021 00:27:16 -0000 Subject: [Python-checkins] bpo-44030: Fix formatting error in exceptions docs (GH-25929) (GH-26086) Message-ID: https://github.com/python/cpython/commit/6275ea02825731fd23f523058ac87aac53888740 commit: 6275ea02825731fd23f523058ac87aac53888740 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-13T01:27:08+01:00 summary: bpo-44030: Fix formatting error in exceptions docs (GH-25929) (GH-26086) (cherry picked from commit 8ea350ee9055435c4267834cdaf85f1a2d4a1ed1) Co-authored-by: Miguel Brito <5544985+miguendes at users.noreply.github.com> files: M Doc/library/exceptions.rst diff --git a/Doc/library/exceptions.rst b/Doc/library/exceptions.rst index c83daae302c19..173c1c285f01a 100644 --- a/Doc/library/exceptions.rst +++ b/Doc/library/exceptions.rst @@ -96,7 +96,7 @@ The following exceptions are used mostly as base classes for other exceptions. instance of ``OtherException`` while preserving the traceback. Once raised, the current frame is pushed onto the traceback of the ``OtherException``, as would have happened to the traceback of the - original ``SomeException`` had we allowed it to propagate to the caller. + original ``SomeException`` had we allowed it to propagate to the caller. :: try: ... From webhook-mailer at python.org Wed May 12 20:28:00 2021 From: webhook-mailer at python.org (vstinner) Date: Thu, 13 May 2021 00:28:00 -0000 Subject: [Python-checkins] bpo-44113: Fix compiler warning in PySys_AddWarnOption() (GH-26084) Message-ID: https://github.com/python/cpython/commit/ec7c09b9bc9a8f333a0295b41ea88986c320448c commit: ec7c09b9bc9a8f333a0295b41ea88986c320448c branch: main author: Victor Stinner committer: vstinner date: 2021-05-13T02:27:56+02:00 summary: bpo-44113: Fix compiler warning in PySys_AddWarnOption() (GH-26084) Ignore Py_DEPRECATED() warning on purpose. files: M Python/sysmodule.c diff --git a/Python/sysmodule.c b/Python/sysmodule.c index ac49f7867a5cb..f1f4492f83c7b 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2293,7 +2293,10 @@ PySys_AddWarnOption(const wchar_t *s) unicode = PyUnicode_FromWideChar(s, -1); if (unicode == NULL) return; +_Py_COMP_DIAG_PUSH +_Py_COMP_DIAG_IGNORE_DEPR_DECLS PySys_AddWarnOptionUnicode(unicode); +_Py_COMP_DIAG_POP Py_DECREF(unicode); } From webhook-mailer at python.org Wed May 12 21:19:50 2021 From: webhook-mailer at python.org (corona10) Date: Thu, 13 May 2021 01:19:50 -0000 Subject: [Python-checkins] bpo-44113: Update fromzenmain not to use Py_SetProgramName (GH-26085) Message-ID: https://github.com/python/cpython/commit/7565586724692e2ad164d770af9675f7a261fe3a commit: 7565586724692e2ad164d770af9675f7a261fe3a branch: main author: Dong-hee Na committer: corona10 date: 2021-05-13T10:19:46+09:00 summary: bpo-44113: Update fromzenmain not to use Py_SetProgramName (GH-26085) files: M Python/frozenmain.c diff --git a/Python/frozenmain.c b/Python/frozenmain.c index dd04d609d24f9..5eb9e31112484 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -78,8 +78,14 @@ Py_FrozenMain(int argc, char **argv) #ifdef MS_WINDOWS PyInitFrozenExtensions(); #endif /* MS_WINDOWS */ - if (argc >= 1) - Py_SetProgramName(argv_copy[0]); + if (argc >= 1) { + status = PyConfig_SetString(&config, &config.program_name, + argv_copy[0]); + if (PyStatus_Exception(status)) { + PyConfig_Clear(&config); + Py_ExitStatusException(status); + } + } status = Py_InitializeFromConfig(&config); PyConfig_Clear(&config); From webhook-mailer at python.org Thu May 13 01:24:45 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 05:24:45 -0000 Subject: [Python-checkins] bpo-44098: Drop ParamSpec from most ``__parameters__`` in typing generics (GH-26013) Message-ID: https://github.com/python/cpython/commit/b2f3f8e3d81b0bb0ba18f563d82c28ba133c0790 commit: b2f3f8e3d81b0bb0ba18f563d82c28ba133c0790 branch: main author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-12T22:24:35-07:00 summary: bpo-44098: Drop ParamSpec from most ``__parameters__`` in typing generics (GH-26013) Added two new attributes to ``_GenericAlias``: * ``_typevar_types``, a single type or tuple of types indicating what types are treated as a ``TypeVar``. Used for ``isinstance`` checks. * ``_paramspec_tvars ``, a boolean flag which guards special behavior for dealing with ``ParamSpec``. Setting it to ``True`` means this class deals with ``ParamSpec``. Automerge-Triggered-By: GH:gvanrossum files: A Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.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 a2a5d8f41019e..79c5c3a910407 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4359,6 +4359,31 @@ def test_var_substitution(self): self.assertEqual(C1[int, str], Callable[[int], str]) self.assertEqual(C1[[int, str, dict], float], Callable[[int, str, dict], float]) + def test_no_paramspec_in__parameters__(self): + # ParamSpec should not be found in __parameters__ + # of generics. Usages outside Callable, Concatenate + # and Generic are invalid. + T = TypeVar("T") + P = ParamSpec("P") + self.assertNotIn(P, List[P].__parameters__) + self.assertIn(T, Tuple[T, P].__parameters__) + + # Test for consistency with builtin generics. + self.assertNotIn(P, list[P].__parameters__) + self.assertIn(T, tuple[T, P].__parameters__) + + def test_paramspec_in_nested_generics(self): + # Although ParamSpec should not be found in __parameters__ of most + # generics, they probably should be found when nested in + # a valid location. + T = TypeVar("T") + P = ParamSpec("P") + C1 = Callable[P, T] + G1 = List[C1] + G2 = list[C1] + self.assertEqual(G1.__parameters__, (P, T)) + self.assertEqual(G2.__parameters__, (P, T)) + class ConcatenateTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index ca47a6f58453a..8fadb571f41dc 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -195,15 +195,17 @@ def _type_repr(obj): return repr(obj) -def _collect_type_vars(types): - """Collect all type variable-like variables contained +def _collect_type_vars(types, typevar_types=None): + """Collect all type variable contained in types in order of first appearance (lexicographic order). For example:: _collect_type_vars((T, List[S, T])) == (T, S) """ + if typevar_types is None: + typevar_types = TypeVar tvars = [] for t in types: - if isinstance(t, _TypeVarLike) and t not in tvars: + if isinstance(t, typevar_types) and t not in tvars: tvars.append(t) if isinstance(t, (_GenericAlias, GenericAlias)): tvars.extend([t for t in t.__parameters__ if t not in tvars]) @@ -932,7 +934,8 @@ def __getattr__(self, attr): raise AttributeError(attr) def __setattr__(self, attr, val): - if _is_dunder(attr) or attr in ('_name', '_inst', '_nparams'): + if _is_dunder(attr) or attr in {'_name', '_inst', '_nparams', + '_typevar_types', '_paramspec_tvars'}: super().__setattr__(attr, val) else: setattr(self.__origin__, attr, val) @@ -957,14 +960,18 @@ def __subclasscheck__(self, cls): class _GenericAlias(_BaseGenericAlias, _root=True): - def __init__(self, origin, params, *, inst=True, name=None): + def __init__(self, origin, params, *, inst=True, name=None, + _typevar_types=TypeVar, + _paramspec_tvars=False): super().__init__(origin, inst=inst, name=name) if not isinstance(params, tuple): params = (params,) self.__args__ = tuple(... if a is _TypingEllipsis else () if a is _TypingEmpty else a for a in params) - self.__parameters__ = _collect_type_vars(params) + self.__parameters__ = _collect_type_vars(params, typevar_types=_typevar_types) + self._typevar_types = _typevar_types + self._paramspec_tvars = _paramspec_tvars if not name: self.__module__ = origin.__module__ @@ -991,14 +998,15 @@ def __getitem__(self, params): if not isinstance(params, tuple): params = (params,) params = tuple(_type_convert(p) for p in params) - if any(isinstance(t, ParamSpec) for t in self.__parameters__): - params = _prepare_paramspec_params(self, params) + if self._paramspec_tvars: + if any(isinstance(t, ParamSpec) for t in self.__parameters__): + params = _prepare_paramspec_params(self, params) _check_generic(self, params, len(self.__parameters__)) subst = dict(zip(self.__parameters__, params)) new_args = [] for arg in self.__args__: - if isinstance(arg, _TypeVarLike): + if isinstance(arg, self._typevar_types): arg = subst[arg] elif isinstance(arg, (_GenericAlias, GenericAlias)): subparams = arg.__parameters__ @@ -1115,7 +1123,9 @@ def __reduce__(self): class _CallableType(_SpecialGenericAlias, _root=True): def copy_with(self, params): return _CallableGenericAlias(self.__origin__, params, - name=self._name, inst=self._inst) + name=self._name, inst=self._inst, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) def __getitem__(self, params): if not isinstance(params, tuple) or len(params) != 2: @@ -1208,7 +1218,10 @@ def __hash__(self): class _ConcatenateGenericAlias(_GenericAlias, _root=True): - pass + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) class Generic: @@ -1244,7 +1257,7 @@ def __class_getitem__(cls, params): params = tuple(_type_convert(p) for p in params) if cls in (Generic, Protocol): # Generic and Protocol can only be subscripted with unique type variables. - if not all(isinstance(p, _TypeVarLike) for p in params): + if not all(isinstance(p, (TypeVar, ParamSpec)) for p in params): raise TypeError( f"Parameters to {cls.__name__}[...] must all be type variables " f"or parameter specification variables.") @@ -1256,7 +1269,9 @@ def __class_getitem__(cls, params): if any(isinstance(t, ParamSpec) for t in cls.__parameters__): params = _prepare_paramspec_params(cls, params) _check_generic(cls, params, len(cls.__parameters__)) - return _GenericAlias(cls, params) + return _GenericAlias(cls, params, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) def __init_subclass__(cls, *args, **kwargs): super().__init_subclass__(*args, **kwargs) @@ -1268,7 +1283,7 @@ def __init_subclass__(cls, *args, **kwargs): if error: raise TypeError("Cannot inherit from plain Generic") if '__orig_bases__' in cls.__dict__: - tvars = _collect_type_vars(cls.__orig_bases__) + tvars = _collect_type_vars(cls.__orig_bases__, (TypeVar, ParamSpec)) # Look for Generic[T1, ..., Tn]. # If found, tvars must be a subset of it. # If not found, tvars is it. diff --git a/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst b/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst new file mode 100644 index 0000000000000..2aaa8b695af46 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst @@ -0,0 +1,5 @@ +``typing.ParamSpec`` will no longer be found in the ``__parameters__`` of +most :mod:`typing` generics except in valid use locations specified by +:pep:`612`. This prevents incorrect usage like ``typing.List[P][int]``. This +change means incorrect usage which may have passed silently in 3.10 beta 1 +and earlier will now error. From webhook-mailer at python.org Thu May 13 03:54:25 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Thu, 13 May 2021 07:54:25 -0000 Subject: [Python-checkins] bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) Message-ID: https://github.com/python/cpython/commit/ab383eb6f03896b0ef6634ee3d776344fcb9e5b8 commit: ab383eb6f03896b0ef6634ee3d776344fcb9e5b8 branch: main author: Joe Marshall committer: serhiy-storchaka date: 2021-05-13T10:54:17+03:00 summary: bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) These are passed and called as PyCFunction, however they are defined here without the (ignored) args parameter. This works fine in some C compilers, but fails in webassembly or anything else that has strict function pointer call type checking. files: A Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst M Objects/dictobject.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst new file mode 100644 index 00000000000000..c50b1594cae356 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst @@ -0,0 +1 @@ +Fix incorrect dictkeys_reversed and dictitems_reversed function signatures in C code, which broke webassembly builds. \ No newline at end of file diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 9e2c12229df802..90507d8e400168 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4826,7 +4826,7 @@ static PySequenceMethods dictitems_as_sequence = { (objobjproc)dictitems_contains, /* sq_contains */ }; -static PyObject* dictitems_reversed(_PyDictViewObject *dv); +static PyObject* dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_items_doc, "Return a reverse iterator over the dict items."); @@ -4879,7 +4879,7 @@ dictitems_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictitems_reversed(_PyDictViewObject *dv) +dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; @@ -4909,7 +4909,7 @@ static PySequenceMethods dictvalues_as_sequence = { (objobjproc)0, /* sq_contains */ }; -static PyObject* dictvalues_reversed(_PyDictViewObject *dv); +static PyObject* dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); @@ -4960,7 +4960,7 @@ dictvalues_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictvalues_reversed(_PyDictViewObject *dv) +dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; From webhook-mailer at python.org Thu May 13 04:17:15 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 08:17:15 -0000 Subject: [Python-checkins] bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) Message-ID: https://github.com/python/cpython/commit/7cbe6ca63495d478a3164d6d26ef36cb611abbbb commit: 7cbe6ca63495d478a3164d6d26ef36cb611abbbb branch: 3.10 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-05-13T01:17:07-07:00 summary: bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) These are passed and called as PyCFunction, however they are defined here without the (ignored) args parameter. This works fine in some C compilers, but fails in webassembly or anything else that has strict function pointer call type checking. (cherry picked from commit ab383eb6f03896b0ef6634ee3d776344fcb9e5b8) Co-authored-by: Joe Marshall files: A Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst M Objects/dictobject.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst new file mode 100644 index 00000000000000..c50b1594cae356 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst @@ -0,0 +1 @@ +Fix incorrect dictkeys_reversed and dictitems_reversed function signatures in C code, which broke webassembly builds. \ No newline at end of file diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 9e2c12229df802..90507d8e400168 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4826,7 +4826,7 @@ static PySequenceMethods dictitems_as_sequence = { (objobjproc)dictitems_contains, /* sq_contains */ }; -static PyObject* dictitems_reversed(_PyDictViewObject *dv); +static PyObject* dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_items_doc, "Return a reverse iterator over the dict items."); @@ -4879,7 +4879,7 @@ dictitems_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictitems_reversed(_PyDictViewObject *dv) +dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; @@ -4909,7 +4909,7 @@ static PySequenceMethods dictvalues_as_sequence = { (objobjproc)0, /* sq_contains */ }; -static PyObject* dictvalues_reversed(_PyDictViewObject *dv); +static PyObject* dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); @@ -4960,7 +4960,7 @@ dictvalues_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictvalues_reversed(_PyDictViewObject *dv) +dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; From webhook-mailer at python.org Thu May 13 08:15:09 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 13 May 2021 12:15:09 -0000 Subject: [Python-checkins] bpo-43757: Document os.path.realpath(strict=True) in 3.10 whatsnew. (GH-26090) Message-ID: https://github.com/python/cpython/commit/d1560d2429dff8e7d397801786e966dd33bb1bd7 commit: d1560d2429dff8e7d397801786e966dd33bb1bd7 branch: main author: Barney Gale committer: zooba date: 2021-05-13T13:14:45+01:00 summary: bpo-43757: Document os.path.realpath(strict=True) in 3.10 whatsnew. (GH-26090) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index cdb15a06e9e3c..f42b830fa7870 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1089,6 +1089,14 @@ Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` and :data:`~os.O_NOFOLLOW_ANY` for macOS. (Contributed by Dong-hee Na in :issue:`43106`.) +os.path +------- + +: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. +(Contributed by Barney Gale in :issue:`43757`.) + pathlib ------- From webhook-mailer at python.org Thu May 13 08:17:08 2021 From: webhook-mailer at python.org (zooba) Date: Thu, 13 May 2021 12:17:08 -0000 Subject: [Python-checkins] bpo-39906: Document new follow_symlinks argument to pathlib.Path.stat() and chmod() in 3.10 whatsnew. (GH-26089) Message-ID: https://github.com/python/cpython/commit/366c69f3f63a2a1cce57dabe8f7c2e67d1df625d commit: 366c69f3f63a2a1cce57dabe8f7c2e67d1df625d branch: main author: Barney Gale committer: zooba date: 2021-05-13T13:17:04+01:00 summary: bpo-39906: Document new follow_symlinks argument to pathlib.Path.stat() and chmod() in 3.10 whatsnew. (GH-26089) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index f42b830fa7870..2d11efba4d012 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1112,6 +1112,11 @@ 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`.) +: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. +(Contributed by Barney Gale in :issue:`39906`.) + platform -------- From webhook-mailer at python.org Thu May 13 08:35:12 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 12:35:12 -0000 Subject: [Python-checkins] bpo-39906: Document new follow_symlinks argument to pathlib.Path.stat() and chmod() in 3.10 whatsnew. (GH-26089) Message-ID: https://github.com/python/cpython/commit/2d972b8e7cb5347ddf83dfcee461f550b59f0736 commit: 2d972b8e7cb5347ddf83dfcee461f550b59f0736 branch: 3.10 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-05-13T05:35:01-07:00 summary: bpo-39906: Document new follow_symlinks argument to pathlib.Path.stat() and chmod() in 3.10 whatsnew. (GH-26089) (cherry picked from commit 366c69f3f63a2a1cce57dabe8f7c2e67d1df625d) Co-authored-by: Barney Gale files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index cdb15a06e9e3c..b0920294572b5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1104,6 +1104,11 @@ 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`.) +: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. +(Contributed by Barney Gale in :issue:`39906`.) + platform -------- From webhook-mailer at python.org Thu May 13 09:11:50 2021 From: webhook-mailer at python.org (markshannon) Date: Thu, 13 May 2021 13:11:50 -0000 Subject: [Python-checkins] [3.10] bpo-43933: Force RETURN_VALUE bytecodes to have line numbers (GH-26061) Message-ID: https://github.com/python/cpython/commit/0acdf255a51b836c0b44f3676797620322974af3 commit: 0acdf255a51b836c0b44f3676797620322974af3 branch: 3.10 author: Mark Shannon committer: markshannon date: 2021-05-13T14:11:41+01:00 summary: [3.10] bpo-43933: Force RETURN_VALUE bytecodes to have line numbers (GH-26061) * Guarantee that line number is set for returns. files: M Lib/test/test_sys_settrace.py M Python/compile.c diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index 40dd92ca8e23ac..3296ee0139cc9c 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -976,6 +976,26 @@ class A: (3, 'return'), (1, 'return')]) + def test_try_in_try(self): + def func(): + try: + try: + pass + except Exception as ex: + pass + except Exception: + pass + + # This doesn't conform to PEP 626 + self.run_and_compare(func, + [(0, 'call'), + (1, 'line'), + (2, 'line'), + (3, 'line'), + (5, 'line'), + (5, 'return')]) + + class SkipLineEventsTraceTestCase(TraceTestCase): """Repeat the trace tests, but with per-line events skipped""" @@ -1647,6 +1667,7 @@ async def test_no_jump_forwards_into_async_for_block(output): output.append(1) async for i in asynciter([1, 2]): output.append(3) + pass @jump_test(3, 2, [2, 2], (ValueError, 'into')) def test_no_jump_backwards_into_for_block(output): diff --git a/Python/compile.c b/Python/compile.c index bb88c06c08d8f3..3c69ce2eb83428 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -6960,6 +6960,34 @@ insert_generator_prefix(struct compiler *c, basicblock *entryblock) { return 0; } +/* Make sure that all returns have a line number, even if early passes + * have failed to propagate a correct line number. + * The resulting line number may not be correct according to PEP 626, + * but should be "good enough", and no worse than in older versions. */ +static void +guarantee_lineno_for_exits(struct assembler *a, int firstlineno) { + int lineno = firstlineno; + assert(lineno > 0); + for (basicblock *b = a->a_entry; b != NULL; b = b->b_next) { + if (b->b_iused == 0) { + continue; + } + struct instr *last = &b->b_instr[b->b_iused-1]; + if (last->i_lineno < 0) { + if (last->i_opcode == RETURN_VALUE) + { + for (int i = 0; i < b->b_iused; i++) { + assert(b->b_instr[i].i_lineno < 0); + b->b_instr[i].i_lineno = lineno; + } + } + } + else { + lineno = last->i_lineno; + } + } +} + static PyCodeObject * assemble(struct compiler *c, int addNone) { @@ -7022,6 +7050,7 @@ assemble(struct compiler *c, int addNone) if (optimize_cfg(c, &a, consts)) { goto error; } + guarantee_lineno_for_exits(&a, c->u->u_firstlineno); /* Can't modify the bytecode after computing jump offsets. */ assemble_jump_offsets(&a, c); From webhook-mailer at python.org Thu May 13 13:09:47 2021 From: webhook-mailer at python.org (corona10) Date: Thu, 13 May 2021 17:09:47 -0000 Subject: [Python-checkins] Fix typo in configure (GH-26078) Message-ID: https://github.com/python/cpython/commit/3c0b070f3be5e5042fb7bccb72c81bcbdf664e2d commit: 3c0b070f3be5e5042fb7bccb72c81bcbdf664e2d branch: main author: Ikko Ashimine committer: corona10 date: 2021-05-14T02:09:17+09:00 summary: Fix typo in configure (GH-26078) files: M configure diff --git a/configure b/configure index dc62f1ec51fc5..e1d450131fe5a 100755 --- a/configure +++ b/configure @@ -10331,7 +10331,7 @@ fi validate_tzpath() { - # Checks that each element of hte path is an absolute path + # Checks that each element of the path is an absolute path if test -z "$1"; then # Empty string is allowed: it indicates no system TZPATH return 0 From webhook-mailer at python.org Thu May 13 13:19:32 2021 From: webhook-mailer at python.org (gvanrossum) Date: Thu, 13 May 2021 17:19:32 -0000 Subject: [Python-checkins] bpo-44098: Drop ParamSpec from most ``__parameters__`` in typing generics (GH-26013) (#26091) Message-ID: https://github.com/python/cpython/commit/c55ff1b352f8b82184f80d9dea220e832691acfc commit: c55ff1b352f8b82184f80d9dea220e832691acfc branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: gvanrossum date: 2021-05-13T10:19:24-07:00 summary: bpo-44098: Drop ParamSpec from most ``__parameters__`` in typing generics (GH-26013) (#26091) Added two new attributes to ``_GenericAlias``: * ``_typevar_types``, a single type or tuple of types indicating what types are treated as a ``TypeVar``. Used for ``isinstance`` checks. * ``_paramspec_tvars ``, a boolean flag which guards special behavior for dealing with ``ParamSpec``. Setting it to ``True`` means this class deals with ``ParamSpec``. Automerge-Triggered-By: GH:gvanrossum (cherry picked from commit b2f3f8e3d81b0bb0ba18f563d82c28ba133c0790) files: A Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.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 a2a5d8f41019e..79c5c3a910407 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4359,6 +4359,31 @@ def test_var_substitution(self): self.assertEqual(C1[int, str], Callable[[int], str]) self.assertEqual(C1[[int, str, dict], float], Callable[[int, str, dict], float]) + def test_no_paramspec_in__parameters__(self): + # ParamSpec should not be found in __parameters__ + # of generics. Usages outside Callable, Concatenate + # and Generic are invalid. + T = TypeVar("T") + P = ParamSpec("P") + self.assertNotIn(P, List[P].__parameters__) + self.assertIn(T, Tuple[T, P].__parameters__) + + # Test for consistency with builtin generics. + self.assertNotIn(P, list[P].__parameters__) + self.assertIn(T, tuple[T, P].__parameters__) + + def test_paramspec_in_nested_generics(self): + # Although ParamSpec should not be found in __parameters__ of most + # generics, they probably should be found when nested in + # a valid location. + T = TypeVar("T") + P = ParamSpec("P") + C1 = Callable[P, T] + G1 = List[C1] + G2 = list[C1] + self.assertEqual(G1.__parameters__, (P, T)) + self.assertEqual(G2.__parameters__, (P, T)) + class ConcatenateTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index 26efe4a4600ac..639feeef99e75 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -195,15 +195,17 @@ def _type_repr(obj): return repr(obj) -def _collect_type_vars(types): - """Collect all type variable-like variables contained +def _collect_type_vars(types, typevar_types=None): + """Collect all type variable contained in types in order of first appearance (lexicographic order). For example:: _collect_type_vars((T, List[S, T])) == (T, S) """ + if typevar_types is None: + typevar_types = TypeVar tvars = [] for t in types: - if isinstance(t, _TypeVarLike) and t not in tvars: + if isinstance(t, typevar_types) and t not in tvars: tvars.append(t) if isinstance(t, (_GenericAlias, GenericAlias)): tvars.extend([t for t in t.__parameters__ if t not in tvars]) @@ -932,7 +934,8 @@ def __getattr__(self, attr): raise AttributeError(attr) def __setattr__(self, attr, val): - if _is_dunder(attr) or attr in ('_name', '_inst', '_nparams'): + if _is_dunder(attr) or attr in {'_name', '_inst', '_nparams', + '_typevar_types', '_paramspec_tvars'}: super().__setattr__(attr, val) else: setattr(self.__origin__, attr, val) @@ -957,14 +960,18 @@ def __subclasscheck__(self, cls): class _GenericAlias(_BaseGenericAlias, _root=True): - def __init__(self, origin, params, *, inst=True, name=None): + def __init__(self, origin, params, *, inst=True, name=None, + _typevar_types=TypeVar, + _paramspec_tvars=False): super().__init__(origin, inst=inst, name=name) if not isinstance(params, tuple): params = (params,) self.__args__ = tuple(... if a is _TypingEllipsis else () if a is _TypingEmpty else a for a in params) - self.__parameters__ = _collect_type_vars(params) + self.__parameters__ = _collect_type_vars(params, typevar_types=_typevar_types) + self._typevar_types = _typevar_types + self._paramspec_tvars = _paramspec_tvars if not name: self.__module__ = origin.__module__ @@ -991,14 +998,15 @@ def __getitem__(self, params): if not isinstance(params, tuple): params = (params,) params = tuple(_type_convert(p) for p in params) - if any(isinstance(t, ParamSpec) for t in self.__parameters__): - params = _prepare_paramspec_params(self, params) + if self._paramspec_tvars: + if any(isinstance(t, ParamSpec) for t in self.__parameters__): + params = _prepare_paramspec_params(self, params) _check_generic(self, params, len(self.__parameters__)) subst = dict(zip(self.__parameters__, params)) new_args = [] for arg in self.__args__: - if isinstance(arg, _TypeVarLike): + if isinstance(arg, self._typevar_types): arg = subst[arg] elif isinstance(arg, (_GenericAlias, GenericAlias)): subparams = arg.__parameters__ @@ -1115,7 +1123,9 @@ def __reduce__(self): class _CallableType(_SpecialGenericAlias, _root=True): def copy_with(self, params): return _CallableGenericAlias(self.__origin__, params, - name=self._name, inst=self._inst) + name=self._name, inst=self._inst, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) def __getitem__(self, params): if not isinstance(params, tuple) or len(params) != 2: @@ -1208,7 +1218,10 @@ def __hash__(self): class _ConcatenateGenericAlias(_GenericAlias, _root=True): - pass + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) class Generic: @@ -1244,7 +1257,7 @@ def __class_getitem__(cls, params): params = tuple(_type_convert(p) for p in params) if cls in (Generic, Protocol): # Generic and Protocol can only be subscripted with unique type variables. - if not all(isinstance(p, _TypeVarLike) for p in params): + if not all(isinstance(p, (TypeVar, ParamSpec)) for p in params): raise TypeError( f"Parameters to {cls.__name__}[...] must all be type variables " f"or parameter specification variables.") @@ -1256,7 +1269,9 @@ def __class_getitem__(cls, params): if any(isinstance(t, ParamSpec) for t in cls.__parameters__): params = _prepare_paramspec_params(cls, params) _check_generic(cls, params, len(cls.__parameters__)) - return _GenericAlias(cls, params) + return _GenericAlias(cls, params, + _typevar_types=(TypeVar, ParamSpec), + _paramspec_tvars=True) def __init_subclass__(cls, *args, **kwargs): super().__init_subclass__(*args, **kwargs) @@ -1268,7 +1283,7 @@ def __init_subclass__(cls, *args, **kwargs): if error: raise TypeError("Cannot inherit from plain Generic") if '__orig_bases__' in cls.__dict__: - tvars = _collect_type_vars(cls.__orig_bases__) + tvars = _collect_type_vars(cls.__orig_bases__, (TypeVar, ParamSpec)) # Look for Generic[T1, ..., Tn]. # If found, tvars must be a subset of it. # If not found, tvars is it. diff --git a/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst b/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst new file mode 100644 index 0000000000000..2aaa8b695af46 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-10-17-45-00.bpo-44098._MoxuZ.rst @@ -0,0 +1,5 @@ +``typing.ParamSpec`` will no longer be found in the ``__parameters__`` of +most :mod:`typing` generics except in valid use locations specified by +:pep:`612`. This prevents incorrect usage like ``typing.List[P][int]``. This +change means incorrect usage which may have passed silently in 3.10 beta 1 +and earlier will now error. From webhook-mailer at python.org Thu May 13 13:48:23 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 17:48:23 -0000 Subject: [Python-checkins] bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) Message-ID: https://github.com/python/cpython/commit/1aa3530314d339725519f4ad95b7dea4b00b657e commit: 1aa3530314d339725519f4ad95b7dea4b00b657e branch: main author: Antoine Pitrou committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-13T10:48:15-07:00 summary: bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) The patch from [bpo-44074]() does not account for a possibly non-English locale and blindly greps for "HEAD branch" in a possibly localized text. Automerge-Triggered-By: GH:pitrou files: M Tools/scripts/patchcheck.py diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index d9cceb5d5acdfd..8e59c78a4c5844 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -78,11 +78,14 @@ def get_git_remote_default_branch(remote_name): It is typically called 'main', but may differ """ cmd = "git remote show {}".format(remote_name).split() + env = os.environ.copy() + env['LANG'] = 'C' try: remote_info = subprocess.check_output(cmd, stderr=subprocess.DEVNULL, cwd=SRCDIR, - encoding='UTF-8') + encoding='UTF-8', + env=env) except subprocess.CalledProcessError: return None for line in remote_info.splitlines(): From webhook-mailer at python.org Thu May 13 14:14:31 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 18:14:31 -0000 Subject: [Python-checkins] bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) Message-ID: https://github.com/python/cpython/commit/04ce4c773667b0d9d05a89aea4720f8cf84e834e commit: 04ce4c773667b0d9d05a89aea4720f8cf84e834e 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-05-13T11:14:23-07:00 summary: bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) The patch from [bpo-44074]() does not account for a possibly non-English locale and blindly greps for "HEAD branch" in a possibly localized text. Automerge-Triggered-By: GH:pitrou (cherry picked from commit 1aa3530314d339725519f4ad95b7dea4b00b657e) Co-authored-by: Antoine Pitrou files: M Tools/scripts/patchcheck.py diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index d9cceb5d5acdfd..8e59c78a4c5844 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -78,11 +78,14 @@ def get_git_remote_default_branch(remote_name): It is typically called 'main', but may differ """ cmd = "git remote show {}".format(remote_name).split() + env = os.environ.copy() + env['LANG'] = 'C' try: remote_info = subprocess.check_output(cmd, stderr=subprocess.DEVNULL, cwd=SRCDIR, - encoding='UTF-8') + encoding='UTF-8', + env=env) except subprocess.CalledProcessError: return None for line in remote_info.splitlines(): From webhook-mailer at python.org Thu May 13 14:42:41 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 18:42:41 -0000 Subject: [Python-checkins] bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) Message-ID: https://github.com/python/cpython/commit/336dc523a4180f99955b0fdb65e86059a1abac32 commit: 336dc523a4180f99955b0fdb65e86059a1abac32 branch: 3.10 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-05-13T11:42:31-07:00 summary: bpo-44125: Fix "make patchcheck" on non-English locale (GH-26102) The patch from [bpo-44074]() does not account for a possibly non-English locale and blindly greps for "HEAD branch" in a possibly localized text. Automerge-Triggered-By: GH:pitrou (cherry picked from commit 1aa3530314d339725519f4ad95b7dea4b00b657e) Co-authored-by: Antoine Pitrou files: M Tools/scripts/patchcheck.py diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py index d9cceb5d5acdfd..8e59c78a4c5844 100755 --- a/Tools/scripts/patchcheck.py +++ b/Tools/scripts/patchcheck.py @@ -78,11 +78,14 @@ def get_git_remote_default_branch(remote_name): It is typically called 'main', but may differ """ cmd = "git remote show {}".format(remote_name).split() + env = os.environ.copy() + env['LANG'] = 'C' try: remote_info = subprocess.check_output(cmd, stderr=subprocess.DEVNULL, cwd=SRCDIR, - encoding='UTF-8') + encoding='UTF-8', + env=env) except subprocess.CalledProcessError: return None for line in remote_info.splitlines(): From webhook-mailer at python.org Thu May 13 16:43:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 20:43:03 -0000 Subject: [Python-checkins] bpo-44114: Remove redundant cast. (GH-26098) Message-ID: https://github.com/python/cpython/commit/e0c614e5fd017ca43cab55a9f8490133750c704f commit: e0c614e5fd017ca43cab55a9f8490133750c704f branch: main author: Inada Naoki committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-13T13:42:55-07:00 summary: bpo-44114: Remove redundant cast. (GH-26098) files: M Objects/dictobject.c diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 90507d8e40016..24973c07b1d48 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4834,7 +4834,7 @@ PyDoc_STRVAR(reversed_items_doc, static PyMethodDef dictitems_methods[] = { {"isdisjoint", (PyCFunction)dictviews_isdisjoint, METH_O, isdisjoint_doc}, - {"__reversed__", (PyCFunction)(void(*)(void))dictitems_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictitems_reversed, METH_NOARGS, reversed_items_doc}, {NULL, NULL} /* sentinel */ }; @@ -4915,7 +4915,7 @@ PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); static PyMethodDef dictvalues_methods[] = { - {"__reversed__", (PyCFunction)(void(*)(void))dictvalues_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictvalues_reversed, METH_NOARGS, reversed_values_doc}, {NULL, NULL} /* sentinel */ }; From webhook-mailer at python.org Thu May 13 16:45:32 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 20:45:32 -0000 Subject: [Python-checkins] bpo-44094: Remove deprecated PyErr_ APIs. (GH-26011) Message-ID: https://github.com/python/cpython/commit/ae3c66acb89a6104fcd0eea760f80a0287327cc4 commit: ae3c66acb89a6104fcd0eea760f80a0287327cc4 branch: main author: Inada Naoki committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-13T13:45:26-07:00 summary: bpo-44094: Remove deprecated PyErr_ APIs. (GH-26011) These APIs are deprecated since Python 3.3. They are not documented too. files: A Misc/NEWS.d/next/C API/2021-05-10-14-34-22.bpo-44094.HayXZO.rst M Include/cpython/pyerrors.h M Python/errors.c diff --git a/Include/cpython/pyerrors.h b/Include/cpython/pyerrors.h index 37aede0f6044f..a3ec5afdb7c78 100644 --- a/Include/cpython/pyerrors.h +++ b/Include/cpython/pyerrors.h @@ -91,14 +91,6 @@ PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, Py PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); -/* Convenience functions */ - -#ifdef MS_WINDOWS -Py_DEPRECATED(3.3) -PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( - PyObject *, const Py_UNICODE *); -#endif /* MS_WINDOWS */ - /* Like PyErr_Format(), but saves current exception as __context__ and __cause__. */ @@ -108,16 +100,6 @@ PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause( ... ); -#ifdef MS_WINDOWS -/* XXX redeclare to use WSTRING */ -Py_DEPRECATED(3.3) -PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( - int, const Py_UNICODE *); -Py_DEPRECATED(3.3) -PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( - PyObject *,int, const Py_UNICODE *); -#endif - /* In exceptions.c */ /* Helper that attempts to replace the current exception with one of the diff --git a/Misc/NEWS.d/next/C API/2021-05-10-14-34-22.bpo-44094.HayXZO.rst b/Misc/NEWS.d/next/C API/2021-05-10-14-34-22.bpo-44094.HayXZO.rst new file mode 100644 index 0000000000000..eea9e0bf28208 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-05-10-14-34-22.bpo-44094.HayXZO.rst @@ -0,0 +1,4 @@ +Remove ``PyErr_SetFromErrnoWithUnicodeFilename()``, +``PyErr_SetFromWindowsErrWithUnicodeFilename()``, and +``PyErr_SetExcFromWindowsErrWithUnicodeFilename()``. They are not documented +and have been deprecated since Python 3.3. diff --git a/Python/errors.c b/Python/errors.c index f743d3089e20b..118118ffe90b4 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -776,17 +776,6 @@ PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename) return result; } -#ifdef MS_WINDOWS -PyObject * -PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, const Py_UNICODE *filename) -{ - PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; - PyObject *result = PyErr_SetFromErrnoWithFilenameObjects(exc, name, NULL); - Py_XDECREF(name); - return result; -} -#endif /* MS_WINDOWS */ - PyObject * PyErr_SetFromErrno(PyObject *exc) { @@ -887,20 +876,6 @@ PyObject *PyErr_SetExcFromWindowsErrWithFilename( return ret; } -PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename( - PyObject *exc, - int ierr, - const Py_UNICODE *filename) -{ - PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; - PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObjects(exc, - ierr, - name, - NULL); - Py_XDECREF(name); - return ret; -} - PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr) { return PyErr_SetExcFromWindowsErrWithFilename(exc, ierr, NULL); @@ -924,17 +899,6 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( return result; } -PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename( - int ierr, - const Py_UNICODE *filename) -{ - PyObject *name = filename ? PyUnicode_FromWideChar(filename, -1) : NULL; - PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObjects( - PyExc_OSError, - ierr, name, NULL); - Py_XDECREF(name); - return result; -} #endif /* MS_WINDOWS */ PyObject * From webhook-mailer at python.org Thu May 13 16:56:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 20:56:03 -0000 Subject: [Python-checkins] bpo-28146: Fix a confusing error message in str.format() (GH-24213) Message-ID: https://github.com/python/cpython/commit/4aeee0b47b3a2b604bbac37040320ffc88c291f2 commit: 4aeee0b47b3a2b604bbac37040320ffc88c291f2 branch: main author: Irit Katriel committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-13T13:55:55-07:00 summary: bpo-28146: Fix a confusing error message in str.format() (GH-24213) Automerge-Triggered-By: GH:pitrou files: A Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst M Lib/test/test_unicode.py M Python/formatter_unicode.c diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 6f5d40f84bd07..ffe3e82804ea9 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1231,8 +1231,11 @@ def __repr__(self): 0, 1, 2, 3, 4, 5, 6, 7) # string format spec errors - self.assertRaises(ValueError, "{0:-s}".format, '') - self.assertRaises(ValueError, format, "", "-") + sign_msg = "Sign not allowed in string format specifier" + self.assertRaisesRegex(ValueError, sign_msg, "{0:-s}".format, '') + self.assertRaisesRegex(ValueError, sign_msg, format, "", "-") + space_msg = "Space not allowed in string format specifier" + self.assertRaisesRegex(ValueError, space_msg, "{: }".format, '') self.assertRaises(ValueError, "{0:=s}".format, '') # Alternate formatting is not supported diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst new file mode 100644 index 0000000000000..e619881938953 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst @@ -0,0 +1 @@ +Fix a confusing error message in :func:`str.format`. diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 5ccf9d303e34e..7b5a7bd04eb3a 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -773,8 +773,14 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, /* sign is not allowed on strings */ if (format->sign != '\0') { - PyErr_SetString(PyExc_ValueError, - "Sign not allowed in string format specifier"); + if (format->sign == ' ') { + PyErr_SetString(PyExc_ValueError, + "Space not allowed in string format specifier"); + } + else { + PyErr_SetString(PyExc_ValueError, + "Sign not allowed in string format specifier"); + } goto done; } From webhook-mailer at python.org Thu May 13 17:07:26 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 21:07:26 -0000 Subject: [Python-checkins] bpo-44114: Remove redundant cast. (GH-26098) Message-ID: https://github.com/python/cpython/commit/04c46101944777dd131bbfe8dbfef5f4d328860d commit: 04c46101944777dd131bbfe8dbfef5f4d328860d 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-05-13T14:07:16-07:00 summary: bpo-44114: Remove redundant cast. (GH-26098) (cherry picked from commit e0c614e5fd017ca43cab55a9f8490133750c704f) Co-authored-by: Inada Naoki files: M Objects/dictobject.c diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 8a056530a4545..06412a9d87aaf 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4623,7 +4623,7 @@ PyDoc_STRVAR(reversed_items_doc, static PyMethodDef dictitems_methods[] = { {"isdisjoint", (PyCFunction)dictviews_isdisjoint, METH_O, isdisjoint_doc}, - {"__reversed__", (PyCFunction)(void(*)(void))dictitems_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictitems_reversed, METH_NOARGS, reversed_items_doc}, {NULL, NULL} /* sentinel */ }; @@ -4704,7 +4704,7 @@ PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); static PyMethodDef dictvalues_methods[] = { - {"__reversed__", (PyCFunction)(void(*)(void))dictvalues_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictvalues_reversed, METH_NOARGS, reversed_values_doc}, {NULL, NULL} /* sentinel */ }; From webhook-mailer at python.org Thu May 13 17:07:35 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 21:07:35 -0000 Subject: [Python-checkins] bpo-44114: Remove redundant cast. (GH-26098) Message-ID: https://github.com/python/cpython/commit/c4c3beb5ad6b55c20b6dc7c6a92860f467afa75b commit: c4c3beb5ad6b55c20b6dc7c6a92860f467afa75b branch: 3.10 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-05-13T14:07:31-07:00 summary: bpo-44114: Remove redundant cast. (GH-26098) (cherry picked from commit e0c614e5fd017ca43cab55a9f8490133750c704f) Co-authored-by: Inada Naoki files: M Objects/dictobject.c diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 90507d8e40016..24973c07b1d48 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4834,7 +4834,7 @@ PyDoc_STRVAR(reversed_items_doc, static PyMethodDef dictitems_methods[] = { {"isdisjoint", (PyCFunction)dictviews_isdisjoint, METH_O, isdisjoint_doc}, - {"__reversed__", (PyCFunction)(void(*)(void))dictitems_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictitems_reversed, METH_NOARGS, reversed_items_doc}, {NULL, NULL} /* sentinel */ }; @@ -4915,7 +4915,7 @@ PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); static PyMethodDef dictvalues_methods[] = { - {"__reversed__", (PyCFunction)(void(*)(void))dictvalues_reversed, METH_NOARGS, + {"__reversed__", (PyCFunction)dictvalues_reversed, METH_NOARGS, reversed_values_doc}, {NULL, NULL} /* sentinel */ }; From webhook-mailer at python.org Thu May 13 17:25:09 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 21:25:09 -0000 Subject: [Python-checkins] bpo-28146: Fix a confusing error message in str.format() (GH-24213) Message-ID: https://github.com/python/cpython/commit/2d780237d95cd3d95401f52be2edeac8b458eb68 commit: 2d780237d95cd3d95401f52be2edeac8b458eb68 branch: 3.10 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-05-13T14:24:49-07:00 summary: bpo-28146: Fix a confusing error message in str.format() (GH-24213) Automerge-Triggered-By: GH:pitrou (cherry picked from commit 4aeee0b47b3a2b604bbac37040320ffc88c291f2) Co-authored-by: Irit Katriel files: A Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst M Lib/test/test_unicode.py M Python/formatter_unicode.c diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 0e6cbb61b2298..5db7a9b078070 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1231,8 +1231,11 @@ def __repr__(self): 0, 1, 2, 3, 4, 5, 6, 7) # string format spec errors - self.assertRaises(ValueError, "{0:-s}".format, '') - self.assertRaises(ValueError, format, "", "-") + sign_msg = "Sign not allowed in string format specifier" + self.assertRaisesRegex(ValueError, sign_msg, "{0:-s}".format, '') + self.assertRaisesRegex(ValueError, sign_msg, format, "", "-") + space_msg = "Space not allowed in string format specifier" + self.assertRaisesRegex(ValueError, space_msg, "{: }".format, '') self.assertRaises(ValueError, "{0:=s}".format, '') # Alternate formatting is not supported diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst new file mode 100644 index 0000000000000..e619881938953 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst @@ -0,0 +1 @@ +Fix a confusing error message in :func:`str.format`. diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 5ccf9d303e34e..7b5a7bd04eb3a 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -773,8 +773,14 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, /* sign is not allowed on strings */ if (format->sign != '\0') { - PyErr_SetString(PyExc_ValueError, - "Sign not allowed in string format specifier"); + if (format->sign == ' ') { + PyErr_SetString(PyExc_ValueError, + "Space not allowed in string format specifier"); + } + else { + PyErr_SetString(PyExc_ValueError, + "Sign not allowed in string format specifier"); + } goto done; } From webhook-mailer at python.org Thu May 13 17:35:41 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 21:35:41 -0000 Subject: [Python-checkins] bpo-28146: Fix a confusing error message in str.format() (GH-24213) Message-ID: https://github.com/python/cpython/commit/133013e8a1ecd570266de766e2df9745a24343be commit: 133013e8a1ecd570266de766e2df9745a24343be 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-05-13T14:35:30-07:00 summary: bpo-28146: Fix a confusing error message in str.format() (GH-24213) Automerge-Triggered-By: GH:pitrou (cherry picked from commit 4aeee0b47b3a2b604bbac37040320ffc88c291f2) Co-authored-by: Irit Katriel files: A Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst M Lib/test/test_unicode.py M Python/formatter_unicode.c diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py index 23508c56e7ffe..787f841573876 100644 --- a/Lib/test/test_unicode.py +++ b/Lib/test/test_unicode.py @@ -1217,8 +1217,11 @@ def __repr__(self): 0, 1, 2, 3, 4, 5, 6, 7) # string format spec errors - self.assertRaises(ValueError, "{0:-s}".format, '') - self.assertRaises(ValueError, format, "", "-") + sign_msg = "Sign not allowed in string format specifier" + self.assertRaisesRegex(ValueError, sign_msg, "{0:-s}".format, '') + self.assertRaisesRegex(ValueError, sign_msg, format, "", "-") + space_msg = "Space not allowed in string format specifier" + self.assertRaisesRegex(ValueError, space_msg, "{: }".format, '') self.assertRaises(ValueError, "{0:=s}".format, '') # Alternate formatting is not supported diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst new file mode 100644 index 0000000000000..e619881938953 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-01-13-19-34-41.bpo-28146.AZBBkH.rst @@ -0,0 +1 @@ +Fix a confusing error message in :func:`str.format`. diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index ed95f267d476c..e7ec4dd5cb4d2 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -773,8 +773,14 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format, /* sign is not allowed on strings */ if (format->sign != '\0') { - PyErr_SetString(PyExc_ValueError, - "Sign not allowed in string format specifier"); + if (format->sign == ' ') { + PyErr_SetString(PyExc_ValueError, + "Space not allowed in string format specifier"); + } + else { + PyErr_SetString(PyExc_ValueError, + "Sign not allowed in string format specifier"); + } goto done; } From webhook-mailer at python.org Thu May 13 18:45:31 2021 From: webhook-mailer at python.org (gvanrossum) Date: Thu, 13 May 2021 22:45:31 -0000 Subject: [Python-checkins] bpo-43908: Add What's New entry for Py_TPFLAGS_IMMUTABLETYPE flag (GH-25816) Message-ID: https://github.com/python/cpython/commit/a09fc9c63f1b5980c62ff2712f67500bacb92b04 commit: a09fc9c63f1b5980c62ff2712f67500bacb92b04 branch: main author: Erlend Egeberg Aasland committer: gvanrossum date: 2021-05-13T15:44:55-07:00 summary: bpo-43908: Add What's New entry for Py_TPFLAGS_IMMUTABLETYPE flag (GH-25816) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 2d11efba4d012..9394ee7d6223b 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1846,6 +1846,10 @@ New Features creating type instances. (Contributed by Victor Stinner in :issue:`43916`.) +* Add a new :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag for creating immutable + type objects: type attributes cannot be set nor deleted. + (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) + Porting to Python 3.10 ---------------------- @@ -1903,6 +1907,12 @@ Porting to Python 3.10 been included directly, consider including ``Python.h`` instead. (Contributed by Nicholas Sim in :issue:`35134`) +* Use the :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag to create immutable type + objects. Do not rely on :c:data:`Py_TPFLAGS_HEAPTYPE` to decide if a type + object is mutable or not; check if :c:data:`Py_TPFLAGS_IMMUTABLETYPE` is set + instead. + (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) + Deprecated ---------- From webhook-mailer at python.org Thu May 13 19:04:24 2021 From: webhook-mailer at python.org (miss-islington) Date: Thu, 13 May 2021 23:04:24 -0000 Subject: [Python-checkins] [3.10] bpo-43908: Add What's New entry for Py_TPFLAGS_IMMUTABLETYPE flag (GH-25816) (GH-26115) Message-ID: https://github.com/python/cpython/commit/3222b25b2f55d3b3d1dab4547bf7b5adaa1d874f commit: 3222b25b2f55d3b3d1dab4547bf7b5adaa1d874f branch: 3.10 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-05-13T16:04:15-07:00 summary: [3.10] bpo-43908: Add What's New entry for Py_TPFLAGS_IMMUTABLETYPE flag (GH-25816) (GH-26115) (cherry picked from commit a09fc9c63f1b5980c62ff2712f67500bacb92b04) Co-authored-by: Erlend Egeberg Aasland Automerge-Triggered-By: GH:gvanrossum files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index b0920294572b5..8fd64f86b3a2f 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1838,6 +1838,10 @@ New Features creating type instances. (Contributed by Victor Stinner in :issue:`43916`.) +* Add a new :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag for creating immutable + type objects: type attributes cannot be set nor deleted. + (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) + Porting to Python 3.10 ---------------------- @@ -1895,6 +1899,12 @@ Porting to Python 3.10 been included directly, consider including ``Python.h`` instead. (Contributed by Nicholas Sim in :issue:`35134`) +* Use the :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag to create immutable type + objects. Do not rely on :c:data:`Py_TPFLAGS_HEAPTYPE` to decide if a type + object is mutable or not; check if :c:data:`Py_TPFLAGS_IMMUTABLETYPE` is set + instead. + (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) + Deprecated ---------- From webhook-mailer at python.org Fri May 14 01:22:54 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:22:54 -0000 Subject: [Python-checkins] Reword paragraph on specific value for Py_LIMITED_API (GH-26101) Message-ID: https://github.com/python/cpython/commit/ddd30b2dd207c3c963874f0644cdff2ee5989575 commit: ddd30b2dd207c3c963874f0644cdff2ee5989575 branch: main author: Petr Viktorin committer: willingc date: 2021-05-13T22:22:44-07:00 summary: Reword paragraph on specific value for Py_LIMITED_API (GH-26101) files: M Doc/c-api/stable.rst diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 2f67b097eae975..4ae20e93e36785 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -41,22 +41,22 @@ embedding Python.) .. c:macro:: Py_LIMITED_API - Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to - opt in to only use the Limited API. - - Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that - the extension will work without recompilation with all Python 3.x releases - (x>=2) on the particular :ref:`platform `. - - Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will - limit the available API so that the extension will work without - recompilation with all Python 3 releases from the specified one. - This will allow using additional API introduced up to this version, - but the extension will lose compatibility with earlier Python versions. + Define this macro before including ``Python.h`` to opt in to only use + the Limited API, and to select the Limited API version. + + Define ``Py_LIMITED_API`` to the value of :c:data:`PY_VERSION_HEX` + corresponding to the lowest Python version your extension supports. + The extension will work without recompilation with all Python 3 releases + from the specified one onward, and can use Limited API introduced up to that + version. + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with future Python versions. + You can also define ``Py_LIMITED_API`` to ``3``. This works the same as + ``0x03020000`` (Python 3.2, the version that introduced Limited API). + On Windows, extensions that use the Stable ABI should be linked against ``python3.dll`` rather than a version-specific library such as ``python39.dll``. From webhook-mailer at python.org Fri May 14 01:24:21 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:24:21 -0000 Subject: [Python-checkins] bpo-43757: Document os.path.realpath(strict=True) in 3.10 whatsnew. (GH-26090) (#26099) Message-ID: https://github.com/python/cpython/commit/ea14a0749a4f19b29236fc0acc4b556d9243bc6f commit: ea14a0749a4f19b29236fc0acc4b556d9243bc6f branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: willingc date: 2021-05-13T22:24:13-07:00 summary: bpo-43757: Document os.path.realpath(strict=True) in 3.10 whatsnew. (GH-26090) (#26099) (cherry picked from commit d1560d2429dff8e7d397801786e966dd33bb1bd7) Co-authored-by: Barney Gale Co-authored-by: Barney Gale files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 8fd64f86b3a2f..9394ee7d6223b 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1089,6 +1089,14 @@ Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` and :data:`~os.O_NOFOLLOW_ANY` for macOS. (Contributed by Dong-hee Na in :issue:`43106`.) +os.path +------- + +: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. +(Contributed by Barney Gale in :issue:`43757`.) + pathlib ------- From webhook-mailer at python.org Fri May 14 01:29:14 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:29:14 -0000 Subject: [Python-checkins] bpo-43795: PEP 652 user documentation (GH-25668) (GH-26034) Message-ID: https://github.com/python/cpython/commit/373937182ee029c282bea58cdda57ab41990f404 commit: 373937182ee029c282bea58cdda57ab41990f404 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: willingc date: 2021-05-13T22:29:09-07:00 summary: bpo-43795: PEP 652 user documentation (GH-25668) (GH-26034) - Reformat the C API and ABI Versioning page (and extend/clarify a bit) - Rewrite the stable ABI docs into a general text on C API Compatibility - Add a list of Limited API contents, and notes for the individual items. - Replace `Include/README.rst` with a link to a devguide page with the same info (cherry picked from commit b05955d6f5f149523b5855a335444b7c6324bdb7) Co-authored-by: Petr Viktorin Co-authored-by: Petr Viktorin files: M Doc/c-api/apiabiversion.rst M Doc/c-api/stable.rst M Doc/conf.py M Doc/data/stable_abi.dat M Doc/tools/extensions/c_annotations.py M Include/README.rst M Tools/scripts/stable_abi.py diff --git a/Doc/c-api/apiabiversion.rst b/Doc/c-api/apiabiversion.rst index b8a8f2ff886219..04050f7dabe172 100644 --- a/Doc/c-api/apiabiversion.rst +++ b/Doc/c-api/apiabiversion.rst @@ -6,34 +6,57 @@ API and ABI Versioning *********************** -``PY_VERSION_HEX`` is the Python version number encoded in a single integer. - -For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the underlying -version information can be found by treating it as a 32 bit number in -the following manner: - - +-------+-------------------------+------------------------------------------------+ - | Bytes | Bits (big endian order) | Meaning | - +=======+=========================+================================================+ - | ``1`` | ``1-8`` | ``PY_MAJOR_VERSION`` (the ``3`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``2`` | ``9-16`` | ``PY_MINOR_VERSION`` (the ``4`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``3`` | ``17-24`` | ``PY_MICRO_VERSION`` (the ``1`` in | - | | | ``3.4.1a2``) | - +-------+-------------------------+------------------------------------------------+ - | ``4`` | ``25-28`` | ``PY_RELEASE_LEVEL`` (``0xA`` for alpha, | - | | | ``0xB`` for beta, ``0xC`` for release | - | | | candidate and ``0xF`` for final), in this | - | | | case it is alpha. | - +-------+-------------------------+------------------------------------------------+ - | | ``29-32`` | ``PY_RELEASE_SERIAL`` (the ``2`` in | - | | | ``3.4.1a2``, zero for final releases) | - +-------+-------------------------+------------------------------------------------+ - -Thus ``3.4.1a2`` is hexversion ``0x030401a2``. +CPython exposes its version number in the following macros. +Note that these correspond to the version code is **built** with, +not necessarily the version used at **run time**. -All the given macros are defined in :source:`Include/patchlevel.h`. +See :ref:`stable` for a discussion of API and ABI stability across versions. + +.. c:macro:: PY_MAJOR_VERSION + + The ``3`` in ``3.4.1a2``. + +.. c:macro:: PY_MINOR_VERSION + + The ``4`` in ``3.4.1a2``. + +.. c:macro:: PY_MICRO_VERSION + + The ``1`` in ``3.4.1a2``. + +.. c:macro:: PY_RELEASE_LEVEL + + The ``a`` in ``3.4.1a2``. + This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release + candidate or ``0xF`` for final. +.. c:macro:: PY_RELEASE_SERIAL + + The ``2`` in ``3.4.1a2``. Zero for final releases. + +.. c:macro:: PY_VERSION_HEX + + The Python version number encoded in a single integer. + + The underlying version information can be found by treating it as a 32 bit + number in the following manner: + + +-------+-------------------------+-------------------------+--------------------------+ + | Bytes | Bits (big endian order) | Meaning | Value for ``3.4.1a2`` | + +=======+=========================+=========================+==========================+ + | 1 | 1-8 | ``PY_MAJOR_VERSION`` | ``0x03`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 2 | 9-16 | ``PY_MINOR_VERSION`` | ``0x04`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 3 | 17-24 | ``PY_MICRO_VERSION`` | ``0x01`` | + +-------+-------------------------+-------------------------+--------------------------+ + | 4 | 25-28 | ``PY_RELEASE_LEVEL`` | ``0xA`` | + + +-------------------------+-------------------------+--------------------------+ + | | 29-32 | ``PY_RELEASE_SERIAL`` | ``0x2`` | + +-------+-------------------------+-------------------------+--------------------------+ + + Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is + hexversion ``0x030a00f0``. + + +All the given macros are defined in :source:`Include/patchlevel.h`. diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 9c05cb3c82dfbe..2f67b097eae975 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -2,37 +2,157 @@ .. _stable: -*********************************** +*************** +C API Stability +*************** + +Python's C API is covered by the Backwards Compatibility Policy, :pep:`387`. +While the C API will change with every minor release (e.g. from 3.9 to 3.10), +most changes will be source-compatible, typically by only adding new API. +Changing existing API or removing API is only done after a deprecation period +or to fix serious issues. + +CPython's Application Binary Interface (ABI) is forward- and +backwards-compatible across a minor release (if these are compiled the same +way; see :ref:`stable-abi-platform` below). +So, code compiled for Python 3.10.0 will work on 3.10.8 and vice versa, +but will need to be compiled separately for 3.9.x and 3.10.x. + +Names prefixed by an underscore, such as ``_Py_InternalState``, +are private API that can change without notice even in patch releases. + + Stable Application Binary Interface -*********************************** - -Traditionally, the C API of Python will change with every release. Most changes -will be source-compatible, typically by only adding API, rather than changing -existing API or removing API (although some interfaces do get removed after -being deprecated first). - -Unfortunately, the API compatibility does not extend to binary compatibility -(the ABI). The reason is primarily the evolution of struct definitions, where -addition of a new field, or changing the type of a field, might not break the -API, but can break the ABI. As a consequence, extension modules need to be -recompiled for every Python release (although an exception is possible on Unix -when none of the affected interfaces are used). In addition, on Windows, -extension modules link with a specific pythonXY.dll and need to be recompiled to -link with a newer one. - -Since Python 3.2, a subset of the API has been declared to guarantee a stable -ABI. Extension modules wishing to use this API (called "limited API") need to -define ``Py_LIMITED_API``. A number of interpreter details then become hidden -from the extension module; in return, a module is built that works on any 3.x -version (x>=2) without recompilation. - -In some cases, the stable ABI needs to be extended with new functions. -Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API`` -to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python -version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules -will work on all subsequent Python releases, but fail to load (because of -missing symbols) on the older releases. - -As of Python 3.2, the set of functions available to the limited API is -documented in :pep:`384`. In the C API documentation, API elements that are not -part of the limited API are marked as "Not part of the limited API." +=================================== + +Python 3.2 introduced the *Limited API*, a subset of Python's C API. +Extensions that only use the Limited API can be +compiled once and work with multiple versions of Python. +Contents of the Limited API are :ref:`listed below `. + +To enable this, Python provides a *Stable ABI*: a set of symbols that will +remain compatible across Python 3.x versions. The Stable ABI contains symbols +exposed in the Limited API, but also other ones ? for example, functions +necessary to support older versions of the Limited API. + +(For simplicity, this document talks about *extensions*, but the Limited API +and Stable ABI work the same way for all uses of the API ? for example, +embedding Python.) + +.. c:macro:: Py_LIMITED_API + + Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to + opt in to only use the Limited API. + + Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that + the extension will work without recompilation with all Python 3.x releases + (x>=2) on the particular :ref:`platform `. + + Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will + limit the available API so that the extension will work without + recompilation with all Python 3 releases from the specified one. + This will allow using additional API introduced up to this version, + but the extension will lose compatibility with earlier Python versions. + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum + minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when + compiling with future Python versions. + +On Windows, extensions that use the Stable ABI should be linked against +``python3.dll`` rather than a version-specific library such as +``python39.dll``. + +On some platforms, Python will look for and load shared library files named +with the ``abi3`` tag (e.g. ``mymodule.abi3.so``). +It does not check if such extensions conform to a Stable ABI. +The user (or their packaging tools) need to ensure that, for example, +extensions built with the 3.10+ Limited API are not installed for lower +versions of Python. + +All functions in the Stable ABI are present as functions in Python's shared +library, not solely as macros. This makes them usable from languages that don't +use the C preprocessor. + + +Limited API Scope and Performance +--------------------------------- + +The goal for the Limited API is to allow everything that is possible with the +full C API, but possibly with a performance penalty. + +For example, while :c:func:`PyList_GetItem` is available, its ?unsafe? macro +variant :c:func:`PyList_GET_ITEM` is not. +The macro can be faster because it can rely on version-specific implementation +details of the list object. + +Without ``Py_LIMITED_API`` defined, some C API functions are inlined or +replaced by macros. +Defining ``Py_LIMITED_API`` disables this inlining, allowing stability as +Python's data structures are improved, but possibly reducing performance. + +By leaving out the ``Py_LIMITED_API`` definition, it is possible to compile +a Limited API extension with a version-specific ABI. This can improve +performance for that Python version, but will limit compatibility. +Compiling with ``Py_LIMITED_API`` will then yield an extension that can be +distributed where a version-specific one is not available ? for example, +for prereleases of an upcoming Python version. + + +Limited API Caveats +------------------- + +Note that compiling with ``Py_LIMITED_API`` is *not* a complete guarantee that +code conforms to the Limited API or the Stable ABI. ``Py_LIMITED_API`` only +covers definitions, but an API also includes other issues, such as expected +semantics. + +One issue that ``Py_LIMITED_API`` does not guard against is calling a function +with arguments that are invalid in a lower Python version. +For example, consider a function that starts accepting ``NULL`` for an +argument. In Python 3.9, ``NULL`` now selects a default behavior, but in +Python 3.8, the argument will be used directly, causing a ``NULL`` dereference +and crash. A similar argument works for fields of structs. + +Another issue is that some struct fields are currently not hidden when +``Py_LIMITED_API`` is defined, even though they're part of the Limited API. + +For these reasons, we recommend testing an extension with *all* minor Python +versions it supports, and preferably to build with the *lowest* such version. + +We also recommend reviewing documentation of all used API to check +if it is explicitly part of the Limited API. Even with ``Py_LIMITED_API`` +defined, a few private declarations are exposed for technical reasons (or +even unintentionally, as bugs). + +Also note that the Limited API is not necessarily stable: compiling with +``Py_LIMITED_API`` with Python 3.8 means that the extension will +run with Python 3.12, but it will not necessarily *compile* with Python 3.12. +In particular, parts of the Limited API may be deprecated and removed, +provided that the Stable ABI stays stable. + + +.. _stable-abi-platform: + +Platform Considerations +======================= + +ABI stability depends not only on Python, but also on the compiler used, +lower-level libraries and compiler options. For the purposes of the Stable ABI, +these details define a ?platform?. They usually depend on the OS +type and processor architecture + +It is the responsibility of each particular distributor of Python +to ensure that all Python versions on a particular platform are built +in a way that does not break the Stable ABI. +This is the case with Windows and macOS releases from ``python.org`` and many +third-party distributors. + + +.. _stable-abi-list: + +Contents of Limited API +======================= + + +Currently, the Limited API includes the following items: + +.. limited-api-list:: diff --git a/Doc/conf.py b/Doc/conf.py index cf250981f58752..2a1d0e3dfd873e 100644 --- a/Doc/conf.py +++ b/Doc/conf.py @@ -225,8 +225,9 @@ # Options for extensions # ---------------------- -# Relative filename of the reference count data file. +# Relative filename of the data files refcount_file = 'data/refcounts.dat' +stable_abi_file = 'data/stable_abi.dat' # Sphinx 2 and Sphinx 3 compatibility # ----------------------------------- diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 833228f7fd755d..d582204f5626b9 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -1,953 +1,861 @@ -# 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 -PyArg_ParseTupleAndKeywords -PyArg_UnpackTuple -PyArg_VaParse -PyArg_VaParseTupleAndKeywords -PyArg_ValidateKeywordArguments -PyBaseObject_Type -PyBool_FromLong -PyBool_Type -PyByteArrayIter_Type -PyByteArray_AsString -PyByteArray_Concat -PyByteArray_FromObject -PyByteArray_FromStringAndSize -PyByteArray_Resize -PyByteArray_Size -PyByteArray_Type -PyBytesIter_Type -PyBytes_AsString -PyBytes_AsStringAndSize -PyBytes_Concat -PyBytes_ConcatAndDel -PyBytes_DecodeEscape -PyBytes_FromFormat -PyBytes_FromFormatV -PyBytes_FromObject -PyBytes_FromString -PyBytes_FromStringAndSize -PyBytes_Repr -PyBytes_Size -PyBytes_Type -PyCFunction -PyCFunctionWithKeywords -PyCFunction_Call -PyCFunction_GetFlags -PyCFunction_GetFunction -PyCFunction_GetSelf -PyCFunction_New -PyCFunction_NewEx -PyCFunction_Type -PyCMethod_New -PyCallIter_New -PyCallIter_Type -PyCallable_Check -PyCapsule_Destructor -PyCapsule_GetContext -PyCapsule_GetDestructor -PyCapsule_GetName -PyCapsule_GetPointer -PyCapsule_Import -PyCapsule_IsValid -PyCapsule_New -PyCapsule_SetContext -PyCapsule_SetDestructor -PyCapsule_SetName -PyCapsule_SetPointer -PyCapsule_Type -PyClassMethodDescr_Type -PyCodec_BackslashReplaceErrors -PyCodec_Decode -PyCodec_Decoder -PyCodec_Encode -PyCodec_Encoder -PyCodec_IgnoreErrors -PyCodec_IncrementalDecoder -PyCodec_IncrementalEncoder -PyCodec_KnownEncoding -PyCodec_LookupError -PyCodec_NameReplaceErrors -PyCodec_Register -PyCodec_RegisterError -PyCodec_ReplaceErrors -PyCodec_StreamReader -PyCodec_StreamWriter -PyCodec_StrictErrors -PyCodec_Unregister -PyCodec_XMLCharRefReplaceErrors -PyComplex_FromDoubles -PyComplex_ImagAsDouble -PyComplex_RealAsDouble -PyComplex_Type -PyDescr_NewClassMethod -PyDescr_NewGetSet -PyDescr_NewMember -PyDescr_NewMethod -PyDictItems_Type -PyDictIterItem_Type -PyDictIterKey_Type -PyDictIterValue_Type -PyDictKeys_Type -PyDictProxy_New -PyDictProxy_Type -PyDictRevIterItem_Type -PyDictRevIterKey_Type -PyDictRevIterValue_Type -PyDictValues_Type -PyDict_Clear -PyDict_Contains -PyDict_Copy -PyDict_DelItem -PyDict_DelItemString -PyDict_GetItem -PyDict_GetItemString -PyDict_GetItemWithError -PyDict_Items -PyDict_Keys -PyDict_Merge -PyDict_MergeFromSeq2 -PyDict_New -PyDict_Next -PyDict_SetItem -PyDict_SetItemString -PyDict_Size -PyDict_Type -PyDict_Update -PyDict_Values -PyEllipsis_Type -PyEnum_Type -PyErr_BadArgument -PyErr_BadInternalCall -PyErr_CheckSignals -PyErr_Clear -PyErr_Display -PyErr_ExceptionMatches -PyErr_Fetch -PyErr_Format -PyErr_FormatV -PyErr_GetExcInfo -PyErr_GivenExceptionMatches -PyErr_NewException -PyErr_NewExceptionWithDoc -PyErr_NoMemory -PyErr_NormalizeException -PyErr_Occurred -PyErr_Print -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 -PyErr_SetInterruptEx -PyErr_SetNone -PyErr_SetObject -PyErr_SetString -PyErr_SyntaxLocation -PyErr_SyntaxLocationEx -PyErr_WarnEx -PyErr_WarnExplicit -PyErr_WarnFormat -PyErr_WriteUnraisable -PyEval_AcquireLock -PyEval_AcquireThread -PyEval_CallFunction -PyEval_CallMethod -PyEval_CallObjectWithKeywords -PyEval_EvalCode -PyEval_EvalCodeEx -PyEval_EvalFrame -PyEval_EvalFrameEx -PyEval_GetBuiltins -PyEval_GetFrame -PyEval_GetFuncDesc -PyEval_GetFuncName -PyEval_GetGlobals -PyEval_GetLocals -PyEval_InitThreads -PyEval_ReleaseLock -PyEval_ReleaseThread -PyEval_RestoreThread -PyEval_SaveThread -PyEval_ThreadsInitialized -PyExc_ArithmeticError -PyExc_AssertionError -PyExc_AttributeError -PyExc_BaseException -PyExc_BlockingIOError -PyExc_BrokenPipeError -PyExc_BufferError -PyExc_BytesWarning -PyExc_ChildProcessError -PyExc_ConnectionAbortedError -PyExc_ConnectionError -PyExc_ConnectionRefusedError -PyExc_ConnectionResetError -PyExc_DeprecationWarning -PyExc_EOFError -PyExc_EncodingWarning -PyExc_EnvironmentError -PyExc_Exception -PyExc_FileExistsError -PyExc_FileNotFoundError -PyExc_FloatingPointError -PyExc_FutureWarning -PyExc_GeneratorExit -PyExc_IOError -PyExc_ImportError -PyExc_ImportWarning -PyExc_IndentationError -PyExc_IndexError -PyExc_InterruptedError -PyExc_IsADirectoryError -PyExc_KeyError -PyExc_KeyboardInterrupt -PyExc_LookupError -PyExc_MemoryError -PyExc_ModuleNotFoundError -PyExc_NameError -PyExc_NotADirectoryError -PyExc_NotImplementedError -PyExc_OSError -PyExc_OverflowError -PyExc_PendingDeprecationWarning -PyExc_PermissionError -PyExc_ProcessLookupError -PyExc_RecursionError -PyExc_ReferenceError -PyExc_ResourceWarning -PyExc_RuntimeError -PyExc_RuntimeWarning -PyExc_StopAsyncIteration -PyExc_StopIteration -PyExc_SyntaxError -PyExc_SyntaxWarning -PyExc_SystemError -PyExc_SystemExit -PyExc_TabError -PyExc_TimeoutError -PyExc_TypeError -PyExc_UnboundLocalError -PyExc_UnicodeDecodeError -PyExc_UnicodeEncodeError -PyExc_UnicodeError -PyExc_UnicodeTranslateError -PyExc_UnicodeWarning -PyExc_UserWarning -PyExc_ValueError -PyExc_Warning -PyExc_WindowsError -PyExc_ZeroDivisionError -PyExceptionClass_Name -PyException_GetCause -PyException_GetContext -PyException_GetTraceback -PyException_SetCause -PyException_SetContext -PyException_SetTraceback -PyFile_FromFd -PyFile_GetLine -PyFile_WriteObject -PyFile_WriteString -PyFilter_Type -PyFloat_AsDouble -PyFloat_FromDouble -PyFloat_FromString -PyFloat_GetInfo -PyFloat_GetMax -PyFloat_GetMin -PyFloat_Type -PyFrame_GetCode -PyFrame_GetLineNumber -PyFrozenSet_New -PyFrozenSet_Type -PyGC_Collect -PyGC_Disable -PyGC_Enable -PyGC_IsEnabled -PyGILState_Ensure -PyGILState_GetThisThreadState -PyGILState_Release -PyGILState_STATE -PyGetSetDef -PyGetSetDescr_Type -PyImport_AddModule -PyImport_AddModuleObject -PyImport_AppendInittab -PyImport_ExecCodeModule -PyImport_ExecCodeModuleEx -PyImport_ExecCodeModuleObject -PyImport_ExecCodeModuleWithPathnames -PyImport_GetImporter -PyImport_GetMagicNumber -PyImport_GetMagicTag -PyImport_GetModule -PyImport_GetModuleDict -PyImport_Import -PyImport_ImportFrozenModule -PyImport_ImportFrozenModuleObject -PyImport_ImportModule -PyImport_ImportModuleLevel -PyImport_ImportModuleLevelObject -PyImport_ImportModuleNoBlock -PyImport_ReloadModule -PyIndex_Check -PyInterpreterState -PyInterpreterState_Clear -PyInterpreterState_Delete -PyInterpreterState_Get -PyInterpreterState_GetDict -PyInterpreterState_GetID -PyInterpreterState_New -PyIter_Check -PyIter_Next -PyIter_Send -PyListIter_Type -PyListRevIter_Type -PyList_Append -PyList_AsTuple -PyList_GetItem -PyList_GetSlice -PyList_Insert -PyList_New -PyList_Reverse -PyList_SetItem -PyList_SetSlice -PyList_Size -PyList_Sort -PyList_Type -PyLongObject -PyLongRangeIter_Type -PyLong_AsDouble -PyLong_AsLong -PyLong_AsLongAndOverflow -PyLong_AsLongLong -PyLong_AsLongLongAndOverflow -PyLong_AsSize_t -PyLong_AsSsize_t -PyLong_AsUnsignedLong -PyLong_AsUnsignedLongLong -PyLong_AsUnsignedLongLongMask -PyLong_AsUnsignedLongMask -PyLong_AsVoidPtr -PyLong_FromDouble -PyLong_FromLong -PyLong_FromLongLong -PyLong_FromSize_t -PyLong_FromSsize_t -PyLong_FromString -PyLong_FromUnsignedLong -PyLong_FromUnsignedLongLong -PyLong_FromVoidPtr -PyLong_GetInfo -PyLong_Type -PyMap_Type -PyMapping_Check -PyMapping_GetItemString -PyMapping_HasKey -PyMapping_HasKeyString -PyMapping_Items -PyMapping_Keys -PyMapping_Length -PyMapping_SetItemString -PyMapping_Size -PyMapping_Values -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 -PyModule_AddIntConstant -PyModule_AddObject -PyModule_AddObjectRef -PyModule_AddStringConstant -PyModule_AddType -PyModule_Create2 -PyModule_ExecDef -PyModule_FromDefAndSpec2 -PyModule_GetDef -PyModule_GetDict -PyModule_GetFilename -PyModule_GetFilenameObject -PyModule_GetName -PyModule_GetNameObject -PyModule_GetState -PyModule_New -PyModule_NewObject -PyModule_SetDocString -PyModule_Type -PyNumber_Absolute -PyNumber_Add -PyNumber_And -PyNumber_AsSsize_t -PyNumber_Check -PyNumber_Divmod -PyNumber_Float -PyNumber_FloorDivide -PyNumber_InPlaceAdd -PyNumber_InPlaceAnd -PyNumber_InPlaceFloorDivide -PyNumber_InPlaceLshift -PyNumber_InPlaceMatrixMultiply -PyNumber_InPlaceMultiply -PyNumber_InPlaceOr -PyNumber_InPlacePower -PyNumber_InPlaceRemainder -PyNumber_InPlaceRshift -PyNumber_InPlaceSubtract -PyNumber_InPlaceTrueDivide -PyNumber_InPlaceXor -PyNumber_Index -PyNumber_Invert -PyNumber_Long -PyNumber_Lshift -PyNumber_MatrixMultiply -PyNumber_Multiply -PyNumber_Negative -PyNumber_Or -PyNumber_Positive -PyNumber_Power -PyNumber_Remainder -PyNumber_Rshift -PyNumber_Subtract -PyNumber_ToBase -PyNumber_TrueDivide -PyNumber_Xor -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 -PyObject_Call -PyObject_CallFunction -PyObject_CallFunctionObjArgs -PyObject_CallMethod -PyObject_CallMethodObjArgs -PyObject_CallNoArgs -PyObject_CallObject -PyObject_Calloc -PyObject_ClearWeakRefs -PyObject_DelItem -PyObject_DelItemString -PyObject_Dir -PyObject_Format -PyObject_Free -PyObject_GC_Del -PyObject_GC_IsFinalized -PyObject_GC_IsTracked -PyObject_GC_Track -PyObject_GC_UnTrack -PyObject_GenericGetAttr -PyObject_GenericGetDict -PyObject_GenericSetAttr -PyObject_GenericSetDict -PyObject_GetAiter -PyObject_GetAttr -PyObject_GetAttrString -PyObject_GetItem -PyObject_GetIter -PyObject_HasAttr -PyObject_HasAttrString -PyObject_Hash -PyObject_HashNotImplemented -PyObject_Init -PyObject_InitVar -PyObject_IsInstance -PyObject_IsSubclass -PyObject_IsTrue -PyObject_Length -PyObject_Malloc -PyObject_Not -PyObject_Realloc -PyObject_Repr -PyObject_RichCompare -PyObject_RichCompareBool -PyObject_SelfIter -PyObject_SetAttr -PyObject_SetAttrString -PyObject_SetItem -PyObject_Size -PyObject_Str -PyObject_Type -PyProperty_Type -PyRangeIter_Type -PyRange_Type -PyReversed_Type -PySeqIter_New -PySeqIter_Type -PySequence_Check -PySequence_Concat -PySequence_Contains -PySequence_Count -PySequence_DelItem -PySequence_DelSlice -PySequence_Fast -PySequence_GetItem -PySequence_GetSlice -PySequence_In -PySequence_InPlaceConcat -PySequence_InPlaceRepeat -PySequence_Index -PySequence_Length -PySequence_List -PySequence_Repeat -PySequence_SetItem -PySequence_SetSlice -PySequence_Size -PySequence_Tuple -PySetIter_Type -PySet_Add -PySet_Clear -PySet_Contains -PySet_Discard -PySet_New -PySet_Pop -PySet_Size -PySet_Type -PySlice_AdjustIndices -PySlice_GetIndices -PySlice_GetIndicesEx -PySlice_New -PySlice_Type -PySlice_Unpack -PyState_AddModule -PyState_FindModule -PyState_RemoveModule -PyStructSequence_Desc -PyStructSequence_Field -PyStructSequence_GetItem -PyStructSequence_New -PyStructSequence_NewType -PyStructSequence_SetItem -PySuper_Type -PySys_AddWarnOption -PySys_AddWarnOptionUnicode -PySys_AddXOption -PySys_FormatStderr -PySys_FormatStdout -PySys_GetObject -PySys_GetXOptions -PySys_HasWarnOptions -PySys_ResetWarnOptions -PySys_SetArgv -PySys_SetArgvEx -PySys_SetObject -PySys_SetPath -PySys_WriteStderr -PySys_WriteStdout -PyThreadState -PyThreadState_Clear -PyThreadState_Delete -PyThreadState_Get -PyThreadState_GetDict -PyThreadState_GetFrame -PyThreadState_GetID -PyThreadState_GetInterpreter -PyThreadState_New -PyThreadState_SetAsyncExc -PyThreadState_Swap -PyThread_GetInfo -PyThread_ReInitTLS -PyThread_acquire_lock -PyThread_acquire_lock_timed -PyThread_allocate_lock -PyThread_create_key -PyThread_delete_key -PyThread_delete_key_value -PyThread_exit_thread -PyThread_free_lock -PyThread_get_key_value -PyThread_get_stacksize -PyThread_get_thread_ident -PyThread_get_thread_native_id -PyThread_init_thread -PyThread_release_lock -PyThread_set_key_value -PyThread_set_stacksize -PyThread_start_new_thread -PyThread_tss_alloc -PyThread_tss_create -PyThread_tss_delete -PyThread_tss_free -PyThread_tss_get -PyThread_tss_is_created -PyThread_tss_set -PyTraceBack_Here -PyTraceBack_Print -PyTraceBack_Type -PyTupleIter_Type -PyTuple_GetItem -PyTuple_GetSlice -PyTuple_New -PyTuple_Pack -PyTuple_SetItem -PyTuple_Size -PyTuple_Type -PyTypeObject -PyType_ClearCache -PyType_FromModuleAndSpec -PyType_FromSpec -PyType_FromSpecWithBases -PyType_GenericAlloc -PyType_GenericNew -PyType_GetFlags -PyType_GetModule -PyType_GetModuleState -PyType_GetSlot -PyType_IsSubtype -PyType_Modified -PyType_Ready -PyType_Slot -PyType_Spec -PyType_Type -PyUnicodeDecodeError_Create -PyUnicodeDecodeError_GetEncoding -PyUnicodeDecodeError_GetEnd -PyUnicodeDecodeError_GetObject -PyUnicodeDecodeError_GetReason -PyUnicodeDecodeError_GetStart -PyUnicodeDecodeError_SetEnd -PyUnicodeDecodeError_SetReason -PyUnicodeDecodeError_SetStart -PyUnicodeEncodeError_GetEncoding -PyUnicodeEncodeError_GetEnd -PyUnicodeEncodeError_GetObject -PyUnicodeEncodeError_GetReason -PyUnicodeEncodeError_GetStart -PyUnicodeEncodeError_SetEnd -PyUnicodeEncodeError_SetReason -PyUnicodeEncodeError_SetStart -PyUnicodeIter_Type -PyUnicodeTranslateError_GetEnd -PyUnicodeTranslateError_GetObject -PyUnicodeTranslateError_GetReason -PyUnicodeTranslateError_GetStart -PyUnicodeTranslateError_SetEnd -PyUnicodeTranslateError_SetReason -PyUnicodeTranslateError_SetStart -PyUnicode_Append -PyUnicode_AppendAndDel -PyUnicode_AsASCIIString -PyUnicode_AsCharmapString -PyUnicode_AsDecodedObject -PyUnicode_AsDecodedUnicode -PyUnicode_AsEncodedObject -PyUnicode_AsEncodedString -PyUnicode_AsEncodedUnicode -PyUnicode_AsLatin1String -PyUnicode_AsMBCSString -PyUnicode_AsRawUnicodeEscapeString -PyUnicode_AsUCS4 -PyUnicode_AsUCS4Copy -PyUnicode_AsUTF16String -PyUnicode_AsUTF32String -PyUnicode_AsUTF8AndSize -PyUnicode_AsUTF8String -PyUnicode_AsUnicodeEscapeString -PyUnicode_AsWideChar -PyUnicode_AsWideCharString -PyUnicode_BuildEncodingMap -PyUnicode_Compare -PyUnicode_CompareWithASCIIString -PyUnicode_Concat -PyUnicode_Contains -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 -PyUnicode_DecodeUTF32 -PyUnicode_DecodeUTF32Stateful -PyUnicode_DecodeUTF7 -PyUnicode_DecodeUTF7Stateful -PyUnicode_DecodeUTF8 -PyUnicode_DecodeUTF8Stateful -PyUnicode_DecodeUnicodeEscape -PyUnicode_EncodeCodePage -PyUnicode_EncodeFSDefault -PyUnicode_EncodeLocale -PyUnicode_FSConverter -PyUnicode_FSDecoder -PyUnicode_Find -PyUnicode_FindChar -PyUnicode_Format -PyUnicode_FromEncodedObject -PyUnicode_FromFormat -PyUnicode_FromFormatV -PyUnicode_FromObject -PyUnicode_FromOrdinal -PyUnicode_FromString -PyUnicode_FromStringAndSize -PyUnicode_FromWideChar -PyUnicode_GetDefaultEncoding -PyUnicode_GetLength -PyUnicode_GetSize -PyUnicode_InternFromString -PyUnicode_InternImmortal -PyUnicode_InternInPlace -PyUnicode_IsIdentifier -PyUnicode_Join -PyUnicode_Partition -PyUnicode_RPartition -PyUnicode_RSplit -PyUnicode_ReadChar -PyUnicode_Replace -PyUnicode_Resize -PyUnicode_RichCompare -PyUnicode_Split -PyUnicode_Splitlines -PyUnicode_Substring -PyUnicode_Tailmatch -PyUnicode_Translate -PyUnicode_Type -PyUnicode_WriteChar -PyVarObject -PyWeakReference -PyWeakref_GetObject -PyWeakref_NewProxy -PyWeakref_NewRef -PyWrapperDescr_Type -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 -Py_Exit -Py_FatalError -Py_FileSystemDefaultEncodeErrors -Py_FileSystemDefaultEncoding -Py_Finalize -Py_FinalizeEx -Py_FrozenMain -Py_GenericAlias -Py_GenericAliasType -Py_GetBuildInfo -Py_GetCompiler -Py_GetCopyright -Py_GetExecPrefix -Py_GetPath -Py_GetPlatform -Py_GetPrefix -Py_GetProgramFullPath -Py_GetProgramName -Py_GetPythonHome -Py_GetRecursionLimit -Py_GetVersion -Py_HasFileSystemDefaultEncoding -Py_IncRef -Py_Initialize -Py_InitializeEx -Py_Is -Py_IsFalse -Py_IsInitialized -Py_IsNone -Py_IsTrue -Py_LeaveRecursiveCall -Py_Main -Py_MakePendingCalls -Py_NewInterpreter -Py_NewRef -Py_ReprEnter -Py_ReprLeave -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 +role,name,added,ifdef_note +function,PyAiter_Check,3.10, +function,PyArg_Parse,3.2, +function,PyArg_ParseTuple,3.2, +function,PyArg_ParseTupleAndKeywords,3.2, +function,PyArg_UnpackTuple,3.2, +function,PyArg_VaParse,3.2, +function,PyArg_VaParseTupleAndKeywords,3.2, +function,PyArg_ValidateKeywordArguments,3.2, +var,PyBaseObject_Type,3.2, +function,PyBool_FromLong,3.2, +var,PyBool_Type,3.2, +var,PyByteArrayIter_Type,3.2, +function,PyByteArray_AsString,3.2, +function,PyByteArray_Concat,3.2, +function,PyByteArray_FromObject,3.2, +function,PyByteArray_FromStringAndSize,3.2, +function,PyByteArray_Resize,3.2, +function,PyByteArray_Size,3.2, +var,PyByteArray_Type,3.2, +var,PyBytesIter_Type,3.2, +function,PyBytes_AsString,3.2, +function,PyBytes_AsStringAndSize,3.2, +function,PyBytes_Concat,3.2, +function,PyBytes_ConcatAndDel,3.2, +function,PyBytes_DecodeEscape,3.2, +function,PyBytes_FromFormat,3.2, +function,PyBytes_FromFormatV,3.2, +function,PyBytes_FromObject,3.2, +function,PyBytes_FromString,3.2, +function,PyBytes_FromStringAndSize,3.2, +function,PyBytes_Repr,3.2, +function,PyBytes_Size,3.2, +var,PyBytes_Type,3.2, +type,PyCFunction,3.2, +type,PyCFunctionWithKeywords,3.2, +function,PyCFunction_Call,3.2, +function,PyCFunction_GetFlags,3.2, +function,PyCFunction_GetFunction,3.2, +function,PyCFunction_GetSelf,3.2, +function,PyCFunction_New,3.4, +function,PyCFunction_NewEx,3.2, +var,PyCFunction_Type,3.2, +function,PyCMethod_New,3.9, +function,PyCallIter_New,3.2, +var,PyCallIter_Type,3.2, +function,PyCallable_Check,3.2, +type,PyCapsule_Destructor,3.2, +function,PyCapsule_GetContext,3.2, +function,PyCapsule_GetDestructor,3.2, +function,PyCapsule_GetName,3.2, +function,PyCapsule_GetPointer,3.2, +function,PyCapsule_Import,3.2, +function,PyCapsule_IsValid,3.2, +function,PyCapsule_New,3.2, +function,PyCapsule_SetContext,3.2, +function,PyCapsule_SetDestructor,3.2, +function,PyCapsule_SetName,3.2, +function,PyCapsule_SetPointer,3.2, +var,PyCapsule_Type,3.2, +var,PyClassMethodDescr_Type,3.2, +function,PyCodec_BackslashReplaceErrors,3.2, +function,PyCodec_Decode,3.2, +function,PyCodec_Decoder,3.2, +function,PyCodec_Encode,3.2, +function,PyCodec_Encoder,3.2, +function,PyCodec_IgnoreErrors,3.2, +function,PyCodec_IncrementalDecoder,3.2, +function,PyCodec_IncrementalEncoder,3.2, +function,PyCodec_KnownEncoding,3.2, +function,PyCodec_LookupError,3.2, +function,PyCodec_NameReplaceErrors,3.7, +function,PyCodec_Register,3.2, +function,PyCodec_RegisterError,3.2, +function,PyCodec_ReplaceErrors,3.2, +function,PyCodec_StreamReader,3.2, +function,PyCodec_StreamWriter,3.2, +function,PyCodec_StrictErrors,3.2, +function,PyCodec_Unregister,3.10, +function,PyCodec_XMLCharRefReplaceErrors,3.2, +function,PyComplex_FromDoubles,3.2, +function,PyComplex_ImagAsDouble,3.2, +function,PyComplex_RealAsDouble,3.2, +var,PyComplex_Type,3.2, +function,PyDescr_NewClassMethod,3.2, +function,PyDescr_NewGetSet,3.2, +function,PyDescr_NewMember,3.2, +function,PyDescr_NewMethod,3.2, +var,PyDictItems_Type,3.2, +var,PyDictIterItem_Type,3.2, +var,PyDictIterKey_Type,3.2, +var,PyDictIterValue_Type,3.2, +var,PyDictKeys_Type,3.2, +function,PyDictProxy_New,3.2, +var,PyDictProxy_Type,3.2, +var,PyDictRevIterItem_Type,3.8, +var,PyDictRevIterKey_Type,3.8, +var,PyDictRevIterValue_Type,3.8, +var,PyDictValues_Type,3.2, +function,PyDict_Clear,3.2, +function,PyDict_Contains,3.2, +function,PyDict_Copy,3.2, +function,PyDict_DelItem,3.2, +function,PyDict_DelItemString,3.2, +function,PyDict_GetItem,3.2, +function,PyDict_GetItemString,3.2, +function,PyDict_GetItemWithError,3.2, +function,PyDict_Items,3.2, +function,PyDict_Keys,3.2, +function,PyDict_Merge,3.2, +function,PyDict_MergeFromSeq2,3.2, +function,PyDict_New,3.2, +function,PyDict_Next,3.2, +function,PyDict_SetItem,3.2, +function,PyDict_SetItemString,3.2, +function,PyDict_Size,3.2, +var,PyDict_Type,3.2, +function,PyDict_Update,3.2, +function,PyDict_Values,3.2, +var,PyEllipsis_Type,3.2, +var,PyEnum_Type,3.2, +function,PyErr_BadArgument,3.2, +function,PyErr_BadInternalCall,3.2, +function,PyErr_CheckSignals,3.2, +function,PyErr_Clear,3.2, +function,PyErr_Display,3.2, +function,PyErr_ExceptionMatches,3.2, +function,PyErr_Fetch,3.2, +function,PyErr_Format,3.2, +function,PyErr_FormatV,3.5, +function,PyErr_GetExcInfo,3.7, +function,PyErr_GivenExceptionMatches,3.2, +function,PyErr_NewException,3.2, +function,PyErr_NewExceptionWithDoc,3.2, +function,PyErr_NoMemory,3.2, +function,PyErr_NormalizeException,3.2, +function,PyErr_Occurred,3.2, +function,PyErr_Print,3.2, +function,PyErr_PrintEx,3.2, +function,PyErr_ProgramText,3.2, +function,PyErr_ResourceWarning,3.6, +function,PyErr_Restore,3.2, +function,PyErr_SetExcFromWindowsErr,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilename,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilenameObject,3.7,on Windows +function,PyErr_SetExcFromWindowsErrWithFilenameObjects,3.7,on Windows +function,PyErr_SetExcInfo,3.7, +function,PyErr_SetFromErrno,3.2, +function,PyErr_SetFromErrnoWithFilename,3.2, +function,PyErr_SetFromErrnoWithFilenameObject,3.2, +function,PyErr_SetFromErrnoWithFilenameObjects,3.7, +function,PyErr_SetFromWindowsErr,3.7,on Windows +function,PyErr_SetFromWindowsErrWithFilename,3.7,on Windows +function,PyErr_SetImportError,3.7, +function,PyErr_SetImportErrorSubclass,3.6, +function,PyErr_SetInterrupt,3.2, +function,PyErr_SetInterruptEx,3.10, +function,PyErr_SetNone,3.2, +function,PyErr_SetObject,3.2, +function,PyErr_SetString,3.2, +function,PyErr_SyntaxLocation,3.2, +function,PyErr_SyntaxLocationEx,3.7, +function,PyErr_WarnEx,3.2, +function,PyErr_WarnExplicit,3.2, +function,PyErr_WarnFormat,3.2, +function,PyErr_WriteUnraisable,3.2, +function,PyEval_AcquireLock,3.2, +function,PyEval_AcquireThread,3.2, +function,PyEval_CallFunction,3.2, +function,PyEval_CallMethod,3.2, +function,PyEval_CallObjectWithKeywords,3.2, +function,PyEval_EvalCode,3.2, +function,PyEval_EvalCodeEx,3.2, +function,PyEval_EvalFrame,3.2, +function,PyEval_EvalFrameEx,3.2, +function,PyEval_GetBuiltins,3.2, +function,PyEval_GetFrame,3.2, +function,PyEval_GetFuncDesc,3.2, +function,PyEval_GetFuncName,3.2, +function,PyEval_GetGlobals,3.2, +function,PyEval_GetLocals,3.2, +function,PyEval_InitThreads,3.2, +function,PyEval_ReleaseLock,3.2, +function,PyEval_ReleaseThread,3.2, +function,PyEval_RestoreThread,3.2, +function,PyEval_SaveThread,3.2, +function,PyEval_ThreadsInitialized,3.2, +var,PyExc_ArithmeticError,3.2, +var,PyExc_AssertionError,3.2, +var,PyExc_AttributeError,3.2, +var,PyExc_BaseException,3.2, +var,PyExc_BlockingIOError,3.7, +var,PyExc_BrokenPipeError,3.7, +var,PyExc_BufferError,3.2, +var,PyExc_BytesWarning,3.2, +var,PyExc_ChildProcessError,3.7, +var,PyExc_ConnectionAbortedError,3.7, +var,PyExc_ConnectionError,3.7, +var,PyExc_ConnectionRefusedError,3.7, +var,PyExc_ConnectionResetError,3.7, +var,PyExc_DeprecationWarning,3.2, +var,PyExc_EOFError,3.2, +var,PyExc_EncodingWarning,3.10, +var,PyExc_EnvironmentError,3.2, +var,PyExc_Exception,3.2, +var,PyExc_FileExistsError,3.7, +var,PyExc_FileNotFoundError,3.7, +var,PyExc_FloatingPointError,3.2, +var,PyExc_FutureWarning,3.2, +var,PyExc_GeneratorExit,3.2, +var,PyExc_IOError,3.2, +var,PyExc_ImportError,3.2, +var,PyExc_ImportWarning,3.2, +var,PyExc_IndentationError,3.2, +var,PyExc_IndexError,3.2, +var,PyExc_InterruptedError,3.7, +var,PyExc_IsADirectoryError,3.7, +var,PyExc_KeyError,3.2, +var,PyExc_KeyboardInterrupt,3.2, +var,PyExc_LookupError,3.2, +var,PyExc_MemoryError,3.2, +var,PyExc_ModuleNotFoundError,3.6, +var,PyExc_NameError,3.2, +var,PyExc_NotADirectoryError,3.7, +var,PyExc_NotImplementedError,3.2, +var,PyExc_OSError,3.2, +var,PyExc_OverflowError,3.2, +var,PyExc_PendingDeprecationWarning,3.2, +var,PyExc_PermissionError,3.7, +var,PyExc_ProcessLookupError,3.7, +var,PyExc_RecursionError,3.7, +var,PyExc_ReferenceError,3.2, +var,PyExc_ResourceWarning,3.7, +var,PyExc_RuntimeError,3.2, +var,PyExc_RuntimeWarning,3.2, +var,PyExc_StopAsyncIteration,3.7, +var,PyExc_StopIteration,3.2, +var,PyExc_SyntaxError,3.2, +var,PyExc_SyntaxWarning,3.2, +var,PyExc_SystemError,3.2, +var,PyExc_SystemExit,3.2, +var,PyExc_TabError,3.2, +var,PyExc_TimeoutError,3.7, +var,PyExc_TypeError,3.2, +var,PyExc_UnboundLocalError,3.2, +var,PyExc_UnicodeDecodeError,3.2, +var,PyExc_UnicodeEncodeError,3.2, +var,PyExc_UnicodeError,3.2, +var,PyExc_UnicodeTranslateError,3.2, +var,PyExc_UnicodeWarning,3.2, +var,PyExc_UserWarning,3.2, +var,PyExc_ValueError,3.2, +var,PyExc_Warning,3.2, +var,PyExc_WindowsError,3.7,on Windows +var,PyExc_ZeroDivisionError,3.2, +function,PyExceptionClass_Name,3.8, +function,PyException_GetCause,3.2, +function,PyException_GetContext,3.2, +function,PyException_GetTraceback,3.2, +function,PyException_SetCause,3.2, +function,PyException_SetContext,3.2, +function,PyException_SetTraceback,3.2, +function,PyFile_FromFd,3.2, +function,PyFile_GetLine,3.2, +function,PyFile_WriteObject,3.2, +function,PyFile_WriteString,3.2, +var,PyFilter_Type,3.2, +function,PyFloat_AsDouble,3.2, +function,PyFloat_FromDouble,3.2, +function,PyFloat_FromString,3.2, +function,PyFloat_GetInfo,3.2, +function,PyFloat_GetMax,3.2, +function,PyFloat_GetMin,3.2, +var,PyFloat_Type,3.2, +function,PyFrame_GetCode,3.10, +function,PyFrame_GetLineNumber,3.10, +function,PyFrozenSet_New,3.2, +var,PyFrozenSet_Type,3.2, +function,PyGC_Collect,3.2, +function,PyGC_Disable,3.10, +function,PyGC_Enable,3.10, +function,PyGC_IsEnabled,3.10, +function,PyGILState_Ensure,3.2, +function,PyGILState_GetThisThreadState,3.2, +function,PyGILState_Release,3.2, +type,PyGILState_STATE,3.2, +type,PyGetSetDef,3.2, +var,PyGetSetDescr_Type,3.2, +function,PyImport_AddModule,3.2, +function,PyImport_AddModuleObject,3.7, +function,PyImport_AppendInittab,3.2, +function,PyImport_ExecCodeModule,3.2, +function,PyImport_ExecCodeModuleEx,3.2, +function,PyImport_ExecCodeModuleObject,3.7, +function,PyImport_ExecCodeModuleWithPathnames,3.2, +function,PyImport_GetImporter,3.2, +function,PyImport_GetMagicNumber,3.2, +function,PyImport_GetMagicTag,3.2, +function,PyImport_GetModule,3.8, +function,PyImport_GetModuleDict,3.2, +function,PyImport_Import,3.2, +function,PyImport_ImportFrozenModule,3.2, +function,PyImport_ImportFrozenModuleObject,3.7, +function,PyImport_ImportModule,3.2, +function,PyImport_ImportModuleLevel,3.2, +function,PyImport_ImportModuleLevelObject,3.7, +function,PyImport_ImportModuleNoBlock,3.2, +function,PyImport_ReloadModule,3.2, +function,PyIndex_Check,3.8, +type,PyInterpreterState,3.2, +function,PyInterpreterState_Clear,3.2, +function,PyInterpreterState_Delete,3.2, +function,PyInterpreterState_Get,3.9, +function,PyInterpreterState_GetDict,3.8, +function,PyInterpreterState_GetID,3.7, +function,PyInterpreterState_New,3.2, +function,PyIter_Check,3.8, +function,PyIter_Next,3.2, +function,PyIter_Send,3.10, +var,PyListIter_Type,3.2, +var,PyListRevIter_Type,3.2, +function,PyList_Append,3.2, +function,PyList_AsTuple,3.2, +function,PyList_GetItem,3.2, +function,PyList_GetSlice,3.2, +function,PyList_Insert,3.2, +function,PyList_New,3.2, +function,PyList_Reverse,3.2, +function,PyList_SetItem,3.2, +function,PyList_SetSlice,3.2, +function,PyList_Size,3.2, +function,PyList_Sort,3.2, +var,PyList_Type,3.2, +type,PyLongObject,3.2, +var,PyLongRangeIter_Type,3.2, +function,PyLong_AsDouble,3.2, +function,PyLong_AsLong,3.2, +function,PyLong_AsLongAndOverflow,3.2, +function,PyLong_AsLongLong,3.2, +function,PyLong_AsLongLongAndOverflow,3.2, +function,PyLong_AsSize_t,3.2, +function,PyLong_AsSsize_t,3.2, +function,PyLong_AsUnsignedLong,3.2, +function,PyLong_AsUnsignedLongLong,3.2, +function,PyLong_AsUnsignedLongLongMask,3.2, +function,PyLong_AsUnsignedLongMask,3.2, +function,PyLong_AsVoidPtr,3.2, +function,PyLong_FromDouble,3.2, +function,PyLong_FromLong,3.2, +function,PyLong_FromLongLong,3.2, +function,PyLong_FromSize_t,3.2, +function,PyLong_FromSsize_t,3.2, +function,PyLong_FromString,3.2, +function,PyLong_FromUnsignedLong,3.2, +function,PyLong_FromUnsignedLongLong,3.2, +function,PyLong_FromVoidPtr,3.2, +function,PyLong_GetInfo,3.2, +var,PyLong_Type,3.2, +var,PyMap_Type,3.2, +function,PyMapping_Check,3.2, +function,PyMapping_GetItemString,3.2, +function,PyMapping_HasKey,3.2, +function,PyMapping_HasKeyString,3.2, +function,PyMapping_Items,3.2, +function,PyMapping_Keys,3.2, +function,PyMapping_Length,3.2, +function,PyMapping_SetItemString,3.2, +function,PyMapping_Size,3.2, +function,PyMapping_Values,3.2, +function,PyMem_Calloc,3.7, +function,PyMem_Free,3.2, +function,PyMem_Malloc,3.2, +function,PyMem_Realloc,3.2, +type,PyMemberDef,3.2, +var,PyMemberDescr_Type,3.2, +function,PyMemoryView_FromMemory,3.7, +function,PyMemoryView_FromObject,3.2, +function,PyMemoryView_GetContiguous,3.2, +var,PyMemoryView_Type,3.2, +type,PyMethodDef,3.2, +var,PyMethodDescr_Type,3.2, +type,PyModuleDef,3.2, +type,PyModuleDef_Base,3.2, +function,PyModuleDef_Init,3.5, +var,PyModuleDef_Type,3.5, +function,PyModule_AddFunctions,3.7, +function,PyModule_AddIntConstant,3.2, +function,PyModule_AddObject,3.2, +function,PyModule_AddObjectRef,3.10, +function,PyModule_AddStringConstant,3.2, +function,PyModule_AddType,3.10, +function,PyModule_Create2,3.2, +function,PyModule_ExecDef,3.7, +function,PyModule_FromDefAndSpec2,3.7, +function,PyModule_GetDef,3.2, +function,PyModule_GetDict,3.2, +function,PyModule_GetFilename,3.2, +function,PyModule_GetFilenameObject,3.2, +function,PyModule_GetName,3.2, +function,PyModule_GetNameObject,3.7, +function,PyModule_GetState,3.2, +function,PyModule_New,3.2, +function,PyModule_NewObject,3.7, +function,PyModule_SetDocString,3.7, +var,PyModule_Type,3.2, +function,PyNumber_Absolute,3.2, +function,PyNumber_Add,3.2, +function,PyNumber_And,3.2, +function,PyNumber_AsSsize_t,3.2, +function,PyNumber_Check,3.2, +function,PyNumber_Divmod,3.2, +function,PyNumber_Float,3.2, +function,PyNumber_FloorDivide,3.2, +function,PyNumber_InPlaceAdd,3.2, +function,PyNumber_InPlaceAnd,3.2, +function,PyNumber_InPlaceFloorDivide,3.2, +function,PyNumber_InPlaceLshift,3.2, +function,PyNumber_InPlaceMatrixMultiply,3.7, +function,PyNumber_InPlaceMultiply,3.2, +function,PyNumber_InPlaceOr,3.2, +function,PyNumber_InPlacePower,3.2, +function,PyNumber_InPlaceRemainder,3.2, +function,PyNumber_InPlaceRshift,3.2, +function,PyNumber_InPlaceSubtract,3.2, +function,PyNumber_InPlaceTrueDivide,3.2, +function,PyNumber_InPlaceXor,3.2, +function,PyNumber_Index,3.2, +function,PyNumber_Invert,3.2, +function,PyNumber_Long,3.2, +function,PyNumber_Lshift,3.2, +function,PyNumber_MatrixMultiply,3.7, +function,PyNumber_Multiply,3.2, +function,PyNumber_Negative,3.2, +function,PyNumber_Or,3.2, +function,PyNumber_Positive,3.2, +function,PyNumber_Power,3.2, +function,PyNumber_Remainder,3.2, +function,PyNumber_Rshift,3.2, +function,PyNumber_Subtract,3.2, +function,PyNumber_ToBase,3.2, +function,PyNumber_TrueDivide,3.2, +function,PyNumber_Xor,3.2, +function,PyOS_AfterFork,3.2,on platforms with fork() +function,PyOS_AfterFork_Child,3.7,on platforms with fork() +function,PyOS_AfterFork_Parent,3.7,on platforms with fork() +function,PyOS_BeforeFork,3.7,on platforms with fork() +function,PyOS_CheckStack,3.7,on platforms with USE_STACKCHECK +function,PyOS_FSPath,3.6, +var,PyOS_InputHook,3.2, +function,PyOS_InterruptOccurred,3.2, +function,PyOS_double_to_string,3.2, +function,PyOS_getsig,3.2, +function,PyOS_mystricmp,3.2, +function,PyOS_mystrnicmp,3.2, +function,PyOS_setsig,3.2, +type,PyOS_sighandler_t,3.2, +function,PyOS_snprintf,3.2, +function,PyOS_string_to_double,3.2, +function,PyOS_strtol,3.2, +function,PyOS_strtoul,3.2, +function,PyOS_vsnprintf,3.2, +type,PyObject,3.2, +function,PyObject_ASCII,3.2, +function,PyObject_AsFileDescriptor,3.2, +function,PyObject_Bytes,3.2, +function,PyObject_Call,3.2, +function,PyObject_CallFunction,3.2, +function,PyObject_CallFunctionObjArgs,3.2, +function,PyObject_CallMethod,3.2, +function,PyObject_CallMethodObjArgs,3.2, +function,PyObject_CallNoArgs,3.10, +function,PyObject_CallObject,3.2, +function,PyObject_Calloc,3.7, +function,PyObject_ClearWeakRefs,3.2, +function,PyObject_DelItem,3.2, +function,PyObject_DelItemString,3.2, +function,PyObject_Dir,3.2, +function,PyObject_Format,3.2, +function,PyObject_Free,3.2, +function,PyObject_GC_Del,3.2, +function,PyObject_GC_IsFinalized,3.9, +function,PyObject_GC_IsTracked,3.9, +function,PyObject_GC_Track,3.2, +function,PyObject_GC_UnTrack,3.2, +function,PyObject_GenericGetAttr,3.2, +function,PyObject_GenericGetDict,3.10, +function,PyObject_GenericSetAttr,3.2, +function,PyObject_GenericSetDict,3.7, +function,PyObject_GetAiter,3.10, +function,PyObject_GetAttr,3.2, +function,PyObject_GetAttrString,3.2, +function,PyObject_GetItem,3.2, +function,PyObject_GetIter,3.2, +function,PyObject_HasAttr,3.2, +function,PyObject_HasAttrString,3.2, +function,PyObject_Hash,3.2, +function,PyObject_HashNotImplemented,3.2, +function,PyObject_Init,3.2, +function,PyObject_InitVar,3.2, +function,PyObject_IsInstance,3.2, +function,PyObject_IsSubclass,3.2, +function,PyObject_IsTrue,3.2, +function,PyObject_Length,3.2, +function,PyObject_Malloc,3.2, +function,PyObject_Not,3.2, +function,PyObject_Realloc,3.2, +function,PyObject_Repr,3.2, +function,PyObject_RichCompare,3.2, +function,PyObject_RichCompareBool,3.2, +function,PyObject_SelfIter,3.2, +function,PyObject_SetAttr,3.2, +function,PyObject_SetAttrString,3.2, +function,PyObject_SetItem,3.2, +function,PyObject_Size,3.2, +function,PyObject_Str,3.2, +function,PyObject_Type,3.2, +var,PyProperty_Type,3.2, +var,PyRangeIter_Type,3.2, +var,PyRange_Type,3.2, +var,PyReversed_Type,3.2, +function,PySeqIter_New,3.2, +var,PySeqIter_Type,3.2, +function,PySequence_Check,3.2, +function,PySequence_Concat,3.2, +function,PySequence_Contains,3.2, +function,PySequence_Count,3.2, +function,PySequence_DelItem,3.2, +function,PySequence_DelSlice,3.2, +function,PySequence_Fast,3.2, +function,PySequence_GetItem,3.2, +function,PySequence_GetSlice,3.2, +function,PySequence_In,3.2, +function,PySequence_InPlaceConcat,3.2, +function,PySequence_InPlaceRepeat,3.2, +function,PySequence_Index,3.2, +function,PySequence_Length,3.2, +function,PySequence_List,3.2, +function,PySequence_Repeat,3.2, +function,PySequence_SetItem,3.2, +function,PySequence_SetSlice,3.2, +function,PySequence_Size,3.2, +function,PySequence_Tuple,3.2, +var,PySetIter_Type,3.2, +function,PySet_Add,3.2, +function,PySet_Clear,3.2, +function,PySet_Contains,3.2, +function,PySet_Discard,3.2, +function,PySet_New,3.2, +function,PySet_Pop,3.2, +function,PySet_Size,3.2, +var,PySet_Type,3.2, +function,PySlice_AdjustIndices,3.7, +function,PySlice_GetIndices,3.2, +function,PySlice_GetIndicesEx,3.2, +function,PySlice_New,3.2, +var,PySlice_Type,3.2, +function,PySlice_Unpack,3.7, +function,PyState_AddModule,3.3, +function,PyState_FindModule,3.2, +function,PyState_RemoveModule,3.3, +type,PyStructSequence_Desc,3.2, +type,PyStructSequence_Field,3.2, +function,PyStructSequence_GetItem,3.2, +function,PyStructSequence_New,3.2, +function,PyStructSequence_NewType,3.2, +function,PyStructSequence_SetItem,3.2, +var,PySuper_Type,3.2, +function,PySys_AddWarnOption,3.2, +function,PySys_AddWarnOptionUnicode,3.2, +function,PySys_AddXOption,3.7, +function,PySys_FormatStderr,3.2, +function,PySys_FormatStdout,3.2, +function,PySys_GetObject,3.2, +function,PySys_GetXOptions,3.7, +function,PySys_HasWarnOptions,3.2, +function,PySys_ResetWarnOptions,3.2, +function,PySys_SetArgv,3.2, +function,PySys_SetArgvEx,3.2, +function,PySys_SetObject,3.2, +function,PySys_SetPath,3.2, +function,PySys_WriteStderr,3.2, +function,PySys_WriteStdout,3.2, +type,PyThreadState,3.2, +function,PyThreadState_Clear,3.2, +function,PyThreadState_Delete,3.2, +function,PyThreadState_Get,3.2, +function,PyThreadState_GetDict,3.2, +function,PyThreadState_GetFrame,3.10, +function,PyThreadState_GetID,3.10, +function,PyThreadState_GetInterpreter,3.10, +function,PyThreadState_New,3.2, +function,PyThreadState_SetAsyncExc,3.2, +function,PyThreadState_Swap,3.2, +function,PyThread_GetInfo,3.3, +function,PyThread_ReInitTLS,3.2, +function,PyThread_acquire_lock,3.2, +function,PyThread_acquire_lock_timed,3.2, +function,PyThread_allocate_lock,3.2, +function,PyThread_create_key,3.2, +function,PyThread_delete_key,3.2, +function,PyThread_delete_key_value,3.2, +function,PyThread_exit_thread,3.2, +function,PyThread_free_lock,3.2, +function,PyThread_get_key_value,3.2, +function,PyThread_get_stacksize,3.2, +function,PyThread_get_thread_ident,3.2, +function,PyThread_get_thread_native_id,3.2, +function,PyThread_init_thread,3.2, +function,PyThread_release_lock,3.2, +function,PyThread_set_key_value,3.2, +function,PyThread_set_stacksize,3.2, +function,PyThread_start_new_thread,3.2, +function,PyThread_tss_alloc,3.7, +function,PyThread_tss_create,3.7, +function,PyThread_tss_delete,3.7, +function,PyThread_tss_free,3.7, +function,PyThread_tss_get,3.7, +function,PyThread_tss_is_created,3.7, +function,PyThread_tss_set,3.7, +function,PyTraceBack_Here,3.2, +function,PyTraceBack_Print,3.2, +var,PyTraceBack_Type,3.2, +var,PyTupleIter_Type,3.2, +function,PyTuple_GetItem,3.2, +function,PyTuple_GetSlice,3.2, +function,PyTuple_New,3.2, +function,PyTuple_Pack,3.2, +function,PyTuple_SetItem,3.2, +function,PyTuple_Size,3.2, +var,PyTuple_Type,3.2, +type,PyTypeObject,3.2, +function,PyType_ClearCache,3.2, +function,PyType_FromModuleAndSpec,3.10, +function,PyType_FromSpec,3.2, +function,PyType_FromSpecWithBases,3.3, +function,PyType_GenericAlloc,3.2, +function,PyType_GenericNew,3.2, +function,PyType_GetFlags,3.2, +function,PyType_GetModule,3.10, +function,PyType_GetModuleState,3.10, +function,PyType_GetSlot,3.4, +function,PyType_IsSubtype,3.2, +function,PyType_Modified,3.2, +function,PyType_Ready,3.2, +type,PyType_Slot,3.2, +type,PyType_Spec,3.2, +var,PyType_Type,3.2, +function,PyUnicodeDecodeError_Create,3.2, +function,PyUnicodeDecodeError_GetEncoding,3.2, +function,PyUnicodeDecodeError_GetEnd,3.2, +function,PyUnicodeDecodeError_GetObject,3.2, +function,PyUnicodeDecodeError_GetReason,3.2, +function,PyUnicodeDecodeError_GetStart,3.2, +function,PyUnicodeDecodeError_SetEnd,3.2, +function,PyUnicodeDecodeError_SetReason,3.2, +function,PyUnicodeDecodeError_SetStart,3.2, +function,PyUnicodeEncodeError_GetEncoding,3.2, +function,PyUnicodeEncodeError_GetEnd,3.2, +function,PyUnicodeEncodeError_GetObject,3.2, +function,PyUnicodeEncodeError_GetReason,3.2, +function,PyUnicodeEncodeError_GetStart,3.2, +function,PyUnicodeEncodeError_SetEnd,3.2, +function,PyUnicodeEncodeError_SetReason,3.2, +function,PyUnicodeEncodeError_SetStart,3.2, +var,PyUnicodeIter_Type,3.2, +function,PyUnicodeTranslateError_GetEnd,3.2, +function,PyUnicodeTranslateError_GetObject,3.2, +function,PyUnicodeTranslateError_GetReason,3.2, +function,PyUnicodeTranslateError_GetStart,3.2, +function,PyUnicodeTranslateError_SetEnd,3.2, +function,PyUnicodeTranslateError_SetReason,3.2, +function,PyUnicodeTranslateError_SetStart,3.2, +function,PyUnicode_Append,3.2, +function,PyUnicode_AppendAndDel,3.2, +function,PyUnicode_AsASCIIString,3.2, +function,PyUnicode_AsCharmapString,3.2, +function,PyUnicode_AsDecodedObject,3.2, +function,PyUnicode_AsDecodedUnicode,3.2, +function,PyUnicode_AsEncodedObject,3.2, +function,PyUnicode_AsEncodedString,3.2, +function,PyUnicode_AsEncodedUnicode,3.2, +function,PyUnicode_AsLatin1String,3.2, +function,PyUnicode_AsMBCSString,3.7,on Windows +function,PyUnicode_AsRawUnicodeEscapeString,3.2, +function,PyUnicode_AsUCS4,3.7, +function,PyUnicode_AsUCS4Copy,3.7, +function,PyUnicode_AsUTF16String,3.2, +function,PyUnicode_AsUTF32String,3.2, +function,PyUnicode_AsUTF8AndSize,3.10, +function,PyUnicode_AsUTF8String,3.2, +function,PyUnicode_AsUnicodeEscapeString,3.2, +function,PyUnicode_AsWideChar,3.2, +function,PyUnicode_AsWideCharString,3.7, +function,PyUnicode_BuildEncodingMap,3.2, +function,PyUnicode_Compare,3.2, +function,PyUnicode_CompareWithASCIIString,3.2, +function,PyUnicode_Concat,3.2, +function,PyUnicode_Contains,3.2, +function,PyUnicode_Count,3.2, +function,PyUnicode_Decode,3.2, +function,PyUnicode_DecodeASCII,3.2, +function,PyUnicode_DecodeCharmap,3.2, +function,PyUnicode_DecodeCodePageStateful,3.7,on Windows +function,PyUnicode_DecodeFSDefault,3.2, +function,PyUnicode_DecodeFSDefaultAndSize,3.2, +function,PyUnicode_DecodeLatin1,3.2, +function,PyUnicode_DecodeLocale,3.7, +function,PyUnicode_DecodeLocaleAndSize,3.7, +function,PyUnicode_DecodeMBCS,3.7,on Windows +function,PyUnicode_DecodeMBCSStateful,3.7,on Windows +function,PyUnicode_DecodeRawUnicodeEscape,3.2, +function,PyUnicode_DecodeUTF16,3.2, +function,PyUnicode_DecodeUTF16Stateful,3.2, +function,PyUnicode_DecodeUTF32,3.2, +function,PyUnicode_DecodeUTF32Stateful,3.2, +function,PyUnicode_DecodeUTF7,3.2, +function,PyUnicode_DecodeUTF7Stateful,3.2, +function,PyUnicode_DecodeUTF8,3.2, +function,PyUnicode_DecodeUTF8Stateful,3.2, +function,PyUnicode_DecodeUnicodeEscape,3.2, +function,PyUnicode_EncodeCodePage,3.7,on Windows +function,PyUnicode_EncodeFSDefault,3.2, +function,PyUnicode_EncodeLocale,3.7, +function,PyUnicode_FSConverter,3.2, +function,PyUnicode_FSDecoder,3.2, +function,PyUnicode_Find,3.2, +function,PyUnicode_FindChar,3.7, +function,PyUnicode_Format,3.2, +function,PyUnicode_FromEncodedObject,3.2, +function,PyUnicode_FromFormat,3.2, +function,PyUnicode_FromFormatV,3.2, +function,PyUnicode_FromObject,3.2, +function,PyUnicode_FromOrdinal,3.2, +function,PyUnicode_FromString,3.2, +function,PyUnicode_FromStringAndSize,3.2, +function,PyUnicode_FromWideChar,3.2, +function,PyUnicode_GetDefaultEncoding,3.2, +function,PyUnicode_GetLength,3.7, +function,PyUnicode_GetSize,3.2, +function,PyUnicode_InternFromString,3.2, +function,PyUnicode_InternImmortal,3.2, +function,PyUnicode_InternInPlace,3.2, +function,PyUnicode_IsIdentifier,3.2, +function,PyUnicode_Join,3.2, +function,PyUnicode_Partition,3.2, +function,PyUnicode_RPartition,3.2, +function,PyUnicode_RSplit,3.2, +function,PyUnicode_ReadChar,3.7, +function,PyUnicode_Replace,3.2, +function,PyUnicode_Resize,3.2, +function,PyUnicode_RichCompare,3.2, +function,PyUnicode_Split,3.2, +function,PyUnicode_Splitlines,3.2, +function,PyUnicode_Substring,3.7, +function,PyUnicode_Tailmatch,3.2, +function,PyUnicode_Translate,3.2, +var,PyUnicode_Type,3.2, +function,PyUnicode_WriteChar,3.7, +type,PyVarObject,3.2, +type,PyWeakReference,3.2, +function,PyWeakref_GetObject,3.2, +function,PyWeakref_NewProxy,3.2, +function,PyWeakref_NewRef,3.2, +var,PyWrapperDescr_Type,3.2, +function,PyWrapper_New,3.2, +var,PyZip_Type,3.2, +function,Py_AddPendingCall,3.2, +function,Py_AtExit,3.2, +macro,Py_BEGIN_ALLOW_THREADS,3.2, +macro,Py_BLOCK_THREADS,3.2, +function,Py_BuildValue,3.2, +function,Py_BytesMain,3.8, +function,Py_CompileString,3.2, +function,Py_DecRef,3.2, +function,Py_DecodeLocale,3.7, +macro,Py_END_ALLOW_THREADS,3.2, +function,Py_EncodeLocale,3.7, +function,Py_EndInterpreter,3.2, +function,Py_EnterRecursiveCall,3.9, +function,Py_Exit,3.2, +function,Py_FatalError,3.2, +var,Py_FileSystemDefaultEncodeErrors,3.10, +var,Py_FileSystemDefaultEncoding,3.2, +function,Py_Finalize,3.2, +function,Py_FinalizeEx,3.6, +function,Py_FrozenMain,3.10, +function,Py_GenericAlias,3.9, +function,Py_GenericAliasType,3.9, +function,Py_GetBuildInfo,3.2, +function,Py_GetCompiler,3.2, +function,Py_GetCopyright,3.2, +function,Py_GetExecPrefix,3.2, +function,Py_GetPath,3.2, +function,Py_GetPlatform,3.2, +function,Py_GetPrefix,3.2, +function,Py_GetProgramFullPath,3.2, +function,Py_GetProgramName,3.2, +function,Py_GetPythonHome,3.2, +function,Py_GetRecursionLimit,3.2, +function,Py_GetVersion,3.2, +var,Py_HasFileSystemDefaultEncoding,3.2, +function,Py_IncRef,3.2, +function,Py_Initialize,3.2, +function,Py_InitializeEx,3.2, +function,Py_Is,3.10, +function,Py_IsFalse,3.10, +function,Py_IsInitialized,3.2, +function,Py_IsNone,3.10, +function,Py_IsTrue,3.10, +function,Py_LeaveRecursiveCall,3.9, +function,Py_Main,3.2, +function,Py_MakePendingCalls,3.2, +function,Py_NewInterpreter,3.2, +function,Py_NewRef,3.10, +function,Py_ReprEnter,3.2, +function,Py_ReprLeave,3.2, +function,Py_SetPath,3.7, +function,Py_SetProgramName,3.2, +function,Py_SetPythonHome,3.2, +function,Py_SetRecursionLimit,3.2, +type,Py_UCS4,3.2, +macro,Py_UNBLOCK_THREADS,3.2, +var,Py_UTF8Mode,3.8, +function,Py_VaBuildValue,3.2, +function,Py_XNewRef,3.10, +type,Py_intptr_t,3.2, +type,Py_ssize_t,3.2, +type,Py_uintptr_t,3.2, +type,_frame,3.2, +type,_node,3.2, +type,allocfunc,3.2, +type,binaryfunc,3.2, +type,descrgetfunc,3.2, +type,descrsetfunc,3.2, +type,destructor,3.2, +type,getattrfunc,3.2, +type,getattrofunc,3.2, +type,getiterfunc,3.2, +type,getter,3.2, +type,hashfunc,3.2, +type,initproc,3.2, +type,inquiry,3.2, +type,iternextfunc,3.2, +type,lenfunc,3.2, +type,newfunc,3.2, +type,objobjargproc,3.2, +type,objobjproc,3.2, +type,reprfunc,3.2, +type,richcmpfunc,3.2, +type,setattrfunc,3.2, +type,setattrofunc,3.2, +type,setter,3.2, +type,ssizeargfunc,3.2, +type,ssizeobjargproc,3.2, +type,ssizessizeargfunc,3.2, +type,ssizessizeobjargproc,3.2, +type,symtable,3.2, +type,ternaryfunc,3.2, +type,traverseproc,3.2, +type,unaryfunc,3.2, +type,visitproc,3.2, diff --git a/Doc/tools/extensions/c_annotations.py b/Doc/tools/extensions/c_annotations.py index 76c9d920cbe31f..489f06613eb310 100644 --- a/Doc/tools/extensions/c_annotations.py +++ b/Doc/tools/extensions/c_annotations.py @@ -10,8 +10,10 @@ * stable API annotations - Usage: Set the `refcount_file` config value to the path to the reference + Usage: + * Set the `refcount_file` config value to the path to the reference count data file. + * Set the `stable_abi_file` config value to the path to stable ABI list. :copyright: Copyright 2007-2014 by Georg Brandl. :license: Python license. @@ -20,11 +22,23 @@ from os import path from docutils import nodes from docutils.parsers.rst import directives +from docutils.parsers.rst import Directive +from docutils.statemachine import StringList +import csv from sphinx import addnodes from sphinx.domains.c import CObject +REST_ROLE_MAP = { + 'function': 'func', + 'var': 'data', + 'type': 'type', + 'macro': 'macro', + 'type': 'type', +} + + class RCEntry: def __init__(self, name): self.name = name @@ -33,12 +47,10 @@ def __init__(self, name): self.result_refs = None -class Annotations(dict): - @classmethod - def fromfile(cls, filename): - d = cls() - fp = open(filename, 'r') - try: +class Annotations: + def __init__(self, refcount_filename, stable_abi_file): + self.refcount_data = {} + with open(refcount_filename, 'r') as fp: for line in fp: line = line.strip() if line[:1] in ("", "#"): @@ -50,9 +62,9 @@ def fromfile(cls, filename): function, type, arg, refcount, comment = parts # Get the entry, creating it if needed: try: - entry = d[function] + entry = self.refcount_data[function] except KeyError: - entry = d[function] = RCEntry(function) + entry = self.refcount_data[function] = RCEntry(function) if not refcount or refcount == "null": refcount = None else: @@ -64,27 +76,58 @@ def fromfile(cls, filename): else: entry.result_type = type entry.result_refs = refcount - finally: - fp.close() - return d + + self.stable_abi_data = {} + with open(stable_abi_file, 'r') as fp: + for record in csv.DictReader(fp): + role = record['role'] + name = record['name'] + self.stable_abi_data[name] = record def add_annotations(self, app, doctree): for node in doctree.traverse(addnodes.desc_content): par = node.parent if par['domain'] != 'c': continue - if par['stableabi']: - node.insert(0, nodes.emphasis(' Part of the stable ABI.', - ' Part of the stable ABI.', - classes=['stableabi'])) - if par['objtype'] != 'function': - continue if not par[0].has_key('ids') or not par[0]['ids']: continue name = par[0]['ids'][0] if name.startswith("c."): name = name[2:] - entry = self.get(name) + + objtype = par['objtype'] + + # Stable ABI annotation. These have two forms: + # Part of the [Stable ABI](link). + # Part of the [Stable ABI](link) since version X.Y. + record = self.stable_abi_data.get(name) + if record: + if record['role'] != objtype: + raise ValueError( + f"Object type mismatch in limited API annotation " + f"for {name}: {record['role']!r} != {objtype!r}") + stable_added = record['added'] + message = ' Part of the ' + emph_node = nodes.emphasis(message, message, + classes=['stableabi']) + ref_node = addnodes.pending_xref( + 'Stable ABI', refdomain="std", reftarget='stable', + reftype='ref', refexplicit="False") + ref_node += nodes.Text('Stable ABI') + emph_node += ref_node + if record['ifdef_note']: + emph_node += nodes.Text(' ' + record['ifdef_note']) + if stable_added == '3.2': + # Stable ABI was introduced in 3.2. + emph_node += nodes.Text('.') + else: + emph_node += nodes.Text(f' since version {stable_added}.') + node.insert(0, emph_node) + + # Return value annotation + if objtype != 'function': + continue + entry = self.refcount_data.get(name) if not entry: continue elif not entry.result_type.endswith("Object*"): @@ -99,13 +142,36 @@ def add_annotations(self, app, doctree): def init_annotations(app): - refcounts = Annotations.fromfile( - path.join(app.srcdir, app.config.refcount_file)) - app.connect('doctree-read', refcounts.add_annotations) + annotations = Annotations( + path.join(app.srcdir, app.config.refcount_file), + path.join(app.srcdir, app.config.stable_abi_file), + ) + app.connect('doctree-read', annotations.add_annotations) + + class LimitedAPIList(Directive): + + has_content = False + required_arguments = 0 + optional_arguments = 0 + final_argument_whitespace = True + + def run(self): + content = [] + for record in annotations.stable_abi_data.values(): + role = REST_ROLE_MAP[record['role']] + name = record['name'] + content.append(f'* :c:{role}:`{name}`') + + pnode = nodes.paragraph() + self.state.nested_parse(StringList(content), 0, pnode) + return [pnode] + + app.add_directive('limited-api-list', LimitedAPIList) def setup(app): app.add_config_value('refcount_file', '', True) + app.add_config_value('stable_abi_file', '', True) app.connect('builder-inited', init_annotations) # monkey-patch C object... diff --git a/Include/README.rst b/Include/README.rst index d2467ca22fa038..f52e690eac9a91 100644 --- a/Include/README.rst +++ b/Include/README.rst @@ -3,66 +3,10 @@ The Python C API The C API is divided into three sections: -1. ``Include/`` -2. ``Include/cpython/`` -3. ``Include/internal/`` +1. ``Include/``: Limited API +2. ``Include/cpython/``: CPython implementation details +3. ``Include/internal/``: The internal API +Information on changing the C API is available `in the developer guide`_ -Include: Limited API -==================== - -``Include/``, excluding the ``cpython`` and ``internal`` subdirectories, -contains the public Limited API (Application Programming Interface). -The Limited API is a subset of the C API, designed to guarantee ABI -stability across Python 3 versions, and is defined in :pep:`384`. - -Guidelines for expanding the Limited API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference -- Macros should not expose implementation details -- Please start a public discussion before expanding the API -- Functions or macros with a ``_Py`` prefix do not belong in ``Include/``. - -It is possible to add a function or macro to the Limited API from a -given Python version. For example, to add a function to the Limited API -from Python 3.10 and onwards, wrap it with -``#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000``. - - -Include/cpython: CPython implementation details -=============================================== - -``Include/cpython/`` contains the public API that is excluded from the -Limited API and the Stable ABI. - -Guidelines for expanding the public API: - -- Functions *must not* steal references -- Functions *must not* return borrowed references -- Functions returning references *must* return a strong reference - - -Include/internal: The internal API -================================== - - -With PyAPI_FUNC or PyAPI_DATA ------------------------------ - -Functions or structures in ``Include/internal/`` defined with -``PyAPI_FUNC`` or ``PyAPI_DATA`` are internal functions which are -exposed only for specific use cases like debuggers and profilers. - - -With the extern keyword ------------------------ - -Functions in ``Include/internal/`` defined with the ``extern`` keyword -*must not and can not* be used outside the CPython code base. Only -built-in stdlib extensions (built with the ``Py_BUILD_CORE_BUILTIN`` -macro defined) can use such functions. - -When in doubt, new internal C functions should be defined in -``Include/internal`` using the ``extern`` keyword. +.. _in the developer guide: https://devguide.python.org/c-api/ diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 399153db81c254..2ba5b66cd1258b 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -21,6 +21,7 @@ import os.path import io import re +import csv MISSING = object() @@ -45,6 +46,11 @@ MACOS = (sys.platform == "darwin") UNIXY = MACOS or (sys.platform == "linux") # XXX should this be "not Windows"? +IFDEF_DOC_NOTES = { + 'MS_WINDOWS': 'on Windows', + 'HAVE_FORK': 'on platforms with fork()', + 'USE_STACKCHECK': 'on platforms with USE_STACKCHECK', +} # The stable ABI manifest (Misc/stable_abi.txt) exists only to fill the # following dataclasses. @@ -227,16 +233,31 @@ def sort_key(item): key=sort_key): write(f'EXPORT_DATA({item.name})') +REST_ROLES = { + 'function': 'function', + 'data': 'var', + 'struct': 'type', + 'macro': 'macro', + # 'const': 'const', # all undocumented + 'typedef': 'type', +} @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) - + writer = csv.DictWriter( + outfile, ['role', 'name', 'added', 'ifdef_note'], lineterminator='\n') + writer.writeheader() + for item in manifest.select(REST_ROLES.keys(), include_abi_only=False): + if item.ifdef: + ifdef_note = IFDEF_DOC_NOTES[item.ifdef] + else: + ifdef_note = None + writer.writerow({ + 'role': REST_ROLES[item.kind], + 'name': item.name, + 'added': item.added, + 'ifdef_note': ifdef_note}) def generate_or_check(manifest, args, path, func): """Generate/check a file with a single generator From webhook-mailer at python.org Fri May 14 01:31:33 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:31:33 -0000 Subject: [Python-checkins] bpo-43977: Update pattern matching language reference docs (GH-25917) Message-ID: https://github.com/python/cpython/commit/53c91ac5253bf1cb3cb20e1345e798a53f4c3517 commit: 53c91ac5253bf1cb3cb20e1345e798a53f4c3517 branch: main author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: willingc date: 2021-05-13T22:31:28-07:00 summary: bpo-43977: Update pattern matching language reference docs (GH-25917) * Update patma language reference with new changes to sequence and mapping * update 3.10 whatsnew too files: M Doc/reference/compound_stmts.rst M Doc/whatsnew/3.10.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 77400a8d8504f3..0274095feffdef 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -822,7 +822,7 @@ and binds no name. Syntax: ``_`` is a :ref:`soft keyword ` within any pattern, but only within patterns. It is an identifier, as usual, even within -``match`` headers, ``guards``, and ``case`` blocks. +``match`` subject expressions, ``guard``\ s, and ``case`` blocks. In simple terms, ``_`` will always succeed. @@ -900,8 +900,8 @@ sequence pattern. The following is the logical flow for matching a sequence pattern against a subject value: -#. If the subject value is not an instance of a - :class:`collections.abc.Sequence` the sequence pattern fails. +#. If the subject value is not a sequence [#]_, the sequence pattern + fails. #. If the subject value is an instance of ``str``, ``bytes`` or ``bytearray`` the sequence pattern fails. @@ -943,7 +943,7 @@ subject value: In simple terms ``[P1, P2, P3,`` ... ``, P]`` matches only if all the following happens: -* ``isinstance(, collections.abc.Sequence)`` +* check ```` is a sequence * ``len(subject) == `` * ``P1`` matches ``[0]`` (note that this match can also bind names) * ``P2`` matches ``[1]`` (note that this match can also bind names) @@ -975,8 +975,7 @@ runtime error and will raise :exc:`ValueError`.) The following is the logical flow for matching a mapping pattern against a subject value: -#. If the subject value is not an instance of :class:`collections.abc.Mapping`, - the mapping pattern fails. +#. If the subject value is not a mapping [#]_,the mapping pattern fails. #. If every key given in the mapping pattern is present in the subject mapping, and the pattern for each key matches the corresponding item of the subject @@ -993,7 +992,7 @@ subject value: In simple terms ``{KEY1: P1, KEY2: P2, ... }`` matches only if all the following happens: -* ``isinstance(, collections.abc.Mapping)`` +* check ```` is a mapping * ``KEY1 in `` * ``P1`` matches ``[KEY1]`` * ... and so on for the corresponding KEY/pattern pair. @@ -1526,6 +1525,35 @@ body of a coroutine function. there is a :keyword:`finally` clause which happens to raise another exception. That new exception causes the old one to be lost. +.. [#] In pattern matching, a sequence is defined as one of the following: + + * a class that inherits from :class:`collections.abc.Sequence` + * a Python class that has been registered as :class:`collections.abc.Sequence` + * a builtin class that has its (CPython) :data:`Py_TPFLAGS_SEQUENCE` bit set + * a class that inherits from any of the above + + The following standard library classes are sequences: + + * :class:`array.array` + * :class:`collections.deque` + * :class:`list` + * :class:`memoryview` + * :class:`range` + * :class:`tuple` + + .. note:: Subject values of type ``str``, ``bytes``, and ``bytearray`` + do not match sequence patterns. + +.. [#] In pattern matching, a mapping is defined as one of the following: + + * a class that inherits from :class:`collections.abc.Mapping` + * a Python class that has been registered as :class:`collections.abc.Mapping` + * a builtin class that has its (CPython) :data:`Py_TPFLAGS_MAPPING` bit set + * a class that inherits from any of the above + + The standard library classes :class:`dict` and :class:`types.MappingProxyType` + are mappings. + .. [#] A string literal appearing as the first statement in the function body is transformed into the function's ``__doc__`` attribute and therefore the function's :term:`docstring`. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9394ee7d6223ba..c15bb326938097 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -589,7 +589,7 @@ Several other key features: - Like unpacking assignments, tuple and list patterns have exactly the same meaning and actually match arbitrary sequences. Technically, - the subject must be an instance of ``collections.abc.Sequence``. + the subject must be a sequence. Therefore, an important exception is that patterns don't match iterators. Also, to prevent a common mistake, sequence patterns don't match strings. From webhook-mailer at python.org Fri May 14 01:37:28 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:37:28 -0000 Subject: [Python-checkins] Update doc as relative import can be used with star import (GH-25667) Message-ID: https://github.com/python/cpython/commit/3d4b5f1019123a7d74801500eb18ec8fa12136bc commit: 3d4b5f1019123a7d74801500eb18ec8fa12136bc branch: main author: Saiyang Gou committer: willingc date: 2021-05-13T22:37:19-07:00 summary: Update doc as relative import can be used with star import (GH-25667) files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 3aba2700048bc0..bb1209dfc33beb 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -734,7 +734,7 @@ The :keyword:`!import` statement : ("," `identifier` ["as" `identifier`])* : | "from" `relative_module` "import" "(" `identifier` ["as" `identifier`] : ("," `identifier` ["as" `identifier`])* [","] ")" - : | "from" `module` "import" "*" + : | "from" `relative_module` "import" "*" module: (`identifier` ".")* `identifier` relative_module: "."* `module` | "."+ From webhook-mailer at python.org Fri May 14 01:55:47 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 05:55:47 -0000 Subject: [Python-checkins] bpo-43977: Update pattern matching language reference docs (GH-25917) (GH-26117) Message-ID: https://github.com/python/cpython/commit/e7d25d3f3b335eb46d102137b447325f54750e31 commit: e7d25d3f3b335eb46d102137b447325f54750e31 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: willingc date: 2021-05-13T22:55:41-07:00 summary: bpo-43977: Update pattern matching language reference docs (GH-25917) (GH-26117) * Update patma language reference with new changes to sequence and mapping * update 3.10 whatsnew too (cherry picked from commit 53c91ac5253bf1cb3cb20e1345e798a53f4c3517) 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: M Doc/reference/compound_stmts.rst M Doc/whatsnew/3.10.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 77400a8d8504f3..0274095feffdef 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -822,7 +822,7 @@ and binds no name. Syntax: ``_`` is a :ref:`soft keyword ` within any pattern, but only within patterns. It is an identifier, as usual, even within -``match`` headers, ``guards``, and ``case`` blocks. +``match`` subject expressions, ``guard``\ s, and ``case`` blocks. In simple terms, ``_`` will always succeed. @@ -900,8 +900,8 @@ sequence pattern. The following is the logical flow for matching a sequence pattern against a subject value: -#. If the subject value is not an instance of a - :class:`collections.abc.Sequence` the sequence pattern fails. +#. If the subject value is not a sequence [#]_, the sequence pattern + fails. #. If the subject value is an instance of ``str``, ``bytes`` or ``bytearray`` the sequence pattern fails. @@ -943,7 +943,7 @@ subject value: In simple terms ``[P1, P2, P3,`` ... ``, P]`` matches only if all the following happens: -* ``isinstance(, collections.abc.Sequence)`` +* check ```` is a sequence * ``len(subject) == `` * ``P1`` matches ``[0]`` (note that this match can also bind names) * ``P2`` matches ``[1]`` (note that this match can also bind names) @@ -975,8 +975,7 @@ runtime error and will raise :exc:`ValueError`.) The following is the logical flow for matching a mapping pattern against a subject value: -#. If the subject value is not an instance of :class:`collections.abc.Mapping`, - the mapping pattern fails. +#. If the subject value is not a mapping [#]_,the mapping pattern fails. #. If every key given in the mapping pattern is present in the subject mapping, and the pattern for each key matches the corresponding item of the subject @@ -993,7 +992,7 @@ subject value: In simple terms ``{KEY1: P1, KEY2: P2, ... }`` matches only if all the following happens: -* ``isinstance(, collections.abc.Mapping)`` +* check ```` is a mapping * ``KEY1 in `` * ``P1`` matches ``[KEY1]`` * ... and so on for the corresponding KEY/pattern pair. @@ -1526,6 +1525,35 @@ body of a coroutine function. there is a :keyword:`finally` clause which happens to raise another exception. That new exception causes the old one to be lost. +.. [#] In pattern matching, a sequence is defined as one of the following: + + * a class that inherits from :class:`collections.abc.Sequence` + * a Python class that has been registered as :class:`collections.abc.Sequence` + * a builtin class that has its (CPython) :data:`Py_TPFLAGS_SEQUENCE` bit set + * a class that inherits from any of the above + + The following standard library classes are sequences: + + * :class:`array.array` + * :class:`collections.deque` + * :class:`list` + * :class:`memoryview` + * :class:`range` + * :class:`tuple` + + .. note:: Subject values of type ``str``, ``bytes``, and ``bytearray`` + do not match sequence patterns. + +.. [#] In pattern matching, a mapping is defined as one of the following: + + * a class that inherits from :class:`collections.abc.Mapping` + * a Python class that has been registered as :class:`collections.abc.Mapping` + * a builtin class that has its (CPython) :data:`Py_TPFLAGS_MAPPING` bit set + * a class that inherits from any of the above + + The standard library classes :class:`dict` and :class:`types.MappingProxyType` + are mappings. + .. [#] A string literal appearing as the first statement in the function body is transformed into the function's ``__doc__`` attribute and therefore the function's :term:`docstring`. diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9394ee7d6223ba..c15bb326938097 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -589,7 +589,7 @@ Several other key features: - Like unpacking assignments, tuple and list patterns have exactly the same meaning and actually match arbitrary sequences. Technically, - the subject must be an instance of ``collections.abc.Sequence``. + the subject must be a sequence. Therefore, an important exception is that patterns don't match iterators. Also, to prevent a common mistake, sequence patterns don't match strings. From webhook-mailer at python.org Fri May 14 02:00:00 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 06:00:00 -0000 Subject: [Python-checkins] bpo-38250: add version added for FlagBoundary (GH-25820) Message-ID: https://github.com/python/cpython/commit/65d180d98348289db1592e8dd2cc6af4225573ea commit: 65d180d98348289db1592e8dd2cc6af4225573ea branch: main author: Shantanu <12621235+hauntsaninja at users.noreply.github.com> committer: willingc date: 2021-05-13T22:59:53-07:00 summary: bpo-38250: add version added for FlagBoundary (GH-25820) * bpo-38250: add version added for FlagBoundary * Also add versionadded for utilities Co-authored-by: hauntsaninja <> files: M Doc/library/enum.rst diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index 466d95941468af..b755622afc3680 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -575,6 +575,8 @@ Data Types >>> KeepFlag(2**2 + 2**4) KeepFlag.BLUE|0x10 +.. versionadded:: 3.10 ``FlagBoundary`` + Utilites and Decorators ----------------------- @@ -598,6 +600,7 @@ Utilites and Decorators also injects the members, and their aliases, into the the global namespace they were defined in. +.. versionadded:: 3.10 .. decorator:: property @@ -610,6 +613,8 @@ Utilites and Decorators *Enum* class, and *Enum* subclasses can define members with the names ``value`` and ``name``. +.. versionadded:: 3.10 + .. decorator:: unique A :keyword:`class` decorator specifically for enumerations. It searches an From webhook-mailer at python.org Fri May 14 02:06:33 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 06:06:33 -0000 Subject: [Python-checkins] Updated code example for asyncio.gather (GH-20604) Message-ID: https://github.com/python/cpython/commit/56b8ea65d28bd865e2363e10e9f1c2ca3433ffc2 commit: 56b8ea65d28bd865e2363e10e9f1c2ca3433ffc2 branch: main author: josephernest committer: orsenthil date: 2021-05-13T23:06:26-07:00 summary: Updated code example for asyncio.gather (GH-20604) The previous example did not fully showcase the interest of using gather. Here the example showcases "the result is an aggregate list of returned values". files: M Doc/library/asyncio-task.rst diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 3f54ecb08efc1f..69e965cfc1d2d3 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -358,32 +358,35 @@ Running Tasks Concurrently async def factorial(name, number): f = 1 for i in range(2, number + 1): - print(f"Task {name}: Compute factorial({i})...") + print(f"Task {name}: Compute factorial({number}), currently i={i}...") await asyncio.sleep(1) f *= i print(f"Task {name}: factorial({number}) = {f}") + return f async def main(): # Schedule three calls *concurrently*: - await asyncio.gather( + L = await asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), ) + print(L) asyncio.run(main()) # Expected output: # - # Task A: Compute factorial(2)... - # Task B: Compute factorial(2)... - # Task C: Compute factorial(2)... + # Task A: Compute factorial(2), currently i=2... + # Task B: Compute factorial(3), currently i=2... + # Task C: Compute factorial(4), currently i=2... # Task A: factorial(2) = 2 - # Task B: Compute factorial(3)... - # Task C: Compute factorial(3)... + # Task B: Compute factorial(3), currently i=3... + # Task C: Compute factorial(4), currently i=3... # Task B: factorial(3) = 6 - # Task C: Compute factorial(4)... + # Task C: Compute factorial(4), currently i=4... # Task C: factorial(4) = 24 + # [2, 6, 24] .. note:: If *return_exceptions* is False, cancelling gather() after it From webhook-mailer at python.org Fri May 14 02:07:24 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 06:07:24 -0000 Subject: [Python-checkins] Updated code example for asyncio.gather (GH-20604) (GH-26119) Message-ID: https://github.com/python/cpython/commit/464269778b10d928be453237593696d192b1b947 commit: 464269778b10d928be453237593696d192b1b947 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-13T23:07:20-07:00 summary: Updated code example for asyncio.gather (GH-20604) (GH-26119) The previous example did not fully showcase the interest of using gather. Here the example showcases "the result is an aggregate list of returned values". (cherry picked from commit 56b8ea65d28bd865e2363e10e9f1c2ca3433ffc2) Co-authored-by: josephernest Co-authored-by: josephernest files: M Doc/library/asyncio-task.rst diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 3f54ecb08efc1f..69e965cfc1d2d3 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -358,32 +358,35 @@ Running Tasks Concurrently async def factorial(name, number): f = 1 for i in range(2, number + 1): - print(f"Task {name}: Compute factorial({i})...") + print(f"Task {name}: Compute factorial({number}), currently i={i}...") await asyncio.sleep(1) f *= i print(f"Task {name}: factorial({number}) = {f}") + return f async def main(): # Schedule three calls *concurrently*: - await asyncio.gather( + L = await asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), ) + print(L) asyncio.run(main()) # Expected output: # - # Task A: Compute factorial(2)... - # Task B: Compute factorial(2)... - # Task C: Compute factorial(2)... + # Task A: Compute factorial(2), currently i=2... + # Task B: Compute factorial(3), currently i=2... + # Task C: Compute factorial(4), currently i=2... # Task A: factorial(2) = 2 - # Task B: Compute factorial(3)... - # Task C: Compute factorial(3)... + # Task B: Compute factorial(3), currently i=3... + # Task C: Compute factorial(4), currently i=3... # Task B: factorial(3) = 6 - # Task C: Compute factorial(4)... + # Task C: Compute factorial(4), currently i=4... # Task C: factorial(4) = 24 + # [2, 6, 24] .. note:: If *return_exceptions* is False, cancelling gather() after it From webhook-mailer at python.org Fri May 14 02:07:35 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 06:07:35 -0000 Subject: [Python-checkins] Updated code example for asyncio.gather (GH-20604) (GH-26120) Message-ID: https://github.com/python/cpython/commit/f38296feaa3b4d6f215088b21fd2452a4f5c2e4c commit: f38296feaa3b4d6f215088b21fd2452a4f5c2e4c branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-13T23:07:31-07:00 summary: Updated code example for asyncio.gather (GH-20604) (GH-26120) The previous example did not fully showcase the interest of using gather. Here the example showcases "the result is an aggregate list of returned values". (cherry picked from commit 56b8ea65d28bd865e2363e10e9f1c2ca3433ffc2) Co-authored-by: josephernest Co-authored-by: josephernest files: M Doc/library/asyncio-task.rst diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 201678b0a3d57e..87133e4cab3074 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -360,32 +360,35 @@ Running Tasks Concurrently async def factorial(name, number): f = 1 for i in range(2, number + 1): - print(f"Task {name}: Compute factorial({i})...") + print(f"Task {name}: Compute factorial({number}), currently i={i}...") await asyncio.sleep(1) f *= i print(f"Task {name}: factorial({number}) = {f}") + return f async def main(): # Schedule three calls *concurrently*: - await asyncio.gather( + L = await asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), ) + print(L) asyncio.run(main()) # Expected output: # - # Task A: Compute factorial(2)... - # Task B: Compute factorial(2)... - # Task C: Compute factorial(2)... + # Task A: Compute factorial(2), currently i=2... + # Task B: Compute factorial(3), currently i=2... + # Task C: Compute factorial(4), currently i=2... # Task A: factorial(2) = 2 - # Task B: Compute factorial(3)... - # Task C: Compute factorial(3)... + # Task B: Compute factorial(3), currently i=3... + # Task C: Compute factorial(4), currently i=3... # Task B: factorial(3) = 6 - # Task C: Compute factorial(4)... + # Task C: Compute factorial(4), currently i=4... # Task C: factorial(4) = 24 + # [2, 6, 24] .. note:: If *return_exceptions* is False, cancelling gather() after it From webhook-mailer at python.org Fri May 14 02:27:14 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 06:27:14 -0000 Subject: [Python-checkins] Doc: Fix ambiguous pronoun (GH-26037) Message-ID: https://github.com/python/cpython/commit/fe175a87adb8bd4c65f58b156dc3e4792b525a8c commit: fe175a87adb8bd4c65f58b156dc3e4792b525a8c branch: main author: Daniel Shahaf committer: willingc date: 2021-05-13T23:27:06-07:00 summary: Doc: Fix ambiguous pronoun (GH-26037) files: M Doc/reference/compound_stmts.rst diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 0274095feffde..c405423b75a65 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -254,7 +254,7 @@ is found that matches the exception. An expression-less except clause, if present, must be last; it matches any exception. For an except clause with an expression, that expression is evaluated, and the clause matches the exception if the resulting object is "compatible" with the exception. An object is -compatible with an exception if it is the class or a base class of the exception +compatible with an exception if the object is the class or a base class of the exception object, or a tuple containing an item that is the class or a base class of the exception object. From webhook-mailer at python.org Fri May 14 06:27:51 2021 From: webhook-mailer at python.org (corona10) Date: Fri, 14 May 2021 10:27:51 -0000 Subject: [Python-checkins] sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032) Message-ID: https://github.com/python/cpython/commit/be7e467bcf5e419302d887904ef3e8fd310c68e7 commit: be7e467bcf5e419302d887904ef3e8fd310c68e7 branch: main author: Erlend Egeberg Aasland committer: corona10 date: 2021-05-14T19:27:21+09:00 summary: sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032) files: M Lib/sqlite3/test/hooks.py diff --git a/Lib/sqlite3/test/hooks.py b/Lib/sqlite3/test/hooks.py index a219e8911f7063..8c60bdcf5d70aa 100644 --- a/Lib/sqlite3/test/hooks.py +++ b/Lib/sqlite3/test/hooks.py @@ -237,7 +237,7 @@ def trace(statement): traced_statements.append(statement) con.set_trace_callback(trace) con.execute("create table foo(x)") - con.execute('insert into foo(x) values ("%s")' % unicode_value) + con.execute("insert into foo(x) values ('%s')" % unicode_value) con.commit() self.assertTrue(any(unicode_value in stmt for stmt in traced_statements), "Unicode data %s garbled in trace callback: %s" From webhook-mailer at python.org Fri May 14 07:07:28 2021 From: webhook-mailer at python.org (corona10) Date: Fri, 14 May 2021 11:07:28 -0000 Subject: [Python-checkins] bpo-44108: sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032) (GH-26125) Message-ID: https://github.com/python/cpython/commit/f28bac428d5fff23fe5e95aa02b903ee2dd5b3de commit: f28bac428d5fff23fe5e95aa02b903ee2dd5b3de branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: corona10 date: 2021-05-14T20:07:24+09:00 summary: bpo-44108: sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032) (GH-26125) (cherry picked from commit be7e467bcf5e419302d887904ef3e8fd310c68e7) Co-authored-by: Erlend Egeberg Aasland Co-authored-by: Erlend Egeberg Aasland files: M Lib/sqlite3/test/hooks.py diff --git a/Lib/sqlite3/test/hooks.py b/Lib/sqlite3/test/hooks.py index a219e8911f7063..8c60bdcf5d70aa 100644 --- a/Lib/sqlite3/test/hooks.py +++ b/Lib/sqlite3/test/hooks.py @@ -237,7 +237,7 @@ def trace(statement): traced_statements.append(statement) con.set_trace_callback(trace) con.execute("create table foo(x)") - con.execute('insert into foo(x) values ("%s")' % unicode_value) + con.execute("insert into foo(x) values ('%s')" % unicode_value) con.commit() self.assertTrue(any(unicode_value in stmt for stmt in traced_statements), "Unicode data %s garbled in trace callback: %s" From webhook-mailer at python.org Fri May 14 08:28:16 2021 From: webhook-mailer at python.org (encukou) Date: Fri, 14 May 2021 12:28:16 -0000 Subject: [Python-checkins] Reword paragraph on specific value for Py_LIMITED_API (GH-26101) (GH-26123) Message-ID: https://github.com/python/cpython/commit/5abc68101992043b08cd260053ea17fddeb62ab4 commit: 5abc68101992043b08cd260053ea17fddeb62ab4 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: encukou date: 2021-05-14T14:28:08+02:00 summary: Reword paragraph on specific value for Py_LIMITED_API (GH-26101) (GH-26123) (cherry picked from commit ddd30b2dd207c3c963874f0644cdff2ee5989575) Co-authored-by: Petr Viktorin files: M Doc/c-api/stable.rst diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst index 2f67b097eae975..4ae20e93e36785 100644 --- a/Doc/c-api/stable.rst +++ b/Doc/c-api/stable.rst @@ -41,22 +41,22 @@ embedding Python.) .. c:macro:: Py_LIMITED_API - Define this macro ``Py_LIMITED_API`` before including ``Python.h`` to - opt in to only use the Limited API. - - Defining ``Py_LIMITED_API`` to ``3`` will limit the available API so that - the extension will work without recompilation with all Python 3.x releases - (x>=2) on the particular :ref:`platform `. - - Defining ``Py_LIMITED_API`` to a value of :c:data:`PY_VERSION_HEX` will - limit the available API so that the extension will work without - recompilation with all Python 3 releases from the specified one. - This will allow using additional API introduced up to this version, - but the extension will lose compatibility with earlier Python versions. + Define this macro before including ``Python.h`` to opt in to only use + the Limited API, and to select the Limited API version. + + Define ``Py_LIMITED_API`` to the value of :c:data:`PY_VERSION_HEX` + corresponding to the lowest Python version your extension supports. + The extension will work without recompilation with all Python 3 releases + from the specified one onward, and can use Limited API introduced up to that + version. + Rather than using the ``PY_VERSION_HEX`` macro directly, hardcode a minimum minor version (e.g. ``0x030A0000`` for Python 3.10) for stability when compiling with future Python versions. + You can also define ``Py_LIMITED_API`` to ``3``. This works the same as + ``0x03020000`` (Python 3.2, the version that introduced Limited API). + On Windows, extensions that use the Stable ABI should be linked against ``python3.dll`` rather than a version-specific library such as ``python39.dll``. From webhook-mailer at python.org Fri May 14 10:25:59 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 14:25:59 -0000 Subject: [Python-checkins] Update doc as relative import can be used with star import (GH-25667) (GH-26122) Message-ID: https://github.com/python/cpython/commit/f3007ea9ad625e36f4b611eb4fb5b294416d89e1 commit: f3007ea9ad625e36f4b611eb4fb5b294416d89e1 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-14T07:25:40-07:00 summary: Update doc as relative import can be used with star import (GH-25667) (GH-26122) (cherry picked from commit 3d4b5f1019123a7d74801500eb18ec8fa12136bc) Co-authored-by: Saiyang Gou Co-authored-by: Saiyang Gou files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 8691cbd0a47860..fcca12dcf5c4ba 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -734,7 +734,7 @@ The :keyword:`!import` statement : ("," `identifier` ["as" `identifier`])* : | "from" `relative_module` "import" "(" `identifier` ["as" `identifier`] : ("," `identifier` ["as" `identifier`])* [","] ")" - : | "from" `module` "import" "*" + : | "from" `relative_module` "import" "*" module: (`identifier` ".")* `identifier` relative_module: "."* `module` | "."+ From webhook-mailer at python.org Fri May 14 10:26:45 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 14:26:45 -0000 Subject: [Python-checkins] Update doc as relative import can be used with star import (GH-25667) (GH-26121) Message-ID: https://github.com/python/cpython/commit/8940916a026f4231c907d6be1b0ba1cb9d034ee4 commit: 8940916a026f4231c907d6be1b0ba1cb9d034ee4 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-14T07:26:40-07:00 summary: Update doc as relative import can be used with star import (GH-25667) (GH-26121) (cherry picked from commit 3d4b5f1019123a7d74801500eb18ec8fa12136bc) Co-authored-by: Saiyang Gou Co-authored-by: Saiyang Gou files: M Doc/reference/simple_stmts.rst diff --git a/Doc/reference/simple_stmts.rst b/Doc/reference/simple_stmts.rst index 3aba2700048bc0..bb1209dfc33beb 100644 --- a/Doc/reference/simple_stmts.rst +++ b/Doc/reference/simple_stmts.rst @@ -734,7 +734,7 @@ The :keyword:`!import` statement : ("," `identifier` ["as" `identifier`])* : | "from" `relative_module` "import" "(" `identifier` ["as" `identifier`] : ("," `identifier` ["as" `identifier`])* [","] ")" - : | "from" `module` "import" "*" + : | "from" `relative_module` "import" "*" module: (`identifier` ".")* `identifier` relative_module: "."* `module` | "."+ From webhook-mailer at python.org Fri May 14 12:50:12 2021 From: webhook-mailer at python.org (corona10) Date: Fri, 14 May 2021 16:50:12 -0000 Subject: [Python-checkins] [3.9] sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032). (GH-26128) Message-ID: https://github.com/python/cpython/commit/64a31c5c2fadfd9125a54b6d849183168883ec63 commit: 64a31c5c2fadfd9125a54b6d849183168883ec63 branch: 3.9 author: Erlend Egeberg Aasland committer: corona10 date: 2021-05-15T01:50:03+09:00 summary: [3.9] sqlite3 test suite now works with SQLITE_DQS=0 (GH-26032). (GH-26128) (cherry picked from commit be7e467bcf5e419302d887904ef3e8fd310c68e7) Co-authored-by: Erlend Egeberg Aasland files: M Lib/sqlite3/test/hooks.py diff --git a/Lib/sqlite3/test/hooks.py b/Lib/sqlite3/test/hooks.py index 214205c1167a41..7f2ba5803560e4 100644 --- a/Lib/sqlite3/test/hooks.py +++ b/Lib/sqlite3/test/hooks.py @@ -242,7 +242,7 @@ def trace(statement): # Can't execute bound parameters as their values don't appear # in traced statements before SQLite 3.6.21 # (cf. http://www.sqlite.org/draft/releaselog/3_6_21.html) - con.execute('insert into foo(x) values ("%s")' % unicode_value) + con.execute("insert into foo(x) values ('%s')" % unicode_value) con.commit() self.assertTrue(any(unicode_value in stmt for stmt in traced_statements), "Unicode data %s garbled in trace callback: %s" From webhook-mailer at python.org Fri May 14 13:09:06 2021 From: webhook-mailer at python.org (iritkatriel) Date: Fri, 14 May 2021 17:09:06 -0000 Subject: [Python-checkins] [doc] Fix typos in cgi.rst (#24766) Message-ID: https://github.com/python/cpython/commit/19d839ae20db9c6f740646e99df7f4601cb9f4dc commit: 19d839ae20db9c6f740646e99df7f4601cb9f4dc branch: main author: G?ry Ogam committer: iritkatriel date: 2021-05-14T18:09:01+01:00 summary: [doc] Fix typos in cgi.rst (#24766) files: M Doc/library/cgi.rst diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 05d9cdf424073..d3bd20df69ae3 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -316,7 +316,7 @@ algorithms implemented in this module in other circumstances. .. function:: test() Robust test CGI script, usable as main program. Writes minimal HTTP headers and - formats all information provided to the script in HTML form. + formats all information provided to the script in HTML format. .. function:: print_environ() @@ -346,8 +346,8 @@ Caring about security .. index:: pair: CGI; security -There's one important rule: if you invoke an external program (via the -:func:`os.system` or :func:`os.popen` functions. or others with similar +There's one important rule: if you invoke an external program (via +:func:`os.system`, :func:`os.popen` or other functions with similar functionality), make very sure you don't pass arbitrary strings received from the client to the shell. This is a well-known security hole whereby clever hackers anywhere on the Web can exploit a gullible CGI script to invoke @@ -424,7 +424,7 @@ above on installing your CGI script carefully can save you a lot of time. If you wonder whether you have understood the installation procedure correctly, try installing a copy of this module file (:file:`cgi.py`) as a CGI script. When invoked as a script, the file will dump its environment and the contents of the -form in HTML form. Give it the right mode etc, and send it a request. If it's +form in HTML format. Give it the right mode etc., and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to send it a request by entering a URL into your browser of the form: From webhook-mailer at python.org Fri May 14 13:12:37 2021 From: webhook-mailer at python.org (iritkatriel) Date: Fri, 14 May 2021 17:12:37 -0000 Subject: [Python-checkins] [3.10] [doc] Fix typos in cgi.rst (GH-24766) (GH-26132) Message-ID: https://github.com/python/cpython/commit/23643799acb23f0999a43c8d351522016b59c7cb commit: 23643799acb23f0999a43c8d351522016b59c7cb branch: 3.10 author: Irit Katriel committer: iritkatriel date: 2021-05-14T18:12:33+01:00 summary: [3.10] [doc] Fix typos in cgi.rst (GH-24766) (GH-26132) (cherry picked from commit 19d839ae20db9c6f740646e99df7f4601cb9f4dc) Co-authored-by: G?ry Ogam files: M Doc/library/cgi.rst diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 05d9cdf424073..d3bd20df69ae3 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -316,7 +316,7 @@ algorithms implemented in this module in other circumstances. .. function:: test() Robust test CGI script, usable as main program. Writes minimal HTTP headers and - formats all information provided to the script in HTML form. + formats all information provided to the script in HTML format. .. function:: print_environ() @@ -346,8 +346,8 @@ Caring about security .. index:: pair: CGI; security -There's one important rule: if you invoke an external program (via the -:func:`os.system` or :func:`os.popen` functions. or others with similar +There's one important rule: if you invoke an external program (via +:func:`os.system`, :func:`os.popen` or other functions with similar functionality), make very sure you don't pass arbitrary strings received from the client to the shell. This is a well-known security hole whereby clever hackers anywhere on the Web can exploit a gullible CGI script to invoke @@ -424,7 +424,7 @@ above on installing your CGI script carefully can save you a lot of time. If you wonder whether you have understood the installation procedure correctly, try installing a copy of this module file (:file:`cgi.py`) as a CGI script. When invoked as a script, the file will dump its environment and the contents of the -form in HTML form. Give it the right mode etc, and send it a request. If it's +form in HTML format. Give it the right mode etc., and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to send it a request by entering a URL into your browser of the form: From webhook-mailer at python.org Fri May 14 13:13:44 2021 From: webhook-mailer at python.org (iritkatriel) Date: Fri, 14 May 2021 17:13:44 -0000 Subject: [Python-checkins] [doc] Fix typos in cgi.rst (GH-24766) (GH-26131) Message-ID: https://github.com/python/cpython/commit/9bc96c0146f3980bef60f5619915623b4748f0cd commit: 9bc96c0146f3980bef60f5619915623b4748f0cd branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-14T18:13:40+01:00 summary: [doc] Fix typos in cgi.rst (GH-24766) (GH-26131) (cherry picked from commit 19d839ae20db9c6f740646e99df7f4601cb9f4dc) Co-authored-by: G?ry Ogam files: M Doc/library/cgi.rst diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index e60a3f13595cf..0c985c07040c5 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -316,7 +316,7 @@ algorithms implemented in this module in other circumstances. .. function:: test() Robust test CGI script, usable as main program. Writes minimal HTTP headers and - formats all information provided to the script in HTML form. + formats all information provided to the script in HTML format. .. function:: print_environ() @@ -346,8 +346,8 @@ Caring about security .. index:: pair: CGI; security -There's one important rule: if you invoke an external program (via the -:func:`os.system` or :func:`os.popen` functions. or others with similar +There's one important rule: if you invoke an external program (via +:func:`os.system`, :func:`os.popen` or other functions with similar functionality), make very sure you don't pass arbitrary strings received from the client to the shell. This is a well-known security hole whereby clever hackers anywhere on the Web can exploit a gullible CGI script to invoke @@ -424,7 +424,7 @@ above on installing your CGI script carefully can save you a lot of time. If you wonder whether you have understood the installation procedure correctly, try installing a copy of this module file (:file:`cgi.py`) as a CGI script. When invoked as a script, the file will dump its environment and the contents of the -form in HTML form. Give it the right mode etc, and send it a request. If it's +form in HTML format. Give it the right mode etc., and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to send it a request by entering a URL into your browser of the form: From webhook-mailer at python.org Fri May 14 13:20:44 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 17:20:44 -0000 Subject: [Python-checkins] Subprocess Protocols Documentation (GH-20950) Message-ID: https://github.com/python/cpython/commit/2918846a4ff394237ccd7c6d5cdf5655e2ddd726 commit: 2918846a4ff394237ccd7c6d5cdf5655e2ddd726 branch: main author: kudavid <67070184+kudavid at users.noreply.github.com> committer: orsenthil date: 2021-05-14T10:20:33-07:00 summary: Subprocess Protocols Documentation (GH-20950) Should be "Subprocess Protocol instances" not "Datagram Protocol instances" files: M Doc/library/asyncio-protocol.rst diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index 9dbd3ab46a3f6..8b67f4b8957ef 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -683,7 +683,7 @@ factories passed to the :meth:`loop.create_datagram_endpoint` method. Subprocess Protocols -------------------- -Datagram Protocol instances should be constructed by protocol +Subprocess Protocol instances should be constructed by protocol factories passed to the :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` methods. From webhook-mailer at python.org Fri May 14 13:23:02 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 17:23:02 -0000 Subject: [Python-checkins] Subprocess Protocols Documentation (GH-20950) (GH-26133) Message-ID: https://github.com/python/cpython/commit/623481c77b2af2a35c31010e11b23ee201ef275b commit: 623481c77b2af2a35c31010e11b23ee201ef275b branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-14T10:22:55-07:00 summary: Subprocess Protocols Documentation (GH-20950) (GH-26133) files: M Doc/library/asyncio-protocol.rst diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index 9dbd3ab46a3f6..8b67f4b8957ef 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -683,7 +683,7 @@ factories passed to the :meth:`loop.create_datagram_endpoint` method. Subprocess Protocols -------------------- -Datagram Protocol instances should be constructed by protocol +Subprocess Protocol instances should be constructed by protocol factories passed to the :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` methods. From webhook-mailer at python.org Fri May 14 13:23:07 2021 From: webhook-mailer at python.org (orsenthil) Date: Fri, 14 May 2021 17:23:07 -0000 Subject: [Python-checkins] Subprocess Protocols Documentation (GH-20950) (GH-26134) Message-ID: https://github.com/python/cpython/commit/41ed452a91552c8e981d11de3ba3dbf27525b83e commit: 41ed452a91552c8e981d11de3ba3dbf27525b83e branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: orsenthil date: 2021-05-14T10:23:03-07:00 summary: Subprocess Protocols Documentation (GH-20950) (GH-26134) Should be "Subprocess Protocol instances" not "Datagram Protocol instances" (cherry picked from commit 2918846a4ff394237ccd7c6d5cdf5655e2ddd726) Co-authored-by: kudavid <67070184+kudavid at users.noreply.github.com> Co-authored-by: kudavid <67070184+kudavid at users.noreply.github.com> files: M Doc/library/asyncio-protocol.rst diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index 9dbd3ab46a3f6..8b67f4b8957ef 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -683,7 +683,7 @@ factories passed to the :meth:`loop.create_datagram_endpoint` method. Subprocess Protocols -------------------- -Datagram Protocol instances should be constructed by protocol +Subprocess Protocol instances should be constructed by protocol factories passed to the :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` methods. From webhook-mailer at python.org Fri May 14 13:57:45 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 14 May 2021 17:57:45 -0000 Subject: [Python-checkins] bpo-44095: Add suffix, stem and suffixes to zipfile.Path (GH-26129) Message-ID: https://github.com/python/cpython/commit/dc0b364de46cec104dae62282174b6c8a1cdb475 commit: dc0b364de46cec104dae62282174b6c8a1cdb475 branch: main author: Miguel Brito <5544985+miguendes at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-14T10:57:36-07:00 summary: bpo-44095: Add suffix, stem and suffixes to zipfile.Path (GH-26129) files: A Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst M Doc/library/zipfile.rst M Lib/test/test_zipfile.py M Lib/zipfile.py diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst index 3db55e646c47cc..42fe27b9e1e47f 100644 --- a/Doc/library/zipfile.rst +++ b/Doc/library/zipfile.rst @@ -521,6 +521,27 @@ Path objects are traversable using the ``/`` operator or ``joinpath``. Return ``True`` if the current context references a file or directory in the zip file. +.. data:: Path.suffix + + The file extension of the final component. + + .. versionadded:: 3.11 + Added :data:`Path.suffix` property. + +.. data:: Path.stem + + The final path component, without its suffix. + + .. versionadded:: 3.11 + Added :data:`Path.stem` property. + +.. data:: Path.suffixes + + A list of the path?s file extensions. + + .. versionadded:: 3.11 + Added :data:`Path.suffixes` property. + .. method:: Path.read_text(*, **) Read the current file as unicode text. Positional and diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index bfc981c0d15d37..f559be790bb38e 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -3093,6 +3093,64 @@ def test_root_name(self, alpharep): root = zipfile.Path(alpharep) assert root.name == 'alpharep.zip' == root.filename.name + @pass_alpharep + def test_suffix(self, alpharep): + """ + The suffix of the root should be the suffix of the zipfile. + The suffix of each nested file is the final component's last suffix, if any. + Includes the leading period, just like pathlib.Path. + """ + root = zipfile.Path(alpharep) + assert root.suffix == '.zip' == root.filename.suffix + + b = root / "b.txt" + assert b.suffix == ".txt" + + c = root / "c" / "filename.tar.gz" + assert c.suffix == ".gz" + + d = root / "d" + assert d.suffix == "" + + @pass_alpharep + def test_suffixes(self, alpharep): + """ + The suffix of the root should be the suffix of the zipfile. + The suffix of each nested file is the final component's last suffix, if any. + Includes the leading period, just like pathlib.Path. + """ + root = zipfile.Path(alpharep) + assert root.suffixes == ['.zip'] == root.filename.suffixes + + b = root / 'b.txt' + assert b.suffixes == ['.txt'] + + c = root / 'c' / 'filename.tar.gz' + assert c.suffixes == ['.tar', '.gz'] + + d = root / 'd' + assert d.suffixes == [] + + e = root / '.hgrc' + assert e.suffixes == [] + + @pass_alpharep + def test_stem(self, alpharep): + """ + The final path component, without its suffix + """ + root = zipfile.Path(alpharep) + assert root.stem == 'alpharep' == root.filename.stem + + b = root / "b.txt" + assert b.stem == "b" + + c = root / "c" / "filename.tar.gz" + assert c.stem == "filename.tar" + + d = root / "d" + assert d.stem == "d" + @pass_alpharep def test_root_parent(self, alpharep): root = zipfile.Path(alpharep) diff --git a/Lib/zipfile.py b/Lib/zipfile.py index d99c0d76977750..b83e2c187eb033 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -2342,6 +2342,18 @@ def open(self, mode='r', *args, pwd=None, **kwargs): def name(self): return pathlib.Path(self.at).name or self.filename.name + @property + def suffix(self): + return pathlib.Path(self.at).suffix or self.filename.suffix + + @property + def suffixes(self): + return pathlib.Path(self.at).suffixes or self.filename.suffixes + + @property + def stem(self): + return pathlib.Path(self.at).stem or self.filename.stem + @property def filename(self): return pathlib.Path(self.root.filename).joinpath(self.at) diff --git a/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst b/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst new file mode 100644 index 00000000000000..ee03e933f35d63 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-14-16-06-02.bpo-44095.v_pLwY.rst @@ -0,0 +1,2 @@ +:class:`zipfile.Path` now supports :attr:`zipfile.Path.stem`, +:attr:`zipfile.Path.suffixes`, and :attr:`zipfile.Path.suffix` attributes. From webhook-mailer at python.org Fri May 14 15:09:16 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 14 May 2021 19:09:16 -0000 Subject: [Python-checkins] bpo-43729: Clarify comment in tutorial example (GH-25191) Message-ID: https://github.com/python/cpython/commit/07797121cc290ede0b3d3cf02068f3d993cddd15 commit: 07797121cc290ede0b3d3cf02068f3d993cddd15 branch: main author: Erlend Egeberg Aasland committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-14T12:09:08-07:00 summary: bpo-43729: Clarify comment in tutorial example (GH-25191) files: M Doc/tutorial/introduction.rst diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst index 2a1666128a2015..4613cf76c53099 100644 --- a/Doc/tutorial/introduction.rst +++ b/Doc/tutorial/introduction.rst @@ -73,7 +73,7 @@ operator; to calculate the remainder you can use ``%``:: 5 >>> 17 % 3 # the % operator returns the remainder of the division 2 - >>> 5 * 3 + 2 # result * divisor + remainder + >>> 5 * 3 + 2 # floored quotient * divisor + remainder 17 With Python, it is possible to use the ``**`` operator to calculate powers [#]_:: From webhook-mailer at python.org Fri May 14 15:37:28 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 14 May 2021 19:37:28 -0000 Subject: [Python-checkins] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) Message-ID: https://github.com/python/cpython/commit/c10c2ec7a0e06975e8010c56c9c3270f8ea322ec commit: c10c2ec7a0e06975e8010c56c9c3270f8ea322ec branch: main author: Antoine Pitrou committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-14T12:37:20-07:00 summary: bpo-37788: Fix reference leak when Thread is never joined (GH-26103) When a Thread is not joined after it has stopped, its lock may remain in the _shutdown_locks set until interpreter shutdown. If many threads are created this way, the _shutdown_locks set could therefore grow endlessly. To avoid such a situation, purge expired locks each time a new one is added or removed. files: A Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst M Lib/test/test_threading.py M Lib/threading.py diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 546773e3329af..08c0ccd9a79b2 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -907,6 +907,13 @@ def __call__(self): thread.join() self.assertTrue(target.ran) + def test_leak_without_join(self): + # bpo-37788: Test that a thread which is not joined explicitly + # does not leak. Test written for reference leak checks. + def noop(): pass + with threading_helper.wait_threads_exit(): + threading.Thread(target=noop).start() + # Thread.join() is not called class ThreadJoinOnShutdown(BaseTestCase): diff --git a/Lib/threading.py b/Lib/threading.py index fb70abd17aff8..6c3d49c2d5267 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -780,12 +780,27 @@ def _newname(name_template): _active = {} # maps thread id to Thread object _limbo = {} _dangling = WeakSet() + # Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown() # to wait until all Python thread states get deleted: # see Thread._set_tstate_lock(). _shutdown_locks_lock = _allocate_lock() _shutdown_locks = set() +def _maintain_shutdown_locks(): + """ + Drop any shutdown locks that don't correspond to running threads anymore. + + Calling this from time to time avoids an ever-growing _shutdown_locks + set when Thread objects are not joined explicitly. See bpo-37788. + + This must be called with _shutdown_locks_lock acquired. + """ + # If a lock was released, the corresponding thread has exited + to_remove = [lock for lock in _shutdown_locks if not lock.locked()] + _shutdown_locks.difference_update(to_remove) + + # Main class for threads class Thread: @@ -968,6 +983,7 @@ def _set_tstate_lock(self): if not self.daemon: with _shutdown_locks_lock: + _maintain_shutdown_locks() _shutdown_locks.add(self._tstate_lock) def _bootstrap_inner(self): @@ -1023,7 +1039,8 @@ def _stop(self): self._tstate_lock = None if not self.daemon: with _shutdown_locks_lock: - _shutdown_locks.discard(lock) + # Remove our lock and other released locks from _shutdown_locks + _maintain_shutdown_locks() def _delete(self): "Remove current thread from the dict of currently running threads." diff --git a/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst new file mode 100644 index 0000000000000..0c33923e99245 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst @@ -0,0 +1 @@ +Fix a reference leak when a Thread object is never joined. From webhook-mailer at python.org Fri May 14 16:06:17 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 20:06:17 -0000 Subject: [Python-checkins] bpo-43729: Clarify comment in tutorial example (GH-25191) (#26136) Message-ID: https://github.com/python/cpython/commit/dd4f7d96cb78b424ef8fa705aaee15a837b2d240 commit: dd4f7d96cb78b424ef8fa705aaee15a837b2d240 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: willingc date: 2021-05-14T13:06:09-07:00 summary: bpo-43729: Clarify comment in tutorial example (GH-25191) (#26136) (cherry picked from commit 07797121cc290ede0b3d3cf02068f3d993cddd15) Co-authored-by: Erlend Egeberg Aasland Co-authored-by: Erlend Egeberg Aasland files: M Doc/tutorial/introduction.rst diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst index 2a1666128a2015..4613cf76c53099 100644 --- a/Doc/tutorial/introduction.rst +++ b/Doc/tutorial/introduction.rst @@ -73,7 +73,7 @@ operator; to calculate the remainder you can use ``%``:: 5 >>> 17 % 3 # the % operator returns the remainder of the division 2 - >>> 5 * 3 + 2 # result * divisor + remainder + >>> 5 * 3 + 2 # floored quotient * divisor + remainder 17 With Python, it is possible to use the ``**`` operator to calculate powers [#]_:: From webhook-mailer at python.org Fri May 14 16:06:43 2021 From: webhook-mailer at python.org (willingc) Date: Fri, 14 May 2021 20:06:43 -0000 Subject: [Python-checkins] bpo-43729: Clarify comment in tutorial example (GH-25191) (GH-26137) Message-ID: https://github.com/python/cpython/commit/c90642b0d48e5ab40d05b526311ba19bb87f3233 commit: c90642b0d48e5ab40d05b526311ba19bb87f3233 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: willingc date: 2021-05-14T13:06:34-07:00 summary: bpo-43729: Clarify comment in tutorial example (GH-25191) (GH-26137) (cherry picked from commit 07797121cc290ede0b3d3cf02068f3d993cddd15) Co-authored-by: Erlend Egeberg Aasland Co-authored-by: Erlend Egeberg Aasland files: M Doc/tutorial/introduction.rst diff --git a/Doc/tutorial/introduction.rst b/Doc/tutorial/introduction.rst index 2a1666128a2015..4613cf76c53099 100644 --- a/Doc/tutorial/introduction.rst +++ b/Doc/tutorial/introduction.rst @@ -73,7 +73,7 @@ operator; to calculate the remainder you can use ``%``:: 5 >>> 17 % 3 # the % operator returns the remainder of the division 2 - >>> 5 * 3 + 2 # result * divisor + remainder + >>> 5 * 3 + 2 # floored quotient * divisor + remainder 17 With Python, it is possible to use the ``**`` operator to calculate powers [#]_:: From webhook-mailer at python.org Fri May 14 18:01:52 2021 From: webhook-mailer at python.org (terryjreedy) Date: Fri, 14 May 2021 22:01:52 -0000 Subject: [Python-checkins] bpo-44072: fix Complex, Integral docs for `**` (GH-25986) Message-ID: https://github.com/python/cpython/commit/4aa63d65a9971d14f1a2131b989dca0dab514a9d commit: 4aa63d65a9971d14f1a2131b989dca0dab514a9d branch: main author: Rory Yorke committer: terryjreedy date: 2021-05-14T18:01:48-04:00 summary: bpo-44072: fix Complex, Integral docs for `**` (GH-25986) In numbers module docstrings and docs. files: A Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst M Doc/library/numbers.rst M Lib/numbers.py diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index 1b594952ead724..d37123c35476a7 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -27,8 +27,8 @@ The numeric tower Subclasses of this type describe complex numbers and include the operations that work on the built-in :class:`complex` type. These are: conversions to :class:`complex` and :class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, - ``-``, ``*``, ``/``, :func:`abs`, :meth:`conjugate`, ``==``, and ``!=``. All - except ``-`` and ``!=`` are abstract. + ``-``, ``*``, ``/``, ``**``, :func:`abs`, :meth:`conjugate`, ``==``, and + ``!=``. All except ``-`` and ``!=`` are abstract. .. attribute:: real @@ -76,8 +76,9 @@ The numeric tower Subtypes :class:`Rational` and adds a conversion to :class:`int`. Provides defaults for :func:`float`, :attr:`~Rational.numerator`, and - :attr:`~Rational.denominator`. Adds abstract methods for ``**`` and - bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, ``~``. + :attr:`~Rational.denominator`. Adds abstract methods for :func:`pow` with + modulus and bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, + ``~``. Notes for type implementors diff --git a/Lib/numbers.py b/Lib/numbers.py index ed815ef41ebe12..5b98e642083b36 100644 --- a/Lib/numbers.py +++ b/Lib/numbers.py @@ -33,7 +33,7 @@ class Complex(Number): """Complex defines the operations that work on the builtin complex type. In short, those are: a conversion to complex, .real, .imag, +, -, - *, /, abs(), .conjugate, ==, and !=. + *, /, **, abs(), .conjugate, ==, and !=. If it is given heterogeneous arguments, and doesn't have special knowledge about them, it should fall back to the builtin complex @@ -292,7 +292,11 @@ def __float__(self): class Integral(Rational): - """Integral adds a conversion to int and the bit-string operations.""" + """Integral adds methods that work on integral numbers. + + In short, these are conversion to int, pow with modulus, and the + bit-string operations. + """ __slots__ = () diff --git a/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst new file mode 100644 index 00000000000000..a5b0c95d85e66e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst @@ -0,0 +1,2 @@ +Correct where in the numeric ABC hierarchy ``**`` support is added, i.e., in +numbers.Complex, not numbers.Integral. From webhook-mailer at python.org Fri May 14 18:22:53 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 14 May 2021 22:22:53 -0000 Subject: [Python-checkins] bpo-44072: fix Complex, Integral docs for `**` (GH-25986) Message-ID: https://github.com/python/cpython/commit/2e99869f64bbd3c6590cb5ceaf9cf59e63689d63 commit: 2e99869f64bbd3c6590cb5ceaf9cf59e63689d63 branch: 3.10 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-05-14T15:22:45-07:00 summary: bpo-44072: fix Complex, Integral docs for `**` (GH-25986) In numbers module docstrings and docs. (cherry picked from commit 4aa63d65a9971d14f1a2131b989dca0dab514a9d) Co-authored-by: Rory Yorke files: A Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst M Doc/library/numbers.rst M Lib/numbers.py diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index 1b594952ead724..d37123c35476a7 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -27,8 +27,8 @@ The numeric tower Subclasses of this type describe complex numbers and include the operations that work on the built-in :class:`complex` type. These are: conversions to :class:`complex` and :class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, - ``-``, ``*``, ``/``, :func:`abs`, :meth:`conjugate`, ``==``, and ``!=``. All - except ``-`` and ``!=`` are abstract. + ``-``, ``*``, ``/``, ``**``, :func:`abs`, :meth:`conjugate`, ``==``, and + ``!=``. All except ``-`` and ``!=`` are abstract. .. attribute:: real @@ -76,8 +76,9 @@ The numeric tower Subtypes :class:`Rational` and adds a conversion to :class:`int`. Provides defaults for :func:`float`, :attr:`~Rational.numerator`, and - :attr:`~Rational.denominator`. Adds abstract methods for ``**`` and - bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, ``~``. + :attr:`~Rational.denominator`. Adds abstract methods for :func:`pow` with + modulus and bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, + ``~``. Notes for type implementors diff --git a/Lib/numbers.py b/Lib/numbers.py index ed815ef41ebe12..5b98e642083b36 100644 --- a/Lib/numbers.py +++ b/Lib/numbers.py @@ -33,7 +33,7 @@ class Complex(Number): """Complex defines the operations that work on the builtin complex type. In short, those are: a conversion to complex, .real, .imag, +, -, - *, /, abs(), .conjugate, ==, and !=. + *, /, **, abs(), .conjugate, ==, and !=. If it is given heterogeneous arguments, and doesn't have special knowledge about them, it should fall back to the builtin complex @@ -292,7 +292,11 @@ def __float__(self): class Integral(Rational): - """Integral adds a conversion to int and the bit-string operations.""" + """Integral adds methods that work on integral numbers. + + In short, these are conversion to int, pow with modulus, and the + bit-string operations. + """ __slots__ = () diff --git a/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst new file mode 100644 index 00000000000000..a5b0c95d85e66e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst @@ -0,0 +1,2 @@ +Correct where in the numeric ABC hierarchy ``**`` support is added, i.e., in +numbers.Complex, not numbers.Integral. From webhook-mailer at python.org Fri May 14 18:25:47 2021 From: webhook-mailer at python.org (miss-islington) Date: Fri, 14 May 2021 22:25:47 -0000 Subject: [Python-checkins] bpo-44072: fix Complex, Integral docs for `**` (GH-25986) Message-ID: https://github.com/python/cpython/commit/fa9de0c383581936de3338c8dc6b58c10a6e27b8 commit: fa9de0c383581936de3338c8dc6b58c10a6e27b8 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-05-14T15:25:43-07:00 summary: bpo-44072: fix Complex, Integral docs for `**` (GH-25986) In numbers module docstrings and docs. (cherry picked from commit 4aa63d65a9971d14f1a2131b989dca0dab514a9d) Co-authored-by: Rory Yorke files: A Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst M Doc/library/numbers.rst M Lib/numbers.py diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index 1b594952ead724..d37123c35476a7 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -27,8 +27,8 @@ The numeric tower Subclasses of this type describe complex numbers and include the operations that work on the built-in :class:`complex` type. These are: conversions to :class:`complex` and :class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, - ``-``, ``*``, ``/``, :func:`abs`, :meth:`conjugate`, ``==``, and ``!=``. All - except ``-`` and ``!=`` are abstract. + ``-``, ``*``, ``/``, ``**``, :func:`abs`, :meth:`conjugate`, ``==``, and + ``!=``. All except ``-`` and ``!=`` are abstract. .. attribute:: real @@ -76,8 +76,9 @@ The numeric tower Subtypes :class:`Rational` and adds a conversion to :class:`int`. Provides defaults for :func:`float`, :attr:`~Rational.numerator`, and - :attr:`~Rational.denominator`. Adds abstract methods for ``**`` and - bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, ``~``. + :attr:`~Rational.denominator`. Adds abstract methods for :func:`pow` with + modulus and bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, + ``~``. Notes for type implementors diff --git a/Lib/numbers.py b/Lib/numbers.py index ed815ef41ebe12..5b98e642083b36 100644 --- a/Lib/numbers.py +++ b/Lib/numbers.py @@ -33,7 +33,7 @@ class Complex(Number): """Complex defines the operations that work on the builtin complex type. In short, those are: a conversion to complex, .real, .imag, +, -, - *, /, abs(), .conjugate, ==, and !=. + *, /, **, abs(), .conjugate, ==, and !=. If it is given heterogeneous arguments, and doesn't have special knowledge about them, it should fall back to the builtin complex @@ -292,7 +292,11 @@ def __float__(self): class Integral(Rational): - """Integral adds a conversion to int and the bit-string operations.""" + """Integral adds methods that work on integral numbers. + + In short, these are conversion to int, pow with modulus, and the + bit-string operations. + """ __slots__ = () diff --git a/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst new file mode 100644 index 00000000000000..a5b0c95d85e66e --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-08-09-48-05.bpo-44072.fb2x5I.rst @@ -0,0 +1,2 @@ +Correct where in the numeric ABC hierarchy ``**`` support is added, i.e., in +numbers.Complex, not numbers.Integral. From webhook-mailer at python.org Sat May 15 05:24:48 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 15 May 2021 09:24:48 -0000 Subject: [Python-checkins] [3.10] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) (GH-26138) Message-ID: https://github.com/python/cpython/commit/71dca6ea73aaf215fafa094512e8c748248c16b0 commit: 71dca6ea73aaf215fafa094512e8c748248c16b0 branch: 3.10 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-05-15T02:24:44-07:00 summary: [3.10] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) (GH-26138) When a Thread is not joined after it has stopped, its lock may remain in the _shutdown_locks set until interpreter shutdown. If many threads are created this way, the _shutdown_locks set could therefore grow endlessly. To avoid such a situation, purge expired locks each time a new one is added or removed. (cherry picked from commit c10c2ec7a0e06975e8010c56c9c3270f8ea322ec) Co-authored-by: Antoine Pitrou files: A Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst M Lib/test/test_threading.py M Lib/threading.py diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 546773e3329afa..08c0ccd9a79b2a 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -907,6 +907,13 @@ def __call__(self): thread.join() self.assertTrue(target.ran) + def test_leak_without_join(self): + # bpo-37788: Test that a thread which is not joined explicitly + # does not leak. Test written for reference leak checks. + def noop(): pass + with threading_helper.wait_threads_exit(): + threading.Thread(target=noop).start() + # Thread.join() is not called class ThreadJoinOnShutdown(BaseTestCase): diff --git a/Lib/threading.py b/Lib/threading.py index fb70abd17aff8b..6c3d49c2d52679 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -780,12 +780,27 @@ def _newname(name_template): _active = {} # maps thread id to Thread object _limbo = {} _dangling = WeakSet() + # Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown() # to wait until all Python thread states get deleted: # see Thread._set_tstate_lock(). _shutdown_locks_lock = _allocate_lock() _shutdown_locks = set() +def _maintain_shutdown_locks(): + """ + Drop any shutdown locks that don't correspond to running threads anymore. + + Calling this from time to time avoids an ever-growing _shutdown_locks + set when Thread objects are not joined explicitly. See bpo-37788. + + This must be called with _shutdown_locks_lock acquired. + """ + # If a lock was released, the corresponding thread has exited + to_remove = [lock for lock in _shutdown_locks if not lock.locked()] + _shutdown_locks.difference_update(to_remove) + + # Main class for threads class Thread: @@ -968,6 +983,7 @@ def _set_tstate_lock(self): if not self.daemon: with _shutdown_locks_lock: + _maintain_shutdown_locks() _shutdown_locks.add(self._tstate_lock) def _bootstrap_inner(self): @@ -1023,7 +1039,8 @@ def _stop(self): self._tstate_lock = None if not self.daemon: with _shutdown_locks_lock: - _shutdown_locks.discard(lock) + # Remove our lock and other released locks from _shutdown_locks + _maintain_shutdown_locks() def _delete(self): "Remove current thread from the dict of currently running threads." diff --git a/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst new file mode 100644 index 00000000000000..0c33923e992452 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst @@ -0,0 +1 @@ +Fix a reference leak when a Thread object is never joined. From webhook-mailer at python.org Sat May 15 05:51:24 2021 From: webhook-mailer at python.org (miss-islington) Date: Sat, 15 May 2021 09:51:24 -0000 Subject: [Python-checkins] [3.9] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) (GH-26142) Message-ID: https://github.com/python/cpython/commit/b30b25b26663fb6070b8ed86fe3a20dcb557d05d commit: b30b25b26663fb6070b8ed86fe3a20dcb557d05d branch: 3.9 author: Antoine Pitrou committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-15T02:51:20-07:00 summary: [3.9] bpo-37788: Fix reference leak when Thread is never joined (GH-26103) (GH-26142) When a Thread is not joined after it has stopped, its lock may remain in the _shutdown_locks set until interpreter shutdown. If many threads are created this way, the _shutdown_locks set could therefore grow endlessly. To avoid such a situation, purge expired locks each time a new one is added or removed.. (cherry picked from commit c10c2ec7a0e06975e8010c56c9c3270f8ea322ec) Co-authored-by: Antoine Pitrou Automerge-Triggered-By: GH:pitrou files: A Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst M Lib/test/test_threading.py M Lib/threading.py diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index c21cdf8eb7be9c..67e061e8aa63bc 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -805,6 +805,14 @@ def __del__(self): """) self.assertEqual(out.rstrip(), b"thread_dict.atexit = 'value'") + def test_leak_without_join(self): + # bpo-37788: Test that a thread which is not joined explicitly + # does not leak. Test written for reference leak checks. + def noop(): pass + with support.wait_threads_exit(): + threading.Thread(target=noop).start() + # Thread.join() is not called + class ThreadJoinOnShutdown(BaseTestCase): diff --git a/Lib/threading.py b/Lib/threading.py index 4da5c657b1b73a..702acaa0054307 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -755,12 +755,27 @@ def _newname(template="Thread-%d"): _active = {} # maps thread id to Thread object _limbo = {} _dangling = WeakSet() + # Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown() # to wait until all Python thread states get deleted: # see Thread._set_tstate_lock(). _shutdown_locks_lock = _allocate_lock() _shutdown_locks = set() +def _maintain_shutdown_locks(): + """ + Drop any shutdown locks that don't correspond to running threads anymore. + + Calling this from time to time avoids an ever-growing _shutdown_locks + set when Thread objects are not joined explicitly. See bpo-37788. + + This must be called with _shutdown_locks_lock acquired. + """ + # If a lock was released, the corresponding thread has exited + to_remove = [lock for lock in _shutdown_locks if not lock.locked()] + _shutdown_locks.difference_update(to_remove) + + # Main class for threads class Thread: @@ -932,6 +947,7 @@ def _set_tstate_lock(self): if not self.daemon: with _shutdown_locks_lock: + _maintain_shutdown_locks() _shutdown_locks.add(self._tstate_lock) def _bootstrap_inner(self): @@ -987,7 +1003,8 @@ def _stop(self): self._tstate_lock = None if not self.daemon: with _shutdown_locks_lock: - _shutdown_locks.discard(lock) + # Remove our lock and other released locks from _shutdown_locks + _maintain_shutdown_locks() def _delete(self): "Remove current thread from the dict of currently running threads." diff --git a/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst new file mode 100644 index 00000000000000..0c33923e992452 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-13-19-07-28.bpo-37788.adeFcf.rst @@ -0,0 +1 @@ +Fix a reference leak when a Thread object is never joined. From webhook-mailer at python.org Sat May 15 08:56:09 2021 From: webhook-mailer at python.org (isidentical) Date: Sat, 15 May 2021 12:56:09 -0000 Subject: [Python-checkins] bpo-44081: improve ast.unparse() for lambdas with no parameters (GH-26000) Message-ID: https://github.com/python/cpython/commit/e4e931a67e49cf3c61263dc94fb0806c34f972cd commit: e4e931a67e49cf3c61263dc94fb0806c34f972cd branch: main author: Batuhan Taskaya committer: isidentical date: 2021-05-15T15:55:53+03:00 summary: bpo-44081: improve ast.unparse() for lambdas with no parameters (GH-26000) files: A Misc/NEWS.d/next/Library/2021-05-09-03-26-31.bpo-44081.A-Mrto.rst M Lib/ast.py M Lib/test/test_unparse.py diff --git a/Lib/ast.py b/Lib/ast.py index 18163d6b7bd163..0aef172516b3fd 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -716,9 +716,9 @@ def fill(self, text=""): self.maybe_newline() self.write(" " * self._indent + text) - def write(self, text): - """Append a piece of text""" - self._source.append(text) + def write(self, *text): + """Add new source parts""" + self._source.extend(text) @contextmanager def buffered(self, buffer = None): @@ -1566,8 +1566,11 @@ def visit_keyword(self, node): def visit_Lambda(self, node): with self.require_parens(_Precedence.TEST, node): - self.write("lambda ") - self.traverse(node.args) + self.write("lambda") + with self.buffered() as buffer: + self.traverse(node.args) + if buffer: + self.write(" ", *buffer) self.write(": ") self.set_precedence(_Precedence.TEST, node.body) self.traverse(node.body) diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index 534431bc969835..4d3340e26ff02f 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -531,6 +531,17 @@ def test_slices(self): self.check_src_roundtrip("a[1, 2]") self.check_src_roundtrip("a[(1, *a)]") + def test_lambda_parameters(self): + self.check_src_roundtrip("lambda: something") + self.check_src_roundtrip("four = lambda: 2 + 2") + self.check_src_roundtrip("lambda x: x * 2") + self.check_src_roundtrip("square = lambda n: n ** 2") + self.check_src_roundtrip("lambda x, y: x + y") + self.check_src_roundtrip("add = lambda x, y: x + y") + self.check_src_roundtrip("lambda x, y, /, z, q, *, u: None") + self.check_src_roundtrip("lambda x, *y, **z: None") + + class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test.""" diff --git a/Misc/NEWS.d/next/Library/2021-05-09-03-26-31.bpo-44081.A-Mrto.rst b/Misc/NEWS.d/next/Library/2021-05-09-03-26-31.bpo-44081.A-Mrto.rst new file mode 100644 index 00000000000000..e4a09e366bd807 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-09-03-26-31.bpo-44081.A-Mrto.rst @@ -0,0 +1,2 @@ +:func:`ast.unparse` now doesn't use redundant spaces to separate ``lambda`` +and the ``:`` if there are no parameters. From webhook-mailer at python.org Sat May 15 11:15:41 2021 From: webhook-mailer at python.org (markshannon) Date: Sat, 15 May 2021 15:15:41 -0000 Subject: [Python-checkins] bpo-26110: Add ``CALL_METHOD_KW`` opcode to speedup method calls with keywords (GH-26014) Message-ID: https://github.com/python/cpython/commit/f24afda5917ce1710ad08ca34b2509f1f2b16de2 commit: f24afda5917ce1710ad08ca34b2509f1f2b16de2 branch: main author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: markshannon date: 2021-05-15T16:15:23+01:00 summary: bpo-26110: Add ``CALL_METHOD_KW`` opcode to speedup method calls with keywords (GH-26014) * Add CALL_METHOD_KW * Make CALL_METHOD branchless too since it shares the same code * Place parentheses in STACK_SHRINK files: A Misc/NEWS.d/next/Core and Builtins/2021-05-10-18-49-13.bpo-26110.EQzqqA.rst M Include/opcode.h M Lib/importlib/_bootstrap_external.py M Lib/opcode.py M Python/ceval.c M Python/compile.c M Python/importlib.h M Python/importlib_external.h M Python/importlib_zipimport.h M Python/opcode_targets.h diff --git a/Include/opcode.h b/Include/opcode.h index 1e44e1f5f23eb4..a3a8b2a15613e6 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -134,6 +134,7 @@ extern "C" { #define SET_UPDATE 163 #define DICT_MERGE 164 #define DICT_UPDATE 165 +#define CALL_METHOD_KW 166 #ifdef NEED_OPCODE_JUMP_TABLES static uint32_t _PyOpcode_RelativeJump[8] = { 0U, diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 469610aba54971..8d0ebef80450a0 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -353,6 +353,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.10b1 3438 Safer line number table handling. # Python 3.10b1 3439 (Add ROT_N) # Python 3.11a1 3450 Use exception table for unwinding ("zero cost" exception handling) +# Python 3.11a1 3451 (Add CALL_METHOD_KW) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -362,7 +363,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 = (3450).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3451).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/opcode.py b/Lib/opcode.py index 88022a4d45303a..da143fe01f512c 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -213,5 +213,6 @@ def jabs_op(name, op): def_op('SET_UPDATE', 163) def_op('DICT_MERGE', 164) def_op('DICT_UPDATE', 165) +def_op('CALL_METHOD_KW', 166) del def_op, name_op, jrel_op, jabs_op diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-10-18-49-13.bpo-26110.EQzqqA.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-18-49-13.bpo-26110.EQzqqA.rst new file mode 100644 index 00000000000000..b5d9159000bad6 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-10-18-49-13.bpo-26110.EQzqqA.rst @@ -0,0 +1,3 @@ +Add ``CALL_METHOD_KW`` opcode to speed up method calls with keyword +arguments. Idea originated from PyPy. A side effect is executing +``CALL_METHOD`` is now branchless in the evaluation loop. diff --git a/Python/ceval.c b/Python/ceval.c index 2e15eea48003e0..fa7b0b5a051e3a 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1421,7 +1421,7 @@ eval_frame_handle_pending(PyThreadState *tstate) #define STACK_SHRINK(n) do { \ assert(n >= 0); \ (void)(lltrace && prtrace(tstate, TOP(), "stackadj")); \ - (void)(BASIC_STACKADJ(-n)); \ + (void)(BASIC_STACKADJ(-(n))); \ assert(STACK_LEVEL() <= co->co_stacksize); \ } while (0) #define EXT_POP(STACK_POINTER) ((void)(lltrace && \ @@ -1431,7 +1431,7 @@ eval_frame_handle_pending(PyThreadState *tstate) #define PUSH(v) BASIC_PUSH(v) #define POP() BASIC_POP() #define STACK_GROW(n) BASIC_STACKADJ(n) -#define STACK_SHRINK(n) BASIC_STACKADJ(-n) +#define STACK_SHRINK(n) BASIC_STACKADJ(-(n)) #define EXT_POP(STACK_POINTER) (*--(STACK_POINTER)) #endif @@ -4164,16 +4164,14 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) case TARGET(CALL_METHOD): { /* Designed to work in tamdem with LOAD_METHOD. */ - PyObject **sp, *res, *meth; + PyObject **sp, *res; + int meth_found; sp = stack_pointer; + /* `meth` is NULL when LOAD_METHOD thinks that it's not + a method call. - meth = PEEK(oparg + 2); - if (meth == NULL) { - /* `meth` is NULL when LOAD_METHOD thinks that it's not - a method call. - - Stack layout: + Stack layout: ... | NULL | callable | arg1 | ... | argN ^- TOP() @@ -4181,15 +4179,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) ^- (-oparg-1) ^- (-oparg-2) - `callable` will be POPed by call_function. - NULL will will be POPed manually later. - */ - res = call_function(tstate, &trace_info, &sp, oparg, NULL); - stack_pointer = sp; - (void)POP(); /* POP the NULL. */ - } - else { - /* This is a method call. Stack layout: + `callable` will be POPed by call_function. + NULL will will be POPed manually later. + If `meth` isn't NULL, it's a method call. Stack layout: ... | method | self | arg1 | ... | argN ^- TOP() @@ -4197,21 +4189,45 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) ^- (-oparg-1) ^- (-oparg-2) - `self` and `method` will be POPed by call_function. - We'll be passing `oparg + 1` to call_function, to - make it accept the `self` as a first argument. - */ - res = call_function(tstate, &trace_info, &sp, oparg + 1, NULL); - stack_pointer = sp; - } + `self` and `method` will be POPed by call_function. + We'll be passing `oparg + 1` to call_function, to + make it accept the `self` as a first argument. + */ + meth_found = (PEEK(oparg + 2) != NULL); + res = call_function(tstate, &trace_info, &sp, oparg + meth_found, NULL); + stack_pointer = sp; + STACK_SHRINK(1 - meth_found); PUSH(res); - if (res == NULL) + if (res == NULL) { goto error; + } CHECK_EVAL_BREAKER(); DISPATCH(); } + case TARGET(CALL_METHOD_KW): { + /* Designed to work in tandem with LOAD_METHOD. Same as CALL_METHOD + but pops TOS to get a tuple of keyword names. */ + PyObject **sp, *res; + PyObject *names = NULL; + int meth_found; + names = POP(); + + sp = stack_pointer; + meth_found = (PEEK(oparg + 2) != NULL); + res = call_function(tstate, &trace_info, &sp, oparg + meth_found, names); + stack_pointer = sp; + + STACK_SHRINK(1 - meth_found); + PUSH(res); + Py_DECREF(names); + if (res == NULL) { + goto error; + } + CHECK_EVAL_BREAKER(); + DISPATCH(); + } case TARGET(CALL_FUNCTION): { PREDICTED(CALL_FUNCTION); PyObject **sp, *res; diff --git a/Python/compile.c b/Python/compile.c index 071dabc825bbb7..94f2e825bd0913 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -309,6 +309,10 @@ static int are_all_items_const(asdl_expr_seq *, Py_ssize_t, Py_ssize_t); static int compiler_with(struct compiler *, stmt_ty, int); static int compiler_async_with(struct compiler *, stmt_ty, int); static int compiler_async_for(struct compiler *, stmt_ty); +static int validate_keywords(struct compiler *c, asdl_keyword_seq *keywords); +static int compiler_call_simple_kw_helper(struct compiler *c, + asdl_keyword_seq *keywords, + Py_ssize_t nkwelts); static int compiler_call_helper(struct compiler *c, int n, asdl_expr_seq *args, asdl_keyword_seq *keywords); @@ -1176,6 +1180,8 @@ stack_effect(int opcode, int oparg, int jump) return -oparg; case CALL_METHOD: return -oparg-1; + case CALL_METHOD_KW: + return -oparg-2; case CALL_FUNCTION_KW: return -oparg-1; case CALL_FUNCTION_EX: @@ -4266,19 +4272,19 @@ check_index(struct compiler *c, expr_ty e, expr_ty s) static int maybe_optimize_method_call(struct compiler *c, expr_ty e) { - Py_ssize_t argsl, i; + Py_ssize_t argsl, i, kwdsl; expr_ty meth = e->v.Call.func; asdl_expr_seq *args = e->v.Call.args; + asdl_keyword_seq *kwds = e->v.Call.keywords; - /* 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)) { + /* Check that the call node is an attribute access */ + if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load) { return -1; } /* Check that there aren't too many arguments */ argsl = asdl_seq_LEN(args); - if (argsl >= STACK_USE_GUIDELINE) { + kwdsl = asdl_seq_LEN(kwds); + if (argsl + kwdsl + (kwdsl != 0) >= STACK_USE_GUIDELINE) { return -1; } /* Check that there are no *varargs types of arguments. */ @@ -4289,13 +4295,28 @@ maybe_optimize_method_call(struct compiler *c, expr_ty e) } } + for (i = 0; i < kwdsl; i++) { + keyword_ty kw = asdl_seq_GET(kwds, i); + if (kw->arg == NULL) { + return -1; + } + } /* Alright, we can optimize the code. */ VISIT(c, expr, meth->v.Attribute.value); int old_lineno = c->u->u_lineno; c->u->u_lineno = meth->end_lineno; ADDOP_NAME(c, LOAD_METHOD, meth->v.Attribute.attr, names); VISIT_SEQ(c, expr, e->v.Call.args); - ADDOP_I(c, CALL_METHOD, asdl_seq_LEN(e->v.Call.args)); + + if (kwdsl) { + if (!compiler_call_simple_kw_helper(c, kwds, kwdsl)) { + return 0; + }; + ADDOP_I(c, CALL_METHOD_KW, argsl + kwdsl); + } + else { + ADDOP_I(c, CALL_METHOD, argsl); + } c->u->u_lineno = old_lineno; return 1; } @@ -4327,6 +4348,9 @@ validate_keywords(struct compiler *c, asdl_keyword_seq *keywords) static int compiler_call(struct compiler *c, expr_ty e) { + if (validate_keywords(c, e->v.Call.keywords) == -1) { + return 0; + } int ret = maybe_optimize_method_call(c, e); if (ret >= 0) { return ret; @@ -4458,6 +4482,36 @@ compiler_subkwargs(struct compiler *c, asdl_keyword_seq *keywords, Py_ssize_t be return 1; } +/* Used by compiler_call_helper and maybe_optimize_method_call to emit +LOAD_CONST kw1 +LOAD_CONST kw2 +... +LOAD_CONST +before a CALL_(FUNCTION|METHOD)_KW. + +Returns 1 on success, 0 on error. +*/ +static int +compiler_call_simple_kw_helper(struct compiler *c, + asdl_keyword_seq *keywords, + Py_ssize_t nkwelts) +{ + PyObject *names; + VISIT_SEQ(c, keyword, keywords); + names = PyTuple_New(nkwelts); + if (names == NULL) { + return 0; + } + for (int i = 0; i < nkwelts; i++) { + keyword_ty kw = asdl_seq_GET(keywords, i); + Py_INCREF(kw->arg); + PyTuple_SET_ITEM(names, i, kw->arg); + } + ADDOP_LOAD_CONST_NEW(c, names); + return 1; +} + + /* shared code between compiler_call and compiler_class */ static int compiler_call_helper(struct compiler *c, @@ -4497,18 +4551,9 @@ compiler_call_helper(struct compiler *c, VISIT(c, expr, elt); } if (nkwelts) { - PyObject *names; - VISIT_SEQ(c, keyword, keywords); - names = PyTuple_New(nkwelts); - if (names == NULL) { + if (!compiler_call_simple_kw_helper(c, keywords, nkwelts)) { return 0; - } - for (i = 0; i < nkwelts; i++) { - keyword_ty kw = asdl_seq_GET(keywords, i); - Py_INCREF(kw->arg); - PyTuple_SET_ITEM(names, i, kw->arg); - } - ADDOP_LOAD_CONST_NEW(c, names); + }; ADDOP_I(c, CALL_FUNCTION_KW, n + nelts + nkwelts); return 1; } diff --git a/Python/importlib.h b/Python/importlib.h index 17d5ed321465f8..f5278ee2caf319 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1751,15 +1751,15 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 65,8,2,193,8,7,65,39,9,193,15,14,65,35,9,193, 34,1,65,35,9,193,35,4,65,39,9,193,43,1,65,39, 9,114,235,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, + 0,0,0,3,0,0,0,7,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, + 114,39,116,2,160,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,166,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, + 106,1,83,0,116,2,160,3,100,9,116,4,100,7,100,8, + 166,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, diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 0786f310b4e0ed..4b8052d992a8f8 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -370,7 +370,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 9,62,0,190,7,65,22,7,193,6,5,65,12,6,193,11, 1,65,22,7,193,12,7,65,21,13,193,19,3,65,22,7, 193,23,1,65,21,13,193,24,1,65,22,7,114,96,0,0, - 0,105,122,13,0,0,114,45,0,0,0,114,33,0,0,0, + 0,105,123,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, @@ -484,7 +484,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,125,1,0,0,115,72, + 114,111,109,95,115,111,117,114,99,101,126,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, @@ -565,7 +565,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,196,1,0, + 99,101,95,102,114,111,109,95,99,97,99,104,101,197,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, @@ -601,7 +601,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,236,1,0,0,115,26,0, + 111,117,114,99,101,102,105,108,101,237,1,0,0,115,26,0, 0,0,12,7,4,1,16,1,24,1,4,1,2,1,10,1, 2,128,16,1,16,1,2,128,16,1,2,254,115,12,0,0, 0,159,4,36,0,164,15,53,7,190,1,53,7,114,136,0, @@ -616,7 +616,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,108,0,0,0,114,114,0,0,0,41,1,114, 121,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, - 255,1,0,0,115,22,0,0,0,14,1,2,1,8,1,2, + 0,2,0,0,115,22,0,0,0,14,1,2,1,8,1,2, 128,12,1,6,1,2,128,14,1,4,1,4,2,2,251,115, 12,0,0,0,136,3,12,0,140,7,22,7,162,1,22,7, 114,138,0,0,0,99,1,0,0,0,0,0,0,0,0,0, @@ -632,7 +632,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,78,0,0,0,114,77,0,0,0,41,2,114,66,0,0, 0,114,79,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,11,2,0,0,115,18,0,0,0,2,2,12,1,2,128, + 101,12,2,0,0,115,18,0,0,0,2,2,12,1,2,128, 12,1,8,1,2,128,8,3,4,1,2,251,115,12,0,0, 0,129,5,7,0,135,9,18,7,153,1,18,7,114,140,0, 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, @@ -671,7 +671,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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, - 31,2,0,0,115,18,0,0,0,8,1,8,1,10,1,4, + 32,2,0,0,115,18,0,0,0,8,1,8,1,10,1,4, 1,12,1,2,255,2,1,6,255,24,2,114,10,0,0,0, 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, @@ -689,7 +689,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,86,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,44,2,0,0,115,10,0,0, + 0,218,5,95,119,114,97,112,45,2,0,0,115,10,0,0, 0,8,1,10,1,18,1,2,128,18,1,114,10,0,0,0, 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,70,0,0, @@ -697,7 +697,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 159,0,0,0,41,3,114,148,0,0,0,114,149,0,0,0, 114,159,0,0,0,114,7,0,0,0,114,147,0,0,0,114, 8,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, - 101,23,2,0,0,115,12,0,0,0,14,8,8,10,8,1, + 101,24,2,0,0,115,12,0,0,0,14,8,8,10,8,1, 8,2,10,6,4,1,114,10,0,0,0,114,161,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, @@ -732,7 +732,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,54,2,0,0,115,16,0,0,0,6, + 101,95,115,104,105,109,55,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, 10,0,0,0,114,168,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, @@ -800,7 +800,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,105,108,115,90,5,109,97,103,105,99,114,118,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,74,2,0,0,115,28,0,0,0,12,16,8,1, + 112,121,99,75,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,10,0,0,0,114,177,0, 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,6, @@ -855,7 +855,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,105,122,101,114,142,0,0,0,114,176,0,0,0,114,118, 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,107,2,0,0,115, + 109,101,115,116,97,109,112,95,112,121,99,108,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,10,0,0,0,114,181,0,0,0, 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, @@ -902,7 +902,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,99,101,95,104,97,115,104,114,142,0,0,0,114,176,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,135,2,0,0,115,14,0,0,0,16,17, + 104,95,112,121,99,136,2,0,0,115,14,0,0,0,16,17, 2,1,8,1,4,255,2,2,6,254,4,255,114,10,0,0, 0,114,183,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, @@ -926,7 +926,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,114,142,0,0,0,114,133,0,0,0,114,135,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,159,2,0,0,115,18,0,0, + 98,121,116,101,99,111,100,101,160,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,10,0,0,0,114,190,0,0,0,99,3,0, 0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0, @@ -945,7 +945,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 180,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, - 172,2,0,0,115,12,0,0,0,8,2,14,1,14,1,14, + 173,2,0,0,115,12,0,0,0,8,2,14,1,14,1,14, 1,16,1,4,1,114,10,0,0,0,114,195,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, @@ -963,7 +963,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 182,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,182,2,0,0,115,14,0, + 95,104,97,115,104,95,112,121,99,183,2,0,0,115,14,0, 0,0,8,2,12,1,14,1,16,1,10,1,16,1,4,1, 114,10,0,0,0,114,196,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, @@ -991,7 +991,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,193,2,0,0,115,10,0,0,0, + 95,115,111,117,114,99,101,194,2,0,0,115,10,0,0,0, 8,5,12,1,10,1,12,1,20,1,114,10,0,0,0,114, 201,0,0,0,169,2,114,165,0,0,0,218,26,115,117,98, 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, @@ -1004,8 +1004,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 3,160,4,124,1,161,1,125,1,116,5,124,1,131,1,115, 57,9,0,116,6,116,3,160,7,161,0,124,1,131,2,125, 1,110,10,35,0,4,0,116,8,121,156,1,0,1,0,1, - 0,89,0,110,1,37,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, + 0,89,0,110,1,37,0,116,9,160,10,124,0,124,2,124, + 1,100,4,166,3,125,4,100,5,124,4,95,11,124,2,100, 1,117,0,114,99,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, 96,124,5,124,0,124,1,131,2,125,2,124,2,124,4,95, @@ -1057,7 +1057,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,210,2,0,0,115,96,0,0,0,8,12,4, + 116,105,111,110,211,2,0,0,115,96,0,0,0,8,12,4, 4,10,1,2,2,12,1,2,128,12,1,4,1,2,128,2, 251,10,7,8,1,2,1,16,1,2,128,12,1,4,1,2, 128,16,8,6,1,8,3,14,1,14,1,10,1,6,1,4, @@ -1100,7 +1100,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,39,3,0,0,115,14,0,0,0,2,2,14, + 115,116,114,121,40,3,0,0,115,14,0,0,0,2,2,14, 1,2,128,12,1,18,1,2,128,2,255,115,12,0,0,0, 129,6,8,0,136,14,24,7,153,1,24,7,122,36,87,105, 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, @@ -1108,8 +1108,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,136,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, + 106,2,125,2,124,2,160,3,124,1,100,1,116,4,106,5, + 100,0,100,2,133,2,25,0,22,0,100,3,166,2,125,3, 9,0,124,0,160,6,124,3,161,1,53,0,125,4,116,7, 160,8,124,4,100,4,161,2,125,5,100,0,4,0,4,0, 131,3,1,0,110,11,35,0,49,0,115,48,119,4,37,0, @@ -1129,7 +1129,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,46,3,0,0,115,34,0,0,0,6,2,8, + 115,116,114,121,47,3,0,0,115,34,0,0,0,6,2,8, 1,6,2,6,1,16,1,6,255,2,2,12,1,12,1,12, 255,22,128,4,4,2,128,12,254,6,1,2,128,2,255,115, 39,0,0,0,153,5,56,0,158,7,43,3,165,6,56,0, @@ -1144,8 +1144,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,0,110,11,35,0,4,0,116,2,121,60,1,0,1,0, 1,0,89,0,100,0,83,0,37,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,57,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, + 131,1,161,1,114,57,116,6,160,7,124,1,124,5,124,1, + 124,4,131,2,124,4,100,1,166,3,125,7,124,7,2,0, 1,0,83,0,113,31,100,0,83,0,119,0,41,2,78,114, 205,0,0,0,41,8,114,224,0,0,0,114,76,0,0,0, 114,77,0,0,0,114,209,0,0,0,114,59,0,0,0,114, @@ -1155,7 +1155,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,103,101,116,114,223,0,0,0,114,165,0,0,0,114,213, 0,0,0,114,211,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,61,3,0,0,115,38,0,0,0,10,2,8,1,4, + 101,99,62,3,0,0,115,38,0,0,0,10,2,8,1,4, 1,2,1,10,1,2,128,12,1,6,1,2,128,14,1,14, 1,6,1,8,1,2,1,6,254,8,3,2,252,4,255,2, 254,115,12,0,0,0,140,4,17,0,145,7,27,7,188,1, @@ -1184,7 +1184,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,165,0,0,0,169,4,114,222,0,0,0,114,164, 0,0,0,114,66,0,0,0,114,211,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,77,3,0,0,115,14,0, + 110,100,95,109,111,100,117,108,101,78,3,0,0,115,14,0, 0,0,6,7,2,2,4,254,12,3,8,1,6,1,4,2, 114,10,0,0,0,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, @@ -1197,7 +1197,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,116,104,111,100,114,217,0,0,0,218,11,99,108,97,115, 115,109,101,116,104,111,100,114,224,0,0,0,114,227,0,0, 0,114,230,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,215,0,0,0,27, + 114,7,0,0,0,114,8,0,0,0,114,215,0,0,0,28, 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,10,0,0,0,114,215,0,0,0, @@ -1234,7 +1234,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 164,0,0,0,114,121,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,207,0,0,0,99,3,0,0,115,8,0,0,0, + 0,0,114,207,0,0,0,100,3,0,0,115,8,0,0,0, 18,3,16,1,14,1,16,1,114,10,0,0,0,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, @@ -1245,7 +1245,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,110,46,78,114,7,0,0,0,169,2,114,144,0,0,0, 114,211,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,107,3,0,0,243,2,0,0,0,4,0,114,10, + 117,108,101,108,3,0,0,243,2,0,0,0,4,0,114,10, 0,0,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, @@ -1265,7 +1265,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 4,101,120,101,99,114,157,0,0,0,41,3,114,144,0,0, 0,218,6,109,111,100,117,108,101,114,189,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,110,3,0,0,115,12, + 120,101,99,95,109,111,100,117,108,101,111,3,0,0,115,12, 0,0,0,12,2,8,1,4,1,8,1,4,255,20,2,114, 10,0,0,0,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, @@ -1277,14 +1277,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, 105,109,169,2,114,144,0,0,0,114,164,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,118,3,0,0,115,2, + 111,97,100,95,109,111,100,117,108,101,119,3,0,0,115,2, 0,0,0,12,3,114,10,0,0,0,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,151,0,0,0,114,150,0, 0,0,114,152,0,0,0,114,153,0,0,0,114,207,0,0, 0,114,240,0,0,0,114,246,0,0,0,114,249,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,94,3,0,0,115,12,0, + 8,0,0,0,114,236,0,0,0,95,3,0,0,115,12,0, 0,0,8,0,4,2,8,3,8,8,8,3,12,8,114,10, 0,0,0,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, @@ -1309,7 +1309,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,46,10,32,32,32,32,32,32,32,32,78,41,1,114,77, 0,0,0,169,2,114,144,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, - 112,97,116,104,95,109,116,105,109,101,126,3,0,0,115,2, + 112,97,116,104,95,109,116,105,109,101,127,3,0,0,115,2, 0,0,0,4,6,114,10,0,0,0,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, @@ -1344,7 +1344,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 32,32,32,32,114,194,0,0,0,78,41,1,114,252,0,0, 0,114,251,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,134,3,0,0,115,2,0,0,0,14,12,114,10,0,0, + 115,135,3,0,0,115,2,0,0,0,14,12,114,10,0,0, 0,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, @@ -1368,7 +1368,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,135,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,148,3,0,0,115,2,0,0,0,12, + 116,101,99,111,100,101,149,3,0,0,115,2,0,0,0,12, 8,114,10,0,0,0,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, @@ -1385,7 +1385,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,115,46,10,32,32,32,32,32,32,32,32,78,114,7,0, 0,0,41,3,114,144,0,0,0,114,66,0,0,0,114,42, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,254,0,0,0,158,3,0,0,114,241,0,0,0, + 0,0,114,254,0,0,0,159,3,0,0,114,241,0,0,0, 114,10,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,8,0,0, @@ -1405,7 +1405,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,201,0,0,0,41,5,114,144,0,0,0,114,164, 0,0,0,114,66,0,0,0,114,199,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,165,3,0, + 0,218,10,103,101,116,95,115,111,117,114,99,101,166,3,0, 0,115,26,0,0,0,10,2,2,1,10,1,8,4,2,128, 12,253,4,1,2,1,4,255,2,1,2,255,10,128,2,255, 115,20,0,0,0,134,5,15,0,143,7,33,7,150,7,29, @@ -1413,9 +1413,9 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, 99,101,114,131,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, + 0,4,0,0,0,9,0,0,0,67,0,0,0,115,22,0, + 0,0,116,0,160,1,116,2,124,1,124,2,100,1,100,2, + 124,3,100,3,166,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, @@ -1430,7 +1430,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 4,114,144,0,0,0,114,42,0,0,0,114,66,0,0,0, 114,3,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,175,3,0,0,115,6,0,0,0,12,5,4, + 99,111,100,101,176,3,0,0,115,6,0,0,0,12,5,4, 1,6,255,114,10,0,0,0,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, @@ -1507,7 +1507,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 42,0,0,0,114,176,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,242,0,0,0,183,3,0,0,115, + 0,114,8,0,0,0,114,242,0,0,0,184,3,0,0,115, 188,0,0,0,10,7,4,1,4,1,4,1,4,1,4,1, 2,1,10,1,2,128,14,1,8,1,2,128,2,2,12,1, 2,128,14,1,4,1,2,128,12,2,2,1,12,1,2,128, @@ -1531,7 +1531,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,253,0,0,0,114,255,0,0,0,114,254,0, 0,0,114,2,1,0,0,114,6,1,0,0,114,242,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,250,0,0,0,124,3,0,0,115,16, + 114,8,0,0,0,114,250,0,0,0,125,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,10,0,0,0,114,250,0,0,0,99,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, @@ -1559,7 +1559,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 32,32,32,32,102,105,110,100,101,114,46,78,114,184,0,0, 0,41,3,114,144,0,0,0,114,164,0,0,0,114,66,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,237,0,0,0,17,4,0,0,115,4,0,0,0,6, + 0,114,237,0,0,0,18,4,0,0,115,4,0,0,0,6, 3,10,1,114,10,0,0,0,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, @@ -1568,7 +1568,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 2,83,0,114,70,0,0,0,169,2,218,9,95,95,99,108, 97,115,115,95,95,114,157,0,0,0,169,2,114,144,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,23, + 0,0,114,8,0,0,0,218,6,95,95,101,113,95,95,24, 4,0,0,243,6,0,0,0,12,1,10,1,2,255,114,10, 0,0,0,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, @@ -1577,7 +1577,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 106,2,131,1,65,0,83,0,114,70,0,0,0,169,3,218, 4,104,97,115,104,114,142,0,0,0,114,66,0,0,0,169, 1,114,144,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,27, + 114,8,0,0,0,218,8,95,95,104,97,115,104,95,95,28, 4,0,0,243,2,0,0,0,20,1,114,10,0,0,0,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, @@ -1592,7 +1592,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 10,10,32,32,32,32,32,32,32,32,78,41,3,218,5,115, 117,112,101,114,114,12,1,0,0,114,249,0,0,0,114,248, 0,0,0,169,1,114,15,1,0,0,114,7,0,0,0,114, - 8,0,0,0,114,249,0,0,0,30,4,0,0,115,2,0, + 8,0,0,0,114,249,0,0,0,31,4,0,0,115,2,0, 0,0,16,10,114,10,0,0,0,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, @@ -1603,7 +1603,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,72,0,0,0,114,248,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,204,0, - 0,0,42,4,0,0,243,2,0,0,0,6,3,114,10,0, + 0,0,43,4,0,0,243,2,0,0,0,6,3,114,10,0, 0,0,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,9,0,0,0, @@ -1625,7 +1625,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,114,110,0,0,0,90,4,114,101,97,100,114,93,0,0, 0,41,3,114,144,0,0,0,114,66,0,0,0,114,95,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,0,1,0,0,47,4,0,0,115,26,0,0,0,14, + 0,114,0,1,0,0,48,4,0,0,115,26,0,0,0,14, 2,16,1,6,1,12,255,2,1,22,128,4,0,14,2,6, 1,12,255,2,1,22,128,4,0,115,24,0,0,0,142,4, 25,3,153,4,29,11,158,3,29,11,172,4,55,3,183,4, @@ -1640,7 +1640,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 144,0,0,0,114,245,0,0,0,114,32,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,56,4,0,0,115,4,0,0,0,12,2,8,1,114, + 101,114,57,4,0,0,115,4,0,0,0,12,2,8,1,114, 10,0,0,0,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,151,0,0,0,114,150,0,0,0, @@ -1649,7 +1649,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,204,0,0,0,114,0,1,0,0,114,34,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,26,1,0,0, - 114,8,0,0,0,114,12,1,0,0,12,4,0,0,115,24, + 114,8,0,0,0,114,12,1,0,0,13,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,10,0,0,0, 114,12,1,0,0,99,0,0,0,0,0,0,0,0,0,0, @@ -1672,18 +1672,18 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,218,8,115,116,95,109,116,105,109,101,90,7,115,116, 95,115,105,122,101,41,3,114,144,0,0,0,114,66,0,0, 0,114,11,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,253,0,0,0,66,4,0,0,115,4, + 114,8,0,0,0,114,253,0,0,0,67,4,0,0,115,4, 0,0,0,8,2,14,1,114,10,0,0,0,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,0,0,0,0,5,0,0,0,6,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, + 0,160,1,124,2,124,3,124,4,100,1,166,3,83,0,41, 2,78,169,1,218,5,95,109,111,100,101,41,2,114,140,0, 0,0,114,254,0,0,0,41,5,114,144,0,0,0,114,135, 0,0,0,114,133,0,0,0,114,42,0,0,0,114,79,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,255,0,0,0,71,4,0,0,115,4,0,0,0,8, + 0,114,255,0,0,0,72,4,0,0,115,4,0,0,0,8, 2,16,1,114,10,0,0,0,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,88,0,0,0,114, @@ -1718,7 +1718,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 66,0,0,0,114,42,0,0,0,114,38,1,0,0,218,6, 112,97,114,101,110,116,114,121,0,0,0,114,64,0,0,0, 114,69,0,0,0,114,1,1,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,254,0,0,0,76,4, + 7,0,0,0,114,8,0,0,0,114,254,0,0,0,77,4, 0,0,115,60,0,0,0,12,2,4,1,12,2,12,1,10, 1,12,254,12,4,10,1,2,1,12,1,2,128,12,1,4, 2,12,1,6,3,4,1,4,255,14,2,10,128,2,1,12, @@ -1733,7 +1733,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,153,0,0,0,114,253,0,0,0,114,255,0, 0,0,114,254,0,0,0,114,7,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,35,1,0,0, - 62,4,0,0,115,10,0,0,0,8,0,4,2,8,2,8, + 63,4,0,0,115,10,0,0,0,8,0,4,2,8,2,8, 5,18,5,114,10,0,0,0,114,35,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, @@ -1755,7 +1755,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,8,1,0,0,41,5,114,144,0,0,0,114, 164,0,0,0,114,66,0,0,0,114,42,0,0,0,114,176, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,242,0,0,0,111,4,0,0,115,22,0,0,0, + 0,0,114,242,0,0,0,112,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,114,10,0,0,0,122,29,83,111,117, 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, @@ -1766,13 +1766,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,248,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,2,1, - 0,0,127,4,0,0,114,25,0,0,0,114,10,0,0,0, + 0,0,128,4,0,0,114,25,0,0,0,114,10,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,151,0,0,0,114,150,0,0,0,114,152, 0,0,0,114,153,0,0,0,114,242,0,0,0,114,2,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, - 0,114,8,0,0,0,114,42,1,0,0,107,4,0,0,115, + 0,114,8,0,0,0,114,42,1,0,0,108,4,0,0,115, 8,0,0,0,8,0,4,2,8,2,12,16,114,10,0,0, 0,114,42,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, @@ -1794,20 +1794,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,0,83,0,114,70,0,0,0,114,184,0,0,0,41,3, 114,144,0,0,0,114,142,0,0,0,114,66,0,0,0,114, 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,237, - 0,0,0,140,4,0,0,115,4,0,0,0,6,1,10,1, + 0,0,0,141,4,0,0,115,4,0,0,0,6,1,10,1, 114,10,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,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,13,1,0, 0,114,70,0,0,0,114,14,1,0,0,114,16,1,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 17,1,0,0,144,4,0,0,114,18,1,0,0,114,10,0, + 17,1,0,0,145,4,0,0,114,18,1,0,0,114,10,0, 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,19,1,0,0,114,70,0,0, 0,114,20,1,0,0,114,22,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,23,1,0,0,148, + 114,7,0,0,0,114,8,0,0,0,114,23,1,0,0,149, 4,0,0,114,24,1,0,0,114,10,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,95,95,104,97,115,104,95,95,99,2,0,0,0, @@ -1825,7 +1825,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,114,174,0,0,0,114,142,0,0,0,114,66,0,0,0, 41,3,114,144,0,0,0,114,211,0,0,0,114,245,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,240,0,0,0,151,4,0,0,115,14,0,0,0,4,2, + 114,240,0,0,0,152,4,0,0,115,14,0,0,0,4,2, 6,1,4,255,6,2,8,1,4,255,4,2,114,10,0,0, 0,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, @@ -1843,7 +1843,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 105,99,114,174,0,0,0,114,142,0,0,0,114,66,0,0, 0,169,2,114,144,0,0,0,114,245,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,246,0,0, - 0,159,4,0,0,115,8,0,0,0,14,2,6,1,8,1, + 0,160,4,0,0,115,8,0,0,0,14,2,6,1,8,1, 8,255,114,10,0,0,0,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, @@ -1861,14 +1861,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,237,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,168,4,0,0,115,6,0,0,0,6, + 0,114,9,0,0,0,169,4,0,0,115,6,0,0,0,6, 128,2,1,20,255,114,10,0,0,0,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,75,0,0,0,114,66,0,0,0,218,3,97,110,121,114, 233,0,0,0,114,248,0,0,0,114,7,0,0,0,114,46, - 1,0,0,114,8,0,0,0,114,207,0,0,0,165,4,0, + 1,0,0,114,8,0,0,0,114,207,0,0,0,166,4,0, 0,115,8,0,0,0,14,2,12,1,2,1,8,255,114,10, 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, @@ -1880,7 +1880,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,248,0,0,0,114, 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,242, - 0,0,0,171,4,0,0,114,25,0,0,0,114,10,0,0, + 0,0,0,172,4,0,0,114,25,0,0,0,114,10,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, @@ -1890,14 +1890,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,248,0,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,2,1,0,0,175,4,0,0,114,25,0,0,0,114,10, + 114,2,1,0,0,176,4,0,0,114,25,0,0,0,114,10, 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,27,1,0, 0,114,28,1,0,0,114,72,0,0,0,114,248,0,0,0, 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 204,0,0,0,179,4,0,0,114,29,1,0,0,114,10,0, + 204,0,0,0,180,4,0,0,114,29,1,0,0,114,10,0, 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,151,0,0,0,114,150,0,0, @@ -1906,7 +1906,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 246,0,0,0,114,207,0,0,0,114,242,0,0,0,114,2, 1,0,0,114,161,0,0,0,114,204,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,31,1,0,0,132,4,0,0,115,24,0,0,0,8, + 0,114,31,1,0,0,133,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,10,0,0,0,114,31,1,0, 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1949,7 +1949,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,101,114,169,4,114,144,0,0,0,114,142,0,0,0,114, 66,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,237,0,0,0,192,4,0,0,115,8,0,0,0,6,1, + 114,237,0,0,0,193,4,0,0,115,8,0,0,0,6,1, 6,1,14,1,10,1,114,10,0,0,0,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, @@ -1967,7 +1967,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,198,4,0,0,115,8,0,0,0,18,2,8, + 97,109,101,115,199,4,0,0,115,8,0,0,0,18,2,8, 1,4,2,8,3,114,10,0,0,0,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, @@ -1980,7 +1980,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,51,1,0,0,208,4,0,0,115,4, + 114,8,0,0,0,114,51,1,0,0,209,4,0,0,115,4, 0,0,0,12,1,16,1,114,10,0,0,0,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, @@ -1997,7 +1997,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,90,11,112,97,114,101,110,116,95,112,97,116,104,114,211, 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, - 212,4,0,0,115,16,0,0,0,12,2,10,1,14,1,18, + 213,4,0,0,115,16,0,0,0,12,2,10,1,14,1,18, 3,6,1,8,1,6,1,6,1,114,10,0,0,0,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, @@ -2006,7 +2006,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,131,1,83,0,114,70,0,0,0,41,2,218,4,105,116, 101,114,114,58,1,0,0,114,22,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,225,4,0,0,243,2,0,0,0,12,1, + 116,101,114,95,95,226,4,0,0,243,2,0,0,0,12,1, 114,10,0,0,0,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, @@ -2014,7 +2014,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 161,0,124,1,25,0,83,0,114,70,0,0,0,169,1,114, 58,1,0,0,41,2,114,144,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,228,4, + 0,218,11,95,95,103,101,116,105,116,101,109,95,95,229,4, 0,0,114,62,1,0,0,114,10,0,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, @@ -2023,7 +2023,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 100,0,83,0,114,70,0,0,0,41,1,114,50,1,0,0, 41,3,114,144,0,0,0,114,64,1,0,0,114,66,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,231,4,0, + 218,11,95,95,115,101,116,105,116,101,109,95,95,232,4,0, 0,115,2,0,0,0,14,1,114,10,0,0,0,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, @@ -2031,7 +2031,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,59,1,0,0,114,70,0,0,0,41,2,114,4, 0,0,0,114,58,1,0,0,114,22,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,234,4,0,0,114,62,1,0,0,114,10, + 108,101,110,95,95,235,4,0,0,114,62,1,0,0,114,10, 0,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, @@ -2040,7 +2040,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 112,97,99,101,80,97,116,104,40,123,33,114,125,41,41,2, 114,90,0,0,0,114,50,1,0,0,114,22,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,237,4,0,0,114,62,1,0, + 95,95,114,101,112,114,95,95,238,4,0,0,114,62,1,0, 0,114,10,0,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, @@ -2048,7 +2048,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,160,0,161,0,118,0,83,0,114,70,0,0,0,114,63, 1,0,0,169,2,114,144,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,240,4,0, + 12,95,95,99,111,110,116,97,105,110,115,95,95,241,4,0, 0,114,62,1,0,0,114,10,0,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, @@ -2057,7 +2057,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,0,100,0,83,0,114,70,0,0,0,41,2,114,50,1, 0,0,114,62,0,0,0,114,70,1,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,62,0,0,0, - 243,4,0,0,243,2,0,0,0,16,1,114,10,0,0,0, + 244,4,0,0,243,2,0,0,0,16,1,114,10,0,0,0, 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,151,0,0,0,114, 150,0,0,0,114,152,0,0,0,114,153,0,0,0,114,237, @@ -2065,7 +2065,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,61,1,0,0,114,65,1,0,0,114,66,1,0, 0,114,67,1,0,0,114,69,1,0,0,114,72,1,0,0, 114,62,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 7,0,0,0,114,8,0,0,0,114,48,1,0,0,185,4, + 7,0,0,0,114,8,0,0,0,114,48,1,0,0,186,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,10,0,0,0,114,48,1,0,0,99,0,0,0,0, @@ -2082,7 +2082,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,116,0,124,1,124,2,124,3,131,3,124,0,95, 1,100,0,83,0,114,70,0,0,0,41,2,114,48,1,0, 0,114,50,1,0,0,114,54,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,237,0,0,0,249, + 114,7,0,0,0,114,8,0,0,0,114,237,0,0,0,250, 4,0,0,115,2,0,0,0,18,1,114,10,0,0,0,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, @@ -2107,21 +2107,21 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,102,0,0,0,114,90,0,0,0,114,151,0, 0,0,41,1,114,245,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,252,4,0,0,115,8,0,0,0,6,7, + 95,114,101,112,114,253,4,0,0,115,8,0,0,0,6,7, 2,1,4,255,12,2,114,10,0,0,0,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,248,0,0,0,114,7,0,0,0,114,7,0,0,0,114, - 8,0,0,0,114,207,0,0,0,7,5,0,0,243,2,0, + 8,0,0,0,114,207,0,0,0,8,5,0,0,243,2,0, 0,0,4,1,114,10,0,0,0,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,11,0,0,0,114,7,0,0, 0,114,248,0,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,2,1,0,0,10,5,0,0,114,76, + 114,8,0,0,0,114,2,1,0,0,11,5,0,0,114,76, 1,0,0,114,10,0,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, @@ -2131,20 +2131,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,105,110,103,62,114,244,0,0,0,84,41,1,114,4,1, 0,0,41,1,114,5,1,0,0,114,248,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,242,0, - 0,0,13,5,0,0,114,73,1,0,0,114,10,0,0,0, + 0,0,14,5,0,0,114,73,1,0,0,114,10,0,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,238,0,0,0,114,7, 0,0,0,114,239,0,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,240,0,0,0,16,5,0,0, + 0,0,114,8,0,0,0,114,240,0,0,0,17,5,0,0, 114,241,0,0,0,114,10,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,70,0,0, 0,114,7,0,0,0,114,43,1,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,246,0,0,0,19, + 114,7,0,0,0,114,8,0,0,0,114,246,0,0,0,20, 5,0,0,114,76,1,0,0,114,10,0,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, @@ -2163,7 +2163,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 125,78,41,4,114,160,0,0,0,114,174,0,0,0,114,50, 1,0,0,114,247,0,0,0,114,248,0,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,249,0,0, - 0,22,5,0,0,115,8,0,0,0,6,7,4,1,4,255, + 0,23,5,0,0,115,8,0,0,0,6,7,4,1,4,255, 12,3,114,10,0,0,0,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, @@ -2174,7 +2174,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 97,100,101,114,41,3,114,33,1,0,0,114,77,1,0,0, 114,50,1,0,0,41,3,114,144,0,0,0,114,245,0,0, 0,114,77,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,8,0,0,0,114,34,1,0,0,34,5,0,0,115,4, + 114,8,0,0,0,114,34,1,0,0,35,5,0,0,115,4, 0,0,0,12,1,10,1,114,10,0,0,0,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, @@ -2183,7 +2183,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 1,0,0,114,207,0,0,0,114,2,1,0,0,114,242,0, 0,0,114,240,0,0,0,114,246,0,0,0,114,249,0,0, 0,114,34,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,74,1,0,0,248, + 114,7,0,0,0,114,8,0,0,0,114,74,1,0,0,249, 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,10, 0,0,0,114,74,1,0,0,99,0,0,0,0,0,0,0, @@ -2221,7 +2221,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 5,105,116,101,109,115,114,154,0,0,0,114,79,1,0,0, 41,2,114,142,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,79, - 1,0,0,45,5,0,0,115,14,0,0,0,22,4,8,1, + 1,0,0,46,5,0,0,115,14,0,0,0,22,4,8,1, 10,1,10,1,8,1,2,128,4,252,114,10,0,0,0,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, @@ -2241,7 +2241,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,114,163,0,0,0,114,143,0,0,0,41,2,114,66, 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,55,5,0,0,115,22,0,0,0,16,3, + 104,111,111,107,115,56,5,0,0,115,22,0,0,0,16,3, 12,1,10,1,2,1,12,1,2,128,12,1,4,1,2,128, 4,2,2,253,115,12,0,0,0,148,3,26,2,154,7,35, 9,166,1,35,9,122,22,80,97,116,104,70,105,110,100,101, @@ -2274,7 +2274,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 111,114,114,85,1,0,0,41,3,114,222,0,0,0,114,66, 0,0,0,114,83,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,68,5,0, + 109,112,111,114,116,101,114,95,99,97,99,104,101,69,5,0, 0,115,36,0,0,0,8,8,2,1,10,1,2,128,12,1, 6,3,2,128,2,1,10,1,4,4,2,128,12,253,10,1, 12,1,4,1,2,128,2,253,2,250,115,24,0,0,0,133, @@ -2307,7 +2307,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 164,0,0,0,114,83,1,0,0,114,167,0,0,0,114,165, 0,0,0,114,166,0,0,0,114,211,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,90,5, + 101,103,97,99,121,95,103,101,116,95,115,112,101,99,91,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,114,10,0,0,0,122,27,80,97,116,104,70,105,110,100, @@ -2340,7 +2340,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 104,90,5,101,110,116,114,121,114,83,1,0,0,114,211,0, 0,0,114,166,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,111,5,0,0,115,42,0,0,0,4,5,8,1,14,1, + 99,112,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,114,10,0,0,0,122,20,80,97,116,104,70, @@ -2367,7 +2367,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,41,6,114,222,0,0,0,114,164,0,0,0,114,66, 0,0,0,114,226,0,0,0,114,211,0,0,0,114,91,1, 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, - 0,114,227,0,0,0,143,5,0,0,115,26,0,0,0,8, + 0,114,227,0,0,0,144,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,114,10,0,0,0,122,20, 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, @@ -2395,7 +2395,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, 100,78,114,228,0,0,0,114,229,0,0,0,114,7,0,0, 0,114,7,0,0,0,114,8,0,0,0,114,230,0,0,0, - 167,5,0,0,115,14,0,0,0,6,8,2,2,4,254,12, + 168,5,0,0,115,14,0,0,0,6,8,2,2,4,254,12, 3,8,1,4,1,6,1,114,10,0,0,0,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, @@ -2427,7 +2427,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,115, 41,3,114,145,0,0,0,114,146,0,0,0,114,93,1,0, 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, - 114,94,1,0,0,183,5,0,0,115,4,0,0,0,12,10, + 114,94,1,0,0,184,5,0,0,115,4,0,0,0,12,10, 16,1,114,10,0,0,0,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,70,0,0,0,114,231,0,0,0, @@ -2437,7 +2437,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 89,1,0,0,114,92,1,0,0,114,227,0,0,0,114,230, 0,0,0,114,94,1,0,0,114,7,0,0,0,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,36,0,0,0,8,0,4,2,2,2, + 0,42,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,10, 0,0,0,114,78,1,0,0,99,0,0,0,0,0,0,0, @@ -2484,7 +2484,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 136,0,102,2,86,0,1,0,113,2,100,0,83,0,114,70, 0,0,0,114,7,0,0,0,114,44,1,0,0,169,1,114, 165,0,0,0,114,7,0,0,0,114,8,0,0,0,114,9, - 0,0,0,212,5,0,0,115,4,0,0,0,6,128,18,0, + 0,0,0,213,5,0,0,115,4,0,0,0,6,128,18,0, 114,10,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,98,0, @@ -2498,7 +2498,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,213,0,0,0, 114,7,0,0,0,114,96,1,0,0,114,8,0,0,0,114, - 237,0,0,0,206,5,0,0,115,20,0,0,0,4,4,12, + 237,0,0,0,207,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,114,10,0,0,0,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, @@ -2508,7 +2508,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, 109,116,105,109,101,46,114,131,0,0,0,78,41,1,114,98, 1,0,0,114,22,1,0,0,114,7,0,0,0,114,7,0, - 0,0,114,8,0,0,0,114,79,1,0,0,222,5,0,0, + 0,0,114,8,0,0,0,114,79,1,0,0,223,5,0,0, 114,82,0,0,0,114,10,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, @@ -2540,7 +2540,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,165,0,0,0,114,203,0,0,0,41,3,114, 144,0,0,0,114,164,0,0,0,114,211,0,0,0,114,7, 0,0,0,114,7,0,0,0,114,8,0,0,0,114,162,0, - 0,0,228,5,0,0,115,14,0,0,0,6,7,2,2,4, + 0,0,229,5,0,0,115,14,0,0,0,6,7,2,2,4, 254,10,3,8,1,8,1,16,1,114,10,0,0,0,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, @@ -2551,7 +2551,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 144,0,0,0,114,212,0,0,0,114,164,0,0,0,114,66, 0,0,0,90,4,115,109,115,108,114,226,0,0,0,114,165, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,92,1,0,0,243,5,0,0,115,8,0,0,0, + 0,0,114,92,1,0,0,244,5,0,0,115,8,0,0,0, 10,1,8,1,2,1,6,255,114,10,0,0,0,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, @@ -2573,8 +2573,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 93,55,92,2,125,9,125,10,9,0,116,13,124,0,106,2, 124,4,124,9,23,0,131,2,125,12,110,12,35,0,4,0, 116,18,121,189,1,0,1,0,1,0,89,0,1,0,100,6, - 83,0,37,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,166, + 83,0,37,0,116,19,160,20,100,7,124,12,100,3,100,8, + 166,3,1,0,124,7,124,9,23,0,124,6,118,0,114,166, 116,15,124,12,131,1,114,166,124,0,160,16,124,10,124,1, 124,12,100,6,124,2,161,5,2,0,1,0,83,0,113,111, 124,3,114,187,116,19,160,20,100,9,124,8,161,2,1,0, @@ -2608,7 +2608,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 212,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,211, 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, - 0,0,114,227,0,0,0,248,5,0,0,115,94,0,0,0, + 0,0,114,227,0,0,0,249,5,0,0,115,94,0,0,0, 4,5,14,1,2,1,22,1,2,128,12,1,8,1,2,128, 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, @@ -2643,7 +2643,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,132,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,14,0,0,0,72,6,0,0, + 0,0,114,8,0,0,0,114,14,0,0,0,73,6,0,0, 115,2,0,0,0,20,0,114,10,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, @@ -2661,7 +2661,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 114,71,1,0,0,114,142,0,0,0,114,55,1,0,0,114, 45,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,103,1, - 0,0,43,6,0,0,115,42,0,0,0,6,2,2,1,20, + 0,0,44,6,0,0,115,42,0,0,0,6,2,2,1,20, 1,2,128,18,1,8,3,2,128,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,115,13,0,0,0,132,9,14,0,142,12, @@ -2701,7 +2701,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 72,0,0,0,169,2,114,222,0,0,0,114,102,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,84,6,0,0,115,6,0,0,0,8,2,12, + 110,100,101,114,85,6,0,0,115,6,0,0,0,8,2,12, 1,16,1,114,10,0,0,0,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, @@ -2709,7 +2709,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 78,114,7,0,0,0,41,3,114,222,0,0,0,114,102,1, 0,0,114,108,1,0,0,114,7,0,0,0,114,107,1,0, 0,114,8,0,0,0,218,9,112,97,116,104,95,104,111,111, - 107,74,6,0,0,115,4,0,0,0,14,10,4,6,114,10, + 107,75,6,0,0,115,4,0,0,0,14,10,4,6,114,10, 0,0,0,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, @@ -2717,7 +2717,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 70,105,110,100,101,114,40,123,33,114,125,41,41,2,114,90, 0,0,0,114,66,0,0,0,114,22,1,0,0,114,7,0, 0,0,114,7,0,0,0,114,8,0,0,0,114,69,1,0, - 0,92,6,0,0,114,62,1,0,0,114,10,0,0,0,122, + 0,93,6,0,0,114,62,1,0,0,114,10,0,0,0,122, 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, 112,114,95,95,114,70,0,0,0,41,15,114,151,0,0,0, 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, @@ -2725,7 +2725,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,162,0,0,0,114,92,1,0,0,114,227,0, 0,0,114,103,1,0,0,114,235,0,0,0,114,109,1,0, 0,114,69,1,0,0,114,7,0,0,0,114,7,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,95,1,0,0,197, + 114,7,0,0,0,114,8,0,0,0,114,95,1,0,0,198, 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,10,0,0,0,114,95,1,0,0,99,4,0,0,0,0, @@ -2749,7 +2749,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, 110,97,109,101,114,165,0,0,0,114,211,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,98,6,0, + 102,105,120,95,117,112,95,109,111,100,117,108,101,99,6,0, 0,115,40,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,12,1,2,128,12,1,6,2,2,128,2,254,115,15, @@ -2771,7 +2771,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,209,0,0,0,121,6,0,0,115,8,0,0,0, + 0,0,114,209,0,0,0,122,6,0,0,115,8,0,0,0, 12,5,8,1,8,1,10,1,114,10,0,0,0,114,209,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, @@ -2779,7 +2779,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 160,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,132, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,133, 6,0,0,115,2,0,0,0,8,2,114,10,0,0,0,114, 117,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, @@ -2795,7 +2795,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,104,114,62,0,0,0,114,78,1,0,0,41,2,114,116, 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,137, + 114,8,0,0,0,218,8,95,105,110,115,116,97,108,108,138, 6,0,0,115,8,0,0,0,8,2,6,1,20,1,16,1, 114,10,0,0,0,114,119,1,0,0,41,1,114,88,0,0, 0,114,70,0,0,0,41,3,78,78,78,41,2,114,0,0, @@ -2840,7 +2840,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,31,12, + 5,4,7,10,1,8,8,10,5,10,22,0,127,16,32,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, diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index 873fc7df176833..e67e6df9efb475 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -282,13 +282,13 @@ const unsigned char _Py_M__zipimport[] = { 254,16,3,114,11,0,0,0,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,0,6,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, + 17,116,1,160,2,124,1,124,0,124,3,100,2,166,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, + 4,155,0,157,3,125,5,116,1,160,7,124,1,100,1,100, + 3,100,4,166,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, @@ -1047,8 +1047,8 @@ const unsigned char _Py_M__zipimport[] = { 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,9,0,124,0,106,6,124,7,25,0, + 116,2,160,3,100,1,124,0,106,4,116,5,124,7,100,2, + 100,3,166,5,1,0,9,0,124,0,106,6,124,7,25,0, 125,8,110,10,35,0,4,0,116,7,121,134,1,0,1,0, 1,0,89,0,113,9,37,0,124,8,100,4,25,0,125,9, 116,8,124,0,106,4,124,8,131,2,125,10,100,0,125,11, diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 7c2242863ece23..65c03ef0e949a1 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -165,7 +165,7 @@ static void *opcode_targets[256] = { &&TARGET_SET_UPDATE, &&TARGET_DICT_MERGE, &&TARGET_DICT_UPDATE, - &&_unknown_opcode, + &&TARGET_CALL_METHOD_KW, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, From webhook-mailer at python.org Sat May 15 12:37:20 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 15 May 2021 16:37:20 -0000 Subject: [Python-checkins] bpo-44139: Use a more descriptive syntax error comprehension case in the What's New for 3.10 (GH-26145) Message-ID: https://github.com/python/cpython/commit/c5b833046d9dbb2063f776703fc513b71664b859 commit: c5b833046d9dbb2063f776703fc513b71664b859 branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-15T17:37:12+01:00 summary: bpo-44139: Use a more descriptive syntax error comprehension case in the What's New for 3.10 (GH-26145) files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index c15bb326938097..926679e6f32dc5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -215,9 +215,9 @@ have been incorporated. Some of the most notable ones: .. code-block:: python - >>> {x,y for x,y in range(100)} + >>> {x,y for x,y in zip('abcd', '1234')} File "", line 1 - {x,y for x,y in range(100)} + {x,y for x,y in zip('abcd', '1234')} ^ SyntaxError: did you forget parentheses around the comprehension target? From webhook-mailer at python.org Sat May 15 12:56:21 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 15 May 2021 16:56:21 -0000 Subject: [Python-checkins] bpo-32133: Improve numbers docs (GH-26124) Message-ID: https://github.com/python/cpython/commit/086b5c6ce16b524629428b4fd5c9213930bfca47 commit: 086b5c6ce16b524629428b4fd5c9213930bfca47 branch: main author: Miguel Brito <5544985+miguendes at users.noreply.github.com> committer: rhettinger date: 2021-05-15T09:56:12-07:00 summary: bpo-32133: Improve numbers docs (GH-26124) files: M Doc/library/numbers.rst diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index d37123c35476a7..b77845ed0dee92 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -10,7 +10,7 @@ The :mod:`numbers` module (:pep:`3141`) defines a hierarchy of numeric :term:`abstract base classes ` which progressively define -more operations. None of the types defined in this module can be instantiated. +more operations. None of the types defined in this module are intended to be instantiated. .. class:: Number From webhook-mailer at python.org Sat May 15 12:56:39 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 15 May 2021 16:56:39 -0000 Subject: [Python-checkins] bpo-44139: Use a more descriptive syntax error comprehension case in the What's New for 3.10 (GH-26145) (GH-26146) Message-ID: https://github.com/python/cpython/commit/67729a91a5fe6ad06fb5f2cc4f91ad99876e431a commit: 67729a91a5fe6ad06fb5f2cc4f91ad99876e431a branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: pablogsal date: 2021-05-15T17:56:28+01:00 summary: bpo-44139: Use a more descriptive syntax error comprehension case in the What's New for 3.10 (GH-26145) (GH-26146) (cherry picked from commit c5b833046d9dbb2063f776703fc513b71664b859) Co-authored-by: Pablo Galindo files: M Doc/whatsnew/3.10.rst diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index c15bb326938097..926679e6f32dc5 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -215,9 +215,9 @@ have been incorporated. Some of the most notable ones: .. code-block:: python - >>> {x,y for x,y in range(100)} + >>> {x,y for x,y in zip('abcd', '1234')} File "", line 1 - {x,y for x,y in range(100)} + {x,y for x,y in zip('abcd', '1234')} ^ SyntaxError: did you forget parentheses around the comprehension target? From webhook-mailer at python.org Sat May 15 12:58:11 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 15 May 2021 16:58:11 -0000 Subject: [Python-checkins] bpo-44143: Fix crash in the parser when raising tokenizer errors with an exception set (GH-26144) Message-ID: https://github.com/python/cpython/commit/80b089179fa798c8ceaab2ff699c82499b2fcacd commit: 80b089179fa798c8ceaab2ff699c82499b2fcacd branch: main author: Pablo Galindo committer: pablogsal date: 2021-05-15T17:58:02+01:00 summary: bpo-44143: Fix crash in the parser when raising tokenizer errors with an exception set (GH-26144) files: A Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst M Lib/test/test_exceptions.py M Parser/pegen.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 1fe479fbe83092..aefdd7b769f289 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -242,6 +242,7 @@ def baz(): """, 9, 24) check("pass\npass\npass\n(1+)\npass\npass\npass", 4, 4) check("(1+)", 1, 4) + check("[interesting\nfoo()\n", 1, 1) # Errors thrown by symtable.c check('x = [(yield i) for i in range(3)]', 1, 5) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst new file mode 100644 index 00000000000000..a4e88e55723e4d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst @@ -0,0 +1,2 @@ +Fixed a crash in the parser that manifest when raising tokenizer errors when +an existing exception was present. Patch by Pablo Galindo. diff --git a/Parser/pegen.c b/Parser/pegen.c index 6080cec1489ed8..c2f25402ca4e13 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1259,6 +1259,7 @@ _PyPegen_check_tokenizer_errors(Parser *p) { if (p->tok->level != 0) { int error_lineno = p->tok->parenlinenostack[p->tok->level-1]; if (current_err_line > error_lineno) { + PyErr_Clear(); raise_unclosed_parentheses_error(p); return -1; } From webhook-mailer at python.org Sat May 15 13:28:15 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 15 May 2021 17:28:15 -0000 Subject: [Python-checkins] bpo-32133: Improve numbers docs (GH-26124) (GH-26147) Message-ID: https://github.com/python/cpython/commit/376740110ecb2440fee9e04f325131aaefeb5c47 commit: 376740110ecb2440fee9e04f325131aaefeb5c47 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-15T10:28:05-07:00 summary: bpo-32133: Improve numbers docs (GH-26124) (GH-26147) files: M Doc/library/numbers.rst diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index d37123c35476a7..b77845ed0dee92 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -10,7 +10,7 @@ The :mod:`numbers` module (:pep:`3141`) defines a hierarchy of numeric :term:`abstract base classes ` which progressively define -more operations. None of the types defined in this module can be instantiated. +more operations. None of the types defined in this module are intended to be instantiated. .. class:: Number From webhook-mailer at python.org Sat May 15 13:28:59 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 15 May 2021 17:28:59 -0000 Subject: [Python-checkins] bpo-32133: Improve numbers docs (GH-26124) (GH-26149) Message-ID: https://github.com/python/cpython/commit/a38db84122b4f664ee30b9ffd55ce87b7f4517ac commit: a38db84122b4f664ee30b9ffd55ce87b7f4517ac branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-15T10:28:55-07:00 summary: bpo-32133: Improve numbers docs (GH-26124) (GH-26149) files: M Doc/library/numbers.rst diff --git a/Doc/library/numbers.rst b/Doc/library/numbers.rst index d37123c35476a7..b77845ed0dee92 100644 --- a/Doc/library/numbers.rst +++ b/Doc/library/numbers.rst @@ -10,7 +10,7 @@ The :mod:`numbers` module (:pep:`3141`) defines a hierarchy of numeric :term:`abstract base classes ` which progressively define -more operations. None of the types defined in this module can be instantiated. +more operations. None of the types defined in this module are intended to be instantiated. .. class:: Number From webhook-mailer at python.org Sat May 15 13:39:26 2021 From: webhook-mailer at python.org (pablogsal) Date: Sat, 15 May 2021 17:39:26 -0000 Subject: [Python-checkins] bpo-44143: Fix crash in the parser when raising tokenizer errors with an exception set (GH-26144) (GH-26148) Message-ID: https://github.com/python/cpython/commit/1afaaf5a2dc901377bb17f6fbe0cff7bf3b797e3 commit: 1afaaf5a2dc901377bb17f6fbe0cff7bf3b797e3 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: pablogsal date: 2021-05-15T18:39:18+01:00 summary: bpo-44143: Fix crash in the parser when raising tokenizer errors with an exception set (GH-26144) (GH-26148) (cherry picked from commit 80b089179fa798c8ceaab2ff699c82499b2fcacd) Co-authored-by: Pablo Galindo files: A Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst M Lib/test/test_exceptions.py M Parser/pegen.c diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 1fe479fbe83092..aefdd7b769f289 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -242,6 +242,7 @@ def baz(): """, 9, 24) check("pass\npass\npass\n(1+)\npass\npass\npass", 4, 4) check("(1+)", 1, 4) + check("[interesting\nfoo()\n", 1, 1) # Errors thrown by symtable.c check('x = [(yield i) for i in range(3)]', 1, 5) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst new file mode 100644 index 00000000000000..a4e88e55723e4d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-15-17-30-57.bpo-44143.7UTS6H.rst @@ -0,0 +1,2 @@ +Fixed a crash in the parser that manifest when raising tokenizer errors when +an existing exception was present. Patch by Pablo Galindo. diff --git a/Parser/pegen.c b/Parser/pegen.c index 6080cec1489ed8..c2f25402ca4e13 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -1259,6 +1259,7 @@ _PyPegen_check_tokenizer_errors(Parser *p) { if (p->tok->level != 0) { int error_lineno = p->tok->parenlinenostack[p->tok->level-1]; if (current_err_line > error_lineno) { + PyErr_Clear(); raise_unclosed_parentheses_error(p); return -1; } From webhook-mailer at python.org Sat May 15 14:00:59 2021 From: webhook-mailer at python.org (rhettinger) Date: Sat, 15 May 2021 18:00:59 -0000 Subject: [Python-checkins] Improve speed and accuracy for correlation() (GH-26135) Message-ID: https://github.com/python/cpython/commit/fdfea4ab16ff65234dc30f51ed8056138ab19005 commit: fdfea4ab16ff65234dc30f51ed8056138ab19005 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-15T11:00:51-07:00 summary: Improve speed and accuracy for correlation() (GH-26135) files: M Lib/statistics.py diff --git a/Lib/statistics.py b/Lib/statistics.py index db8c581068b7d..507a5b2d79dce 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -107,9 +107,12 @@ __all__ = [ 'NormalDist', 'StatisticsError', + 'correlation', + 'covariance', 'fmean', 'geometric_mean', 'harmonic_mean', + 'linear_regression', 'mean', 'median', 'median_grouped', @@ -122,9 +125,6 @@ 'quantiles', 'stdev', 'variance', - 'correlation', - 'covariance', - 'linear_regression', ] import math @@ -882,10 +882,10 @@ def covariance(x, y, /): 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 = fmean(x) - ybar = fmean(y) - total = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) - return total / (n - 1) + xbar = fsum(x) / n + ybar = fsum(y) / n + sxy = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) + return sxy / (n - 1) def correlation(x, y, /): @@ -910,11 +910,13 @@ def correlation(x, y, /): 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) + xbar = fsum(x) / n + ybar = fsum(y) / n + sxy = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) + s2x = fsum((xi - xbar) ** 2.0 for xi in x) + s2y = fsum((yi - ybar) ** 2.0 for yi in y) try: - return cov / (stdx * stdy) + return sxy / sqrt(s2x * s2y) except ZeroDivisionError: raise StatisticsError('at least one of the inputs is constant') @@ -958,7 +960,7 @@ def linear_regression(regressor, dependent_variable, /): sxy = fsum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y)) s2x = fsum((xi - xbar) ** 2.0 for xi in x) try: - slope = sxy / s2x + slope = sxy / s2x # equivalent to: covariance(x, y) / variance(x) except ZeroDivisionError: raise StatisticsError('regressor is constant') intercept = ybar - slope * xbar From webhook-mailer at python.org Sun May 16 03:15:33 2021 From: webhook-mailer at python.org (gpshead) Date: Sun, 16 May 2021 07:15:33 -0000 Subject: [Python-checkins] bpo-39950: Fix deprecation warning in test for `pathlib.Path.link_to()` (GH-26155) Message-ID: https://github.com/python/cpython/commit/1a08c5ac49b748d5e4e4b508d22d3804e3cd4dcc commit: 1a08c5ac49b748d5e4e4b508d22d3804e3cd4dcc branch: main author: Barney Gale committer: gpshead date: 2021-05-16T00:15:25-07:00 summary: bpo-39950: Fix deprecation warning in test for `pathlib.Path.link_to()` (GH-26155) files: M Lib/pathlib.py M Lib/test/test_pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 94e079fffef60..8e6eb48b9767c 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1265,7 +1265,7 @@ def link_to(self, target): warnings.warn("pathlib.Path.link_to() is deprecated and is scheduled " "for removal in Python 3.12. " "Use pathlib.Path.hardlink_to() instead.", - DeprecationWarning) + DeprecationWarning, stacklevel=2) 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 6ed08f7e70ce3..55d63d539e550 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1934,7 +1934,8 @@ def test_link_to(self): self.assertTrue(p.stat) # Linking to a str of a relative path. r = rel_join('fileAAA') - q.link_to(r) + with self.assertWarns(DeprecationWarning): + q.link_to(r) self.assertEqual(os.stat(r).st_size, size) self.assertTrue(q.stat) From webhook-mailer at python.org Sun May 16 09:33:30 2021 From: webhook-mailer at python.org (isidentical) Date: Sun, 16 May 2021 13:33:30 -0000 Subject: [Python-checkins] bpo-44142: drop redundant parantheses when unparsing tuples as assignment targets (GH-26156) Message-ID: https://github.com/python/cpython/commit/51cef8be8c77dff522bec6f95d6853031bf19038 commit: 51cef8be8c77dff522bec6f95d6853031bf19038 branch: main author: Batuhan Taskaya committer: isidentical date: 2021-05-16T16:33:22+03:00 summary: bpo-44142: drop redundant parantheses when unparsing tuples as assignment targets (GH-26156) files: A Misc/NEWS.d/next/Library/2021-05-16-02-24-23.bpo-44142.t-XU8k.rst M Lib/ast.py M Lib/test/test_ast.py M Lib/test/test_unparse.py diff --git a/Lib/ast.py b/Lib/ast.py index 0aef172516b3fd..64487d2f0a60e5 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -640,7 +640,8 @@ class Param(expr_context): class _Precedence: """Precedence table that originated from python grammar.""" - TUPLE = auto() + NAMED_EXPR = auto() # := + TUPLE = auto() # , YIELD = auto() # 'yield', 'yield from' TEST = auto() # 'if'-'else', 'lambda' OR = auto() # 'or' @@ -838,7 +839,7 @@ def visit_Expr(self, node): self.traverse(node.value) def visit_NamedExpr(self, node): - with self.require_parens(_Precedence.TUPLE, node): + with self.require_parens(_Precedence.NAMED_EXPR, node): self.set_precedence(_Precedence.ATOM, node.target, node.value) self.traverse(node.target) self.write(" := ") @@ -859,6 +860,7 @@ def visit_ImportFrom(self, node): def visit_Assign(self, node): self.fill() for target in node.targets: + self.set_precedence(_Precedence.TUPLE, target) self.traverse(target) self.write(" = ") self.traverse(node.value) @@ -1030,6 +1032,7 @@ def visit_AsyncFor(self, node): def _for_helper(self, fill, node): self.fill(fill) + self.set_precedence(_Precedence.TUPLE, node.target) self.traverse(node.target) self.write(" in ") self.traverse(node.iter) @@ -1315,7 +1318,7 @@ def write_item(item): ) def visit_Tuple(self, node): - with self.delimit("(", ")"): + with self.require_parens(_Precedence.TUPLE, node): self.items_view(self.traverse, node.elts) unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"} diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py index 80d24e94040bcf..249e4bf6b3c6b8 100644 --- a/Lib/test/test_ast.py +++ b/Lib/test/test_ast.py @@ -702,7 +702,8 @@ def test_constant_as_name(self): def test_precedence_enum(self): class _Precedence(enum.IntEnum): """Precedence table that originated from python grammar.""" - TUPLE = enum.auto() + NAMED_EXPR = enum.auto() # := + TUPLE = enum.auto() # , YIELD = enum.auto() # 'yield', 'yield from' TEST = enum.auto() # 'if'-'else', 'lambda' OR = enum.auto() # 'or' diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py index 4d3340e26ff02f..63151ec89d8551 100644 --- a/Lib/test/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -541,6 +541,43 @@ def test_lambda_parameters(self): self.check_src_roundtrip("lambda x, y, /, z, q, *, u: None") self.check_src_roundtrip("lambda x, *y, **z: None") + def test_star_expr_assign_target(self): + for source_type, source in [ + ("single assignment", "{target} = foo"), + ("multiple assignment", "{target} = {target} = bar"), + ("for loop", "for {target} in foo:\n pass"), + ("async for loop", "async for {target} in foo:\n pass") + ]: + for target in [ + "a", + "a,", + "a, b", + "a, *b, c", + "a, (b, c), d", + "a, (b, c, d), *e", + "a, (b, *c, d), e", + "a, (b, *c, (d, e), f), g", + "[a]", + "[a, b]", + "[a, *b, c]", + "[a, [b, c], d]", + "[a, [b, c, d], *e]", + "[a, [b, *c, d], e]", + "[a, [b, *c, [d, e], f], g]", + "a, [b, c], d", + "[a, b, (c, d), (e, f)]", + "a, b, [*c], d, e" + ]: + with self.subTest(source_type=source_type, target=target): + self.check_src_roundtrip(source.format(target=target)) + + def test_star_expr_assign_target_multiple(self): + self.check_src_roundtrip("a = b = c = d") + self.check_src_roundtrip("a, b = c, d = e, f = g") + self.check_src_roundtrip("[a, b] = [c, d] = [e, f] = g") + self.check_src_roundtrip("a, b = [c, d] = e, f = g") + + class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test.""" diff --git a/Misc/NEWS.d/next/Library/2021-05-16-02-24-23.bpo-44142.t-XU8k.rst b/Misc/NEWS.d/next/Library/2021-05-16-02-24-23.bpo-44142.t-XU8k.rst new file mode 100644 index 00000000000000..96fdd7c6566b20 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-02-24-23.bpo-44142.t-XU8k.rst @@ -0,0 +1,2 @@ +:func:`ast.unparse` will now drop the redundant parentheses when tuples used +as assignment targets (e.g in for loops). From webhook-mailer at python.org Sun May 16 10:34:48 2021 From: webhook-mailer at python.org (serhiy-storchaka) Date: Sun, 16 May 2021 14:34:48 -0000 Subject: [Python-checkins] bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) (GH-26093) Message-ID: https://github.com/python/cpython/commit/925cb85e9e28d69be53db669527c0a1292f0fbfb commit: 925cb85e9e28d69be53db669527c0a1292f0fbfb branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: serhiy-storchaka date: 2021-05-16T17:34:43+03:00 summary: bpo-44114: Fix dictkeys_reversed and dictvalues_reversed function signatures (GH-26062) (GH-26093) These are passed and called as PyCFunction, however they are defined here without the (ignored) args parameter. This works fine in some C compilers, but fails in webassembly or anything else that has strict function pointer call type checking. (cherry picked from commit ab383eb6f03896b0ef6634ee3d776344fcb9e5b8) Co-authored-by: Joe Marshall Co-authored-by: Joe Marshall files: A Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst M Objects/dictobject.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst new file mode 100644 index 00000000000000..c50b1594cae356 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-05-12-14-26-16.bpo-44114.p-WfAE.rst @@ -0,0 +1 @@ +Fix incorrect dictkeys_reversed and dictitems_reversed function signatures in C code, which broke webassembly builds. \ No newline at end of file diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 06412a9d87aaf8..2ae122d3239c14 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4615,7 +4615,7 @@ static PySequenceMethods dictitems_as_sequence = { (objobjproc)dictitems_contains, /* sq_contains */ }; -static PyObject* dictitems_reversed(_PyDictViewObject *dv); +static PyObject* dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_items_doc, "Return a reverse iterator over the dict items."); @@ -4668,7 +4668,7 @@ dictitems_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictitems_reversed(_PyDictViewObject *dv) +dictitems_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; @@ -4698,7 +4698,7 @@ static PySequenceMethods dictvalues_as_sequence = { (objobjproc)0, /* sq_contains */ }; -static PyObject* dictvalues_reversed(_PyDictViewObject *dv); +static PyObject* dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)); PyDoc_STRVAR(reversed_values_doc, "Return a reverse iterator over the dict values."); @@ -4749,7 +4749,7 @@ dictvalues_new(PyObject *dict, PyObject *Py_UNUSED(ignored)) } static PyObject * -dictvalues_reversed(_PyDictViewObject *dv) +dictvalues_reversed(_PyDictViewObject *dv, PyObject *Py_UNUSED(ignored)) { if (dv->dv_dict == NULL) { Py_RETURN_NONE; From webhook-mailer at python.org Sun May 16 11:35:46 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 15:35:46 -0000 Subject: [Python-checkins] Fix typo in comment (GH-26162) Message-ID: https://github.com/python/cpython/commit/de367378f67d7e90e4015100b19277685a3c9bb3 commit: de367378f67d7e90e4015100b19277685a3c9bb3 branch: main author: Ashwin Ramaswami committer: iritkatriel date: 2021-05-16T16:35:41+01:00 summary: Fix typo in comment (GH-26162) files: M Lib/gzip.py diff --git a/Lib/gzip.py b/Lib/gzip.py index 9a4e0f9c00c58..1c1e795e1715d 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -521,7 +521,7 @@ def _add_read_data(self, data): def _read_eof(self): # We've read to the end of the file - # We check the that the computed CRC and size of the + # We check that the computed CRC and size of the # uncompressed data matches the stored values. Note that the size # stored is the true file size mod 2**32. crc32, isize = struct.unpack(" https://github.com/python/cpython/commit/a42d98ed91cd1f08b2e9734ca6ca136dd10dff5d commit: a42d98ed91cd1f08b2e9734ca6ca136dd10dff5d branch: main author: Serhii Hidenko committer: iritkatriel date: 2021-05-16T16:55:06+01:00 summary: Remove a redundant assignment in Tools/unittestgui/unittestgui.py (GH-21438) files: M Tools/unittestgui/unittestgui.py diff --git a/Tools/unittestgui/unittestgui.py b/Tools/unittestgui/unittestgui.py index c3b5fa45842093..4fc5930adbbfc7 100755 --- a/Tools/unittestgui/unittestgui.py +++ b/Tools/unittestgui/unittestgui.py @@ -54,7 +54,6 @@ class BaseGUITestRunner(object): def __init__(self, *args, **kwargs): self.currentResult = None self.running = 0 - self.__rollbackImporter = None self.__rollbackImporter = RollbackImporter() self.test_suite = None From webhook-mailer at python.org Sun May 16 12:18:00 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 16:18:00 -0000 Subject: [Python-checkins] Remove a redundant assignment in Tools/unittestgui/unittestgui.py (GH-21438) (#26169) Message-ID: https://github.com/python/cpython/commit/d43e1cbcc122535108aa7aa975978c0cdfbd78fc commit: d43e1cbcc122535108aa7aa975978c0cdfbd78fc branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-16T17:17:55+01:00 summary: Remove a redundant assignment in Tools/unittestgui/unittestgui.py (GH-21438) (#26169) (cherry picked from commit a42d98ed91cd1f08b2e9734ca6ca136dd10dff5d) Co-authored-by: Serhii Hidenko files: M Tools/unittestgui/unittestgui.py diff --git a/Tools/unittestgui/unittestgui.py b/Tools/unittestgui/unittestgui.py index c3b5fa45842093..4fc5930adbbfc7 100755 --- a/Tools/unittestgui/unittestgui.py +++ b/Tools/unittestgui/unittestgui.py @@ -54,7 +54,6 @@ class BaseGUITestRunner(object): def __init__(self, *args, **kwargs): self.currentResult = None self.running = 0 - self.__rollbackImporter = None self.__rollbackImporter = RollbackImporter() self.test_suite = None From webhook-mailer at python.org Sun May 16 12:56:28 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 16:56:28 -0000 Subject: [Python-checkins] [3.10] Remove a redundant assignment in Tools/unittestgui/unittestgui.py (GH-21438) (GH-26171) Message-ID: https://github.com/python/cpython/commit/9b59b6fff8121b2b0611f807fd310ca743ce3d25 commit: 9b59b6fff8121b2b0611f807fd310ca743ce3d25 branch: 3.10 author: Irit Katriel committer: iritkatriel date: 2021-05-16T17:56:15+01:00 summary: [3.10] Remove a redundant assignment in Tools/unittestgui/unittestgui.py (GH-21438) (GH-26171) (cherry picked from commit a42d98ed91cd1f08b2e9734ca6ca136dd10dff5d) Co-authored-by: Serhii Hidenko files: M Tools/unittestgui/unittestgui.py diff --git a/Tools/unittestgui/unittestgui.py b/Tools/unittestgui/unittestgui.py index c3b5fa45842093..4fc5930adbbfc7 100755 --- a/Tools/unittestgui/unittestgui.py +++ b/Tools/unittestgui/unittestgui.py @@ -54,7 +54,6 @@ class BaseGUITestRunner(object): def __init__(self, *args, **kwargs): self.currentResult = None self.running = 0 - self.__rollbackImporter = None self.__rollbackImporter = RollbackImporter() self.test_suite = None From webhook-mailer at python.org Sun May 16 14:08:15 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 16 May 2021 18:08:15 -0000 Subject: [Python-checkins] [3.9] Fix typo in comment (GH-26162) (GH-26165) Message-ID: https://github.com/python/cpython/commit/ea33d204ce4408b7b15ca94702b76432bab6caa3 commit: ea33d204ce4408b7b15ca94702b76432bab6caa3 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-05-16T11:08:10-07:00 summary: [3.9] Fix typo in comment (GH-26162) (GH-26165) (cherry picked from commit de367378f67d7e90e4015100b19277685a3c9bb3) Co-authored-by: Ashwin Ramaswami Automerge-Triggered-By: GH:iritkatriel files: M Lib/gzip.py diff --git a/Lib/gzip.py b/Lib/gzip.py index ee0cbed8f50d6d..11a5f41d56679b 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -516,7 +516,7 @@ def _add_read_data(self, data): def _read_eof(self): # We've read to the end of the file - # We check the that the computed CRC and size of the + # We check that the computed CRC and size of the # uncompressed data matches the stored values. Note that the size # stored is the true file size mod 2**32. crc32, isize = struct.unpack(" https://github.com/python/cpython/commit/68b79f75c535724eb526ed68ad7a73c8cb7956b1 commit: 68b79f75c535724eb526ed68ad7a73c8cb7956b1 branch: 3.10 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-05-16T11:08:57-07:00 summary: [3.10] Fix typo in comment (GH-26162) (GH-26164) (cherry picked from commit de367378f67d7e90e4015100b19277685a3c9bb3) Co-authored-by: Ashwin Ramaswami Automerge-Triggered-By: GH:iritkatriel files: M Lib/gzip.py diff --git a/Lib/gzip.py b/Lib/gzip.py index 9a4e0f9c00c58..1c1e795e1715d 100644 --- a/Lib/gzip.py +++ b/Lib/gzip.py @@ -521,7 +521,7 @@ def _add_read_data(self, data): def _read_eof(self): # We've read to the end of the file - # We check the that the computed CRC and size of the + # We check that the computed CRC and size of the # uncompressed data matches the stored values. Note that the size # stored is the true file size mod 2**32. crc32, isize = struct.unpack(" https://github.com/python/cpython/commit/b913f47e87f788e705716ae037ee9f68b4265e69 commit: b913f47e87f788e705716ae037ee9f68b4265e69 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: gpshead date: 2021-05-16T15:35:44-07:00 summary: bpo-39950: Fix deprecation warning in test for `pathlib.Path.link_to()` (GH-26155) (GH-26178) (cherry picked from commit 1a08c5ac49b748d5e4e4b508d22d3804e3cd4dcc) Co-authored-by: Barney Gale files: M Lib/pathlib.py M Lib/test/test_pathlib.py diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 94e079fffef60..8e6eb48b9767c 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -1265,7 +1265,7 @@ def link_to(self, target): warnings.warn("pathlib.Path.link_to() is deprecated and is scheduled " "for removal in Python 3.12. " "Use pathlib.Path.hardlink_to() instead.", - DeprecationWarning) + DeprecationWarning, stacklevel=2) 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 6ed08f7e70ce3..55d63d539e550 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -1934,7 +1934,8 @@ def test_link_to(self): self.assertTrue(p.stat) # Linking to a str of a relative path. r = rel_join('fileAAA') - q.link_to(r) + with self.assertWarns(DeprecationWarning): + q.link_to(r) self.assertEqual(os.stat(r).st_size, size) self.assertTrue(q.stat) From webhook-mailer at python.org Sun May 16 19:20:40 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 23:20:40 -0000 Subject: [Python-checkins] fix docstring typo in bdb.py (GH-22323) Message-ID: https://github.com/python/cpython/commit/be54fb5ae73db507a0cdb1884d553aca5966f0e6 commit: be54fb5ae73db507a0cdb1884d553aca5966f0e6 branch: main author: flizzywine <1041958497 at qq.com> committer: iritkatriel date: 2021-05-17T00:20:33+01:00 summary: fix docstring typo in bdb.py (GH-22323) files: M Lib/bdb.py diff --git a/Lib/bdb.py b/Lib/bdb.py index abb50c092e69b..75d6113576372 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -119,7 +119,7 @@ def dispatch_call(self, frame, arg): """Invoke user function and return trace function for call event. If the debugger stops on this function call, invoke - self.user_call(). Raise BbdQuit if self.quitting is set. + self.user_call(). Raise BdbQuit if self.quitting is set. Return self.trace_dispatch to continue tracing in this scope. """ # XXX 'arg' is no longer used From webhook-mailer at python.org Sun May 16 19:35:03 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 16 May 2021 23:35:03 -0000 Subject: [Python-checkins] Fix a typo/error in a news entry (bidst_wheel -> bdist_wheel) (GH-24284) Message-ID: https://github.com/python/cpython/commit/56df20d7014bfe2df9cd46dece93271b516c50f6 commit: 56df20d7014bfe2df9cd46dece93271b516c50f6 branch: main author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-16T16:34:49-07:00 summary: Fix a typo/error in a news entry (bidst_wheel -> bdist_wheel) (GH-24284) This error was fixed recently in `Doc/whatsnew/3.10.rst`. Automerge-Triggered-By: GH:iritkatriel files: M Misc/NEWS.d/3.10.0a5.rst diff --git a/Misc/NEWS.d/3.10.0a5.rst b/Misc/NEWS.d/3.10.0a5.rst index 3362d494602d4..989edb0b47e97 100644 --- a/Misc/NEWS.d/3.10.0a5.rst +++ b/Misc/NEWS.d/3.10.0a5.rst @@ -386,7 +386,7 @@ initialization (:pep:`489`). Patch by Erlend E. Aasland. .. section: Library The distutils ``bdist_wininst`` command deprecated in Python 3.8 has been -removed. The distutils ``bidst_wheel`` command is now recommended to +removed. The distutils ``bdist_wheel`` command is now recommended to distribute binary packages on Windows. .. From webhook-mailer at python.org Sun May 16 19:38:15 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 16 May 2021 23:38:15 -0000 Subject: [Python-checkins] [doc] Fix typo in os module (GH-24464) Message-ID: https://github.com/python/cpython/commit/fdc7e52f5f1853e350407c472ae031339ac7f60c commit: fdc7e52f5f1853e350407c472ae031339ac7f60c branch: main author: Rafael Fontenelle committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-16T16:38:11-07:00 summary: [doc] Fix typo in os module (GH-24464) Automerge-Triggered-By: GH:iritkatriel files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 24ba15382e9a11..4b249ed92c3588 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4635,7 +4635,7 @@ operating system. .. function:: sched_setparam(pid, param) - Set a scheduling parameters for the process with PID *pid*. A *pid* of 0 means + Set the scheduling parameters for the process with PID *pid*. A *pid* of 0 means the calling process. *param* is a :class:`sched_param` instance. From webhook-mailer at python.org Sun May 16 19:41:10 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 23:41:10 -0000 Subject: [Python-checkins] Fix a typo/error in a news entry (bidst_wheel -> bdist_wheel) (GH-24284) (#26181) Message-ID: https://github.com/python/cpython/commit/52461cb1be365eb1943421530871eb96a0e8b268 commit: 52461cb1be365eb1943421530871eb96a0e8b268 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-17T00:41:05+01:00 summary: Fix a typo/error in a news entry (bidst_wheel -> bdist_wheel) (GH-24284) (#26181) Automerge-Triggered-By: GH:iritkatriel (cherry picked from commit 56df20d7014bfe2df9cd46dece93271b516c50f6) Co-authored-by: Zackery Spytz files: M Misc/NEWS.d/3.10.0a5.rst diff --git a/Misc/NEWS.d/3.10.0a5.rst b/Misc/NEWS.d/3.10.0a5.rst index 3362d494602d4..989edb0b47e97 100644 --- a/Misc/NEWS.d/3.10.0a5.rst +++ b/Misc/NEWS.d/3.10.0a5.rst @@ -386,7 +386,7 @@ initialization (:pep:`489`). Patch by Erlend E. Aasland. .. section: Library The distutils ``bdist_wininst`` command deprecated in Python 3.8 has been -removed. The distutils ``bidst_wheel`` command is now recommended to +removed. The distutils ``bdist_wheel`` command is now recommended to distribute binary packages on Windows. .. From webhook-mailer at python.org Sun May 16 19:43:00 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 23:43:00 -0000 Subject: [Python-checkins] fix docstring typo in bdb.py (GH-22323) (#26179) Message-ID: https://github.com/python/cpython/commit/d22fa22cca60df1ed8860b62732efa630943c7bd commit: d22fa22cca60df1ed8860b62732efa630943c7bd branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-17T00:42:56+01:00 summary: fix docstring typo in bdb.py (GH-22323) (#26179) (cherry picked from commit be54fb5ae73db507a0cdb1884d553aca5966f0e6) Co-authored-by: flizzywine <1041958497 at qq.com> files: M Lib/bdb.py diff --git a/Lib/bdb.py b/Lib/bdb.py index abb50c092e69b..75d6113576372 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -119,7 +119,7 @@ def dispatch_call(self, frame, arg): """Invoke user function and return trace function for call event. If the debugger stops on this function call, invoke - self.user_call(). Raise BbdQuit if self.quitting is set. + self.user_call(). Raise BdbQuit if self.quitting is set. Return self.trace_dispatch to continue tracing in this scope. """ # XXX 'arg' is no longer used From webhook-mailer at python.org Sun May 16 19:43:34 2021 From: webhook-mailer at python.org (iritkatriel) Date: Sun, 16 May 2021 23:43:34 -0000 Subject: [Python-checkins] fix docstring typo in bdb.py (GH-22323) (#26180) Message-ID: https://github.com/python/cpython/commit/f84ef3cd2585625dd9a53a24e540e96ed295133b commit: f84ef3cd2585625dd9a53a24e540e96ed295133b branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-17T00:43:26+01:00 summary: fix docstring typo in bdb.py (GH-22323) (#26180) (cherry picked from commit be54fb5ae73db507a0cdb1884d553aca5966f0e6) Co-authored-by: flizzywine <1041958497 at qq.com> files: M Lib/bdb.py diff --git a/Lib/bdb.py b/Lib/bdb.py index b18a0612d8c78..384a272a85217 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -117,7 +117,7 @@ def dispatch_call(self, frame, arg): """Invoke user function and return trace function for call event. If the debugger stops on this function call, invoke - self.user_call(). Raise BbdQuit if self.quitting is set. + self.user_call(). Raise BdbQuit if self.quitting is set. Return self.trace_dispatch to continue tracing in this scope. """ # XXX 'arg' is no longer used From webhook-mailer at python.org Sun May 16 19:59:20 2021 From: webhook-mailer at python.org (miss-islington) Date: Sun, 16 May 2021 23:59:20 -0000 Subject: [Python-checkins] [doc] Fix typo in os module (GH-24464) Message-ID: https://github.com/python/cpython/commit/d49877e6e745b9c3564bc86a81f4d05038f2b45b commit: d49877e6e745b9c3564bc86a81f4d05038f2b45b branch: 3.10 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-05-16T16:59:12-07:00 summary: [doc] Fix typo in os module (GH-24464) Automerge-Triggered-By: GH:iritkatriel (cherry picked from commit fdc7e52f5f1853e350407c472ae031339ac7f60c) Co-authored-by: Rafael Fontenelle files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 24ba15382e9a1..4b249ed92c358 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4635,7 +4635,7 @@ operating system. .. function:: sched_setparam(pid, param) - Set a scheduling parameters for the process with PID *pid*. A *pid* of 0 means + Set the scheduling parameters for the process with PID *pid*. A *pid* of 0 means the calling process. *param* is a :class:`sched_param` instance. From webhook-mailer at python.org Sun May 16 20:00:17 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 00:00:17 -0000 Subject: [Python-checkins] [doc] Fix typo in os module (GH-24464) Message-ID: https://github.com/python/cpython/commit/2f9ebe6fd06f21ea5e708d63f2596bdffcb139b2 commit: 2f9ebe6fd06f21ea5e708d63f2596bdffcb139b2 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-05-16T17:00:12-07:00 summary: [doc] Fix typo in os module (GH-24464) Automerge-Triggered-By: GH:iritkatriel (cherry picked from commit fdc7e52f5f1853e350407c472ae031339ac7f60c) Co-authored-by: Rafael Fontenelle files: M Doc/library/os.rst diff --git a/Doc/library/os.rst b/Doc/library/os.rst index 35a9f8cf3adb7..2295ffc82f173 100644 --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -4389,7 +4389,7 @@ operating system. .. function:: sched_setparam(pid, param) - Set a scheduling parameters for the process with PID *pid*. A *pid* of 0 means + Set the scheduling parameters for the process with PID *pid*. A *pid* of 0 means the calling process. *param* is a :class:`sched_param` instance. From webhook-mailer at python.org Sun May 16 22:21:23 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 17 May 2021 02:21:23 -0000 Subject: [Python-checkins] Apply edits from Allen Downey's review of the linear_regression docs. (GH-26176) Message-ID: https://github.com/python/cpython/commit/b3f65e819f552561294a66e350a9f5a3131f7df2 commit: b3f65e819f552561294a66e350a9f5a3131f7df2 branch: main author: Raymond Hettinger committer: rhettinger date: 2021-05-16T19:21:14-07:00 summary: Apply edits from Allen Downey's review of the linear_regression docs. (GH-26176) files: M Doc/library/statistics.rst M Lib/statistics.py diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst index 117d2b63cbea1..a65c9840b8113 100644 --- a/Doc/library/statistics.rst +++ b/Doc/library/statistics.rst @@ -631,25 +631,25 @@ However, for reading convenience, most of the examples show sorted sequences. 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: + regression describes the relationship between *regressor* and + *dependent variable* in terms of this 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 + estimated, and noise represents 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 + (it is equal to the difference between predicted and 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. + 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 + For example, we can use the `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. + it to predict the cumulative number of Monty Python films + that would have been produced by 2019 + assuming that they kept the pace. .. doctest:: @@ -659,14 +659,6 @@ However, for reading convenience, most of the examples show sorted sequences. >>> 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 diff --git a/Lib/statistics.py b/Lib/statistics.py index 507a5b2d79dce..5d38f855020f4 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -930,15 +930,15 @@ def 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* 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). + where *intercept* and *slope* are the regression parameters that are + estimated, and noise represents the variability of the data that was + not explained by the linear regression (it is equal to the + difference between predicted and actual values of dependent + variable). The parameters are returned as a named tuple. From webhook-mailer at python.org Sun May 16 22:48:07 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 17 May 2021 02:48:07 -0000 Subject: [Python-checkins] Apply edits from Allen Downey's review of the linear_regression docs. (GH-26176) (GH-26185) Message-ID: https://github.com/python/cpython/commit/e6755ba94b629a51819c9c076626afc187cded9b commit: e6755ba94b629a51819c9c076626afc187cded9b branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: rhettinger date: 2021-05-16T19:47:57-07:00 summary: Apply edits from Allen Downey's review of the linear_regression docs. (GH-26176) (GH-26185) files: M Doc/library/statistics.rst M Lib/statistics.py diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst index 117d2b63cbea1..a65c9840b8113 100644 --- a/Doc/library/statistics.rst +++ b/Doc/library/statistics.rst @@ -631,25 +631,25 @@ However, for reading convenience, most of the examples show sorted sequences. 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: + regression describes the relationship between *regressor* and + *dependent variable* in terms of this 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 + estimated, and noise represents 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 + (it is equal to the difference between predicted and 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. + 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 + For example, we can use the `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. + it to predict the cumulative number of Monty Python films + that would have been produced by 2019 + assuming that they kept the pace. .. doctest:: @@ -659,14 +659,6 @@ However, for reading convenience, most of the examples show sorted sequences. >>> 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 diff --git a/Lib/statistics.py b/Lib/statistics.py index db8c581068b7d..c2f8dcd9ada89 100644 --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -928,15 +928,15 @@ def 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* 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). + where *intercept* and *slope* are the regression parameters that are + estimated, and noise represents the variability of the data that was + not explained by the linear regression (it is equal to the + difference between predicted and actual values of dependent + variable). The parameters are returned as a named tuple. From webhook-mailer at python.org Mon May 17 03:20:18 2021 From: webhook-mailer at python.org (rhettinger) Date: Mon, 17 May 2021 07:20:18 -0000 Subject: [Python-checkins] bpo-44154: optimize Fraction pickling (GH-26186) Message-ID: https://github.com/python/cpython/commit/b102dd598dd2666b72e93ae53ae813d1e88f186c commit: b102dd598dd2666b72e93ae53ae813d1e88f186c branch: main author: Sergey B Kirpichev <2155800+skirpichev at users.noreply.github.com> committer: rhettinger date: 2021-05-17T00:20:02-07:00 summary: bpo-44154: optimize Fraction pickling (GH-26186) files: A Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst M Lib/fractions.py M Lib/test/test_fractions.py diff --git a/Lib/fractions.py b/Lib/fractions.py index 96047beb4546a..64a8959d7d48e 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -735,7 +735,7 @@ def __bool__(a): # support for pickling, copy, and deepcopy def __reduce__(self): - return (self.__class__, (str(self),)) + return (self.__class__, (self._numerator, self._denominator)) def __copy__(self): if type(self) == Fraction: diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index b92552531d6bb..949ddd9072862 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -10,6 +10,7 @@ import sys import unittest from copy import copy, deepcopy +import pickle from pickle import dumps, loads F = fractions.Fraction @@ -691,7 +692,8 @@ def testApproximateCos1(self): def test_copy_deepcopy_pickle(self): r = F(13, 7) dr = DummyFraction(13, 7) - self.assertEqual(r, loads(dumps(r))) + for proto in range(0, pickle.HIGHEST_PROTOCOL + 1): + self.assertEqual(r, loads(dumps(r, proto))) self.assertEqual(id(r), id(copy(r))) self.assertEqual(id(r), id(deepcopy(r))) self.assertNotEqual(id(dr), id(copy(dr))) diff --git a/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst b/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst new file mode 100644 index 0000000000000..3ec326e875ecc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst @@ -0,0 +1 @@ +Optimize :class:`fractions.Fraction` pickling for large components. From webhook-mailer at python.org Mon May 17 03:35:25 2021 From: webhook-mailer at python.org (gpshead) Date: Mon, 17 May 2021 07:35:25 -0000 Subject: [Python-checkins] bpo-44145: Release the GIL around HMAC_Update. (GH-26157) Message-ID: https://github.com/python/cpython/commit/c10392e7ddb3eafbd11e9ffe335c07648426715f commit: c10392e7ddb3eafbd11e9ffe335c07648426715f branch: main author: Gregory P. Smith committer: gpshead date: 2021-05-17T00:35:16-07:00 summary: bpo-44145: Release the GIL around HMAC_Update. (GH-26157) It was always meant to be released for parallelization. This now matches the other similar code in the module. Thanks michaelforney for noticing! files: A Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst M Modules/_hashopenssl.c diff --git a/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst new file mode 100644 index 00000000000000..40222185d50678 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst @@ -0,0 +1,3 @@ +:mod:`hmac` computations were not releasing the GIL while calling the +OpenSSL ``HMAC_Update`` C API (a new feature in 3.9). This unintentionally +prevented parallel computation as other :mod:`hashlib` algorithms support. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index e4a28853775672..b9e68c05c3edbe 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -1496,9 +1496,11 @@ _hmac_update(HMACobject *self, PyObject *obj) } if (self->lock != NULL) { - ENTER_HASHLIB(self); + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); - LEAVE_HASHLIB(self); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS } else { r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); } From webhook-mailer at python.org Mon May 17 03:52:59 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 07:52:59 -0000 Subject: [Python-checkins] bpo-33433 Fix private address checking for IPv4 mapped IPv6. (GH-26172) Message-ID: https://github.com/python/cpython/commit/83f0f8d62f279f846a92fede2244beaa0149b9d8 commit: 83f0f8d62f279f846a92fede2244beaa0149b9d8 branch: main author: Pete Wicken <2273100+JamoBox at users.noreply.github.com> committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-17T00:52:36-07:00 summary: bpo-33433 Fix private address checking for IPv4 mapped IPv6. (GH-26172) For IPv4 mapped IPv6 addresses, defer privacy check to the mapped IPv4 address. Solves bug where public mapped IPv4 addresses are considered private by the IPv6 check. Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst M Lib/ipaddress.py M Lib/test/test_ipaddress.py diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index af7aedfa6e51a..4a6496a5da3ef 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -16,6 +16,7 @@ IPV4LENGTH = 32 IPV6LENGTH = 128 + class AddressValueError(ValueError): """A Value Error related to the address.""" @@ -2002,9 +2003,13 @@ def is_private(self): Returns: A boolean, True if the address is reserved per - iana-ipv6-special-registry. + iana-ipv6-special-registry, or is ipv4_mapped and is + reserved in the iana-ipv4-special-registry. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_private return any(self in net for net in self._constants._private_networks) @property diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 90559ce1242c5..ff77bdb1bbc58 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2339,6 +2339,12 @@ def testIpv4Mapped(self): self.assertEqual(ipaddress.ip_address('::ffff:c0a8:101').ipv4_mapped, ipaddress.ip_address('192.168.1.1')) + def testIpv4MappedPrivateCheck(self): + self.assertEqual( + True, ipaddress.ip_address('::ffff:192.168.1.1').is_private) + self.assertEqual( + False, ipaddress.ip_address('::ffff:172.32.0.0').is_private) + def testAddrExclude(self): addr1 = ipaddress.ip_network('10.1.1.0/24') addr2 = ipaddress.ip_network('10.1.1.0/26') diff --git a/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst b/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst new file mode 100644 index 0000000000000..703e038fac985 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst @@ -0,0 +1 @@ +For IPv4 mapped IPv6 addresses (:rfc:`4291` Section 2.5.5.2), the :mod:`ipaddress.IPv6Address.is_private` check is deferred to the mapped IPv4 address. This solves a bug where public mapped IPv4 addresses were considered private by the IPv6 check. From webhook-mailer at python.org Mon May 17 04:04:05 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 08:04:05 -0000 Subject: [Python-checkins] bpo-44145: Release the GIL around HMAC_Update. (GH-26157) Message-ID: https://github.com/python/cpython/commit/60fa8b32dbfe452b81c44d2b8a96325fb19a206d commit: 60fa8b32dbfe452b81c44d2b8a96325fb19a206d branch: 3.10 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-05-17T01:03:57-07:00 summary: bpo-44145: Release the GIL around HMAC_Update. (GH-26157) It was always meant to be released for parallelization. This now matches the other similar code in the module. Thanks michaelforney for noticing! (cherry picked from commit c10392e7ddb3eafbd11e9ffe335c07648426715f) Co-authored-by: Gregory P. Smith files: A Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst M Modules/_hashopenssl.c diff --git a/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst new file mode 100644 index 00000000000000..40222185d50678 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst @@ -0,0 +1,3 @@ +:mod:`hmac` computations were not releasing the GIL while calling the +OpenSSL ``HMAC_Update`` C API (a new feature in 3.9). This unintentionally +prevented parallel computation as other :mod:`hashlib` algorithms support. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index e4a28853775672..b9e68c05c3edbe 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -1496,9 +1496,11 @@ _hmac_update(HMACobject *self, PyObject *obj) } if (self->lock != NULL) { - ENTER_HASHLIB(self); + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); - LEAVE_HASHLIB(self); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS } else { r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); } From webhook-mailer at python.org Mon May 17 04:07:58 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 08:07:58 -0000 Subject: [Python-checkins] [3.9] bpo-44145: Release the GIL around HMAC_Update. (GH-26157) (GH-26188) Message-ID: https://github.com/python/cpython/commit/2057ce87498fc30bcd358286175fe5ea34eac9da commit: 2057ce87498fc30bcd358286175fe5ea34eac9da 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-05-17T01:07:49-07:00 summary: [3.9] bpo-44145: Release the GIL around HMAC_Update. (GH-26157) (GH-26188) It was always meant to be released for parallelization. This now matches the other similar code in the module. Thanks michaelforney for noticing! (cherry picked from commit c10392e7ddb3eafbd11e9ffe335c07648426715f) Co-authored-by: Gregory P. Smith Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst M Modules/_hashopenssl.c diff --git a/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst new file mode 100644 index 00000000000000..40222185d50678 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-00-00-38.bpo-44145.ko5SJ7.rst @@ -0,0 +1,3 @@ +:mod:`hmac` computations were not releasing the GIL while calling the +OpenSSL ``HMAC_Update`` C API (a new feature in 3.9). This unintentionally +prevented parallel computation as other :mod:`hashlib` algorithms support. diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 0dd16621013fa7..ff3a1aef5ee13c 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -1496,9 +1496,11 @@ _hmac_update(HMACobject *self, PyObject *obj) } if (self->lock != NULL) { - ENTER_HASHLIB(self); + Py_BEGIN_ALLOW_THREADS + PyThread_acquire_lock(self->lock, 1); r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); - LEAVE_HASHLIB(self); + PyThread_release_lock(self->lock); + Py_END_ALLOW_THREADS } else { r = HMAC_Update(self->ctx, (const unsigned char*)view.buf, view.len); } From webhook-mailer at python.org Mon May 17 04:28:52 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 08:28:52 -0000 Subject: [Python-checkins] bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) Message-ID: https://github.com/python/cpython/commit/f32c7950e0077b6d9a8e217c2796fc582f18ca08 commit: f32c7950e0077b6d9a8e217c2796fc582f18ca08 branch: main author: Igor Bolshakov committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-17T01:28:21-07:00 summary: bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) `shutil.unpack_archive()` tries to read the whole file into memory, making no use of any kind of smaller buffer. Process crashes for really large files: I.e. archive: ~1.7G, unpacked: ~10G. Before the crash it can easily take away all available RAM on smaller systems. Had to pull the code form `zipfile.Zipfile.extractall()` to fix this Automerge-Triggered-By: GH:gpshead files: A Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst M Lib/shutil.py diff --git a/Lib/shutil.py b/Lib/shutil.py index 55cfe35ab0697..1982b1c626e96 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1163,20 +1163,16 @@ def _unpack_zipfile(filename, extract_dir): if name.startswith('/') or '..' in name: continue - target = os.path.join(extract_dir, *name.split('/')) - if not target: + targetpath = os.path.join(extract_dir, *name.split('/')) + if not targetpath: continue - _ensure_directory(target) + _ensure_directory(targetpath) if not name.endswith('/'): # file - data = zip.read(info.filename) - f = open(target, 'wb') - try: - f.write(data) - finally: - f.close() - del data + with zip.open(name, 'r') as source, \ + open(targetpath, 'wb') as target: + copyfileobj(source, target) finally: zip.close() diff --git a/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst new file mode 100644 index 0000000000000..a2ea4a4800a73 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst @@ -0,0 +1,2 @@ +Fix :exc:`MemoryError` in :func:`shutil.unpack_archive` which fails inside +:func:`shutil._unpack_zipfile` on large files. Patch by Igor Bolshakov. From webhook-mailer at python.org Mon May 17 13:35:11 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 17:35:11 -0000 Subject: [Python-checkins] bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) Message-ID: https://github.com/python/cpython/commit/049c4125f8a2b482c6129db68463f58e20c31526 commit: 049c4125f8a2b482c6129db68463f58e20c31526 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-05-17T10:34:39-07:00 summary: bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) `shutil.unpack_archive()` tries to read the whole file into memory, making no use of any kind of smaller buffer. Process crashes for really large files: I.e. archive: ~1.7G, unpacked: ~10G. Before the crash it can easily take away all available RAM on smaller systems. Had to pull the code form `zipfile.Zipfile.extractall()` to fix this Automerge-Triggered-By: GH:gpshead (cherry picked from commit f32c7950e0077b6d9a8e217c2796fc582f18ca08) Co-authored-by: Igor Bolshakov files: A Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst M Lib/shutil.py diff --git a/Lib/shutil.py b/Lib/shutil.py index 89d924dec8aa4..5cb796e800f62 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1159,20 +1159,16 @@ def _unpack_zipfile(filename, extract_dir): if name.startswith('/') or '..' in name: continue - target = os.path.join(extract_dir, *name.split('/')) - if not target: + targetpath = os.path.join(extract_dir, *name.split('/')) + if not targetpath: continue - _ensure_directory(target) + _ensure_directory(targetpath) if not name.endswith('/'): # file - data = zip.read(info.filename) - f = open(target, 'wb') - try: - f.write(data) - finally: - f.close() - del data + with zip.open(name, 'r') as source, \ + open(targetpath, 'wb') as target: + copyfileobj(source, target) finally: zip.close() diff --git a/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst new file mode 100644 index 0000000000000..a2ea4a4800a73 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst @@ -0,0 +1,2 @@ +Fix :exc:`MemoryError` in :func:`shutil.unpack_archive` which fails inside +:func:`shutil._unpack_zipfile` on large files. Patch by Igor Bolshakov. From webhook-mailer at python.org Mon May 17 13:35:34 2021 From: webhook-mailer at python.org (gpshead) Date: Mon, 17 May 2021 17:35:34 -0000 Subject: [Python-checkins] bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) (GH-26190) Message-ID: https://github.com/python/cpython/commit/7a588621c2854bcef6ce9eeb54349b84ac078c45 commit: 7a588621c2854bcef6ce9eeb54349b84ac078c45 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: gpshead date: 2021-05-17T10:35:30-07:00 summary: bpo-43650: Fix MemoryError on zip.read in shutil._unpack_zipfile for large files (GH-25058) (GH-26190) `shutil.unpack_archive()` tries to read the whole file into memory, making no use of any kind of smaller buffer. Process crashes for really large files: I.e. archive: ~1.7G, unpacked: ~10G. Before the crash it can easily take away all available RAM on smaller systems. Had to pull the code form `zipfile.Zipfile.extractall()` to fix this Automerge-Triggered-By: GH:gpshead (cherry picked from commit f32c7950e0077b6d9a8e217c2796fc582f18ca08) Co-authored-by: Igor Bolshakov files: A Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst M Lib/shutil.py diff --git a/Lib/shutil.py b/Lib/shutil.py index e29fe4d83e927..33f2ca94bf4bc 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -1161,20 +1161,16 @@ def _unpack_zipfile(filename, extract_dir): if name.startswith('/') or '..' in name: continue - target = os.path.join(extract_dir, *name.split('/')) - if not target: + targetpath = os.path.join(extract_dir, *name.split('/')) + if not targetpath: continue - _ensure_directory(target) + _ensure_directory(targetpath) if not name.endswith('/'): # file - data = zip.read(info.filename) - f = open(target, 'wb') - try: - f.write(data) - finally: - f.close() - del data + with zip.open(name, 'r') as source, \ + open(targetpath, 'wb') as target: + copyfileobj(source, target) finally: zip.close() diff --git a/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst new file mode 100644 index 0000000000000..a2ea4a4800a73 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-03-29-00-23-30.bpo-43650.v01tic.rst @@ -0,0 +1,2 @@ +Fix :exc:`MemoryError` in :func:`shutil.unpack_archive` which fails inside +:func:`shutil._unpack_zipfile` on large files. Patch by Igor Bolshakov. From webhook-mailer at python.org Mon May 17 15:42:36 2021 From: webhook-mailer at python.org (miss-islington) Date: Mon, 17 May 2021 19:42:36 -0000 Subject: [Python-checkins] bpo-33433 Fix private address checking for IPv4 mapped IPv6. (GH-26172) Message-ID: https://github.com/python/cpython/commit/a44bb6ddb17538b7b2096d13eb79a1208bd97f34 commit: a44bb6ddb17538b7b2096d13eb79a1208bd97f34 branch: 3.10 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-05-17T12:42:08-07:00 summary: bpo-33433 Fix private address checking for IPv4 mapped IPv6. (GH-26172) For IPv4 mapped IPv6 addresses, defer privacy check to the mapped IPv4 address. Solves bug where public mapped IPv4 addresses are considered private by the IPv6 check. Automerge-Triggered-By: GH:gpshead (cherry picked from commit 83f0f8d62f279f846a92fede2244beaa0149b9d8) Co-authored-by: Pete Wicken <2273100+JamoBox at users.noreply.github.com> files: A Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst M Lib/ipaddress.py M Lib/test/test_ipaddress.py diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py index af7aedfa6e51a..4a6496a5da3ef 100644 --- a/Lib/ipaddress.py +++ b/Lib/ipaddress.py @@ -16,6 +16,7 @@ IPV4LENGTH = 32 IPV6LENGTH = 128 + class AddressValueError(ValueError): """A Value Error related to the address.""" @@ -2002,9 +2003,13 @@ def is_private(self): Returns: A boolean, True if the address is reserved per - iana-ipv6-special-registry. + iana-ipv6-special-registry, or is ipv4_mapped and is + reserved in the iana-ipv4-special-registry. """ + ipv4_mapped = self.ipv4_mapped + if ipv4_mapped is not None: + return ipv4_mapped.is_private return any(self in net for net in self._constants._private_networks) @property diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py index 90559ce1242c5..ff77bdb1bbc58 100644 --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -2339,6 +2339,12 @@ def testIpv4Mapped(self): self.assertEqual(ipaddress.ip_address('::ffff:c0a8:101').ipv4_mapped, ipaddress.ip_address('192.168.1.1')) + def testIpv4MappedPrivateCheck(self): + self.assertEqual( + True, ipaddress.ip_address('::ffff:192.168.1.1').is_private) + self.assertEqual( + False, ipaddress.ip_address('::ffff:172.32.0.0').is_private) + def testAddrExclude(self): addr1 = ipaddress.ip_network('10.1.1.0/24') addr2 = ipaddress.ip_network('10.1.1.0/26') diff --git a/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst b/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst new file mode 100644 index 0000000000000..703e038fac985 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-16-17-48-24.bpo-33433.MyzO71.rst @@ -0,0 +1 @@ +For IPv4 mapped IPv6 addresses (:rfc:`4291` Section 2.5.5.2), the :mod:`ipaddress.IPv6Address.is_private` check is deferred to the mapped IPv4 address. This solves a bug where public mapped IPv4 addresses were considered private by the IPv6 check. From webhook-mailer at python.org Mon May 17 17:48:44 2021 From: webhook-mailer at python.org (vstinner) Date: Mon, 17 May 2021 21:48:44 -0000 Subject: [Python-checkins] bpo-44131: Test Py_FrozenMain() (GH-26126) Message-ID: https://github.com/python/cpython/commit/eaede0ded72e67cee4a91c086847d54cb64ca74c commit: eaede0ded72e67cee4a91c086847d54cb64ca74c branch: main author: Victor Stinner committer: vstinner date: 2021-05-17T23:48:35+02:00 summary: bpo-44131: Test Py_FrozenMain() (GH-26126) * Add test_frozenmain to test_embed * Add Programs/test_frozenmain.py * Add Programs/freeze_test_frozenmain.py * Add Programs/test_frozenmain.h * Add make regen-test-frozenmain * Add test_frozenmain command to Programs/_testembed * _testembed.c: add error(msg) function files: A Misc/NEWS.d/next/Tests/2021-05-14-14-13-44.bpo-44131.YPizoC.rst A Programs/freeze_test_frozenmain.py A Programs/test_frozenmain.h A Programs/test_frozenmain.py M .gitattributes M Lib/test/test_embed.py M Makefile.pre.in M Programs/_testembed.c M Python/frozenmain.c M Tools/freeze/makefreeze.py diff --git a/.gitattributes b/.gitattributes index c66e765266382..fd303806dac21 100644 --- a/.gitattributes +++ b/.gitattributes @@ -57,6 +57,7 @@ Doc/library/token-list.inc linguist-generated=true Include/token.h linguist-generated=true Lib/token.py linguist-generated=true Parser/token.c linguist-generated=true +Programs/test_frozenmain.h linguist-generated=true # Language aware diff headers # https://tekin.co.uk/2020/10/better-git-diff-output-for-ruby-python-elixir-and-more diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index 23cf297d4ab62..c68a66270cfbd 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1480,6 +1480,21 @@ def test_unicode_id_init(self): # when Python is initialized multiples times. self.run_embedded_interpreter("test_unicode_id_init") + # See bpo-44133 + @unittest.skipIf(os.name == 'nt', + 'Py_FrozenMain is not exported on Windows') + def test_frozenmain(self): + out, err = self.run_embedded_interpreter("test_frozenmain") + exe = os.path.realpath('./argv0') + expected = textwrap.dedent(f""" + Frozen Hello World + sys.argv ['./argv0', '-E', 'arg1', 'arg2'] + config program_name: ./argv0 + config executable: {exe} + config use_environment: 1 + """).lstrip() + self.assertEqual(out, expected) + class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): # Test PyStdPrinter_Type which is used by _PySys_SetPreliminaryStderr(): diff --git a/Makefile.pre.in b/Makefile.pre.in index 080318bf454f6..83788a640389e 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -720,6 +720,14 @@ Makefile Modules/config.c: Makefile.pre \ @mv config.c Modules @echo "The Makefile was updated, you may need to re-run make." +regen-test-frozenmain: $(BUILDPYTHON) + # Regenerate Programs/test_frozenmain.h + # from Programs/test_frozenmain.py + # using Programs/freeze_test_frozenmain.py + $(RUNSHARED) ./$(BUILDPYTHON) Programs/freeze_test_frozenmain.py Programs/test_frozenmain.h + +Programs/test_frozenmain.h: Programs/freeze_test_frozenmain.py Programs/test_frozenmain.py + $(MAKE) regen-test-frozenmain Programs/_testembed: Programs/_testembed.o $(LIBRARY_DEPS) $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) @@ -763,7 +771,7 @@ regen-limited-abi: all regen-all: regen-opcode regen-opcode-targets regen-typeslots \ regen-token regen-ast regen-keyword regen-importlib clinic \ - regen-pegen-metaparser regen-pegen regen-frozen + regen-pegen-metaparser regen-pegen regen-frozen regen-test-frozenmain @echo @echo "Note: make regen-stdlib-module-names and autoconf should be run manually" @@ -794,7 +802,7 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile Programs/python.o: $(srcdir)/Programs/python.c $(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Programs/python.c -Programs/_testembed.o: $(srcdir)/Programs/_testembed.c +Programs/_testembed.o: $(srcdir)/Programs/_testembed.c Programs/test_frozenmain.h $(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Programs/_testembed.c Modules/_sre.o: $(srcdir)/Modules/_sre.c $(srcdir)/Modules/sre.h $(srcdir)/Modules/sre_constants.h $(srcdir)/Modules/sre_lib.h diff --git a/Misc/NEWS.d/next/Tests/2021-05-14-14-13-44.bpo-44131.YPizoC.rst b/Misc/NEWS.d/next/Tests/2021-05-14-14-13-44.bpo-44131.YPizoC.rst new file mode 100644 index 0000000000000..a646acf8e4443 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-05-14-14-13-44.bpo-44131.YPizoC.rst @@ -0,0 +1,2 @@ +Add test_frozenmain to test_embed to test the :c:func:`Py_FrozenMain` C +function. Patch by Victor Stinner. diff --git a/Programs/_testembed.c b/Programs/_testembed.c index 21b24f7d51e40..a5ae7c1d86335 100644 --- a/Programs/_testembed.c +++ b/Programs/_testembed.c @@ -27,6 +27,14 @@ _Py_COMP_DIAG_PUSH _Py_COMP_DIAG_IGNORE_DEPR_DECLS + +static void error(const char *msg) +{ + fprintf(stderr, "ERROR: %s\n", msg); + fflush(stderr); +} + + static void _testembed_Py_Initialize(void) { Py_SetProgramName(PROGRAM_NAME); @@ -239,7 +247,7 @@ static void bpo20891_thread(void *lockp) PyGILState_STATE state = PyGILState_Ensure(); if (!PyGILState_Check()) { - fprintf(stderr, "PyGILState_Check failed!"); + error("PyGILState_Check failed!"); abort(); } @@ -259,7 +267,7 @@ static int test_bpo20891(void) crash. */ PyThread_type_lock lock = PyThread_allocate_lock(); if (!lock) { - fprintf(stderr, "PyThread_allocate_lock failed!"); + error("PyThread_allocate_lock failed!"); return 1; } @@ -267,7 +275,7 @@ static int test_bpo20891(void) unsigned long thrd = PyThread_start_new_thread(bpo20891_thread, &lock); if (thrd == PYTHREAD_INVALID_THREAD_ID) { - fprintf(stderr, "PyThread_start_new_thread failed!"); + error("PyThread_start_new_thread failed!"); return 1; } PyThread_acquire_lock(lock, WAIT_LOCK); @@ -1397,12 +1405,12 @@ static int test_init_setpath(void) { char *env = getenv("TESTPATH"); if (!env) { - fprintf(stderr, "missing TESTPATH env var\n"); + error("missing TESTPATH env var"); return 1; } wchar_t *path = Py_DecodeLocale(env, NULL); if (path == NULL) { - fprintf(stderr, "failed to decode TESTPATH\n"); + error("failed to decode TESTPATH"); return 1; } Py_SetPath(path); @@ -1430,12 +1438,12 @@ static int test_init_setpath_config(void) char *env = getenv("TESTPATH"); if (!env) { - fprintf(stderr, "missing TESTPATH env var\n"); + error("missing TESTPATH env var"); return 1; } wchar_t *path = Py_DecodeLocale(env, NULL); if (path == NULL) { - fprintf(stderr, "failed to decode TESTPATH\n"); + error("failed to decode TESTPATH"); return 1; } Py_SetPath(path); @@ -1459,12 +1467,12 @@ static int test_init_setpythonhome(void) { char *env = getenv("TESTHOME"); if (!env) { - fprintf(stderr, "missing TESTHOME env var\n"); + error("missing TESTHOME env var"); return 1; } wchar_t *home = Py_DecodeLocale(env, NULL); if (home == NULL) { - fprintf(stderr, "failed to decode TESTHOME\n"); + error("failed to decode TESTHOME"); return 1; } Py_SetPythonHome(home); @@ -1726,6 +1734,48 @@ static int test_unicode_id_init(void) } +#ifndef MS_WINDOWS +#include "test_frozenmain.h" // M_test_frozenmain + +static int test_frozenmain(void) +{ + // Get "_frozen_importlib" and "_frozen_importlib_external" + // from PyImport_FrozenModules + const struct _frozen *importlib = NULL, *importlib_external = NULL; + for (const struct _frozen *mod = PyImport_FrozenModules; mod->name != NULL; mod++) { + if (strcmp(mod->name, "_frozen_importlib") == 0) { + importlib = mod; + } + else if (strcmp(mod->name, "_frozen_importlib_external") == 0) { + importlib_external = mod; + } + } + if (importlib == NULL || importlib_external == NULL) { + error("cannot find frozen importlib and importlib_external"); + return 1; + } + + static struct _frozen frozen_modules[4] = { + {0, 0, 0}, // importlib + {0, 0, 0}, // importlib_external + {"__main__", M_test_frozenmain, sizeof(M_test_frozenmain)}, + {0, 0, 0} // sentinel + }; + frozen_modules[0] = *importlib; + frozen_modules[1] = *importlib_external; + + char* argv[] = { + "./argv0", + "-E", + "arg1", + "arg2", + }; + PyImport_FrozenModules = frozen_modules; + return Py_FrozenMain(Py_ARRAY_LENGTH(argv), argv); +} +#endif // !MS_WINDOWS + + // List frozen modules. // Command used by Tools/scripts/generate_stdlib_module_names.py script. static int list_frozen(void) @@ -1811,11 +1861,15 @@ static struct TestCase TestCases[] = { {"test_audit_run_stdin", test_audit_run_stdin}, {"test_unicode_id_init", test_unicode_id_init}, +#ifndef MS_WINDOWS + {"test_frozenmain", test_frozenmain}, +#endif {"list_frozen", list_frozen}, {NULL, NULL} }; + int main(int argc, char *argv[]) { if (argc > 1) { diff --git a/Programs/freeze_test_frozenmain.py b/Programs/freeze_test_frozenmain.py new file mode 100644 index 0000000000000..848fc31b3d6f4 --- /dev/null +++ b/Programs/freeze_test_frozenmain.py @@ -0,0 +1,48 @@ +import marshal +import tokenize +import os.path +import sys + +PROGRAM_DIR = os.path.dirname(__file__) +SRC_DIR = os.path.dirname(PROGRAM_DIR) + + +def writecode(fp, mod, data): + print('unsigned char M_%s[] = {' % mod, file=fp) + indent = ' ' * 4 + for i in range(0, len(data), 16): + print(indent, file=fp, end='') + for c in bytes(data[i:i+16]): + print('%d,' % c, file=fp, end='') + print('', file=fp) + print('};', file=fp) + + +def dump(fp, filename, name): + # Strip the directory to get reproducible marshal dump + code_filename = os.path.basename(filename) + + with tokenize.open(filename) as source_fp: + source = source_fp.read() + code = compile(source, code_filename, 'exec') + + data = marshal.dumps(code) + writecode(fp, name, data) + + +def main(): + if len(sys.argv) < 2: + print(f"usage: {sys.argv[0]} filename") + sys.exit(1) + filename = sys.argv[1] + + with open(filename, "w") as fp: + print("// Auto-generated by Programs/freeze_test_frozenmain.py", file=fp) + frozenmain = os.path.join(PROGRAM_DIR, 'test_frozenmain.py') + dump(fp, frozenmain, 'test_frozenmain') + + print(f"{filename} written") + + +if __name__ == "__main__": + main() diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h new file mode 100644 index 0000000000000..ac3dfd32c262e --- /dev/null +++ b/Programs/test_frozenmain.h @@ -0,0 +1,30 @@ +// Auto-generated by Programs/freeze_test_frozenmain.py +unsigned char M_test_frozenmain[] = { + 227,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,106,0,0,0,100,0, + 100,1,108,0,90,0,100,0,100,1,108,1,90,1,101,2, + 100,2,131,1,1,0,101,2,100,3,101,0,106,3,131,2, + 1,0,101,1,160,4,161,0,100,4,25,0,90,5,101,2, + 100,5,101,5,100,6,25,0,155,0,157,2,131,1,1,0, + 101,2,100,7,101,5,100,8,25,0,155,0,157,2,131,1, + 1,0,101,2,100,9,101,5,100,10,25,0,155,0,157,2, + 131,1,1,0,100,1,83,0,41,11,233,0,0,0,0,78, + 122,18,70,114,111,122,101,110,32,72,101,108,108,111,32,87, + 111,114,108,100,122,8,115,121,115,46,97,114,103,118,218,6, + 99,111,110,102,105,103,122,21,99,111,110,102,105,103,32,112, + 114,111,103,114,97,109,95,110,97,109,101,58,32,90,12,112, + 114,111,103,114,97,109,95,110,97,109,101,122,19,99,111,110, + 102,105,103,32,101,120,101,99,117,116,97,98,108,101,58,32, + 218,10,101,120,101,99,117,116,97,98,108,101,122,24,99,111, + 110,102,105,103,32,117,115,101,95,101,110,118,105,114,111,110, + 109,101,110,116,58,32,90,15,117,115,101,95,101,110,118,105, + 114,111,110,109,101,110,116,41,6,218,3,115,121,115,90,17, + 95,116,101,115,116,105,110,116,101,114,110,97,108,99,97,112, + 105,218,5,112,114,105,110,116,218,4,97,114,103,118,90,11, + 103,101,116,95,99,111,110,102,105,103,115,114,2,0,0,0, + 169,0,114,7,0,0,0,114,7,0,0,0,250,18,116,101, + 115,116,95,102,114,111,122,101,110,109,97,105,110,46,112,121, + 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,16, + 0,0,0,8,0,8,1,8,2,12,1,12,1,18,1,18, + 1,22,1,243,0,0,0,0, +}; diff --git a/Programs/test_frozenmain.py b/Programs/test_frozenmain.py new file mode 100644 index 0000000000000..aa79106df6396 --- /dev/null +++ b/Programs/test_frozenmain.py @@ -0,0 +1,9 @@ +import sys +import _testinternalcapi + +print("Frozen Hello World") +print("sys.argv", sys.argv) +config = _testinternalcapi.get_configs()['config'] +print(f"config program_name: {config['program_name']}") +print(f"config executable: {config['executable']}") +print(f"config use_environment: {config['use_environment']}") diff --git a/Python/frozenmain.c b/Python/frozenmain.c index 5eb9e31112484..c3104dae44977 100644 --- a/Python/frozenmain.c +++ b/Python/frozenmain.c @@ -1,4 +1,3 @@ - /* Python interpreter main program for frozen scripts */ #include "Python.h" @@ -43,10 +42,12 @@ Py_FrozenMain(int argc, char **argv) PyConfig_InitPythonConfig(&config); config.pathconfig_warnings = 0; /* Suppress errors from getpath.c */ - if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') + if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') { inspect = 1; - if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') + } + if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') { unbuffered = 1; + } if (unbuffered) { setbuf(stdin, (char *)NULL); @@ -65,8 +66,9 @@ Py_FrozenMain(int argc, char **argv) argv_copy[i] = Py_DecodeLocale(argv[i], NULL); argv_copy2[i] = argv_copy[i]; if (!argv_copy[i]) { - fprintf(stderr, "Unable to decode the command line argument #%i\n", - i + 1); + fprintf(stderr, + "Unable to decode the command line argument #%i\n", + i + 1); argc = i; goto error; } @@ -97,24 +99,28 @@ Py_FrozenMain(int argc, char **argv) PyWinFreeze_ExeInit(); #endif - if (Py_VerboseFlag) + if (Py_VerboseFlag) { fprintf(stderr, "Python %s\n%s\n", - Py_GetVersion(), Py_GetCopyright()); + Py_GetVersion(), Py_GetCopyright()); + } PySys_SetArgv(argc, argv_copy); n = PyImport_ImportFrozenModule("__main__"); - if (n == 0) + if (n == 0) { Py_FatalError("the __main__ module is not frozen"); + } if (n < 0) { PyErr_Print(); sts = 1; } - else + else { sts = 0; + } - if (inspect && isatty((int)fileno(stdin))) + if (inspect && isatty((int)fileno(stdin))) { sts = PyRun_AnyFile(stdin, "") != 0; + } #ifdef MS_WINDOWS PyWinFreeze_ExeTerm(); diff --git a/Tools/freeze/makefreeze.py b/Tools/freeze/makefreeze.py index 64e3e6bf71e77..d7d05db88a96c 100644 --- a/Tools/freeze/makefreeze.py +++ b/Tools/freeze/makefreeze.py @@ -74,14 +74,12 @@ def makefreeze(base, dict, debug=0, entry_point=None, fail_import=()): # Write a C initializer for a module containing the frozen python code. # The array is called M_. -def writecode(outfp, mod, str): - outfp.write('unsigned char M_%s[] = {' % mod) - for i in range(0, len(str), 16): - outfp.write('\n\t') - for c in bytes(str[i:i+16]): - outfp.write('%d,' % c) - outfp.write('\n};\n') - -## def writecode(outfp, mod, str): -## outfp.write('unsigned char M_%s[%d] = "%s";\n' % (mod, len(str), -## '\\"'.join(map(lambda s: repr(s)[1:-1], str.split('"'))))) +def writecode(fp, mod, data): + print('unsigned char M_%s[] = {' % mod, file=fp) + indent = ' ' * 4 + for i in range(0, len(data), 16): + print(indent, file=fp, end='') + for c in bytes(data[i:i+16]): + print('%d,' % c, file=fp, end='') + print('', file=fp) + print('};', file=fp) From webhook-mailer at python.org Tue May 18 02:40:42 2021 From: webhook-mailer at python.org (vstinner) Date: Tue, 18 May 2021 06:40:42 -0000 Subject: [Python-checkins] bpo-44131: Fix Makefile for test_frozenmain (GH-26203) Message-ID: https://github.com/python/cpython/commit/834498e178684a7e2da49b4efe1adea33e0026b0 commit: 834498e178684a7e2da49b4efe1adea33e0026b0 branch: main author: Victor Stinner committer: vstinner date: 2021-05-18T08:40:37+02:00 summary: bpo-44131: Fix Makefile for test_frozenmain (GH-26203) Remove Programs/test_frozenmain.h Makefile target: it ran make in parallel which caused build errors on LTO+PGO builds. files: M Makefile.pre.in M Programs/test_frozenmain.h M Programs/test_frozenmain.py diff --git a/Makefile.pre.in b/Makefile.pre.in index 83788a640389e..798c53fa7c695 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -720,15 +720,13 @@ Makefile Modules/config.c: Makefile.pre \ @mv config.c Modules @echo "The Makefile was updated, you may need to re-run make." +.PHONY: regen-test-frozenmain regen-test-frozenmain: $(BUILDPYTHON) # Regenerate Programs/test_frozenmain.h # from Programs/test_frozenmain.py # using Programs/freeze_test_frozenmain.py $(RUNSHARED) ./$(BUILDPYTHON) Programs/freeze_test_frozenmain.py Programs/test_frozenmain.h -Programs/test_frozenmain.h: Programs/freeze_test_frozenmain.py Programs/test_frozenmain.py - $(MAKE) regen-test-frozenmain - Programs/_testembed: Programs/_testembed.o $(LIBRARY_DEPS) $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h index ac3dfd32c262e..e680b80e7ae8a 100644 --- a/Programs/test_frozenmain.h +++ b/Programs/test_frozenmain.h @@ -25,6 +25,6 @@ unsigned char M_test_frozenmain[] = { 169,0,114,7,0,0,0,114,7,0,0,0,250,18,116,101, 115,116,95,102,114,111,122,101,110,109,97,105,110,46,112,121, 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,16, - 0,0,0,8,0,8,1,8,2,12,1,12,1,18,1,18, + 0,0,0,8,3,8,1,8,2,12,1,12,1,18,1,18, 1,22,1,243,0,0,0,0, }; diff --git a/Programs/test_frozenmain.py b/Programs/test_frozenmain.py index aa79106df6396..928b9ea816acc 100644 --- a/Programs/test_frozenmain.py +++ b/Programs/test_frozenmain.py @@ -1,3 +1,6 @@ +# Script used to test Py_FrozenMain(): see test_embed.test_frozenmain(). +# Run "make regen-test-frozenmain" if you modify this test. + import sys import _testinternalcapi From webhook-mailer at python.org Tue May 18 04:57:23 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 18 May 2021 08:57:23 -0000 Subject: [Python-checkins] bpo-25872: Add unit tests for linecache and threading (GH-25913) Message-ID: https://github.com/python/cpython/commit/115dea9e2602b96b63390f00cc880e90c433efa2 commit: 115dea9e2602b96b63390f00cc880e90c433efa2 branch: main author: uniocto committer: iritkatriel date: 2021-05-18T09:56:52+01:00 summary: bpo-25872: Add unit tests for linecache and threading (GH-25913) files: M Lib/test/test_linecache.py M Lib/test/test_threading.py diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 59e00da242ad6..c6e2dadbb25e1 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -239,5 +239,47 @@ def raise_memoryerror(*args, **kwargs): self.assertEqual(linecache.getlines(FILENAME), lines) +class LineCacheInvalidationTests(unittest.TestCase): + def setUp(self): + super().setUp() + linecache.clearcache() + self.deleted_file = os_helper.TESTFN + '.1' + self.modified_file = os_helper.TESTFN + '.2' + self.unchanged_file = os_helper.TESTFN + '.3' + + for fname in (self.deleted_file, + self.modified_file, + self.unchanged_file): + self.addCleanup(os_helper.unlink, fname) + with open(fname, 'w', encoding='utf-8') as source: + source.write(f'print("I am {fname}")') + + self.assertNotIn(fname, linecache.cache) + linecache.getlines(fname) + self.assertIn(fname, linecache.cache) + + os.remove(self.deleted_file) + with open(self.modified_file, 'w', encoding='utf-8') as source: + source.write('print("was modified")') + + def test_checkcache_for_deleted_file(self): + linecache.checkcache(self.deleted_file) + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_for_modified_file(self): + linecache.checkcache(self.modified_file) + self.assertIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_with_no_parameter(self): + linecache.checkcache() + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 08c0ccd9a79b2..b563797cbd0d3 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -4,7 +4,7 @@ import test.support from test.support import threading_helper -from test.support import verbose, cpython_only +from test.support import verbose, cpython_only, os_helper from test.support.import_helper import import_module from test.support.script_helper import assert_python_ok, assert_python_failure @@ -19,6 +19,7 @@ import subprocess import signal import textwrap +import traceback from unittest import mock from test import lock_tests @@ -1345,6 +1346,22 @@ def run(self): # explicitly break the reference cycle to not leak a dangling thread thread.exc = None + def test_multithread_modify_file_noerror(self): + # See issue25872 + def modify_file(): + with open(os_helper.TESTFN, 'w', encoding='utf-8') as fp: + fp.write(' ') + traceback.format_stack() + + self.addCleanup(os_helper.unlink, os_helper.TESTFN) + threads = [ + threading.Thread(target=modify_file) + for i in range(100) + ] + for t in threads: + t.start() + t.join() + class ThreadRunFail(threading.Thread): def run(self): From webhook-mailer at python.org Tue May 18 09:54:06 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 18 May 2021 13:54:06 -0000 Subject: [Python-checkins] [3.10] bpo-25872: Add unit tests for linecache and threading (GH-25913) (GH-26212) Message-ID: https://github.com/python/cpython/commit/373741a97c9f6ffee427c2b4eaccb74347af228a commit: 373741a97c9f6ffee427c2b4eaccb74347af228a branch: 3.10 author: Irit Katriel committer: iritkatriel date: 2021-05-18T14:53:57+01:00 summary: [3.10] bpo-25872: Add unit tests for linecache and threading (GH-25913) (GH-26212) (cherry picked from commit 115dea9e2602b96b63390f00cc880e90c433efa2) Co-authored-by: uniocto files: M Lib/test/test_linecache.py M Lib/test/test_threading.py diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 59e00da242ad63..c6e2dadbb25e1f 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -239,5 +239,47 @@ def raise_memoryerror(*args, **kwargs): self.assertEqual(linecache.getlines(FILENAME), lines) +class LineCacheInvalidationTests(unittest.TestCase): + def setUp(self): + super().setUp() + linecache.clearcache() + self.deleted_file = os_helper.TESTFN + '.1' + self.modified_file = os_helper.TESTFN + '.2' + self.unchanged_file = os_helper.TESTFN + '.3' + + for fname in (self.deleted_file, + self.modified_file, + self.unchanged_file): + self.addCleanup(os_helper.unlink, fname) + with open(fname, 'w', encoding='utf-8') as source: + source.write(f'print("I am {fname}")') + + self.assertNotIn(fname, linecache.cache) + linecache.getlines(fname) + self.assertIn(fname, linecache.cache) + + os.remove(self.deleted_file) + with open(self.modified_file, 'w', encoding='utf-8') as source: + source.write('print("was modified")') + + def test_checkcache_for_deleted_file(self): + linecache.checkcache(self.deleted_file) + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_for_modified_file(self): + linecache.checkcache(self.modified_file) + self.assertIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_with_no_parameter(self): + linecache.checkcache() + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 08c0ccd9a79b2a..b563797cbd0d39 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -4,7 +4,7 @@ import test.support from test.support import threading_helper -from test.support import verbose, cpython_only +from test.support import verbose, cpython_only, os_helper from test.support.import_helper import import_module from test.support.script_helper import assert_python_ok, assert_python_failure @@ -19,6 +19,7 @@ import subprocess import signal import textwrap +import traceback from unittest import mock from test import lock_tests @@ -1345,6 +1346,22 @@ def run(self): # explicitly break the reference cycle to not leak a dangling thread thread.exc = None + def test_multithread_modify_file_noerror(self): + # See issue25872 + def modify_file(): + with open(os_helper.TESTFN, 'w', encoding='utf-8') as fp: + fp.write(' ') + traceback.format_stack() + + self.addCleanup(os_helper.unlink, os_helper.TESTFN) + threads = [ + threading.Thread(target=modify_file) + for i in range(100) + ] + for t in threads: + t.start() + t.join() + class ThreadRunFail(threading.Thread): def run(self): From webhook-mailer at python.org Tue May 18 10:26:07 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 18 May 2021 14:26:07 -0000 Subject: [Python-checkins] bpo-25872: Add unit tests for linecache and threading (GH-25913) (GH-26211) Message-ID: https://github.com/python/cpython/commit/c05d8a6b67785450b1fec0d30fe26d5478bc4f0b commit: c05d8a6b67785450b1fec0d30fe26d5478bc4f0b branch: 3.9 author: Irit Katriel committer: iritkatriel date: 2021-05-18T15:25:38+01:00 summary: bpo-25872: Add unit tests for linecache and threading (GH-25913) (GH-26211) (cherry picked from commit 115dea9e2602b96b63390f00cc880e90c433efa2) Co-authored-by: uniocto files: M Lib/test/test_linecache.py M Lib/test/test_threading.py diff --git a/Lib/test/test_linecache.py b/Lib/test/test_linecache.py index 375d9c42137ba2..f5691163b8ec56 100644 --- a/Lib/test/test_linecache.py +++ b/Lib/test/test_linecache.py @@ -238,5 +238,47 @@ def raise_memoryerror(*args, **kwargs): self.assertEqual(linecache.getlines(FILENAME), lines) +class LineCacheInvalidationTests(unittest.TestCase): + def setUp(self): + super().setUp() + linecache.clearcache() + self.deleted_file = support.TESTFN + '.1' + self.modified_file = support.TESTFN + '.2' + self.unchanged_file = support.TESTFN + '.3' + + for fname in (self.deleted_file, + self.modified_file, + self.unchanged_file): + self.addCleanup(support.unlink, fname) + with open(fname, 'w', encoding='utf-8') as source: + source.write(f'print("I am {fname}")') + + self.assertNotIn(fname, linecache.cache) + linecache.getlines(fname) + self.assertIn(fname, linecache.cache) + + os.remove(self.deleted_file) + with open(self.modified_file, 'w', encoding='utf-8') as source: + source.write('print("was modified")') + + def test_checkcache_for_deleted_file(self): + linecache.checkcache(self.deleted_file) + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_for_modified_file(self): + linecache.checkcache(self.modified_file) + self.assertIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + def test_checkcache_with_no_parameter(self): + linecache.checkcache() + self.assertNotIn(self.deleted_file, linecache.cache) + self.assertNotIn(self.modified_file, linecache.cache) + self.assertIn(self.unchanged_file, linecache.cache) + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 67e061e8aa63bc..a57085b75d58ad 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -3,7 +3,7 @@ """ import test.support -from test.support import verbose, import_module, cpython_only +from test.support import verbose, import_module, cpython_only, unlink from test.support.script_helper import assert_python_ok, assert_python_failure import random @@ -17,6 +17,7 @@ import subprocess import signal import textwrap +import traceback from test import lock_tests from test import support @@ -1243,6 +1244,22 @@ def run(self): # explicitly break the reference cycle to not leak a dangling thread thread.exc = None + def test_multithread_modify_file_noerror(self): + # See issue25872 + def modify_file(): + with open(test.support.TESTFN, 'w', encoding='utf-8') as fp: + fp.write(' ') + traceback.format_stack() + + self.addCleanup(unlink, test.support.TESTFN) + threads = [ + threading.Thread(target=modify_file) + for i in range(100) + ] + for t in threads: + t.start() + t.join() + class ThreadRunFail(threading.Thread): def run(self): From webhook-mailer at python.org Tue May 18 12:11:28 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 18 May 2021 16:11:28 -0000 Subject: [Python-checkins] bpo-41963: document that ConfigParser strips off comments (GH-26197) Message-ID: https://github.com/python/cpython/commit/02ee8191263848f8c8999f72286148946b83e5c9 commit: 02ee8191263848f8c8999f72286148946b83e5c9 branch: main author: J?rgen Gmach committer: ambv date: 2021-05-18T18:11:23+02:00 summary: bpo-41963: document that ConfigParser strips off comments (GH-26197) Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Laura Gutierrez Funderburk <58710704+lgfunderburk at users.noreply.github.com> files: A Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst M Doc/library/configparser.rst M Lib/configparser.py diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index 646e8a317f52c3..b0c2a2cfb06a47 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -1153,6 +1153,13 @@ ConfigParser Objects *space_around_delimiters* is true, delimiters between keys and values are surrounded by spaces. + .. note:: + + Comments in the original configuration file are not preserved when + writing the configuration back. + What is considered a comment, depends on the given values for + *comment_prefix* and *inline_comment_prefix*. + .. method:: remove_option(section, option) diff --git a/Lib/configparser.py b/Lib/configparser.py index 3b4cb5e6b2407f..2f45e242b49426 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -908,6 +908,9 @@ def write(self, fp, space_around_delimiters=True): If `space_around_delimiters' is True (the default), delimiters between keys and values are surrounded by spaces. + + Please note that comments in the original configuration file are not + preserved when writing the configuration back. """ if space_around_delimiters: d = " {} ".format(self._delimiters[0]) @@ -1006,7 +1009,7 @@ def _read(self, fp, fpname): Configuration files may include comments, prefixed by specific characters (`#' and `;' by default). Comments may appear on their own in an otherwise empty line or may be entered in lines holding values or - section names. + section names. Please note that comments get stripped off when reading configuration files. """ elements_added = set() cursect = None # None, or a dictionary diff --git a/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst new file mode 100644 index 00000000000000..b9fe722fa3a795 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst @@ -0,0 +1 @@ +Document that ``ConfigParser`` strips off comments when reading configuration files. \ No newline at end of file From webhook-mailer at python.org Tue May 18 12:45:26 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 18 May 2021 16:45:26 -0000 Subject: [Python-checkins] bpo-41963: document that ConfigParser strips off comments (GH-26197) (GH-26213) Message-ID: https://github.com/python/cpython/commit/c17ba233b3bdf6af4e9dad24374ab0a917b593e7 commit: c17ba233b3bdf6af4e9dad24374ab0a917b593e7 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: ambv date: 2021-05-18T18:44:48+02:00 summary: bpo-41963: document that ConfigParser strips off comments (GH-26197) (GH-26213) Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Laura Gutierrez Funderburk <58710704+lgfunderburk at users.noreply.github.com> Co-authored-by: J?rgen Gmach (cherry picked from commit 02ee8191263848f8c8999f72286148946b83e5c9) files: A Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst M Doc/library/configparser.rst M Lib/configparser.py diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index 2e22a549ee2813..730d1df9614289 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -1129,6 +1129,13 @@ ConfigParser Objects *space_around_delimiters* is true, delimiters between keys and values are surrounded by spaces. + .. note:: + + Comments in the original configuration file are not preserved when + writing the configuration back. + What is considered a comment, depends on the given values for + *comment_prefix* and *inline_comment_prefix*. + .. method:: remove_option(section, option) diff --git a/Lib/configparser.py b/Lib/configparser.py index 924cc56a3f150d..8dd5c13bcc0092 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -907,6 +907,9 @@ def write(self, fp, space_around_delimiters=True): If `space_around_delimiters' is True (the default), delimiters between keys and values are surrounded by spaces. + + Please note that comments in the original configuration file are not + preserved when writing the configuration back. """ if space_around_delimiters: d = " {} ".format(self._delimiters[0]) @@ -1005,7 +1008,7 @@ def _read(self, fp, fpname): Configuration files may include comments, prefixed by specific characters (`#' and `;' by default). Comments may appear on their own in an otherwise empty line or may be entered in lines holding values or - section names. + section names. Please note that comments get stripped off when reading configuration files. """ elements_added = set() cursect = None # None, or a dictionary diff --git a/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst new file mode 100644 index 00000000000000..b9fe722fa3a795 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst @@ -0,0 +1 @@ +Document that ``ConfigParser`` strips off comments when reading configuration files. \ No newline at end of file From webhook-mailer at python.org Tue May 18 13:03:18 2021 From: webhook-mailer at python.org (ambv) Date: Tue, 18 May 2021 17:03:18 -0000 Subject: [Python-checkins] [3.10] bpo-41963: document that ConfigParser strips off comments (GH-26197) (GH-26214) Message-ID: https://github.com/python/cpython/commit/4d17c93dfe760478509bcf709345b0522fd3a7e8 commit: 4d17c93dfe760478509bcf709345b0522fd3a7e8 branch: 3.10 author: ?ukasz Langa committer: ambv date: 2021-05-18T19:03:09+02:00 summary: [3.10] bpo-41963: document that ConfigParser strips off comments (GH-26197) (GH-26214) Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Laura Gutierrez Funderburk <58710704+lgfunderburk at users.noreply.github.com> Co-authored-by: J?rgen Gmach (cherry picked from commit 02ee8191263848f8c8999f72286148946b83e5c9) files: A Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst M Doc/library/configparser.rst M Lib/configparser.py diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst index 646e8a317f52c3..b0c2a2cfb06a47 100644 --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -1153,6 +1153,13 @@ ConfigParser Objects *space_around_delimiters* is true, delimiters between keys and values are surrounded by spaces. + .. note:: + + Comments in the original configuration file are not preserved when + writing the configuration back. + What is considered a comment, depends on the given values for + *comment_prefix* and *inline_comment_prefix*. + .. method:: remove_option(section, option) diff --git a/Lib/configparser.py b/Lib/configparser.py index 3b4cb5e6b2407f..2f45e242b49426 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -908,6 +908,9 @@ def write(self, fp, space_around_delimiters=True): If `space_around_delimiters' is True (the default), delimiters between keys and values are surrounded by spaces. + + Please note that comments in the original configuration file are not + preserved when writing the configuration back. """ if space_around_delimiters: d = " {} ".format(self._delimiters[0]) @@ -1006,7 +1009,7 @@ def _read(self, fp, fpname): Configuration files may include comments, prefixed by specific characters (`#' and `;' by default). Comments may appear on their own in an otherwise empty line or may be entered in lines holding values or - section names. + section names. Please note that comments get stripped off when reading configuration files. """ elements_added = set() cursect = None # None, or a dictionary diff --git a/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst new file mode 100644 index 00000000000000..b9fe722fa3a795 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-05-17-20-03-47.bpo-41963.eUz9_o.rst @@ -0,0 +1 @@ +Document that ``ConfigParser`` strips off comments when reading configuration files. \ No newline at end of file From webhook-mailer at python.org Tue May 18 17:56:13 2021 From: webhook-mailer at python.org (miss-islington) Date: Tue, 18 May 2021 21:56:13 -0000 Subject: [Python-checkins] bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) Message-ID: https://github.com/python/cpython/commit/4fdcc39f711e1b586a94e2c5088fdd7e78fd9f58 commit: 4fdcc39f711e1b586a94e2c5088fdd7e78fd9f58 branch: main author: Zackery Spytz committer: miss-islington <31488909+miss-islington at users.noreply.github.com> date: 2021-05-18T14:56:01-07:00 summary: bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) files: M Doc/tutorial/inputoutput.rst diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index 4e27cff83ce59f..7f83c4d4612eb3 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -480,7 +480,8 @@ If you have an object ``x``, you can view its JSON string representation with a simple line of code:: >>> import json - >>> json.dumps([1, 'simple', 'list']) + >>> x = [1, 'simple', 'list'] + >>> json.dumps(x) '[1, "simple", "list"]' Another variant of the :func:`~json.dumps` function, called :func:`~json.dump`, From webhook-mailer at python.org Tue May 18 18:31:38 2021 From: webhook-mailer at python.org (iritkatriel) Date: Tue, 18 May 2021 22:31:38 -0000 Subject: [Python-checkins] [3.9] bpo-42783: Documentation for asyncio.sleep(0) (GH-24002) (GH-24153) Message-ID: https://github.com/python/cpython/commit/632b4034ab517b5d7f302c94fd9dc5a28c85f049 commit: 632b4034ab517b5d7f302c94fd9dc5a28c85f049 branch: 3.9 author: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com> committer: iritkatriel date: 2021-05-18T23:31:27+01:00 summary: [3.9] bpo-42783: Documentation for asyncio.sleep(0) (GH-24002) (GH-24153) Co-Authored-By: Simon Willison files: M Doc/library/asyncio-task.rst diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst index 87133e4cab307..ca6e525e93597 100644 --- a/Doc/library/asyncio-task.rst +++ b/Doc/library/asyncio-task.rst @@ -293,6 +293,10 @@ Sleeping ``sleep()`` always suspends the current task, allowing other tasks to run. + Setting the delay to 0 provides an optimized path to allow other + tasks to run. This can be used by long-running functions to avoid + blocking the event loop for the full duration of the function call. + .. deprecated-removed:: 3.8 3.10 The *loop* parameter. From webhook-mailer at python.org Wed May 19 03:05:56 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:05:56 -0000 Subject: [Python-checkins] bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) Message-ID: https://github.com/python/cpython/commit/901443757333a66ff2b5c85eba30dc1c48eac321 commit: 901443757333a66ff2b5c85eba30dc1c48eac321 branch: main author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-05-19T10:05:48+03:00 summary: bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) files: M Doc/library/sqlite3.rst diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index d0f28db12fda1..f9e4c8a269027 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -648,7 +648,8 @@ Cursor Objects This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a ``COMMIT`` statement first, then executes the SQL script it - gets as a parameter. + gets as a parameter. This method disregards :attr:`isolation_level`; any + transation control must be added to *sql_script*. *sql_script* can be an instance of :class:`str`. @@ -1048,6 +1049,9 @@ setting :attr:`isolation_level` to ``None``. This will leave the underlying control the transaction state by explicitly issuing ``BEGIN``, ``ROLLBACK``, ``SAVEPOINT``, and ``RELEASE`` statements in your code. +Note that :meth:`~Cursor.executescript` disregards +:attr:`isolation_level`; any transaction control must be added explicitly. + .. versionchanged:: 3.6 :mod:`sqlite3` used to implicitly commit an open transaction before DDL statements. This is no longer the case. From webhook-mailer at python.org Wed May 19 03:32:49 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:32:49 -0000 Subject: [Python-checkins] bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) Message-ID: https://github.com/python/cpython/commit/76ed53ca7bf0d4a43099d9401af5fe9f75689885 commit: 76ed53ca7bf0d4a43099d9401af5fe9f75689885 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T10:32:45+03:00 summary: bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) (cherry picked from commit 901443757333a66ff2b5c85eba30dc1c48eac321) Co-authored-by: Erlend Egeberg Aasland files: M Doc/library/sqlite3.rst diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index a82ba3a55248a..4ae4b4dcff676 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -635,7 +635,8 @@ Cursor Objects This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a ``COMMIT`` statement first, then executes the SQL script it - gets as a parameter. + gets as a parameter. This method disregards :attr:`isolation_level`; any + transation control must be added to *sql_script*. *sql_script* can be an instance of :class:`str`. @@ -1038,6 +1039,9 @@ setting :attr:`isolation_level` to ``None``. This will leave the underlying control the transaction state by explicitly issuing ``BEGIN``, ``ROLLBACK``, ``SAVEPOINT``, and ``RELEASE`` statements in your code. +Note that :meth:`~Cursor.executescript` disregards +:attr:`isolation_level`; any transaction control must be added explicitly. + .. versionchanged:: 3.6 :mod:`sqlite3` used to implicitly commit an open transaction before DDL statements. This is no longer the case. From webhook-mailer at python.org Wed May 19 03:37:40 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:37:40 -0000 Subject: [Python-checkins] bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) Message-ID: https://github.com/python/cpython/commit/1f483c0c1b5a9fd1062bacc2aeba6bb0e00009b7 commit: 1f483c0c1b5a9fd1062bacc2aeba6bb0e00009b7 branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T10:37:33+03:00 summary: bpo-30593: Doc'ed that executescript() disregards isolation level (GH-26220) (cherry picked from commit 901443757333a66ff2b5c85eba30dc1c48eac321) Co-authored-by: Erlend Egeberg Aasland files: M Doc/library/sqlite3.rst diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index d0f28db12fda1..f9e4c8a269027 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -648,7 +648,8 @@ Cursor Objects This is a nonstandard convenience method for executing multiple SQL statements at once. It issues a ``COMMIT`` statement first, then executes the SQL script it - gets as a parameter. + gets as a parameter. This method disregards :attr:`isolation_level`; any + transation control must be added to *sql_script*. *sql_script* can be an instance of :class:`str`. @@ -1048,6 +1049,9 @@ setting :attr:`isolation_level` to ``None``. This will leave the underlying control the transaction state by explicitly issuing ``BEGIN``, ``ROLLBACK``, ``SAVEPOINT``, and ``RELEASE`` statements in your code. +Note that :meth:`~Cursor.executescript` disregards +:attr:`isolation_level`; any transaction control must be added explicitly. + .. versionchanged:: 3.6 :mod:`sqlite3` used to implicitly commit an open transaction before DDL statements. This is no longer the case. From webhook-mailer at python.org Wed May 19 03:41:34 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:41:34 -0000 Subject: [Python-checkins] bpo-44106: Improve sqlite3 example database contents (GH-26027) Message-ID: https://github.com/python/cpython/commit/92d1064727d6b7f4136f9c09ab52ae15e3676afe commit: 92d1064727d6b7f4136f9c09ab52ae15e3676afe branch: main author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-05-19T10:41:19+03:00 summary: bpo-44106: Improve sqlite3 example database contents (GH-26027) files: A Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/insert_more_people.py M Doc/includes/sqlite3/createdb.py M Doc/includes/sqlite3/ctx_manager.py M Doc/includes/sqlite3/execsql_fetchonerow.py M Doc/includes/sqlite3/execsql_printall_1.py M Doc/includes/sqlite3/execute_1.py M Doc/includes/sqlite3/shortcut_methods.py M Doc/includes/sqlite3/simple_tableprinter.py M Doc/tools/susp-ignored.csv diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py index ee2950bdf81646..49702121f72534 100644 --- a/Doc/includes/sqlite3/createdb.py +++ b/Doc/includes/sqlite3/createdb.py @@ -12,15 +12,15 @@ con = sqlite3.connect(DB_FILE) cur = con.cursor() cur.execute(""" - create table people + create table lang ( - name_last varchar(20), - age integer + name varchar(20), + first_appeared integer ) """) -cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)") -cur.execute("insert into people (name_last, age) values ('Putin', 51)") +cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") +cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") con.commit() diff --git a/Doc/includes/sqlite3/ctx_manager.py b/Doc/includes/sqlite3/ctx_manager.py index 6db77d45046e1f..2e1175ef44c641 100644 --- a/Doc/includes/sqlite3/ctx_manager.py +++ b/Doc/includes/sqlite3/ctx_manager.py @@ -1,19 +1,19 @@ import sqlite3 con = sqlite3.connect(":memory:") -con.execute("create table person (id integer primary key, firstname varchar unique)") +con.execute("create table lang (id integer primary key, name varchar unique)") # Successful, con.commit() is called automatically afterwards with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) # con.rollback() is called after the with block finishes with an exception, the # exception is still raised and must be caught try: with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) except sqlite3.IntegrityError: - print("couldn't add Joe twice") + print("couldn't add Python twice") # Connection object used as context manager only commits or rollbacks transactions, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py index 115bcb50c7c754..0ca7e14469760b 100644 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ b/Doc/includes/sqlite3/execsql_fetchonerow.py @@ -3,17 +3,17 @@ con = sqlite3.connect("mydb") cur = con.cursor() -SELECT = "select name_last, age from people order by age, name_last" +SELECT = "select name, first_appeared from people order by first_appeared, name" # 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name_last, age): +# resulting sequences to yield their elements (name, first_appeared): cur.execute(SELECT) -for (name_last, age) in cur: - print('%s is %d years old.' % (name_last, age)) +for name, first_appeared in cur: + print(f"The {name} programming language appeared in {first_appeared}.") # 2. Equivalently: cur.execute(SELECT) for row in cur: - print('%s is %d years old.' % (row[0], row[1])) + print(f"The {row[0]} programming language appeared in {row[1]}.") con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py index 19306e6e3ca7d1..b3b42b5567df3b 100644 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ b/Doc/includes/sqlite3/execsql_printall_1.py @@ -7,7 +7,7 @@ cur = con.cursor() # Execute the SELECT statement: -cur.execute("select * from people order by age") +cur.execute("select * from lang order by first_appeared") # Retrieve all rows as a sequence and print that sequence: print(cur.fetchall()) diff --git a/Doc/includes/sqlite3/execute_1.py b/Doc/includes/sqlite3/execute_1.py index 42aad4d5839f06..ee0000e2b94a32 100644 --- a/Doc/includes/sqlite3/execute_1.py +++ b/Doc/includes/sqlite3/execute_1.py @@ -2,22 +2,21 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -cur.execute("create table lang (lang_name, lang_age)") +cur.execute("create table lang (name, first_appeared)") # This is the qmark style: -cur.execute("insert into lang values (?, ?)", ("C", 49)) +cur.execute("insert into lang values (?, ?)", ("C", 1972)) # The qmark style used with executemany(): lang_list = [ - ("Fortran", 64), - ("Python", 30), - ("Go", 11), + ("Fortran", 1957), + ("Python", 1991), + ("Go", 2009), ] cur.executemany("insert into lang values (?, ?)", lang_list) # And this is the named style: -cur.execute("select * from lang where lang_name=:name and lang_age=:age", - {"name": "C", "age": 49}) +cur.execute("select * from lang where first_appeared=:year", {"year": 1972}) print(cur.fetchall()) con.close() diff --git a/Doc/includes/sqlite3/insert_more_people.py b/Doc/includes/sqlite3/insert_more_langs.py similarity index 50% rename from Doc/includes/sqlite3/insert_more_people.py rename to Doc/includes/sqlite3/insert_more_langs.py index 10cf937243f6da..ceef949608449e 100644 --- a/Doc/includes/sqlite3/insert_more_people.py +++ b/Doc/includes/sqlite3/insert_more_langs.py @@ -4,13 +4,13 @@ cur = con.cursor() -newPeople = ( - ('Lebed' , 53), - ('Zhirinovsky' , 57), - ) +languages = ( + ("Smalltalk", 1972), + ("Swift", 2014), +) -for person in newPeople: - cur.execute("insert into people (name_last, age) values (?, ?)", person) +for lang in languages: + cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) # The changes will not be saved unless the transaction is committed explicitly: con.commit() diff --git a/Doc/includes/sqlite3/shortcut_methods.py b/Doc/includes/sqlite3/shortcut_methods.py index 98a39411495cba..48ea6fad15a898 100644 --- a/Doc/includes/sqlite3/shortcut_methods.py +++ b/Doc/includes/sqlite3/shortcut_methods.py @@ -1,23 +1,23 @@ import sqlite3 -persons = [ - ("Hugo", "Boss"), - ("Calvin", "Klein") - ] +langs = [ + ("C++", 1985), + ("Objective-C", 1984), +] con = sqlite3.connect(":memory:") # Create the table -con.execute("create table person(firstname, lastname)") +con.execute("create table lang(name, first_appeared)") # Fill the table -con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) +con.executemany("insert into lang(name, first_appeared) values (?, ?)", langs) # Print the table contents -for row in con.execute("select firstname, lastname from person"): +for row in con.execute("select name, first_appeared from lang"): print(row) -print("I just deleted", con.execute("delete from person").rowcount, "rows") +print("I just deleted", con.execute("delete from lang").rowcount, "rows") # close is not a shortcut method and it's not called automatically, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py index 148a1707f948bc..9be6e4f414acd8 100644 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ b/Doc/includes/sqlite3/simple_tableprinter.py @@ -1,13 +1,10 @@ import sqlite3 FIELD_MAX_WIDTH = 20 -TABLE_NAME = 'people' -SELECT = 'select * from %s order by age, name_last' % TABLE_NAME con = sqlite3.connect("mydb") - cur = con.cursor() -cur.execute(SELECT) +cur.execute("select * from lang order by name, first_appeared") # Print a header. for fieldDesc in cur.description: diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index d56a2b9fd0bfb9..1fde253feac2fa 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -209,8 +209,7 @@ 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,,: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,,:year,"cur.execute(""select * from lang where first_appeared=:year"", {""year"": 1972})" library/sqlite3,,:memory, library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" From webhook-mailer at python.org Wed May 19 03:43:53 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:43:53 -0000 Subject: [Python-checkins] bpo-44106: Improve sqlite3 example database contents (GH-26027) Message-ID: https://github.com/python/cpython/commit/db20afe6c43ad585577589131bf658ce7ebe6bd2 commit: db20afe6c43ad585577589131bf658ce7ebe6bd2 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T10:43:44+03:00 summary: bpo-44106: Improve sqlite3 example database contents (GH-26027) (cherry picked from commit 92d1064727d6b7f4136f9c09ab52ae15e3676afe) Co-authored-by: Erlend Egeberg Aasland files: A Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/insert_more_people.py M Doc/includes/sqlite3/createdb.py M Doc/includes/sqlite3/ctx_manager.py M Doc/includes/sqlite3/execsql_fetchonerow.py M Doc/includes/sqlite3/execsql_printall_1.py M Doc/includes/sqlite3/execute_1.py M Doc/includes/sqlite3/shortcut_methods.py M Doc/includes/sqlite3/simple_tableprinter.py M Doc/tools/susp-ignored.csv diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py index ee2950bdf81646..49702121f72534 100644 --- a/Doc/includes/sqlite3/createdb.py +++ b/Doc/includes/sqlite3/createdb.py @@ -12,15 +12,15 @@ con = sqlite3.connect(DB_FILE) cur = con.cursor() cur.execute(""" - create table people + create table lang ( - name_last varchar(20), - age integer + name varchar(20), + first_appeared integer ) """) -cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)") -cur.execute("insert into people (name_last, age) values ('Putin', 51)") +cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") +cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") con.commit() diff --git a/Doc/includes/sqlite3/ctx_manager.py b/Doc/includes/sqlite3/ctx_manager.py index 6db77d45046e1f..2e1175ef44c641 100644 --- a/Doc/includes/sqlite3/ctx_manager.py +++ b/Doc/includes/sqlite3/ctx_manager.py @@ -1,19 +1,19 @@ import sqlite3 con = sqlite3.connect(":memory:") -con.execute("create table person (id integer primary key, firstname varchar unique)") +con.execute("create table lang (id integer primary key, name varchar unique)") # Successful, con.commit() is called automatically afterwards with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) # con.rollback() is called after the with block finishes with an exception, the # exception is still raised and must be caught try: with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) except sqlite3.IntegrityError: - print("couldn't add Joe twice") + print("couldn't add Python twice") # Connection object used as context manager only commits or rollbacks transactions, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py index 115bcb50c7c754..0ca7e14469760b 100644 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ b/Doc/includes/sqlite3/execsql_fetchonerow.py @@ -3,17 +3,17 @@ con = sqlite3.connect("mydb") cur = con.cursor() -SELECT = "select name_last, age from people order by age, name_last" +SELECT = "select name, first_appeared from people order by first_appeared, name" # 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name_last, age): +# resulting sequences to yield their elements (name, first_appeared): cur.execute(SELECT) -for (name_last, age) in cur: - print('%s is %d years old.' % (name_last, age)) +for name, first_appeared in cur: + print(f"The {name} programming language appeared in {first_appeared}.") # 2. Equivalently: cur.execute(SELECT) for row in cur: - print('%s is %d years old.' % (row[0], row[1])) + print(f"The {row[0]} programming language appeared in {row[1]}.") con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py index 19306e6e3ca7d1..b3b42b5567df3b 100644 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ b/Doc/includes/sqlite3/execsql_printall_1.py @@ -7,7 +7,7 @@ cur = con.cursor() # Execute the SELECT statement: -cur.execute("select * from people order by age") +cur.execute("select * from lang order by first_appeared") # Retrieve all rows as a sequence and print that sequence: print(cur.fetchall()) diff --git a/Doc/includes/sqlite3/execute_1.py b/Doc/includes/sqlite3/execute_1.py index 42aad4d5839f06..ee0000e2b94a32 100644 --- a/Doc/includes/sqlite3/execute_1.py +++ b/Doc/includes/sqlite3/execute_1.py @@ -2,22 +2,21 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -cur.execute("create table lang (lang_name, lang_age)") +cur.execute("create table lang (name, first_appeared)") # This is the qmark style: -cur.execute("insert into lang values (?, ?)", ("C", 49)) +cur.execute("insert into lang values (?, ?)", ("C", 1972)) # The qmark style used with executemany(): lang_list = [ - ("Fortran", 64), - ("Python", 30), - ("Go", 11), + ("Fortran", 1957), + ("Python", 1991), + ("Go", 2009), ] cur.executemany("insert into lang values (?, ?)", lang_list) # And this is the named style: -cur.execute("select * from lang where lang_name=:name and lang_age=:age", - {"name": "C", "age": 49}) +cur.execute("select * from lang where first_appeared=:year", {"year": 1972}) print(cur.fetchall()) con.close() diff --git a/Doc/includes/sqlite3/insert_more_people.py b/Doc/includes/sqlite3/insert_more_langs.py similarity index 50% rename from Doc/includes/sqlite3/insert_more_people.py rename to Doc/includes/sqlite3/insert_more_langs.py index 10cf937243f6da..ceef949608449e 100644 --- a/Doc/includes/sqlite3/insert_more_people.py +++ b/Doc/includes/sqlite3/insert_more_langs.py @@ -4,13 +4,13 @@ cur = con.cursor() -newPeople = ( - ('Lebed' , 53), - ('Zhirinovsky' , 57), - ) +languages = ( + ("Smalltalk", 1972), + ("Swift", 2014), +) -for person in newPeople: - cur.execute("insert into people (name_last, age) values (?, ?)", person) +for lang in languages: + cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) # The changes will not be saved unless the transaction is committed explicitly: con.commit() diff --git a/Doc/includes/sqlite3/shortcut_methods.py b/Doc/includes/sqlite3/shortcut_methods.py index 98a39411495cba..48ea6fad15a898 100644 --- a/Doc/includes/sqlite3/shortcut_methods.py +++ b/Doc/includes/sqlite3/shortcut_methods.py @@ -1,23 +1,23 @@ import sqlite3 -persons = [ - ("Hugo", "Boss"), - ("Calvin", "Klein") - ] +langs = [ + ("C++", 1985), + ("Objective-C", 1984), +] con = sqlite3.connect(":memory:") # Create the table -con.execute("create table person(firstname, lastname)") +con.execute("create table lang(name, first_appeared)") # Fill the table -con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) +con.executemany("insert into lang(name, first_appeared) values (?, ?)", langs) # Print the table contents -for row in con.execute("select firstname, lastname from person"): +for row in con.execute("select name, first_appeared from lang"): print(row) -print("I just deleted", con.execute("delete from person").rowcount, "rows") +print("I just deleted", con.execute("delete from lang").rowcount, "rows") # close is not a shortcut method and it's not called automatically, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py index 148a1707f948bc..9be6e4f414acd8 100644 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ b/Doc/includes/sqlite3/simple_tableprinter.py @@ -1,13 +1,10 @@ import sqlite3 FIELD_MAX_WIDTH = 20 -TABLE_NAME = 'people' -SELECT = 'select * from %s order by age, name_last' % TABLE_NAME con = sqlite3.connect("mydb") - cur = con.cursor() -cur.execute(SELECT) +cur.execute("select * from lang order by name, first_appeared") # Print a header. for fieldDesc in cur.description: diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 95277c44129cc9..ad5f55e8038520 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -211,8 +211,7 @@ 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,,: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,,:year,"cur.execute(""select * from lang where first_appeared=:year"", {""year"": 1972})" library/sqlite3,,:memory, library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" From webhook-mailer at python.org Wed May 19 03:44:07 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 07:44:07 -0000 Subject: [Python-checkins] bpo-44106: Improve sqlite3 example database contents (GH-26027) Message-ID: https://github.com/python/cpython/commit/3185bc9d3f38ce9d814aecf8104f1d6953c2d8ff commit: 3185bc9d3f38ce9d814aecf8104f1d6953c2d8ff branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T10:44:00+03:00 summary: bpo-44106: Improve sqlite3 example database contents (GH-26027) (cherry picked from commit 92d1064727d6b7f4136f9c09ab52ae15e3676afe) Co-authored-by: Erlend Egeberg Aasland files: A Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/insert_more_people.py M Doc/includes/sqlite3/createdb.py M Doc/includes/sqlite3/ctx_manager.py M Doc/includes/sqlite3/execsql_fetchonerow.py M Doc/includes/sqlite3/execsql_printall_1.py M Doc/includes/sqlite3/execute_1.py M Doc/includes/sqlite3/shortcut_methods.py M Doc/includes/sqlite3/simple_tableprinter.py M Doc/tools/susp-ignored.csv diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py index ee2950bdf81646..49702121f72534 100644 --- a/Doc/includes/sqlite3/createdb.py +++ b/Doc/includes/sqlite3/createdb.py @@ -12,15 +12,15 @@ con = sqlite3.connect(DB_FILE) cur = con.cursor() cur.execute(""" - create table people + create table lang ( - name_last varchar(20), - age integer + name varchar(20), + first_appeared integer ) """) -cur.execute("insert into people (name_last, age) values ('Yeltsin', 72)") -cur.execute("insert into people (name_last, age) values ('Putin', 51)") +cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") +cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") con.commit() diff --git a/Doc/includes/sqlite3/ctx_manager.py b/Doc/includes/sqlite3/ctx_manager.py index 6db77d45046e1f..2e1175ef44c641 100644 --- a/Doc/includes/sqlite3/ctx_manager.py +++ b/Doc/includes/sqlite3/ctx_manager.py @@ -1,19 +1,19 @@ import sqlite3 con = sqlite3.connect(":memory:") -con.execute("create table person (id integer primary key, firstname varchar unique)") +con.execute("create table lang (id integer primary key, name varchar unique)") # Successful, con.commit() is called automatically afterwards with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) # con.rollback() is called after the with block finishes with an exception, the # exception is still raised and must be caught try: with con: - con.execute("insert into person(firstname) values (?)", ("Joe",)) + con.execute("insert into lang(name) values (?)", ("Python",)) except sqlite3.IntegrityError: - print("couldn't add Joe twice") + print("couldn't add Python twice") # Connection object used as context manager only commits or rollbacks transactions, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py index 115bcb50c7c754..0ca7e14469760b 100644 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ b/Doc/includes/sqlite3/execsql_fetchonerow.py @@ -3,17 +3,17 @@ con = sqlite3.connect("mydb") cur = con.cursor() -SELECT = "select name_last, age from people order by age, name_last" +SELECT = "select name, first_appeared from people order by first_appeared, name" # 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name_last, age): +# resulting sequences to yield their elements (name, first_appeared): cur.execute(SELECT) -for (name_last, age) in cur: - print('%s is %d years old.' % (name_last, age)) +for name, first_appeared in cur: + print(f"The {name} programming language appeared in {first_appeared}.") # 2. Equivalently: cur.execute(SELECT) for row in cur: - print('%s is %d years old.' % (row[0], row[1])) + print(f"The {row[0]} programming language appeared in {row[1]}.") con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py index 19306e6e3ca7d1..b3b42b5567df3b 100644 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ b/Doc/includes/sqlite3/execsql_printall_1.py @@ -7,7 +7,7 @@ cur = con.cursor() # Execute the SELECT statement: -cur.execute("select * from people order by age") +cur.execute("select * from lang order by first_appeared") # Retrieve all rows as a sequence and print that sequence: print(cur.fetchall()) diff --git a/Doc/includes/sqlite3/execute_1.py b/Doc/includes/sqlite3/execute_1.py index 42aad4d5839f06..ee0000e2b94a32 100644 --- a/Doc/includes/sqlite3/execute_1.py +++ b/Doc/includes/sqlite3/execute_1.py @@ -2,22 +2,21 @@ con = sqlite3.connect(":memory:") cur = con.cursor() -cur.execute("create table lang (lang_name, lang_age)") +cur.execute("create table lang (name, first_appeared)") # This is the qmark style: -cur.execute("insert into lang values (?, ?)", ("C", 49)) +cur.execute("insert into lang values (?, ?)", ("C", 1972)) # The qmark style used with executemany(): lang_list = [ - ("Fortran", 64), - ("Python", 30), - ("Go", 11), + ("Fortran", 1957), + ("Python", 1991), + ("Go", 2009), ] cur.executemany("insert into lang values (?, ?)", lang_list) # And this is the named style: -cur.execute("select * from lang where lang_name=:name and lang_age=:age", - {"name": "C", "age": 49}) +cur.execute("select * from lang where first_appeared=:year", {"year": 1972}) print(cur.fetchall()) con.close() diff --git a/Doc/includes/sqlite3/insert_more_people.py b/Doc/includes/sqlite3/insert_more_langs.py similarity index 50% rename from Doc/includes/sqlite3/insert_more_people.py rename to Doc/includes/sqlite3/insert_more_langs.py index 10cf937243f6da..ceef949608449e 100644 --- a/Doc/includes/sqlite3/insert_more_people.py +++ b/Doc/includes/sqlite3/insert_more_langs.py @@ -4,13 +4,13 @@ cur = con.cursor() -newPeople = ( - ('Lebed' , 53), - ('Zhirinovsky' , 57), - ) +languages = ( + ("Smalltalk", 1972), + ("Swift", 2014), +) -for person in newPeople: - cur.execute("insert into people (name_last, age) values (?, ?)", person) +for lang in languages: + cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) # The changes will not be saved unless the transaction is committed explicitly: con.commit() diff --git a/Doc/includes/sqlite3/shortcut_methods.py b/Doc/includes/sqlite3/shortcut_methods.py index 98a39411495cba..48ea6fad15a898 100644 --- a/Doc/includes/sqlite3/shortcut_methods.py +++ b/Doc/includes/sqlite3/shortcut_methods.py @@ -1,23 +1,23 @@ import sqlite3 -persons = [ - ("Hugo", "Boss"), - ("Calvin", "Klein") - ] +langs = [ + ("C++", 1985), + ("Objective-C", 1984), +] con = sqlite3.connect(":memory:") # Create the table -con.execute("create table person(firstname, lastname)") +con.execute("create table lang(name, first_appeared)") # Fill the table -con.executemany("insert into person(firstname, lastname) values (?, ?)", persons) +con.executemany("insert into lang(name, first_appeared) values (?, ?)", langs) # Print the table contents -for row in con.execute("select firstname, lastname from person"): +for row in con.execute("select name, first_appeared from lang"): print(row) -print("I just deleted", con.execute("delete from person").rowcount, "rows") +print("I just deleted", con.execute("delete from lang").rowcount, "rows") # close is not a shortcut method and it's not called automatically, # so the connection object should be closed manually diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py index 148a1707f948bc..9be6e4f414acd8 100644 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ b/Doc/includes/sqlite3/simple_tableprinter.py @@ -1,13 +1,10 @@ import sqlite3 FIELD_MAX_WIDTH = 20 -TABLE_NAME = 'people' -SELECT = 'select * from %s order by age, name_last' % TABLE_NAME con = sqlite3.connect("mydb") - cur = con.cursor() -cur.execute(SELECT) +cur.execute("select * from lang order by name, first_appeared") # Print a header. for fieldDesc in cur.description: diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index d56a2b9fd0bfb9..1fde253feac2fa 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -209,8 +209,7 @@ 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,,: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,,:year,"cur.execute(""select * from lang where first_appeared=:year"", {""year"": 1972})" library/sqlite3,,:memory, library/sqlite3,,:path,"db = sqlite3.connect('file:path/to/database?mode=ro', uri=True)" library/ssl,,:My,"Organizational Unit Name (eg, section) []:My Group" From webhook-mailer at python.org Wed May 19 04:08:21 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 08:08:21 -0000 Subject: [Python-checkins] bpo-44106: Purge unused sqlite3 doc includes (GH-26234) Message-ID: https://github.com/python/cpython/commit/d798acc8733b605f7fc9c3c1a85cd14ee2a56add commit: d798acc8733b605f7fc9c3c1a85cd14ee2a56add branch: main author: Erlend Egeberg Aasland committer: berkerpeksag date: 2021-05-19T11:08:12+03:00 summary: bpo-44106: Purge unused sqlite3 doc includes (GH-26234) files: D Doc/includes/sqlite3/countcursors.py D Doc/includes/sqlite3/createdb.py D Doc/includes/sqlite3/execsql_fetchonerow.py D Doc/includes/sqlite3/execsql_printall_1.py D Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/parse_colnames.py D Doc/includes/sqlite3/shared_cache.py D Doc/includes/sqlite3/simple_tableprinter.py diff --git a/Doc/includes/sqlite3/countcursors.py b/Doc/includes/sqlite3/countcursors.py deleted file mode 100644 index 112f47703a2ff..0000000000000 --- a/Doc/includes/sqlite3/countcursors.py +++ /dev/null @@ -1,17 +0,0 @@ -import sqlite3 - -class CountCursorsConnection(sqlite3.Connection): - def __init__(self, *args, **kwargs): - sqlite3.Connection.__init__(self, *args, **kwargs) - self.numcursors = 0 - - def cursor(self, *args, **kwargs): - self.numcursors += 1 - return sqlite3.Connection.cursor(self, *args, **kwargs) - -con = sqlite3.connect(":memory:", factory=CountCursorsConnection) -cur1 = con.cursor() -cur2 = con.cursor() -print(con.numcursors) - -con.close() diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py deleted file mode 100644 index 49702121f7253..0000000000000 --- a/Doc/includes/sqlite3/createdb.py +++ /dev/null @@ -1,28 +0,0 @@ -# Not referenced from the documentation, but builds the database file the other -# code snippets expect. - -import sqlite3 -import os - -DB_FILE = "mydb" - -if os.path.exists(DB_FILE): - os.remove(DB_FILE) - -con = sqlite3.connect(DB_FILE) -cur = con.cursor() -cur.execute(""" - create table lang - ( - name varchar(20), - first_appeared integer - ) - """) - -cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") -cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") - -con.commit() - -cur.close() -con.close() diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py deleted file mode 100644 index 0ca7e14469760..0000000000000 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ /dev/null @@ -1,19 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() -SELECT = "select name, first_appeared from people order by first_appeared, name" - -# 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name, first_appeared): -cur.execute(SELECT) -for name, first_appeared in cur: - print(f"The {name} programming language appeared in {first_appeared}.") - -# 2. Equivalently: -cur.execute(SELECT) -for row in cur: - print(f"The {row[0]} programming language appeared in {row[1]}.") - -con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py deleted file mode 100644 index b3b42b5567df3..0000000000000 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ /dev/null @@ -1,15 +0,0 @@ -import sqlite3 - -# Create a connection to the database file "mydb": -con = sqlite3.connect("mydb") - -# Get a Cursor object that operates in the context of Connection con: -cur = con.cursor() - -# Execute the SELECT statement: -cur.execute("select * from lang order by first_appeared") - -# Retrieve all rows as a sequence and print that sequence: -print(cur.fetchall()) - -con.close() diff --git a/Doc/includes/sqlite3/insert_more_langs.py b/Doc/includes/sqlite3/insert_more_langs.py deleted file mode 100644 index ceef949608449..0000000000000 --- a/Doc/includes/sqlite3/insert_more_langs.py +++ /dev/null @@ -1,18 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() - -languages = ( - ("Smalltalk", 1972), - ("Swift", 2014), -) - -for lang in languages: - cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) - -# The changes will not be saved unless the transaction is committed explicitly: -con.commit() - -con.close() diff --git a/Doc/includes/sqlite3/parse_colnames.py b/Doc/includes/sqlite3/parse_colnames.py deleted file mode 100644 index 5f01dbfe1cb52..0000000000000 --- a/Doc/includes/sqlite3/parse_colnames.py +++ /dev/null @@ -1,10 +0,0 @@ -import sqlite3 -import datetime - -con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) -cur = con.cursor() -cur.execute('select ? as "x [timestamp]"', (datetime.datetime.now(),)) -dt = cur.fetchone()[0] -print(dt, type(dt)) - -con.close() diff --git a/Doc/includes/sqlite3/shared_cache.py b/Doc/includes/sqlite3/shared_cache.py deleted file mode 100644 index 30e71c935ff62..0000000000000 --- a/Doc/includes/sqlite3/shared_cache.py +++ /dev/null @@ -1,6 +0,0 @@ -import sqlite3 - -# The shared cache is only available in SQLite versions 3.3.3 or later -# See the SQLite documentation for details. - -sqlite3.enable_shared_cache(True) diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py deleted file mode 100644 index 9be6e4f414acd..0000000000000 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ /dev/null @@ -1,25 +0,0 @@ -import sqlite3 - -FIELD_MAX_WIDTH = 20 - -con = sqlite3.connect("mydb") -cur = con.cursor() -cur.execute("select * from lang order by name, first_appeared") - -# Print a header. -for fieldDesc in cur.description: - print(fieldDesc[0].ljust(FIELD_MAX_WIDTH), end=' ') -print() # Finish the header with a newline. -print('-' * 78) - -# For each row, print the value of each field left-justified within -# the maximum possible width of that field. -fieldIndices = range(len(cur.description)) -for row in cur: - for fieldIndex in fieldIndices: - fieldValue = str(row[fieldIndex]) - print(fieldValue.ljust(FIELD_MAX_WIDTH), end=' ') - - print() # Finish the row with a newline. - -con.close() From webhook-mailer at python.org Wed May 19 04:17:14 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 08:17:14 -0000 Subject: [Python-checkins] bpo-44106: Purge unused sqlite3 doc includes (GH-26234) Message-ID: https://github.com/python/cpython/commit/5b5a10c8740aa5e9fd68a10d9cb23b0e7d61ce98 commit: 5b5a10c8740aa5e9fd68a10d9cb23b0e7d61ce98 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T11:17:03+03:00 summary: bpo-44106: Purge unused sqlite3 doc includes (GH-26234) (cherry picked from commit d798acc8733b605f7fc9c3c1a85cd14ee2a56add) Co-authored-by: Erlend Egeberg Aasland files: D Doc/includes/sqlite3/countcursors.py D Doc/includes/sqlite3/createdb.py D Doc/includes/sqlite3/execsql_fetchonerow.py D Doc/includes/sqlite3/execsql_printall_1.py D Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/parse_colnames.py D Doc/includes/sqlite3/shared_cache.py D Doc/includes/sqlite3/simple_tableprinter.py diff --git a/Doc/includes/sqlite3/countcursors.py b/Doc/includes/sqlite3/countcursors.py deleted file mode 100644 index 112f47703a2ff..0000000000000 --- a/Doc/includes/sqlite3/countcursors.py +++ /dev/null @@ -1,17 +0,0 @@ -import sqlite3 - -class CountCursorsConnection(sqlite3.Connection): - def __init__(self, *args, **kwargs): - sqlite3.Connection.__init__(self, *args, **kwargs) - self.numcursors = 0 - - def cursor(self, *args, **kwargs): - self.numcursors += 1 - return sqlite3.Connection.cursor(self, *args, **kwargs) - -con = sqlite3.connect(":memory:", factory=CountCursorsConnection) -cur1 = con.cursor() -cur2 = con.cursor() -print(con.numcursors) - -con.close() diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py deleted file mode 100644 index 49702121f7253..0000000000000 --- a/Doc/includes/sqlite3/createdb.py +++ /dev/null @@ -1,28 +0,0 @@ -# Not referenced from the documentation, but builds the database file the other -# code snippets expect. - -import sqlite3 -import os - -DB_FILE = "mydb" - -if os.path.exists(DB_FILE): - os.remove(DB_FILE) - -con = sqlite3.connect(DB_FILE) -cur = con.cursor() -cur.execute(""" - create table lang - ( - name varchar(20), - first_appeared integer - ) - """) - -cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") -cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") - -con.commit() - -cur.close() -con.close() diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py deleted file mode 100644 index 0ca7e14469760..0000000000000 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ /dev/null @@ -1,19 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() -SELECT = "select name, first_appeared from people order by first_appeared, name" - -# 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name, first_appeared): -cur.execute(SELECT) -for name, first_appeared in cur: - print(f"The {name} programming language appeared in {first_appeared}.") - -# 2. Equivalently: -cur.execute(SELECT) -for row in cur: - print(f"The {row[0]} programming language appeared in {row[1]}.") - -con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py deleted file mode 100644 index b3b42b5567df3..0000000000000 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ /dev/null @@ -1,15 +0,0 @@ -import sqlite3 - -# Create a connection to the database file "mydb": -con = sqlite3.connect("mydb") - -# Get a Cursor object that operates in the context of Connection con: -cur = con.cursor() - -# Execute the SELECT statement: -cur.execute("select * from lang order by first_appeared") - -# Retrieve all rows as a sequence and print that sequence: -print(cur.fetchall()) - -con.close() diff --git a/Doc/includes/sqlite3/insert_more_langs.py b/Doc/includes/sqlite3/insert_more_langs.py deleted file mode 100644 index ceef949608449..0000000000000 --- a/Doc/includes/sqlite3/insert_more_langs.py +++ /dev/null @@ -1,18 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() - -languages = ( - ("Smalltalk", 1972), - ("Swift", 2014), -) - -for lang in languages: - cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) - -# The changes will not be saved unless the transaction is committed explicitly: -con.commit() - -con.close() diff --git a/Doc/includes/sqlite3/parse_colnames.py b/Doc/includes/sqlite3/parse_colnames.py deleted file mode 100644 index 5f01dbfe1cb52..0000000000000 --- a/Doc/includes/sqlite3/parse_colnames.py +++ /dev/null @@ -1,10 +0,0 @@ -import sqlite3 -import datetime - -con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) -cur = con.cursor() -cur.execute('select ? as "x [timestamp]"', (datetime.datetime.now(),)) -dt = cur.fetchone()[0] -print(dt, type(dt)) - -con.close() diff --git a/Doc/includes/sqlite3/shared_cache.py b/Doc/includes/sqlite3/shared_cache.py deleted file mode 100644 index 30e71c935ff62..0000000000000 --- a/Doc/includes/sqlite3/shared_cache.py +++ /dev/null @@ -1,6 +0,0 @@ -import sqlite3 - -# The shared cache is only available in SQLite versions 3.3.3 or later -# See the SQLite documentation for details. - -sqlite3.enable_shared_cache(True) diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py deleted file mode 100644 index 9be6e4f414acd..0000000000000 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ /dev/null @@ -1,25 +0,0 @@ -import sqlite3 - -FIELD_MAX_WIDTH = 20 - -con = sqlite3.connect("mydb") -cur = con.cursor() -cur.execute("select * from lang order by name, first_appeared") - -# Print a header. -for fieldDesc in cur.description: - print(fieldDesc[0].ljust(FIELD_MAX_WIDTH), end=' ') -print() # Finish the header with a newline. -print('-' * 78) - -# For each row, print the value of each field left-justified within -# the maximum possible width of that field. -fieldIndices = range(len(cur.description)) -for row in cur: - for fieldIndex in fieldIndices: - fieldValue = str(row[fieldIndex]) - print(fieldValue.ljust(FIELD_MAX_WIDTH), end=' ') - - print() # Finish the row with a newline. - -con.close() From webhook-mailer at python.org Wed May 19 04:17:23 2021 From: webhook-mailer at python.org (berkerpeksag) Date: Wed, 19 May 2021 08:17:23 -0000 Subject: [Python-checkins] bpo-44106: Purge unused sqlite3 doc includes (GH-26234) Message-ID: https://github.com/python/cpython/commit/e57bef1b73abb8e89d927053bd7e4fdbf44687bf commit: e57bef1b73abb8e89d927053bd7e4fdbf44687bf branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: berkerpeksag date: 2021-05-19T11:17:19+03:00 summary: bpo-44106: Purge unused sqlite3 doc includes (GH-26234) (cherry picked from commit d798acc8733b605f7fc9c3c1a85cd14ee2a56add) Co-authored-by: Erlend Egeberg Aasland files: D Doc/includes/sqlite3/countcursors.py D Doc/includes/sqlite3/createdb.py D Doc/includes/sqlite3/execsql_fetchonerow.py D Doc/includes/sqlite3/execsql_printall_1.py D Doc/includes/sqlite3/insert_more_langs.py D Doc/includes/sqlite3/parse_colnames.py D Doc/includes/sqlite3/shared_cache.py D Doc/includes/sqlite3/simple_tableprinter.py diff --git a/Doc/includes/sqlite3/countcursors.py b/Doc/includes/sqlite3/countcursors.py deleted file mode 100644 index 112f47703a2ff..0000000000000 --- a/Doc/includes/sqlite3/countcursors.py +++ /dev/null @@ -1,17 +0,0 @@ -import sqlite3 - -class CountCursorsConnection(sqlite3.Connection): - def __init__(self, *args, **kwargs): - sqlite3.Connection.__init__(self, *args, **kwargs) - self.numcursors = 0 - - def cursor(self, *args, **kwargs): - self.numcursors += 1 - return sqlite3.Connection.cursor(self, *args, **kwargs) - -con = sqlite3.connect(":memory:", factory=CountCursorsConnection) -cur1 = con.cursor() -cur2 = con.cursor() -print(con.numcursors) - -con.close() diff --git a/Doc/includes/sqlite3/createdb.py b/Doc/includes/sqlite3/createdb.py deleted file mode 100644 index 49702121f7253..0000000000000 --- a/Doc/includes/sqlite3/createdb.py +++ /dev/null @@ -1,28 +0,0 @@ -# Not referenced from the documentation, but builds the database file the other -# code snippets expect. - -import sqlite3 -import os - -DB_FILE = "mydb" - -if os.path.exists(DB_FILE): - os.remove(DB_FILE) - -con = sqlite3.connect(DB_FILE) -cur = con.cursor() -cur.execute(""" - create table lang - ( - name varchar(20), - first_appeared integer - ) - """) - -cur.execute("insert into lang (name, first_appeared) values ('Forth', 1970)") -cur.execute("insert into lang (name, first_appeared) values ('Ada', 1980)") - -con.commit() - -cur.close() -con.close() diff --git a/Doc/includes/sqlite3/execsql_fetchonerow.py b/Doc/includes/sqlite3/execsql_fetchonerow.py deleted file mode 100644 index 0ca7e14469760..0000000000000 --- a/Doc/includes/sqlite3/execsql_fetchonerow.py +++ /dev/null @@ -1,19 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() -SELECT = "select name, first_appeared from people order by first_appeared, name" - -# 1. Iterate over the rows available from the cursor, unpacking the -# resulting sequences to yield their elements (name, first_appeared): -cur.execute(SELECT) -for name, first_appeared in cur: - print(f"The {name} programming language appeared in {first_appeared}.") - -# 2. Equivalently: -cur.execute(SELECT) -for row in cur: - print(f"The {row[0]} programming language appeared in {row[1]}.") - -con.close() diff --git a/Doc/includes/sqlite3/execsql_printall_1.py b/Doc/includes/sqlite3/execsql_printall_1.py deleted file mode 100644 index b3b42b5567df3..0000000000000 --- a/Doc/includes/sqlite3/execsql_printall_1.py +++ /dev/null @@ -1,15 +0,0 @@ -import sqlite3 - -# Create a connection to the database file "mydb": -con = sqlite3.connect("mydb") - -# Get a Cursor object that operates in the context of Connection con: -cur = con.cursor() - -# Execute the SELECT statement: -cur.execute("select * from lang order by first_appeared") - -# Retrieve all rows as a sequence and print that sequence: -print(cur.fetchall()) - -con.close() diff --git a/Doc/includes/sqlite3/insert_more_langs.py b/Doc/includes/sqlite3/insert_more_langs.py deleted file mode 100644 index ceef949608449..0000000000000 --- a/Doc/includes/sqlite3/insert_more_langs.py +++ /dev/null @@ -1,18 +0,0 @@ -import sqlite3 - -con = sqlite3.connect("mydb") - -cur = con.cursor() - -languages = ( - ("Smalltalk", 1972), - ("Swift", 2014), -) - -for lang in languages: - cur.execute("insert into lang (name, first_appeared) values (?, ?)", lang) - -# The changes will not be saved unless the transaction is committed explicitly: -con.commit() - -con.close() diff --git a/Doc/includes/sqlite3/parse_colnames.py b/Doc/includes/sqlite3/parse_colnames.py deleted file mode 100644 index 5f01dbfe1cb52..0000000000000 --- a/Doc/includes/sqlite3/parse_colnames.py +++ /dev/null @@ -1,10 +0,0 @@ -import sqlite3 -import datetime - -con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES) -cur = con.cursor() -cur.execute('select ? as "x [timestamp]"', (datetime.datetime.now(),)) -dt = cur.fetchone()[0] -print(dt, type(dt)) - -con.close() diff --git a/Doc/includes/sqlite3/shared_cache.py b/Doc/includes/sqlite3/shared_cache.py deleted file mode 100644 index 30e71c935ff62..0000000000000 --- a/Doc/includes/sqlite3/shared_cache.py +++ /dev/null @@ -1,6 +0,0 @@ -import sqlite3 - -# The shared cache is only available in SQLite versions 3.3.3 or later -# See the SQLite documentation for details. - -sqlite3.enable_shared_cache(True) diff --git a/Doc/includes/sqlite3/simple_tableprinter.py b/Doc/includes/sqlite3/simple_tableprinter.py deleted file mode 100644 index 9be6e4f414acd..0000000000000 --- a/Doc/includes/sqlite3/simple_tableprinter.py +++ /dev/null @@ -1,25 +0,0 @@ -import sqlite3 - -FIELD_MAX_WIDTH = 20 - -con = sqlite3.connect("mydb") -cur = con.cursor() -cur.execute("select * from lang order by name, first_appeared") - -# Print a header. -for fieldDesc in cur.description: - print(fieldDesc[0].ljust(FIELD_MAX_WIDTH), end=' ') -print() # Finish the header with a newline. -print('-' * 78) - -# For each row, print the value of each field left-justified within -# the maximum possible width of that field. -fieldIndices = range(len(cur.description)) -for row in cur: - for fieldIndex in fieldIndices: - fieldValue = str(row[fieldIndex]) - print(fieldValue.ljust(FIELD_MAX_WIDTH), end=' ') - - print() # Finish the row with a newline. - -con.close() From webhook-mailer at python.org Wed May 19 04:59:56 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 19 May 2021 08:59:56 -0000 Subject: [Python-checkins] bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) (GH-26218) Message-ID: https://github.com/python/cpython/commit/5f2afff1ddbf11c8dfa9ddc98fb7a2f2d86eabde commit: 5f2afff1ddbf11c8dfa9ddc98fb7a2f2d86eabde branch: 3.10 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-19T09:59:23+01:00 summary: bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) (GH-26218) (cherry picked from commit 4fdcc39f711e1b586a94e2c5088fdd7e78fd9f58) Co-authored-by: Zackery Spytz files: M Doc/tutorial/inputoutput.rst diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index 4e27cff83ce59..7f83c4d4612eb 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -480,7 +480,8 @@ If you have an object ``x``, you can view its JSON string representation with a simple line of code:: >>> import json - >>> json.dumps([1, 'simple', 'list']) + >>> x = [1, 'simple', 'list'] + >>> json.dumps(x) '[1, "simple", "list"]' Another variant of the :func:`~json.dumps` function, called :func:`~json.dump`, From webhook-mailer at python.org Wed May 19 04:59:56 2021 From: webhook-mailer at python.org (iritkatriel) Date: Wed, 19 May 2021 08:59:56 -0000 Subject: [Python-checkins] bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) (GH-26219) Message-ID: https://github.com/python/cpython/commit/74eb94af2b0ca652d4b6b9b853601a8b8ac7dca1 commit: 74eb94af2b0ca652d4b6b9b853601a8b8ac7dca1 branch: 3.9 author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com> committer: iritkatriel date: 2021-05-19T09:59:36+01:00 summary: bpo-35765: Clarify references to "object x" in the JSON tutorial (GH-22411) (GH-26219) (cherry picked from commit 4fdcc39f711e1b586a94e2c5088fdd7e78fd9f58) Co-authored-by: Zackery Spytz files: M Doc/tutorial/inputoutput.rst diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index 4e27cff83ce59..7f83c4d4612eb 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -480,7 +480,8 @@ If you have an object ``x``, you can view its JSON string representation with a simple line of code:: >>> import json - >>> json.dumps([1, 'simple', 'list']) + >>> x = [1, 'simple', 'list'] + >>> json.dumps(x) '[1, "simple", "list"]' Another variant of the :func:`~json.dumps` function, called :func:`~json.dump`, From webhook-mailer at python.org Wed May 19 05:18:14 2021 From: webhook-mailer at python.org (taleinat) Date: Wed, 19 May 2021 09:18:14 -0000 Subject: [Python-checkins] bpo-44010: IDLE: colorize pattern-matching soft keywords (GH-25851) Message-ID: https://github.com/python/cpython/commit/60d343a81679ea90ae0e08fadcd132c16906a51a commit: 60d343a81679ea90ae0e08fadcd132c16906a51a branch: main author: Tal Einat <532281+taleinat at users.noreply.github.com> committer: taleinat <532281+taleinat at users.noreply.github.com> date: 2021-05-19T12:18:10+03:00 summary: bpo-44010: IDLE: colorize pattern-matching soft keywords (GH-25851) files: A Misc/NEWS.d/next/IDLE/2021-05-09-09-02-09.bpo-44010.TaLe9x.rst M Doc/library/idle.rst M Doc/whatsnew/3.10.rst M Lib/idlelib/colorizer.py M Lib/idlelib/help.html M Lib/idlelib/idle_test/test_colorizer.py diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 3c302115b5f40..faa34e69ff15d 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -613,6 +613,12 @@ keywords, builtin class and function names, names following ``class`` and ``def``, strings, and comments. For any text window, these are the cursor (when present), found text (when possible), and selected text. +IDLE also highlights the :ref:`soft keywords ` :keyword:`match`, +:keyword:`case `, and :keyword:`_ ` in +pattern-matching statements. However, this highlighting is not perfect and +will be incorrect in some rare cases, including some ``_``-s in ``case`` +patterns. + Text coloring is done in the background, so uncolorized text is occasionally visible. To change the color scheme, use the Configure IDLE dialog Highlighting tab. The marking of debugger breakpoint lines in the editor and diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 926679e6f32dc..570af7f3b6181 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -1030,6 +1030,12 @@ Terry Jan Reedy in :issue:`37892`.) We expect to backport these shell changes to a future 3.9 maintenance release. +Highlight the new :ref:`soft keywords ` :keyword:`match`, +:keyword:`case `, and :keyword:`_ ` in +pattern-matching statements. However, this highlighting is not perfect +and will be incorrect in some rare cases, including some ``_``-s in +``case`` patterns. (Contributed by Tal Einat in bpo-44010.) + importlib.metadata ------------------ diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py index 3c527409731af..e9f19c145c867 100644 --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -16,6 +16,32 @@ def any(name, alternates): def make_pat(): kw = r"\b" + any("KEYWORD", keyword.kwlist) + r"\b" + match_softkw = ( + r"^[ \t]*" + # at beginning of line + possible indentation + r"(?Pmatch)\b" + + r"(?![ \t]*(?:" + "|".join([ # not followed by ... + r"[:,;=^&|@~)\]}]", # a character which means it can't be a + # pattern-matching statement + r"\b(?:" + r"|".join(keyword.kwlist) + r")\b", # a keyword + ]) + + r"))" + ) + case_default = ( + r"^[ \t]*" + # at beginning of line + possible indentation + r"(?Pcase)" + + r"[ \t]+(?P_\b)" + ) + case_softkw_and_pattern = ( + r"^[ \t]*" + # at beginning of line + possible indentation + r"(?Pcase)\b" + + r"(?![ \t]*(?:" + "|".join([ # not followed by ... + r"_\b", # a lone underscore + r"[:,;=^&|@~)\]}]", # a character which means it can't be a + # pattern-matching case + r"\b(?:" + r"|".join(keyword.kwlist) + r")\b", # a keyword + ]) + + r"))" + ) builtinlist = [str(name) for name in dir(builtins) if not name.startswith('_') and name not in keyword.kwlist] @@ -27,12 +53,29 @@ 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"])) + prog = re.compile("|".join([ + builtin, comment, string, kw, + match_softkw, case_default, + case_softkw_and_pattern, + any("SYNC", [r"\n"]), + ]), + re.DOTALL | re.MULTILINE) + return prog -prog = re.compile(make_pat(), re.S) -idprog = re.compile(r"\s+(\w+)", re.S) +prog = make_pat() +idprog = re.compile(r"\s+(\w+)") +prog_group_name_to_tag = { + "MATCH_SOFTKW": "KEYWORD", + "CASE_SOFTKW": "KEYWORD", + "CASE_DEFAULT_UNDERSCORE": "KEYWORD", + "CASE_SOFTKW2": "KEYWORD", +} + + +def matched_named_groups(re_match): + "Get only the non-empty named groups from an re.Match object." + return ((k, v) for (k, v) in re_match.groupdict().items() if v) def color_config(text): @@ -231,14 +274,10 @@ def recolorize(self): def recolorize_main(self): "Evaluate text and apply colorizing tags." next = "1.0" - while True: - item = self.tag_nextrange("TODO", next) - if not item: - break - head, tail = item - self.tag_remove("SYNC", head, tail) - item = self.tag_prevrange("SYNC", head) - head = item[1] if item else "1.0" + while todo_tag_range := self.tag_nextrange("TODO", next): + self.tag_remove("SYNC", todo_tag_range[0], todo_tag_range[1]) + sync_tag_range = self.tag_prevrange("SYNC", todo_tag_range[0]) + head = sync_tag_range[1] if sync_tag_range else "1.0" chars = "" next = head @@ -256,23 +295,8 @@ def recolorize_main(self): return for tag in self.tagdefs: self.tag_remove(tag, mark, next) - chars = chars + line - m = self.prog.search(chars) - while m: - for key, value in m.groupdict().items(): - if value: - a, b = m.span(key) - self.tag_add(key, - head + "+%dc" % a, - head + "+%dc" % b) - if value in ("def", "class"): - m1 = self.idprog.match(chars, b) - if m1: - a, b = m1.span(1) - self.tag_add("DEFINITION", - head + "+%dc" % a, - head + "+%dc" % b) - m = self.prog.search(chars, m.end()) + chars += line + self._add_tags_in_section(chars, head) if "SYNC" in self.tag_names(next + "-1c"): head = next chars = "" @@ -291,6 +315,40 @@ def recolorize_main(self): if DEBUG: print("colorizing stopped") return + def _add_tag(self, start, end, head, matched_group_name): + """Add a tag to a given range in the text widget. + + This is a utility function, receiving the range as `start` and + `end` positions, each of which is a number of characters + relative to the given `head` index in the text widget. + + The tag to add is determined by `matched_group_name`, which is + the name of a regular expression "named group" as matched by + by the relevant highlighting regexps. + """ + tag = prog_group_name_to_tag.get(matched_group_name, + matched_group_name) + self.tag_add(tag, + f"{head}+{start:d}c", + f"{head}+{end:d}c") + + def _add_tags_in_section(self, chars, head): + """Parse and add highlighting tags to a given part of the text. + + `chars` is a string with the text to parse and to which + highlighting is to be applied. + + `head` is the index in the text widget where the text is found. + """ + for m in self.prog.finditer(chars): + for name, matched_text in matched_named_groups(m): + a, b = m.span(name) + self._add_tag(a, b, head, name) + if matched_text in ("def", "class"): + if m1 := self.idprog.match(chars, b): + a, b = m1.span(1) + self._add_tag(a, b, head, "DEFINITION") + def removecolors(self): "Remove all colorizing tags." for tag in self.tagdefs: @@ -299,27 +357,14 @@ def removecolors(self): def _color_delegator(parent): # htest # from tkinter import Toplevel, Text + from idlelib.idle_test.test_colorizer import source from idlelib.percolator import Percolator top = Toplevel(parent) top.title("Test ColorDelegator") x, y = map(int, parent.geometry().split('+')[1:]) - top.geometry("700x250+%d+%d" % (x + 20, y + 175)) - source = ( - "if True: int ('1') # keyword, builtin, string, comment\n" - "elif False: print(0)\n" - "else: float(None)\n" - "if iF + If + IF: 'keyword matching must respect case'\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" - "r'x', u'x', R'x', U'x', f'x', F'x'\n" - "fr'x', Fr'x', fR'x', FR'x', rf'x', rF'x', Rf'x', RF'x'\n" - "b'x',B'x', br'x',Br'x',bR'x',BR'x', rb'x', rB'x',Rb'x',RB'x'\n" - "# Invalid combinations of legal characters should be half colored.\n" - "ur'x', ru'x', uf'x', fu'x', UR'x', ufr'x', rfu'x', xf'x', fx'x'\n" - ) + top.geometry("700x550+%d+%d" % (x + 20, y + 175)) + text = Text(top, background="white") text.pack(expand=1, fill="both") text.insert("insert", source) diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html index e80384b777522..19041c6054e4c 100644 --- a/Lib/idlelib/help.html +++ b/Lib/idlelib/help.html @@ -5,7 +5,7 @@ - IDLE — Python 3.10.0a6 documentation + IDLE — Python 3.11.0a0 documentation @@ -18,7 +18,7 @@ @@ -71,7 +71,7 @@

        Navigation

      • - 3.10.0a6 Documentation » + 3.11.0a0 Documentation »
      • @@ -102,7 +102,7 @@

        Navigation

        IDLE?

        -

        Source code: Lib/idlelib/

        +

        Source code: Lib/idlelib/


        IDLE is Python?s Integrated Development and Learning Environment.

        IDLE has the following features:

        @@ -581,6 +581,11 @@

        Text colorsclass and def, strings, and comments. For any text window, these are the cursor (when present), found text (when possible), and selected text.

        +

        IDLE also highlights the soft keywords match, +case, and _ in +pattern-matching statements. However, this highlighting is not perfect and +will be incorrect in some rare cases, including some _-s in case +patterns.

        Text coloring is done in the background, so uncolorized text is occasionally visible. To change the color scheme, use the Configure IDLE dialog Highlighting tab. The marking of debugger breakpoint lines in the editor and @@ -685,7 +690,7 @@

        Running user codesys.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 process, it replaces sys.stdin, sys.stdout, and sys.stderr @@ -939,7 +944,7 @@

        This Page

        • Report a Bug
        • - Show Source
        • @@ -971,7 +976,7 @@

          Navigation

        • - 3.10.0a6 Documentation » + 3.11.0a0 Documentation »
        • @@ -997,13 +1002,19 @@

          Navigation