From 79d1c2e6c9d1bc1cf41ec3041801ca1a2b9a995b Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 18 Sep 2018 22:22:29 +0300 Subject: [PATCH] bpo-25711: Rewrite zipimport in pure Python. (GH-6809) --- Lib/ctypes/test/test_values.py | 1 + Lib/importlib/__init__.py | 4 +- Lib/importlib/_bootstrap_external.py | 26 +- Lib/test/test_bdb.py | 2 +- .../test_importlib/source/test_file_loader.py | 2 +- Lib/test/test_importlib/test_abc.py | 12 +- Lib/test/test_zipimport.py | 29 +- Lib/zipimport.py | 650 ++++ Makefile.pre.in | 13 +- .../2018-05-14-18-54-03.bpo-25711.9xfq-v.rst | 1 + Modules/Setup | 4 - Modules/clinic/zipimport.c.h | 325 -- Modules/zipimport.c | 1664 ---------- PC/config.c | 2 - PCbuild/_freeze_importlib.vcxproj | 10 +- PCbuild/pythoncore.vcxproj | 1 - PCbuild/pythoncore.vcxproj.filters | 3 - Programs/_freeze_importlib.c | 40 +- Python/frozen.c | 10 +- Python/importlib.h | 2 +- Python/importlib_external.h | 2697 +++++++++-------- Python/importlib_zipimport.h | 900 ++++++ Python/pylifecycle.c | 8 +- 23 files changed, 2998 insertions(+), 3408 deletions(-) create mode 100644 Lib/zipimport.py create mode 100644 Misc/NEWS.d/next/Core and Builtins/2018-05-14-18-54-03.bpo-25711.9xfq-v.rst delete mode 100644 Modules/clinic/zipimport.c.h delete mode 100644 Modules/zipimport.c create mode 100644 Python/importlib_zipimport.h diff --git a/Lib/ctypes/test/test_values.py b/Lib/ctypes/test/test_values.py index e71b48020f9..b38b63f870a 100644 --- a/Lib/ctypes/test/test_values.py +++ b/Lib/ctypes/test/test_values.py @@ -64,6 +64,7 @@ class PythonValuesTestCase(unittest.TestCase): bootstrap_expected = [ b'_frozen_importlib', b'_frozen_importlib_external', + b'zipimport', ] for entry in ft: # This is dangerous. We *can* iterate over a pointer, but diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py index cb37d246a70..0c73c505f98 100644 --- a/Lib/importlib/__init__.py +++ b/Lib/importlib/__init__.py @@ -48,8 +48,8 @@ else: sys.modules['importlib._bootstrap_external'] = _bootstrap_external # To simplify imports in test code -_w_long = _bootstrap_external._w_long -_r_long = _bootstrap_external._r_long +_pack_uint32 = _bootstrap_external._pack_uint32 +_unpack_uint32 = _bootstrap_external._unpack_uint32 # Fully bootstrapped at this point, import whatever you like, circular # dependencies and startup overhead minimisation permitting :) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 7f8bc2167c1..6ef6bf8ab6a 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -43,14 +43,20 @@ def _make_relax_case(): return _relax_case -def _w_long(x): +def _pack_uint32(x): """Convert a 32-bit integer to little-endian.""" return (int(x) & 0xFFFFFFFF).to_bytes(4, 'little') -def _r_long(int_bytes): +def _unpack_uint32(data): """Convert 4 bytes in little-endian to an integer.""" - return int.from_bytes(int_bytes, 'little') + assert len(data) == 4 + return int.from_bytes(data, 'little') + +def _unpack_uint16(data): + """Convert 2 bytes in little-endian to an integer.""" + assert len(data) == 2 + return int.from_bytes(data, 'little') def _path_join(*path_parts): @@ -503,7 +509,7 @@ def _classify_pyc(data, name, exc_details): message = f'reached EOF while reading pyc header of {name!r}' _bootstrap._verbose_message('{}', message) raise EOFError(message) - flags = _r_long(data[4:8]) + flags = _unpack_uint32(data[4:8]) # Only the first two flags are defined. if flags & ~0b11: message = f'invalid flags {flags!r} in {name!r}' @@ -530,12 +536,12 @@ def _validate_timestamp_pyc(data, source_mtime, source_size, name, An ImportError is raised if the bytecode is stale. """ - if _r_long(data[8:12]) != (source_mtime & 0xFFFFFFFF): + if _unpack_uint32(data[8:12]) != (source_mtime & 0xFFFFFFFF): message = f'bytecode is stale for {name!r}' _bootstrap._verbose_message('{}', message) raise ImportError(message, **exc_details) if (source_size is not None and - _r_long(data[12:16]) != (source_size & 0xFFFFFFFF)): + _unpack_uint32(data[12:16]) != (source_size & 0xFFFFFFFF)): raise ImportError(f'bytecode is stale for {name!r}', **exc_details) @@ -579,9 +585,9 @@ def _compile_bytecode(data, name=None, bytecode_path=None, source_path=None): def _code_to_timestamp_pyc(code, mtime=0, source_size=0): "Produce the data for a timestamp-based pyc." data = bytearray(MAGIC_NUMBER) - data.extend(_w_long(0)) - data.extend(_w_long(mtime)) - data.extend(_w_long(source_size)) + data.extend(_pack_uint32(0)) + data.extend(_pack_uint32(mtime)) + data.extend(_pack_uint32(source_size)) data.extend(marshal.dumps(code)) return data @@ -590,7 +596,7 @@ def _code_to_hash_pyc(code, source_hash, checked=True): "Produce the data for a hash-based pyc." data = bytearray(MAGIC_NUMBER) flags = 0b1 | checked << 1 - data.extend(_w_long(flags)) + data.extend(_pack_uint32(flags)) assert len(source_hash) == 8 data.extend(source_hash) data.extend(marshal.dumps(code)) diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py index 616c3a86498..8a9c4dd4376 100644 --- a/Lib/test/test_bdb.py +++ b/Lib/test/test_bdb.py @@ -726,7 +726,7 @@ class StateTestCase(BaseTestCase): ('line', 2, 'tfunc_import'), ('step', ), ('line', 3, 'tfunc_import'), ('quit', ), ] - skip = ('importlib*', TEST_MODULE) + skip = ('importlib*', 'zipimport', TEST_MODULE) with TracerRun(self, skip=skip) as tracer: tracer.runcall(tfunc_import) diff --git a/Lib/test/test_importlib/source/test_file_loader.py b/Lib/test/test_importlib/source/test_file_loader.py index cc80f26357e..c70c5eb34ae 100644 --- a/Lib/test/test_importlib/source/test_file_loader.py +++ b/Lib/test/test_importlib/source/test_file_loader.py @@ -629,7 +629,7 @@ class SourceLoaderBadBytecodeTest: bytecode_file.write(zeros) self.import_(mapping['_temp'], '_temp') source_mtime = os.path.getmtime(mapping['_temp']) - source_timestamp = self.importlib._w_long(source_mtime) + source_timestamp = self.importlib._pack_uint32(source_mtime) with open(bytecode_path, 'rb') as bytecode_file: bytecode_file.seek(8) self.assertEqual(bytecode_file.read(4), source_timestamp) diff --git a/Lib/test/test_importlib/test_abc.py b/Lib/test/test_importlib/test_abc.py index f1e1db35623..05608bbb8b9 100644 --- a/Lib/test/test_importlib/test_abc.py +++ b/Lib/test/test_importlib/test_abc.py @@ -712,9 +712,9 @@ class SourceLoader(SourceOnlyLoader): if magic is None: magic = self.util.MAGIC_NUMBER data = bytearray(magic) - data.extend(self.init._w_long(0)) - data.extend(self.init._w_long(self.source_mtime)) - data.extend(self.init._w_long(self.source_size)) + data.extend(self.init._pack_uint32(0)) + data.extend(self.init._pack_uint32(self.source_mtime)) + data.extend(self.init._pack_uint32(self.source_size)) code_object = compile(self.source, self.path, 'exec', dont_inherit=True) data.extend(marshal.dumps(code_object)) @@ -876,9 +876,9 @@ class SourceLoaderBytecodeTests(SourceLoaderTestHarness): if bytecode_written: self.assertIn(self.cached, self.loader.written) data = bytearray(self.util.MAGIC_NUMBER) - data.extend(self.init._w_long(0)) - data.extend(self.init._w_long(self.loader.source_mtime)) - data.extend(self.init._w_long(self.loader.source_size)) + data.extend(self.init._pack_uint32(0)) + data.extend(self.init._pack_uint32(self.loader.source_mtime)) + data.extend(self.init._pack_uint32(self.loader.source_size)) data.extend(marshal.dumps(code_object)) self.assertEqual(self.loader.written[self.cached], bytes(data)) diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py index 901bebdd71d..cad73ea3f14 100644 --- a/Lib/test/test_zipimport.py +++ b/Lib/test/test_zipimport.py @@ -551,7 +551,12 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): z.writestr(name, data) z.close() zi = zipimport.zipimporter(TEMP_ZIP) - self.assertEqual(data, zi.get_data(FunnyStr(name))) + try: + data2 = zi.get_data(FunnyStr(name)) + except AttributeError: + pass + else: + self.assertEqual(data2, data) finally: z.close() os.remove(TEMP_ZIP) @@ -677,9 +682,9 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): zipimport.zipimporter(filename) zipimport.zipimporter(os.fsencode(filename)) - with self.assertWarns(DeprecationWarning): + with self.assertRaises(TypeError): zipimport.zipimporter(bytearray(os.fsencode(filename))) - with self.assertWarns(DeprecationWarning): + with self.assertRaises(TypeError): zipimport.zipimporter(memoryview(os.fsencode(filename))) @support.cpython_only @@ -687,14 +692,14 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase): # The interpreter shouldn't crash in case of calling methods of an # uninitialized zipimport.zipimporter object. zi = zipimport.zipimporter.__new__(zipimport.zipimporter) - self.assertRaises(ValueError, zi.find_module, 'foo') - self.assertRaises(ValueError, zi.find_loader, 'foo') - self.assertRaises(ValueError, zi.load_module, 'foo') - self.assertRaises(ValueError, zi.get_filename, 'foo') - self.assertRaises(ValueError, zi.is_package, 'foo') - self.assertRaises(ValueError, zi.get_data, 'foo') - self.assertRaises(ValueError, zi.get_code, 'foo') - self.assertRaises(ValueError, zi.get_source, 'foo') + self.assertRaises((ValueError, AttributeError), zi.find_module, 'foo') + self.assertRaises((ValueError, AttributeError), zi.find_loader, 'foo') + self.assertRaises((ValueError, AttributeError), zi.load_module, 'foo') + self.assertRaises((ValueError, AttributeError), zi.get_filename, 'foo') + self.assertRaises((ValueError, AttributeError), zi.is_package, 'foo') + self.assertRaises((ValueError, AttributeError), zi.get_data, 'foo') + self.assertRaises((ValueError, AttributeError), zi.get_code, 'foo') + self.assertRaises((ValueError, AttributeError), zi.get_source, 'foo') @support.requires_zlib @@ -712,7 +717,7 @@ class CompressedZipImportTestCase(UncompressedZipImportTestCase): zip_file.writestr('bar.py', b'print("hello world")', ZIP_DEFLATED) zi = zipimport.zipimporter(TEMP_ZIP) with support.swap_attr(zlib, 'decompress', bad_decompress): - self.assertRaises(TypeError, zi.get_source, 'bar') + self.assertRaises((TypeError, AttributeError), zi.get_source, 'bar') class BadFileZipImportTestCase(unittest.TestCase): diff --git a/Lib/zipimport.py b/Lib/zipimport.py new file mode 100644 index 00000000000..059f124512d --- /dev/null +++ b/Lib/zipimport.py @@ -0,0 +1,650 @@ +"""zipimport provides support for importing Python modules from Zip archives. + +This module exports three objects: +- zipimporter: a class; its constructor takes a path to a Zip archive. +- ZipImportError: exception raised by zipimporter objects. It's a + subclass of ImportError, so it can be caught as ImportError, too. +- _zip_directory_cache: a dict, mapping archive paths to zip directory + info dicts, as used in zipimporter._files. + +It is usually not needed to use the zipimport module explicitly; it is +used by the builtin import mechanism for sys.path items that are paths +to Zip archives. +""" + +#from importlib import _bootstrap_external +#from importlib import _bootstrap # for _verbose_message +import _frozen_importlib_external as _bootstrap_external +from _frozen_importlib_external import _unpack_uint16, _unpack_uint32 +import _frozen_importlib as _bootstrap # for _verbose_message +import _imp # for check_hash_based_pycs +import _io # for open +import marshal # for loads +import sys # for modules +import time # for mktime + +__all__ = ['ZipImportError', 'zipimporter'] + + +path_sep = _bootstrap_external.path_sep +alt_path_sep = _bootstrap_external.path_separators[1:] + + +class ZipImportError(ImportError): + pass + +# _read_directory() cache +_zip_directory_cache = {} + +_module_type = type(sys) + + +class zipimporter: + """zipimporter(archivepath) -> zipimporter object + + Create a new zipimporter instance. 'archivepath' must be a path to + a zipfile, or to a specific path inside a zipfile. For example, it can be + '/tmp/myimport.zip', or '/tmp/myimport.zip/mydirectory', if mydirectory is a + valid directory inside the archive. + + 'ZipImportError is raised if 'archivepath' doesn't point to a valid Zip + archive. + + The 'archive' attribute of zipimporter objects contains the name of the + zipfile targeted. + """ + + # Split the "subdirectory" from the Zip archive path, lookup a matching + # entry in sys.path_importer_cache, fetch the file directory from there + # if found, or else read it from the archive. + def __init__(self, path): + if not isinstance(path, str): + import os + path = os.fsdecode(path) + if not path: + raise ZipImportError('archive path is empty', path=path) + if alt_path_sep: + path = path.replace(alt_path_sep, path_sep) + + prefix = [] + while True: + try: + st = _bootstrap_external._path_stat(path) + except (OSError, ValueError): + # On Windows a ValueError is raised for too long paths. + # Back up one path element. + dirname, basename = _bootstrap_external._path_split(path) + if dirname == path: + raise ZipImportError('not a Zip file', path=path) + path = dirname + prefix.append(basename) + else: + # it exists + if (st.st_mode & 0o170000) != 0o100000: # stat.S_ISREG + # it's a not file + raise ZipImportError('not a Zip file', path=path) + break + + try: + files = _zip_directory_cache[path] + except KeyError: + files = _read_directory(path) + _zip_directory_cache[path] = files + self._files = files + self.archive = path + # a prefix directory following the ZIP file path. + self.prefix = _bootstrap_external._path_join(*prefix[::-1]) + if self.prefix: + self.prefix += path_sep + + + # Check whether we can satisfy the import of the module named by + # 'fullname', or whether it could be a portion of a namespace + # package. Return self if we can load it, a string containing the + # full path if it's a possible namespace portion, None if we + # can't load it. + def find_loader(self, fullname, path=None): + """find_loader(fullname, path=None) -> self, str or None. + + Search for a module specified by 'fullname'. 'fullname' must be the + fully qualified (dotted) module name. It returns the zipimporter + instance itself if the module was found, a string containing the + full path name if it's possibly a portion of a namespace package, + or None otherwise. The optional 'path' argument is ignored -- it's + there for compatibility with the importer protocol. + """ + mi = _get_module_info(self, fullname) + if mi is not None: + # This is a module or package. + return self, [] + + # Not a module or regular package. See if this is a directory, and + # therefore possibly a portion of a namespace package. + + # We're only interested in the last path component of fullname + # earlier components are recorded in self.prefix. + modpath = _get_module_path(self, fullname) + if _is_dir(self, modpath): + # This is possibly a portion of a namespace + # package. Return the string representing its path, + # without a trailing separator. + return None, [f'{self.archive}{path_sep}{modpath}'] + + return None, [] + + + # Check whether we can satisfy the import of the module named by + # 'fullname'. Return self if we can, None if we can't. + def find_module(self, fullname, path=None): + """find_module(fullname, path=None) -> self or None. + + Search for a module specified by 'fullname'. 'fullname' must be the + fully qualified (dotted) module name. It returns the zipimporter + instance itself if the module was found, or None if it wasn't. + The optional 'path' argument is ignored -- it's there for compatibility + with the importer protocol. + """ + return self.find_loader(fullname, path)[0] + + + def get_code(self, fullname): + """get_code(fullname) -> code object. + + Return the code object for the specified module. Raise ZipImportError + if the module couldn't be found. + """ + code, ispackage, modpath = _get_module_code(self, fullname) + return code + + + def get_data(self, pathname): + """get_data(pathname) -> string with file data. + + Return the data associated with 'pathname'. Raise OSError if + the file wasn't found. + """ + if alt_path_sep: + pathname = pathname.replace(alt_path_sep, path_sep) + + key = pathname + if pathname.startswith(self.archive + path_sep): + key = pathname[len(self.archive + path_sep):] + + try: + toc_entry = self._files[key] + except KeyError: + raise OSError(0, '', key) + return _get_data(self.archive, toc_entry) + + + # Return a string matching __file__ for the named module + def get_filename(self, fullname): + """get_filename(fullname) -> filename string. + + Return the filename for the specified module. + """ + # Deciding the filename requires working out where the code + # would come from if the module was actually loaded + code, ispackage, modpath = _get_module_code(self, fullname) + return modpath + + + def get_source(self, fullname): + """get_source(fullname) -> source string. + + Return the source code for the specified module. Raise ZipImportError + if the module couldn't be found, return None if the archive does + contain the module, but has no source for it. + """ + mi = _get_module_info(self, fullname) + if mi is None: + raise ZipImportError(f"can't find module {fullname!r}", name=fullname) + + path = _get_module_path(self, fullname) + if mi: + fullpath = _bootstrap_external._path_join(path, '__init__.py') + else: + fullpath = f'{path}.py' + + try: + toc_entry = self._files[fullpath] + except KeyError: + # we have the module, but no source + return None + return _get_data(self.archive, toc_entry).decode() + + + # Return a bool signifying whether the module is a package or not. + def is_package(self, fullname): + """is_package(fullname) -> bool. + + Return True if the module specified by fullname is a package. + Raise ZipImportError if the module couldn't be found. + """ + mi = _get_module_info(self, fullname) + if mi is None: + raise ZipImportError(f"can't find module {fullname!r}", name=fullname) + return mi + + + # Load and return the module named by 'fullname'. + def load_module(self, fullname): + """load_module(fullname) -> module. + + Load the module specified by 'fullname'. 'fullname' must be the + fully qualified (dotted) module name. It returns the imported + module, or raises ZipImportError if it wasn't found. + """ + code, ispackage, modpath = _get_module_code(self, fullname) + mod = sys.modules.get(fullname) + if mod is None or not isinstance(mod, _module_type): + mod = _module_type(fullname) + sys.modules[fullname] = mod + mod.__loader__ = self + + try: + if ispackage: + # add __path__ to the module *before* the code gets + # executed + path = _get_module_path(self, fullname) + fullpath = _bootstrap_external._path_join(self.archive, path) + mod.__path__ = [fullpath] + + if not hasattr(mod, '__builtins__'): + mod.__builtins__ = __builtins__ + _bootstrap_external._fix_up_module(mod.__dict__, fullname, modpath) + exec(code, mod.__dict__) + except: + del sys.modules[fullname] + raise + + try: + mod = sys.modules[fullname] + except KeyError: + raise ImportError(f'Loaded module {fullname!r} not found in sys.modules') + _bootstrap._verbose_message('import {} # loaded from Zip {}', fullname, modpath) + return mod + + + def get_resource_reader(self, fullname): + """Return the ResourceReader for a package in a zip file. + + If 'fullname' is a package within the zip file, return the + 'ResourceReader' object for the package. Otherwise return None. + """ + from importlib import resources + return resources._zipimport_get_resource_reader(self, fullname) + + + def __repr__(self): + return f'' + + +# _zip_searchorder defines how we search for a module in the Zip +# archive: we first search for a package __init__, then for +# non-package .pyc, and .py entries. The .pyc entries +# are swapped by initzipimport() if we run in optimized mode. Also, +# '/' is replaced by path_sep there. +_zip_searchorder = ( + (path_sep + '__init__.pyc', True, True), + (path_sep + '__init__.py', False, True), + ('.pyc', True, False), + ('.py', False, False), +) + +# Given a module name, return the potential file path in the +# archive (without extension). +def _get_module_path(self, fullname): + return self.prefix + fullname.rpartition('.')[2] + +# Does this path represent a directory? +def _is_dir(self, path): + # See if this is a "directory". If so, it's eligible to be part + # of a namespace package. We test by seeing if the name, with an + # appended path separator, exists. + dirpath = path + path_sep + # If dirpath is present in self._files, we have a directory. + return dirpath in self._files + +# Return some information about a module. +def _get_module_info(self, fullname): + path = _get_module_path(self, fullname) + for suffix, isbytecode, ispackage in _zip_searchorder: + fullpath = path + suffix + if fullpath in self._files: + return ispackage + return None + + +# implementation + +# _read_directory(archive) -> files dict (new reference) +# +# Given a path to a Zip archive, build a dict, mapping file names +# (local to the archive, using SEP as a separator) to toc entries. +# +# A toc_entry is a tuple: +# +# (__file__, # value to use for __file__, available for all files, +# # encoded to the filesystem encoding +# compress, # compression kind; 0 for uncompressed +# data_size, # size of compressed data on disk +# file_size, # size of decompressed data +# file_offset, # offset of file header from start of archive +# time, # mod time of file (in dos format) +# date, # mod data of file (in dos format) +# crc, # crc checksum of the data +# ) +# +# Directories can be recognized by the trailing path_sep in the name, +# data_size and file_offset are 0. +def _read_directory(archive): + try: + fp = _io.open(archive, 'rb') + except OSError: + raise ZipImportError(f"can't open Zip file: {archive!r}", path=archive) + + with fp: + try: + fp.seek(-22, 2) + header_position = fp.tell() + buffer = fp.read(22) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + if len(buffer) != 22: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + if buffer[:4] != b'PK\x05\x06': + # Bad: End of Central Dir signature + raise ZipImportError(f'not a Zip file: {archive!r}', path=archive) + + header_size = _unpack_uint32(buffer[12:16]) + header_offset = _unpack_uint32(buffer[16:20]) + if header_position < header_size: + raise ZipImportError(f'bad central directory size: {archive!r}', path=archive) + if header_position < header_offset: + raise ZipImportError(f'bad central directory offset: {archive!r}', path=archive) + header_position -= header_size + arc_offset = header_position - header_offset + if arc_offset < 0: + raise ZipImportError(f'bad central directory size or offset: {archive!r}', path=archive) + + files = {} + # Start of Central Directory + count = 0 + try: + fp.seek(header_position) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + while True: + buffer = fp.read(46) + if len(buffer) < 4: + raise EOFError('EOF read where not expected') + # Start of file header + if buffer[:4] != b'PK\x01\x02': + break # Bad: Central Dir File Header + if len(buffer) != 46: + raise EOFError('EOF read where not expected') + flags = _unpack_uint16(buffer[8:10]) + compress = _unpack_uint16(buffer[10:12]) + time = _unpack_uint16(buffer[12:14]) + date = _unpack_uint16(buffer[14:16]) + crc = _unpack_uint32(buffer[16:20]) + data_size = _unpack_uint32(buffer[20:24]) + file_size = _unpack_uint32(buffer[24:28]) + name_size = _unpack_uint16(buffer[28:30]) + extra_size = _unpack_uint16(buffer[30:32]) + comment_size = _unpack_uint16(buffer[32:34]) + file_offset = _unpack_uint32(buffer[42:46]) + header_size = name_size + extra_size + comment_size + if file_offset > header_offset: + raise ZipImportError(f'bad local header offset: {archive!r}', path=archive) + file_offset += arc_offset + + try: + name = fp.read(name_size) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + if len(name) != name_size: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + # On Windows, calling fseek to skip over the fields we don't use is + # slower than reading the data because fseek flushes stdio's + # internal buffers. See issue #8745. + try: + if len(fp.read(header_size - name_size)) != header_size - name_size: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + + if flags & 0x800: + # UTF-8 file names extension + name = name.decode() + else: + # Historical ZIP filename encoding + try: + name = name.decode('ascii') + except UnicodeDecodeError: + name = name.decode('latin1').translate(cp437_table) + + name = name.replace('/', path_sep) + path = _bootstrap_external._path_join(archive, name) + t = (path, compress, data_size, file_size, file_offset, time, date, crc) + files[name] = t + count += 1 + _bootstrap._verbose_message('zipimport: found {} names in {!r}', count, archive) + return files + +# During bootstrap, we may need to load the encodings +# package from a ZIP file. But the cp437 encoding is implemented +# in Python in the encodings package. +# +# Break out of this dependency by using the translation table for +# the cp437 encoding. +cp437_table = ( + # ASCII part, 8 rows x 16 chars + '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' + '\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' + ' !"#$%&\'()*+,-./' + '0123456789:;<=>?' + '@ABCDEFGHIJKLMNO' + 'PQRSTUVWXYZ[\\]^_' + '`abcdefghijklmno' + 'pqrstuvwxyz{|}~\x7f' + # non-ASCII part, 16 rows x 8 chars + '\xc7\xfc\xe9\xe2\xe4\xe0\xe5\xe7' + '\xea\xeb\xe8\xef\xee\xec\xc4\xc5' + '\xc9\xe6\xc6\xf4\xf6\xf2\xfb\xf9' + '\xff\xd6\xdc\xa2\xa3\xa5\u20a7\u0192' + '\xe1\xed\xf3\xfa\xf1\xd1\xaa\xba' + '\xbf\u2310\xac\xbd\xbc\xa1\xab\xbb' + '\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556' + '\u2555\u2563\u2551\u2557\u255d\u255c\u255b\u2510' + '\u2514\u2534\u252c\u251c\u2500\u253c\u255e\u255f' + '\u255a\u2554\u2569\u2566\u2560\u2550\u256c\u2567' + '\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256b' + '\u256a\u2518\u250c\u2588\u2584\u258c\u2590\u2580' + '\u03b1\xdf\u0393\u03c0\u03a3\u03c3\xb5\u03c4' + '\u03a6\u0398\u03a9\u03b4\u221e\u03c6\u03b5\u2229' + '\u2261\xb1\u2265\u2264\u2320\u2321\xf7\u2248' + '\xb0\u2219\xb7\u221a\u207f\xb2\u25a0\xa0' +) + +_importing_zlib = False + +# Return the zlib.decompress function object, or NULL if zlib couldn't +# be imported. The function is cached when found, so subsequent calls +# don't import zlib again. +def _get_decompress_func(): + global _importing_zlib + if _importing_zlib: + # Someone has a zlib.py[co] in their Zip file + # let's avoid a stack overflow. + _bootstrap._verbose_message('zipimport: zlib UNAVAILABLE') + raise ZipImportError("can't decompress data; zlib not available") + + _importing_zlib = True + try: + from zlib import decompress + except Exception: + _bootstrap._verbose_message('zipimport: zlib UNAVAILABLE') + raise ZipImportError("can't decompress data; zlib not available") + finally: + _importing_zlib = False + + _bootstrap._verbose_message('zipimport: zlib available') + return decompress + +# Given a path to a Zip file and a toc_entry, return the (uncompressed) data. +def _get_data(archive, toc_entry): + datapath, compress, data_size, file_size, file_offset, time, date, crc = toc_entry + if data_size < 0: + raise ZipImportError('negative data size') + + with _io.open(archive, 'rb') as fp: + # Check to make sure the local file header is correct + try: + fp.seek(file_offset) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + buffer = fp.read(30) + if len(buffer) != 30: + raise EOFError('EOF read where not expected') + + if buffer[:4] != b'PK\x03\x04': + # Bad: Local File Header + raise ZipImportError(f'bad local file header: {archive!r}', path=archive) + + name_size = _unpack_uint16(buffer[26:28]) + extra_size = _unpack_uint16(buffer[28:30]) + header_size = 30 + name_size + extra_size + file_offset += header_size # Start of file data + try: + fp.seek(file_offset) + except OSError: + raise ZipImportError(f"can't read Zip file: {archive!r}", path=archive) + raw_data = fp.read(data_size) + if len(raw_data) != data_size: + raise OSError("zipimport: can't read data") + + if compress == 0: + # data is not compressed + return raw_data + + # Decompress with zlib + try: + decompress = _get_decompress_func() + except Exception: + raise ZipImportError("can't decompress data; zlib not available") + return decompress(raw_data, -15) + + +# Lenient date/time comparison function. The precision of the mtime +# in the archive is lower than the mtime stored in a .pyc: we +# must allow a difference of at most one second. +def _eq_mtime(t1, t2): + # dostime only stores even seconds, so be lenient + return abs(t1 - t2) <= 1 + +# Given the contents of a .py[co] file, unmarshal the data +# and return the code object. Return None if it the magic word doesn't +# match (we do this instead of raising an exception as we fall back +# to .py if available and we don't want to mask other errors). +def _unmarshal_code(pathname, data, mtime): + if len(data) < 16: + raise ZipImportError('bad pyc data') + + if data[:4] != _bootstrap_external.MAGIC_NUMBER: + _bootstrap._verbose_message('{!r} has bad magic', pathname) + return None # signal caller to try alternative + + flags = _unpack_uint32(data[4:8]) + if flags != 0: + # Hash-based pyc. We currently refuse to handle checked hash-based + # pycs. We could validate hash-based pycs against the source, but it + # seems likely that most people putting hash-based pycs in a zipfile + # will use unchecked ones. + if (_imp.check_hash_based_pycs != 'never' and + (flags != 0x1 or _imp.check_hash_based_pycs == 'always')): + return None + elif mtime != 0 and not _eq_mtime(_unpack_uint32(data[8:12]), mtime): + _bootstrap._verbose_message('{!r} has bad mtime', pathname) + return None # signal caller to try alternative + + # XXX the pyc's size field is ignored; timestamp collisions are probably + # unimportant with zip files. + code = marshal.loads(data[16:]) + if not isinstance(code, _code_type): + raise TypeError(f'compiled module {pathname!r} is not a code object') + return code + +_code_type = type(_unmarshal_code.__code__) + + +# Replace any occurrences of '\r\n?' in the input string with '\n'. +# This converts DOS and Mac line endings to Unix line endings. +def _normalize_line_endings(source): + source = source.replace(b'\r\n', b'\n') + source = source.replace(b'\r', b'\n') + return source + +# Given a string buffer containing Python source code, compile it +# and return a code object. +def _compile_source(pathname, source): + source = _normalize_line_endings(source) + return compile(source, pathname, 'exec', dont_inherit=True) + +# Convert the date/time values found in the Zip archive to a value +# that's compatible with the time stamp stored in .pyc files. +def _parse_dostime(d, t): + return time.mktime(( + (d >> 9) + 1980, # bits 9..15: year + (d >> 5) & 0xF, # bits 5..8: month + d & 0x1F, # bits 0..4: day + t >> 11, # bits 11..15: hours + (t >> 5) & 0x3F, # bits 8..10: minutes + (t & 0x1F) * 2, # bits 0..7: seconds / 2 + -1, -1, -1)) + +# Given a path to a .pyc file in the archive, return the +# modification time of the matching .py file, or 0 if no source +# is available. +def _get_mtime_of_source(self, path): + try: + # strip 'c' or 'o' from *.py[co] + assert path[-1:] in ('c', 'o') + path = path[:-1] + toc_entry = self._files[path] + # fetch the time stamp of the .py file for comparison + # with an embedded pyc time stamp + time = toc_entry[5] + date = toc_entry[6] + return _parse_dostime(date, time) + except (KeyError, IndexError, TypeError): + return 0 + +# Get the code object associated with the module specified by +# 'fullname'. +def _get_module_code(self, fullname): + path = _get_module_path(self, fullname) + for suffix, isbytecode, ispackage in _zip_searchorder: + fullpath = path + suffix + _bootstrap._verbose_message('trying {}{}{}', self.archive, path_sep, fullpath, verbosity=2) + try: + toc_entry = self._files[fullpath] + except KeyError: + pass + else: + modpath = toc_entry[0] + data = _get_data(self.archive, toc_entry) + if isbytecode: + mtime = _get_mtime_of_source(self, fullpath) + code = _unmarshal_code(modpath, data, mtime) + else: + code = _compile_source(modpath, data) + if code is None: + # bad magic number or non-matching mtime + # in byte code, try next + continue + modpath = toc_entry[0] + return code, ispackage, modpath + else: + raise ZipImportError(f"can't find module {fullname!r}", name=fullname) diff --git a/Makefile.pre.in b/Makefile.pre.in index d60d48e5f9b..d2e7377e98d 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -713,16 +713,22 @@ Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FRO regen-importlib: Programs/_freeze_importlib # Regenerate Python/importlib_external.h # from Lib/importlib/_bootstrap_external.py using _freeze_importlib - ./Programs/_freeze_importlib \ + ./Programs/_freeze_importlib importlib._bootstrap_external \ $(srcdir)/Lib/importlib/_bootstrap_external.py \ $(srcdir)/Python/importlib_external.h.new $(UPDATE_FILE) $(srcdir)/Python/importlib_external.h $(srcdir)/Python/importlib_external.h.new # Regenerate Python/importlib.h from Lib/importlib/_bootstrap.py # using _freeze_importlib - ./Programs/_freeze_importlib \ + ./Programs/_freeze_importlib importlib._bootstrap \ $(srcdir)/Lib/importlib/_bootstrap.py \ $(srcdir)/Python/importlib.h.new $(UPDATE_FILE) $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib.h.new + # Regenerate Python/importlib_zipimport.h from Lib/zipimport.py + # using _freeze_importlib + ./Programs/_freeze_importlib zipimport \ + $(srcdir)/Lib/zipimport.py \ + $(srcdir)/Python/importlib_zipimport.h.new + $(UPDATE_FILE) $(srcdir)/Python/importlib_zipimport.h $(srcdir)/Python/importlib_zipimport.h.new ############################################################################ @@ -897,7 +903,8 @@ regen-opcode-targets: Python/ceval.o: $(srcdir)/Python/opcode_targets.h $(srcdir)/Python/ceval_gil.h -Python/frozen.o: $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib_external.h +Python/frozen.o: $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib_external.h \ + $(srcdir)/Python/importlib_zipimport.h # Generate DTrace probe macros, then rename them (PYTHON_ -> PyDTrace_) to # follow our naming conventions. dtrace(1) uses the output filename to generate diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-14-18-54-03.bpo-25711.9xfq-v.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-14-18-54-03.bpo-25711.9xfq-v.rst new file mode 100644 index 00000000000..07f9e722baf --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-14-18-54-03.bpo-25711.9xfq-v.rst @@ -0,0 +1 @@ +The :mod:`zipimport` module has been rewritten in pure Python. diff --git a/Modules/Setup b/Modules/Setup index 9787ea2d2c4..a0622cc8c64 100644 --- a/Modules/Setup +++ b/Modules/Setup @@ -125,10 +125,6 @@ _locale _localemodule.c # -lintl # Standard I/O baseline _io -DPy_BUILD_CORE -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c -# The zipimport module is always imported at startup. Having it as a -# builtin module avoids some bootstrapping problems and reduces overhead. -zipimport -DPy_BUILD_CORE zipimport.c - # faulthandler module faulthandler faulthandler.c diff --git a/Modules/clinic/zipimport.c.h b/Modules/clinic/zipimport.c.h deleted file mode 100644 index 565b0653036..00000000000 --- a/Modules/clinic/zipimport.c.h +++ /dev/null @@ -1,325 +0,0 @@ -/*[clinic input] -preserve -[clinic start generated code]*/ - -PyDoc_STRVAR(zipimport_zipimporter___init____doc__, -"zipimporter(archivepath, /)\n" -"--\n" -"\n" -"Create a new zipimporter instance.\n" -"\n" -" archivepath\n" -" A path-like object to a zipfile, or to a specific path inside\n" -" a zipfile.\n" -"\n" -"\'archivepath\' must be a path-like object to a zipfile, or to a specific path\n" -"inside a zipfile. For example, it can be \'/tmp/myimport.zip\', or\n" -"\'/tmp/myimport.zip/mydirectory\', if mydirectory is a valid directory inside\n" -"the archive.\n" -"\n" -"\'ZipImportError\' is raised if \'archivepath\' doesn\'t point to a valid Zip\n" -"archive.\n" -"\n" -"The \'archive\' attribute of the zipimporter object contains the name of the\n" -"zipfile targeted."); - -static int -zipimport_zipimporter___init___impl(ZipImporter *self, PyObject *path); - -static int -zipimport_zipimporter___init__(PyObject *self, PyObject *args, PyObject *kwargs) -{ - int return_value = -1; - PyObject *path; - - if ((Py_TYPE(self) == &ZipImporter_Type) && - !_PyArg_NoKeywords("zipimporter", kwargs)) { - goto exit; - } - if (!PyArg_ParseTuple(args, "O&:zipimporter", - PyUnicode_FSDecoder, &path)) { - goto exit; - } - return_value = zipimport_zipimporter___init___impl((ZipImporter *)self, path); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_find_module__doc__, -"find_module($self, fullname, path=None, /)\n" -"--\n" -"\n" -"Search for a module specified by \'fullname\'.\n" -"\n" -"\'fullname\' must be the fully qualified (dotted) module name. It returns the\n" -"zipimporter instance itself if the module was found, or None if it wasn\'t.\n" -"The optional \'path\' argument is ignored -- it\'s there for compatibility\n" -"with the importer protocol."); - -#define ZIPIMPORT_ZIPIMPORTER_FIND_MODULE_METHODDEF \ - {"find_module", (PyCFunction)zipimport_zipimporter_find_module, METH_FASTCALL, zipimport_zipimporter_find_module__doc__}, - -static PyObject * -zipimport_zipimporter_find_module_impl(ZipImporter *self, PyObject *fullname, - PyObject *path); - -static PyObject * -zipimport_zipimporter_find_module(ZipImporter *self, PyObject *const *args, Py_ssize_t nargs) -{ - PyObject *return_value = NULL; - PyObject *fullname; - PyObject *path = Py_None; - - if (!_PyArg_ParseStack(args, nargs, "U|O:find_module", - &fullname, &path)) { - goto exit; - } - return_value = zipimport_zipimporter_find_module_impl(self, fullname, path); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_find_loader__doc__, -"find_loader($self, fullname, path=None, /)\n" -"--\n" -"\n" -"Search for a module specified by \'fullname\'.\n" -"\n" -"\'fullname\' must be the fully qualified (dotted) module name. It returns the\n" -"zipimporter instance itself if the module was found, a string containing the\n" -"full path name if it\'s possibly a portion of a namespace package,\n" -"or None otherwise. The optional \'path\' argument is ignored -- it\'s\n" -"there for compatibility with the importer protocol."); - -#define ZIPIMPORT_ZIPIMPORTER_FIND_LOADER_METHODDEF \ - {"find_loader", (PyCFunction)zipimport_zipimporter_find_loader, METH_FASTCALL, zipimport_zipimporter_find_loader__doc__}, - -static PyObject * -zipimport_zipimporter_find_loader_impl(ZipImporter *self, PyObject *fullname, - PyObject *path); - -static PyObject * -zipimport_zipimporter_find_loader(ZipImporter *self, PyObject *const *args, Py_ssize_t nargs) -{ - PyObject *return_value = NULL; - PyObject *fullname; - PyObject *path = Py_None; - - if (!_PyArg_ParseStack(args, nargs, "U|O:find_loader", - &fullname, &path)) { - goto exit; - } - return_value = zipimport_zipimporter_find_loader_impl(self, fullname, path); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_load_module__doc__, -"load_module($self, fullname, /)\n" -"--\n" -"\n" -"Load the module specified by \'fullname\'.\n" -"\n" -"\'fullname\' must be the fully qualified (dotted) module name. It returns the\n" -"imported module, or raises ZipImportError if it wasn\'t found."); - -#define ZIPIMPORT_ZIPIMPORTER_LOAD_MODULE_METHODDEF \ - {"load_module", (PyCFunction)zipimport_zipimporter_load_module, METH_O, zipimport_zipimporter_load_module__doc__}, - -static PyObject * -zipimport_zipimporter_load_module_impl(ZipImporter *self, PyObject *fullname); - -static PyObject * -zipimport_zipimporter_load_module(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:load_module", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_load_module_impl(self, fullname); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_get_filename__doc__, -"get_filename($self, fullname, /)\n" -"--\n" -"\n" -"Return the filename for the specified module."); - -#define ZIPIMPORT_ZIPIMPORTER_GET_FILENAME_METHODDEF \ - {"get_filename", (PyCFunction)zipimport_zipimporter_get_filename, METH_O, zipimport_zipimporter_get_filename__doc__}, - -static PyObject * -zipimport_zipimporter_get_filename_impl(ZipImporter *self, - PyObject *fullname); - -static PyObject * -zipimport_zipimporter_get_filename(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:get_filename", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_get_filename_impl(self, fullname); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_is_package__doc__, -"is_package($self, fullname, /)\n" -"--\n" -"\n" -"Return True if the module specified by fullname is a package.\n" -"\n" -"Raise ZipImportError if the module couldn\'t be found."); - -#define ZIPIMPORT_ZIPIMPORTER_IS_PACKAGE_METHODDEF \ - {"is_package", (PyCFunction)zipimport_zipimporter_is_package, METH_O, zipimport_zipimporter_is_package__doc__}, - -static PyObject * -zipimport_zipimporter_is_package_impl(ZipImporter *self, PyObject *fullname); - -static PyObject * -zipimport_zipimporter_is_package(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:is_package", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_is_package_impl(self, fullname); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_get_data__doc__, -"get_data($self, pathname, /)\n" -"--\n" -"\n" -"Return the data associated with \'pathname\'.\n" -"\n" -"Raise OSError if the file was not found."); - -#define ZIPIMPORT_ZIPIMPORTER_GET_DATA_METHODDEF \ - {"get_data", (PyCFunction)zipimport_zipimporter_get_data, METH_O, zipimport_zipimporter_get_data__doc__}, - -static PyObject * -zipimport_zipimporter_get_data_impl(ZipImporter *self, PyObject *path); - -static PyObject * -zipimport_zipimporter_get_data(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *path; - - if (!PyArg_Parse(arg, "U:get_data", &path)) { - goto exit; - } - return_value = zipimport_zipimporter_get_data_impl(self, path); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_get_code__doc__, -"get_code($self, fullname, /)\n" -"--\n" -"\n" -"Return the code object for the specified module.\n" -"\n" -"Raise ZipImportError if the module couldn\'t be found."); - -#define ZIPIMPORT_ZIPIMPORTER_GET_CODE_METHODDEF \ - {"get_code", (PyCFunction)zipimport_zipimporter_get_code, METH_O, zipimport_zipimporter_get_code__doc__}, - -static PyObject * -zipimport_zipimporter_get_code_impl(ZipImporter *self, PyObject *fullname); - -static PyObject * -zipimport_zipimporter_get_code(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:get_code", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_get_code_impl(self, fullname); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_get_source__doc__, -"get_source($self, fullname, /)\n" -"--\n" -"\n" -"Return the source code for the specified module.\n" -"\n" -"Raise ZipImportError if the module couldn\'t be found, return None if the\n" -"archive does contain the module, but has no source for it."); - -#define ZIPIMPORT_ZIPIMPORTER_GET_SOURCE_METHODDEF \ - {"get_source", (PyCFunction)zipimport_zipimporter_get_source, METH_O, zipimport_zipimporter_get_source__doc__}, - -static PyObject * -zipimport_zipimporter_get_source_impl(ZipImporter *self, PyObject *fullname); - -static PyObject * -zipimport_zipimporter_get_source(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:get_source", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_get_source_impl(self, fullname); - -exit: - return return_value; -} - -PyDoc_STRVAR(zipimport_zipimporter_get_resource_reader__doc__, -"get_resource_reader($self, fullname, /)\n" -"--\n" -"\n" -"Return the ResourceReader for a package in a zip file.\n" -"\n" -"If \'fullname\' is a package within the zip file, return the \'ResourceReader\'\n" -"object for the package. Otherwise return None."); - -#define ZIPIMPORT_ZIPIMPORTER_GET_RESOURCE_READER_METHODDEF \ - {"get_resource_reader", (PyCFunction)zipimport_zipimporter_get_resource_reader, METH_O, zipimport_zipimporter_get_resource_reader__doc__}, - -static PyObject * -zipimport_zipimporter_get_resource_reader_impl(ZipImporter *self, - PyObject *fullname); - -static PyObject * -zipimport_zipimporter_get_resource_reader(ZipImporter *self, PyObject *arg) -{ - PyObject *return_value = NULL; - PyObject *fullname; - - if (!PyArg_Parse(arg, "U:get_resource_reader", &fullname)) { - goto exit; - } - return_value = zipimport_zipimporter_get_resource_reader_impl(self, fullname); - -exit: - return return_value; -} -/*[clinic end generated code: output=0b57adfe21373512 input=a9049054013a1b77]*/ diff --git a/Modules/zipimport.c b/Modules/zipimport.c deleted file mode 100644 index 4df4ba9f8b8..00000000000 --- a/Modules/zipimport.c +++ /dev/null @@ -1,1664 +0,0 @@ -#include "Python.h" -#include "internal/pystate.h" -#include "structmember.h" -#include "osdefs.h" -#include "marshal.h" -#include - - -#define IS_SOURCE 0x0 -#define IS_BYTECODE 0x1 -#define IS_PACKAGE 0x2 - -struct st_zip_searchorder { - char suffix[14]; - int type; -}; - -#ifdef ALTSEP -_Py_IDENTIFIER(replace); -#endif - -/* zip_searchorder defines how we search for a module in the Zip - archive: we first search for a package __init__, then for - non-package .pyc, and .py entries. The .pyc entries - are swapped by initzipimport() if we run in optimized mode. Also, - '/' is replaced by SEP there. */ -static struct st_zip_searchorder zip_searchorder[] = { - {"/__init__.pyc", IS_PACKAGE | IS_BYTECODE}, - {"/__init__.py", IS_PACKAGE | IS_SOURCE}, - {".pyc", IS_BYTECODE}, - {".py", IS_SOURCE}, - {"", 0} -}; - -/* zipimporter object definition and support */ - -typedef struct _zipimporter ZipImporter; - -struct _zipimporter { - PyObject_HEAD - PyObject *archive; /* pathname of the Zip archive, - decoded from the filesystem encoding */ - PyObject *prefix; /* file prefix: "a/sub/directory/", - encoded to the filesystem encoding */ - PyObject *files; /* dict with file info {path: toc_entry} */ -}; - -static PyObject *ZipImportError; -/* read_directory() cache */ -static PyObject *zip_directory_cache = NULL; - -/* forward decls */ -static PyObject *read_directory(PyObject *archive); -static PyObject *get_data(PyObject *archive, PyObject *toc_entry); -static PyObject *get_module_code(ZipImporter *self, PyObject *fullname, - int *p_ispackage, PyObject **p_modpath); - -static PyTypeObject ZipImporter_Type; - -#define ZipImporter_Check(op) PyObject_TypeCheck(op, &ZipImporter_Type) - -/*[clinic input] -module zipimport -class zipimport.zipimporter "ZipImporter *" "&ZipImporter_Type" -[clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=9db8b61557d911e7]*/ -#include "clinic/zipimport.c.h" - - -/* zipimporter.__init__ - Split the "subdirectory" from the Zip archive path, lookup a matching - entry in sys.path_importer_cache, fetch the file directory from there - if found, or else read it from the archive. */ - -/*[clinic input] -zipimport.zipimporter.__init__ - - archivepath as path: object(converter="PyUnicode_FSDecoder") - A path-like object to a zipfile, or to a specific path inside - a zipfile. - / - -Create a new zipimporter instance. - -'archivepath' must be a path-like object to a zipfile, or to a specific path -inside a zipfile. For example, it can be '/tmp/myimport.zip', or -'/tmp/myimport.zip/mydirectory', if mydirectory is a valid directory inside -the archive. - -'ZipImportError' is raised if 'archivepath' doesn't point to a valid Zip -archive. - -The 'archive' attribute of the zipimporter object contains the name of the -zipfile targeted. - -[clinic start generated code]*/ - -static int -zipimport_zipimporter___init___impl(ZipImporter *self, PyObject *path) -/*[clinic end generated code: output=141558fefdb46dc8 input=92b9ebeed1f6a704]*/ -{ - PyObject *files, *tmp; - PyObject *filename = NULL; - Py_ssize_t len, flen; - - if (PyUnicode_READY(path) == -1) - return -1; - - len = PyUnicode_GET_LENGTH(path); - if (len == 0) { - PyErr_SetString(ZipImportError, "archive path is empty"); - goto error; - } - -#ifdef ALTSEP - tmp = _PyObject_CallMethodId(path, &PyId_replace, "CC", ALTSEP, SEP); - if (!tmp) - goto error; - Py_DECREF(path); - path = tmp; -#endif - - filename = path; - Py_INCREF(filename); - flen = len; - for (;;) { - struct stat statbuf; - int rv; - - rv = _Py_stat(filename, &statbuf); - if (rv == -2) - goto error; - if (rv == 0) { - /* it exists */ - if (!S_ISREG(statbuf.st_mode)) - /* it's a not file */ - Py_CLEAR(filename); - break; - } - Py_CLEAR(filename); - /* back up one path element */ - flen = PyUnicode_FindChar(path, SEP, 0, flen, -1); - if (flen == -1) - break; - filename = PyUnicode_Substring(path, 0, flen); - if (filename == NULL) - goto error; - } - if (filename == NULL) { - PyErr_SetString(ZipImportError, "not a Zip file"); - goto error; - } - - if (PyUnicode_READY(filename) < 0) - goto error; - - files = PyDict_GetItem(zip_directory_cache, filename); - if (files == NULL) { - files = read_directory(filename); - if (files == NULL) - goto error; - if (PyDict_SetItem(zip_directory_cache, filename, files) != 0) - goto error; - } - else - Py_INCREF(files); - Py_XSETREF(self->files, files); - - /* Transfer reference */ - Py_XSETREF(self->archive, filename); - filename = NULL; - - /* Check if there is a prefix directory following the filename. */ - if (flen != len) { - tmp = PyUnicode_Substring(path, flen+1, - PyUnicode_GET_LENGTH(path)); - if (tmp == NULL) - goto error; - Py_XSETREF(self->prefix, tmp); - if (PyUnicode_READ_CHAR(path, len-1) != SEP) { - /* add trailing SEP */ - tmp = PyUnicode_FromFormat("%U%c", self->prefix, SEP); - if (tmp == NULL) - goto error; - Py_SETREF(self->prefix, tmp); - } - } - else { - Py_XSETREF(self->prefix, PyUnicode_New(0, 0)); - } - Py_DECREF(path); - return 0; - -error: - Py_DECREF(path); - Py_XDECREF(filename); - return -1; -} - -/* GC support. */ -static int -zipimporter_traverse(PyObject *obj, visitproc visit, void *arg) -{ - ZipImporter *self = (ZipImporter *)obj; - Py_VISIT(self->files); - return 0; -} - -static void -zipimporter_dealloc(ZipImporter *self) -{ - PyObject_GC_UnTrack(self); - Py_XDECREF(self->archive); - Py_XDECREF(self->prefix); - Py_XDECREF(self->files); - Py_TYPE(self)->tp_free((PyObject *)self); -} - -static PyObject * -zipimporter_repr(ZipImporter *self) -{ - if (self->archive == NULL) - return PyUnicode_FromString(""); - else if (self->prefix != NULL && PyUnicode_GET_LENGTH(self->prefix) != 0) - return PyUnicode_FromFormat("", - self->archive, SEP, self->prefix); - else - return PyUnicode_FromFormat("", - self->archive); -} - -/* return fullname.split(".")[-1] */ -static PyObject * -get_subname(PyObject *fullname) -{ - Py_ssize_t len, dot; - if (PyUnicode_READY(fullname) < 0) - return NULL; - len = PyUnicode_GET_LENGTH(fullname); - dot = PyUnicode_FindChar(fullname, '.', 0, len, -1); - if (dot == -1) { - Py_INCREF(fullname); - return fullname; - } else - return PyUnicode_Substring(fullname, dot+1, len); -} - -/* Given a (sub)modulename, write the potential file path in the - archive (without extension) to the path buffer. Return the - length of the resulting string. - - return self.prefix + name.replace('.', os.sep) */ -static PyObject* -make_filename(PyObject *prefix, PyObject *name) -{ - PyObject *pathobj; - Py_UCS4 *p, *buf; - Py_ssize_t len; - - len = PyUnicode_GET_LENGTH(prefix) + PyUnicode_GET_LENGTH(name) + 1; - p = buf = PyMem_New(Py_UCS4, len); - if (buf == NULL) { - PyErr_NoMemory(); - return NULL; - } - - if (!PyUnicode_AsUCS4(prefix, p, len, 0)) { - PyMem_Free(buf); - return NULL; - } - p += PyUnicode_GET_LENGTH(prefix); - len -= PyUnicode_GET_LENGTH(prefix); - if (!PyUnicode_AsUCS4(name, p, len, 1)) { - PyMem_Free(buf); - return NULL; - } - for (; *p; p++) { - if (*p == '.') - *p = SEP; - } - pathobj = PyUnicode_FromKindAndData(PyUnicode_4BYTE_KIND, - buf, p-buf); - PyMem_Free(buf); - return pathobj; -} - -enum zi_module_info { - MI_ERROR, - MI_NOT_FOUND, - MI_MODULE, - MI_PACKAGE -}; - -/* Does this path represent a directory? - on error, return < 0 - if not a dir, return 0 - if a dir, return 1 -*/ -static int -check_is_directory(ZipImporter *self, PyObject* prefix, PyObject *path) -{ - PyObject *dirpath; - int res; - - /* See if this is a "directory". If so, it's eligible to be part - of a namespace package. We test by seeing if the name, with an - appended path separator, exists. */ - dirpath = PyUnicode_FromFormat("%U%U%c", prefix, path, SEP); - if (dirpath == NULL) - return -1; - /* If dirpath is present in self->files, we have a directory. */ - res = PyDict_Contains(self->files, dirpath); - Py_DECREF(dirpath); - return res; -} - -/* Return some information about a module. */ -static enum zi_module_info -get_module_info(ZipImporter *self, PyObject *fullname) -{ - PyObject *subname; - PyObject *path, *fullpath, *item; - struct st_zip_searchorder *zso; - - if (self->prefix == NULL) { - PyErr_SetString(PyExc_ValueError, - "zipimporter.__init__() wasn't called"); - return MI_ERROR; - } - - subname = get_subname(fullname); - if (subname == NULL) - return MI_ERROR; - - path = make_filename(self->prefix, subname); - Py_DECREF(subname); - if (path == NULL) - return MI_ERROR; - - for (zso = zip_searchorder; *zso->suffix; zso++) { - fullpath = PyUnicode_FromFormat("%U%s", path, zso->suffix); - if (fullpath == NULL) { - Py_DECREF(path); - return MI_ERROR; - } - item = PyDict_GetItem(self->files, fullpath); - Py_DECREF(fullpath); - if (item != NULL) { - Py_DECREF(path); - if (zso->type & IS_PACKAGE) - return MI_PACKAGE; - else - return MI_MODULE; - } - } - Py_DECREF(path); - return MI_NOT_FOUND; -} - -typedef enum { - FL_ERROR = -1, /* error */ - FL_NOT_FOUND, /* no loader or namespace portions found */ - FL_MODULE_FOUND, /* module/package found */ - FL_NS_FOUND /* namespace portion found: */ - /* *namespace_portion will point to the name */ -} find_loader_result; - -/* The guts of "find_loader" and "find_module". -*/ -static find_loader_result -find_loader(ZipImporter *self, PyObject *fullname, PyObject **namespace_portion) -{ - enum zi_module_info mi; - - *namespace_portion = NULL; - - mi = get_module_info(self, fullname); - if (mi == MI_ERROR) - return FL_ERROR; - if (mi == MI_NOT_FOUND) { - /* Not a module or regular package. See if this is a directory, and - therefore possibly a portion of a namespace package. */ - find_loader_result result = FL_NOT_FOUND; - PyObject *subname; - int is_dir; - - /* We're only interested in the last path component of fullname; - earlier components are recorded in self->prefix. */ - subname = get_subname(fullname); - if (subname == NULL) { - return FL_ERROR; - } - - is_dir = check_is_directory(self, self->prefix, subname); - if (is_dir < 0) - result = FL_ERROR; - else if (is_dir) { - /* This is possibly a portion of a namespace - package. Return the string representing its path, - without a trailing separator. */ - *namespace_portion = PyUnicode_FromFormat("%U%c%U%U", - self->archive, SEP, - self->prefix, subname); - if (*namespace_portion == NULL) - result = FL_ERROR; - else - result = FL_NS_FOUND; - } - Py_DECREF(subname); - return result; - } - /* This is a module or package. */ - return FL_MODULE_FOUND; -} - -/*[clinic input] -zipimport.zipimporter.find_module - - fullname: unicode - path: object = None - / - -Search for a module specified by 'fullname'. - -'fullname' must be the fully qualified (dotted) module name. It returns the -zipimporter instance itself if the module was found, or None if it wasn't. -The optional 'path' argument is ignored -- it's there for compatibility -with the importer protocol. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_find_module_impl(ZipImporter *self, PyObject *fullname, - PyObject *path) -/*[clinic end generated code: output=506087f609466dc7 input=e3528520e075063f]*/ -{ - PyObject *namespace_portion = NULL; - PyObject *result = NULL; - - switch (find_loader(self, fullname, &namespace_portion)) { - case FL_ERROR: - return NULL; - case FL_NS_FOUND: - /* A namespace portion is not allowed via find_module, so return None. */ - Py_DECREF(namespace_portion); - /* FALL THROUGH */ - case FL_NOT_FOUND: - result = Py_None; - break; - case FL_MODULE_FOUND: - result = (PyObject *)self; - break; - default: - PyErr_BadInternalCall(); - return NULL; - } - Py_INCREF(result); - return result; -} - - -/*[clinic input] -zipimport.zipimporter.find_loader - - fullname: unicode - path: object = None - / - -Search for a module specified by 'fullname'. - -'fullname' must be the fully qualified (dotted) module name. It returns the -zipimporter instance itself if the module was found, a string containing the -full path name if it's possibly a portion of a namespace package, -or None otherwise. The optional 'path' argument is ignored -- it's -there for compatibility with the importer protocol. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_find_loader_impl(ZipImporter *self, PyObject *fullname, - PyObject *path) -/*[clinic end generated code: output=601599a43bc0f49a input=dc73f275b0d5be23]*/ -{ - PyObject *result = NULL; - PyObject *namespace_portion = NULL; - - switch (find_loader(self, fullname, &namespace_portion)) { - case FL_ERROR: - return NULL; - case FL_NOT_FOUND: /* Not found, return (None, []) */ - result = Py_BuildValue("O[]", Py_None); - break; - case FL_MODULE_FOUND: /* Return (self, []) */ - result = Py_BuildValue("O[]", self); - break; - case FL_NS_FOUND: /* Return (None, [namespace_portion]) */ - result = Py_BuildValue("O[O]", Py_None, namespace_portion); - Py_DECREF(namespace_portion); - return result; - default: - PyErr_BadInternalCall(); - return NULL; - } - return result; -} - -/*[clinic input] -zipimport.zipimporter.load_module - - fullname: unicode - / - -Load the module specified by 'fullname'. - -'fullname' must be the fully qualified (dotted) module name. It returns the -imported module, or raises ZipImportError if it wasn't found. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_load_module_impl(ZipImporter *self, PyObject *fullname) -/*[clinic end generated code: output=7303cebf88d47953 input=c236e2e8621f04ef]*/ -{ - PyObject *code = NULL, *mod, *dict; - PyObject *modpath = NULL; - int ispackage; - - if (PyUnicode_READY(fullname) == -1) - return NULL; - - code = get_module_code(self, fullname, &ispackage, &modpath); - if (code == NULL) - goto error; - - mod = PyImport_AddModuleObject(fullname); - if (mod == NULL) - goto error; - dict = PyModule_GetDict(mod); - - /* mod.__loader__ = self */ - if (PyDict_SetItemString(dict, "__loader__", (PyObject *)self) != 0) - goto error; - - if (ispackage) { - /* add __path__ to the module *before* the code gets - executed */ - PyObject *pkgpath, *fullpath, *subname; - int err; - - subname = get_subname(fullname); - if (subname == NULL) - goto error; - - fullpath = PyUnicode_FromFormat("%U%c%U%U", - self->archive, SEP, - self->prefix, subname); - Py_DECREF(subname); - if (fullpath == NULL) - goto error; - - pkgpath = Py_BuildValue("[N]", fullpath); - if (pkgpath == NULL) - goto error; - err = PyDict_SetItemString(dict, "__path__", pkgpath); - Py_DECREF(pkgpath); - if (err != 0) - goto error; - } - mod = PyImport_ExecCodeModuleObject(fullname, code, modpath, NULL); - Py_CLEAR(code); - if (mod == NULL) - goto error; - - if (Py_VerboseFlag) - PySys_FormatStderr("import %U # loaded from Zip %U\n", - fullname, modpath); - Py_DECREF(modpath); - return mod; -error: - Py_XDECREF(code); - Py_XDECREF(modpath); - return NULL; -} - -/*[clinic input] -zipimport.zipimporter.get_filename - - fullname: unicode - / - -Return the filename for the specified module. -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_get_filename_impl(ZipImporter *self, - PyObject *fullname) -/*[clinic end generated code: output=c5b92b58bea86506 input=28d2eb57e4f25c8a]*/ -{ - PyObject *code, *modpath; - int ispackage; - - /* Deciding the filename requires working out where the code - would come from if the module was actually loaded */ - code = get_module_code(self, fullname, &ispackage, &modpath); - if (code == NULL) - return NULL; - Py_DECREF(code); /* Only need the path info */ - - return modpath; -} - -/*[clinic input] -zipimport.zipimporter.is_package - - fullname: unicode - / - -Return True if the module specified by fullname is a package. - -Raise ZipImportError if the module couldn't be found. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_is_package_impl(ZipImporter *self, PyObject *fullname) -/*[clinic end generated code: output=c32958c2a5216ae6 input=a7ba752f64345062]*/ -{ - enum zi_module_info mi; - - mi = get_module_info(self, fullname); - if (mi == MI_ERROR) - return NULL; - if (mi == MI_NOT_FOUND) { - PyErr_Format(ZipImportError, "can't find module %R", fullname); - return NULL; - } - return PyBool_FromLong(mi == MI_PACKAGE); -} - - -/*[clinic input] -zipimport.zipimporter.get_data - - pathname as path: unicode - / - -Return the data associated with 'pathname'. - -Raise OSError if the file was not found. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_get_data_impl(ZipImporter *self, PyObject *path) -/*[clinic end generated code: output=65dc506aaa268436 input=fa6428b74843c4ae]*/ -{ - PyObject *key; - PyObject *toc_entry; - Py_ssize_t path_start, path_len, len; - - if (self->archive == NULL) { - PyErr_SetString(PyExc_ValueError, - "zipimporter.__init__() wasn't called"); - return NULL; - } - -#ifdef ALTSEP - path = _PyObject_CallMethodId((PyObject *)&PyUnicode_Type, &PyId_replace, - "OCC", path, ALTSEP, SEP); - if (!path) - return NULL; -#else - Py_INCREF(path); -#endif - if (PyUnicode_READY(path) == -1) - goto error; - - path_len = PyUnicode_GET_LENGTH(path); - - len = PyUnicode_GET_LENGTH(self->archive); - path_start = 0; - if (PyUnicode_Tailmatch(path, self->archive, 0, len, -1) - && PyUnicode_READ_CHAR(path, len) == SEP) { - path_start = len + 1; - } - - key = PyUnicode_Substring(path, path_start, path_len); - if (key == NULL) - goto error; - toc_entry = PyDict_GetItem(self->files, key); - if (toc_entry == NULL) { - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, key); - Py_DECREF(key); - goto error; - } - Py_DECREF(key); - Py_DECREF(path); - return get_data(self->archive, toc_entry); - error: - Py_DECREF(path); - return NULL; -} - -/*[clinic input] -zipimport.zipimporter.get_code - - fullname: unicode - / - -Return the code object for the specified module. - -Raise ZipImportError if the module couldn't be found. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_get_code_impl(ZipImporter *self, PyObject *fullname) -/*[clinic end generated code: output=b923c37fa99cbac4 input=2761412bc37f3549]*/ -{ - return get_module_code(self, fullname, NULL, NULL); -} - -/*[clinic input] -zipimport.zipimporter.get_source - - fullname: unicode - / - -Return the source code for the specified module. - -Raise ZipImportError if the module couldn't be found, return None if the -archive does contain the module, but has no source for it. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_get_source_impl(ZipImporter *self, PyObject *fullname) -/*[clinic end generated code: output=bc059301b0c33729 input=4e4b186f2e690716]*/ -{ - PyObject *toc_entry; - PyObject *subname, *path, *fullpath; - enum zi_module_info mi; - - mi = get_module_info(self, fullname); - if (mi == MI_ERROR) - return NULL; - if (mi == MI_NOT_FOUND) { - PyErr_Format(ZipImportError, "can't find module %R", fullname); - return NULL; - } - - subname = get_subname(fullname); - if (subname == NULL) - return NULL; - - path = make_filename(self->prefix, subname); - Py_DECREF(subname); - if (path == NULL) - return NULL; - - if (mi == MI_PACKAGE) - fullpath = PyUnicode_FromFormat("%U%c__init__.py", path, SEP); - else - fullpath = PyUnicode_FromFormat("%U.py", path); - Py_DECREF(path); - if (fullpath == NULL) - return NULL; - - toc_entry = PyDict_GetItem(self->files, fullpath); - Py_DECREF(fullpath); - if (toc_entry != NULL) { - PyObject *res, *bytes; - bytes = get_data(self->archive, toc_entry); - if (bytes == NULL) - return NULL; - res = PyUnicode_FromStringAndSize(PyBytes_AS_STRING(bytes), - PyBytes_GET_SIZE(bytes)); - Py_DECREF(bytes); - return res; - } - - /* we have the module, but no source */ - Py_RETURN_NONE; -} - -/*[clinic input] -zipimport.zipimporter.get_resource_reader - - fullname: unicode - / - -Return the ResourceReader for a package in a zip file. - -If 'fullname' is a package within the zip file, return the 'ResourceReader' -object for the package. Otherwise return None. - -[clinic start generated code]*/ - -static PyObject * -zipimport_zipimporter_get_resource_reader_impl(ZipImporter *self, - PyObject *fullname) -/*[clinic end generated code: output=5e367d431f830726 input=bfab94d736e99151]*/ -{ - PyObject *module = PyImport_ImportModule("importlib.resources"); - if (module == NULL) { - return NULL; - } - PyObject *retval = PyObject_CallMethod( - module, "_zipimport_get_resource_reader", - "OO", (PyObject *)self, fullname); - Py_DECREF(module); - return retval; -} - - -static PyMethodDef zipimporter_methods[] = { - ZIPIMPORT_ZIPIMPORTER_FIND_MODULE_METHODDEF - ZIPIMPORT_ZIPIMPORTER_FIND_LOADER_METHODDEF - ZIPIMPORT_ZIPIMPORTER_LOAD_MODULE_METHODDEF - ZIPIMPORT_ZIPIMPORTER_GET_FILENAME_METHODDEF - ZIPIMPORT_ZIPIMPORTER_IS_PACKAGE_METHODDEF - ZIPIMPORT_ZIPIMPORTER_GET_DATA_METHODDEF - ZIPIMPORT_ZIPIMPORTER_GET_CODE_METHODDEF - ZIPIMPORT_ZIPIMPORTER_GET_SOURCE_METHODDEF - ZIPIMPORT_ZIPIMPORTER_GET_RESOURCE_READER_METHODDEF - {NULL, NULL} /* sentinel */ -}; - -static PyMemberDef zipimporter_members[] = { - {"archive", T_OBJECT, offsetof(ZipImporter, archive), READONLY}, - {"prefix", T_OBJECT, offsetof(ZipImporter, prefix), READONLY}, - {"_files", T_OBJECT, offsetof(ZipImporter, files), READONLY}, - {NULL} -}; - -#define DEFERRED_ADDRESS(ADDR) 0 - -static PyTypeObject ZipImporter_Type = { - PyVarObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type), 0) - "zipimport.zipimporter", - sizeof(ZipImporter), - 0, /* tp_itemsize */ - (destructor)zipimporter_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - (reprfunc)zipimporter_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - PyObject_GenericGetAttr, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | - Py_TPFLAGS_HAVE_GC, /* tp_flags */ - zipimport_zipimporter___init____doc__, /* tp_doc */ - zipimporter_traverse, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - zipimporter_methods, /* tp_methods */ - zipimporter_members, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)zipimport_zipimporter___init__, /* tp_init */ - PyType_GenericAlloc, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ - PyObject_GC_Del, /* tp_free */ -}; - - -/* implementation */ - -/* Given a buffer, return the unsigned int that is represented by the first - 4 bytes, encoded as little endian. This partially reimplements - marshal.c:r_long() */ -static unsigned int -get_uint32(const unsigned char *buf) -{ - unsigned int x; - x = buf[0]; - x |= (unsigned int)buf[1] << 8; - x |= (unsigned int)buf[2] << 16; - x |= (unsigned int)buf[3] << 24; - return x; -} - -/* Given a buffer, return the unsigned int that is represented by the first - 2 bytes, encoded as little endian. This partially reimplements - marshal.c:r_short() */ -static unsigned short -get_uint16(const unsigned char *buf) -{ - unsigned short x; - x = buf[0]; - x |= (unsigned short)buf[1] << 8; - return x; -} - -static void -set_file_error(PyObject *archive, int eof) -{ - if (eof) { - PyErr_SetString(PyExc_EOFError, "EOF read where not expected"); - } - else { - PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, archive); - } -} - -/* - read_directory(archive) -> files dict (new reference) - - Given a path to a Zip archive, build a dict, mapping file names - (local to the archive, using SEP as a separator) to toc entries. - - A toc_entry is a tuple: - - (__file__, # value to use for __file__, available for all files, - # encoded to the filesystem encoding - compress, # compression kind; 0 for uncompressed - data_size, # size of compressed data on disk - file_size, # size of decompressed data - file_offset, # offset of file header from start of archive - time, # mod time of file (in dos format) - date, # mod data of file (in dos format) - crc, # crc checksum of the data - ) - - Directories can be recognized by the trailing SEP in the name, - data_size and file_offset are 0. -*/ -static PyObject * -read_directory(PyObject *archive) -{ - PyObject *files = NULL; - FILE *fp; - unsigned short flags, compress, time, date, name_size; - unsigned int crc, data_size, file_size, header_size, header_offset; - unsigned long file_offset, header_position; - unsigned long arc_offset; /* Absolute offset to start of the zip-archive. */ - unsigned int count, i; - unsigned char buffer[46]; - char name[MAXPATHLEN + 5]; - PyObject *nameobj = NULL; - PyObject *path; - const char *charset; - int bootstrap; - const char *errmsg = NULL; - - fp = _Py_fopen_obj(archive, "rb"); - if (fp == NULL) { - if (PyErr_ExceptionMatches(PyExc_OSError)) { - _PyErr_FormatFromCause(ZipImportError, - "can't open Zip file: %R", archive); - } - return NULL; - } - - if (fseek(fp, -22, SEEK_END) == -1) { - goto file_error; - } - header_position = (unsigned long)ftell(fp); - if (header_position == (unsigned long)-1) { - goto file_error; - } - assert(header_position <= (unsigned long)LONG_MAX); - if (fread(buffer, 1, 22, fp) != 22) { - goto file_error; - } - if (get_uint32(buffer) != 0x06054B50u) { - /* Bad: End of Central Dir signature */ - errmsg = "not a Zip file"; - goto invalid_header; - } - - header_size = get_uint32(buffer + 12); - header_offset = get_uint32(buffer + 16); - if (header_position < header_size) { - errmsg = "bad central directory size"; - goto invalid_header; - } - if (header_position < header_offset) { - errmsg = "bad central directory offset"; - goto invalid_header; - } - if (header_position - header_size < header_offset) { - errmsg = "bad central directory size or offset"; - goto invalid_header; - } - header_position -= header_size; - arc_offset = header_position - header_offset; - - files = PyDict_New(); - if (files == NULL) { - goto error; - } - /* Start of Central Directory */ - count = 0; - if (fseek(fp, (long)header_position, 0) == -1) { - goto file_error; - } - for (;;) { - PyObject *t; - size_t n; - int err; - - n = fread(buffer, 1, 46, fp); - if (n < 4) { - goto eof_error; - } - /* Start of file header */ - if (get_uint32(buffer) != 0x02014B50u) { - break; /* Bad: Central Dir File Header */ - } - if (n != 46) { - goto eof_error; - } - flags = get_uint16(buffer + 8); - compress = get_uint16(buffer + 10); - time = get_uint16(buffer + 12); - date = get_uint16(buffer + 14); - crc = get_uint32(buffer + 16); - data_size = get_uint32(buffer + 20); - file_size = get_uint32(buffer + 24); - name_size = get_uint16(buffer + 28); - header_size = (unsigned int)name_size + - get_uint16(buffer + 30) /* extra field */ + - get_uint16(buffer + 32) /* comment */; - - file_offset = get_uint32(buffer + 42); - if (file_offset > header_offset) { - errmsg = "bad local header offset"; - goto invalid_header; - } - file_offset += arc_offset; - - if (name_size > MAXPATHLEN) { - name_size = MAXPATHLEN; - } - if (fread(name, 1, name_size, fp) != name_size) { - goto file_error; - } - name[name_size] = '\0'; /* Add terminating null byte */ -#if SEP != '/' - for (i = 0; i < name_size; i++) { - if (name[i] == '/') { - name[i] = SEP; - } - } -#endif - /* Skip the rest of the header. - * On Windows, calling fseek to skip over the fields we don't use is - * slower than reading the data because fseek flushes stdio's - * internal buffers. See issue #8745. */ - assert(header_size <= 3*0xFFFFu); - for (i = name_size; i < header_size; i++) { - if (getc(fp) == EOF) { - goto file_error; - } - } - - bootstrap = 0; - if (flags & 0x0800) { - charset = "utf-8"; - } - else if (!_PyInterpreterState_Get()->codecs_initialized) { - /* During bootstrap, we may need to load the encodings - package from a ZIP file. But the cp437 encoding is implemented - in Python in the encodings package. - - Break out of this dependency by assuming that the path to - the encodings module is ASCII-only. */ - charset = "ascii"; - bootstrap = 1; - } - else { - charset = "cp437"; - } - nameobj = PyUnicode_Decode(name, name_size, charset, NULL); - if (nameobj == NULL) { - if (bootstrap) { - PyErr_Format(PyExc_NotImplementedError, - "bootstrap issue: python%i%i.zip contains non-ASCII " - "filenames without the unicode flag", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - } - goto error; - } - if (PyUnicode_READY(nameobj) == -1) { - goto error; - } - path = PyUnicode_FromFormat("%U%c%U", archive, SEP, nameobj); - if (path == NULL) { - goto error; - } - t = Py_BuildValue("NHIIkHHI", path, compress, data_size, - file_size, file_offset, time, date, crc); - if (t == NULL) { - goto error; - } - err = PyDict_SetItem(files, nameobj, t); - Py_CLEAR(nameobj); - Py_DECREF(t); - if (err != 0) { - goto error; - } - count++; - } - fclose(fp); - if (Py_VerboseFlag) { - PySys_FormatStderr("# zipimport: found %u names in %R\n", - count, archive); - } - return files; - -eof_error: - set_file_error(archive, !ferror(fp)); - goto error; - -file_error: - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - goto error; - -invalid_header: - assert(errmsg != NULL); - PyErr_Format(ZipImportError, "%s: %R", errmsg, archive); - goto error; - -error: - fclose(fp); - Py_XDECREF(files); - Py_XDECREF(nameobj); - return NULL; -} - -/* Return the zlib.decompress function object, or NULL if zlib couldn't - be imported. The function is cached when found, so subsequent calls - don't import zlib again. */ -static PyObject * -get_decompress_func(void) -{ - static int importing_zlib = 0; - PyObject *zlib; - PyObject *decompress; - _Py_IDENTIFIER(decompress); - - if (importing_zlib != 0) - /* Someone has a zlib.pyc in their Zip file; - let's avoid a stack overflow. */ - return NULL; - importing_zlib = 1; - zlib = PyImport_ImportModuleNoBlock("zlib"); - importing_zlib = 0; - if (zlib != NULL) { - decompress = _PyObject_GetAttrId(zlib, - &PyId_decompress); - Py_DECREF(zlib); - } - else { - PyErr_Clear(); - decompress = NULL; - } - if (Py_VerboseFlag) - PySys_WriteStderr("# zipimport: zlib %s\n", - zlib != NULL ? "available": "UNAVAILABLE"); - return decompress; -} - -/* Given a path to a Zip file and a toc_entry, return the (uncompressed) - data as a new reference. */ -static PyObject * -get_data(PyObject *archive, PyObject *toc_entry) -{ - PyObject *raw_data = NULL, *data, *decompress; - char *buf; - FILE *fp; - PyObject *datapath; - unsigned short compress, time, date; - unsigned int crc; - Py_ssize_t data_size, file_size, bytes_size; - long file_offset, header_size; - unsigned char buffer[30]; - const char *errmsg = NULL; - - if (!PyArg_ParseTuple(toc_entry, "OHnnlHHI", &datapath, &compress, - &data_size, &file_size, &file_offset, &time, - &date, &crc)) { - return NULL; - } - if (data_size < 0) { - PyErr_Format(ZipImportError, "negative data size"); - return NULL; - } - - fp = _Py_fopen_obj(archive, "rb"); - if (!fp) { - return NULL; - } - /* Check to make sure the local file header is correct */ - if (fseek(fp, file_offset, 0) == -1) { - goto file_error; - } - if (fread(buffer, 1, 30, fp) != 30) { - goto eof_error; - } - if (get_uint32(buffer) != 0x04034B50u) { - /* Bad: Local File Header */ - errmsg = "bad local file header"; - goto invalid_header; - } - - header_size = (unsigned int)30 + - get_uint16(buffer + 26) /* file name */ + - get_uint16(buffer + 28) /* extra field */; - if (file_offset > LONG_MAX - header_size) { - errmsg = "bad local file header size"; - goto invalid_header; - } - file_offset += header_size; /* Start of file data */ - - if (data_size > LONG_MAX - 1) { - fclose(fp); - PyErr_NoMemory(); - return NULL; - } - bytes_size = compress == 0 ? data_size : data_size + 1; - if (bytes_size == 0) { - bytes_size++; - } - raw_data = PyBytes_FromStringAndSize((char *)NULL, bytes_size); - if (raw_data == NULL) { - goto error; - } - buf = PyBytes_AsString(raw_data); - - if (fseek(fp, file_offset, 0) == -1) { - goto file_error; - } - if (fread(buf, 1, data_size, fp) != (size_t)data_size) { - PyErr_SetString(PyExc_OSError, - "zipimport: can't read data"); - goto error; - } - - fclose(fp); - fp = NULL; - - if (compress != 0) { - buf[data_size] = 'Z'; /* saw this in zipfile.py */ - data_size++; - } - buf[data_size] = '\0'; - - if (compress == 0) { /* data is not compressed */ - data = PyBytes_FromStringAndSize(buf, data_size); - Py_DECREF(raw_data); - return data; - } - - /* Decompress with zlib */ - decompress = get_decompress_func(); - if (decompress == NULL) { - PyErr_SetString(ZipImportError, - "can't decompress data; " - "zlib not available"); - goto error; - } - data = PyObject_CallFunction(decompress, "Oi", raw_data, -15); - Py_DECREF(decompress); - Py_DECREF(raw_data); - if (data != NULL && !PyBytes_Check(data)) { - PyErr_Format(PyExc_TypeError, - "zlib.decompress() must return a bytes object, not " - "%.200s", - Py_TYPE(data)->tp_name); - Py_DECREF(data); - return NULL; - } - return data; - -eof_error: - set_file_error(archive, !ferror(fp)); - goto error; - -file_error: - PyErr_Format(ZipImportError, "can't read Zip file: %R", archive); - goto error; - -invalid_header: - assert(errmsg != NULL); - PyErr_Format(ZipImportError, "%s: %R", errmsg, archive); - goto error; - -error: - if (fp != NULL) { - fclose(fp); - } - Py_XDECREF(raw_data); - return NULL; -} - -/* Lenient date/time comparison function. The precision of the mtime - in the archive is lower than the mtime stored in a .pyc: we - must allow a difference of at most one second. */ -static int -eq_mtime(time_t t1, time_t t2) -{ - time_t d = t1 - t2; - if (d < 0) - d = -d; - /* dostime only stores even seconds, so be lenient */ - return d <= 1; -} - -/* Given the contents of a .pyc file in a buffer, unmarshal the data - and return the code object. Return None if it the magic word doesn't - match (we do this instead of raising an exception as we fall back - to .py if available and we don't want to mask other errors). - Returns a new reference. */ -static PyObject * -unmarshal_code(PyObject *pathname, PyObject *data, time_t mtime) -{ - PyObject *code; - unsigned char *buf = (unsigned char *)PyBytes_AsString(data); - Py_ssize_t size = PyBytes_Size(data); - - if (size < 16) { - PyErr_SetString(ZipImportError, - "bad pyc data"); - return NULL; - } - - if (get_uint32(buf) != (unsigned int)PyImport_GetMagicNumber()) { - if (Py_VerboseFlag) { - PySys_FormatStderr("# %R has bad magic\n", - pathname); - } - Py_RETURN_NONE; /* signal caller to try alternative */ - } - - uint32_t flags = get_uint32(buf + 4); - if (flags != 0) { - _PyCoreConfig *config = &_PyInterpreterState_Get()->core_config; - // Hash-based pyc. We currently refuse to handle checked hash-based - // pycs. We could validate hash-based pycs against the source, but it - // seems likely that most people putting hash-based pycs in a zipfile - // will use unchecked ones. - if (strcmp(config->_check_hash_pycs_mode, "never") && - (flags != 0x1 || !strcmp(config->_check_hash_pycs_mode, "always"))) - Py_RETURN_NONE; - } else if ((mtime != 0 && !eq_mtime(get_uint32(buf + 8), mtime))) { - if (Py_VerboseFlag) { - PySys_FormatStderr("# %R has bad mtime\n", - pathname); - } - Py_RETURN_NONE; /* signal caller to try alternative */ - } - - /* XXX the pyc's size field is ignored; timestamp collisions are probably - unimportant with zip files. */ - code = PyMarshal_ReadObjectFromString((char *)buf + 16, size - 16); - if (code == NULL) { - return NULL; - } - if (!PyCode_Check(code)) { - Py_DECREF(code); - PyErr_Format(PyExc_TypeError, - "compiled module %R is not a code object", - pathname); - return NULL; - } - return code; -} - -/* Replace any occurrences of "\r\n?" in the input string with "\n". - This converts DOS and Mac line endings to Unix line endings. - Also append a trailing "\n" to be compatible with - PyParser_SimpleParseFile(). Returns a new reference. */ -static PyObject * -normalize_line_endings(PyObject *source) -{ - char *buf, *q, *p; - PyObject *fixed_source; - int len = 0; - - p = PyBytes_AsString(source); - if (p == NULL) { - return PyBytes_FromStringAndSize("\n\0", 2); - } - - /* one char extra for trailing \n and one for terminating \0 */ - buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2); - if (buf == NULL) { - PyErr_SetString(PyExc_MemoryError, - "zipimport: no memory to allocate " - "source buffer"); - return NULL; - } - /* replace "\r\n?" by "\n" */ - for (q = buf; *p != '\0'; p++) { - if (*p == '\r') { - *q++ = '\n'; - if (*(p + 1) == '\n') - p++; - } - else - *q++ = *p; - len++; - } - *q++ = '\n'; /* add trailing \n */ - *q = '\0'; - fixed_source = PyBytes_FromStringAndSize(buf, len + 2); - PyMem_Free(buf); - return fixed_source; -} - -/* Given a string buffer containing Python source code, compile it - and return a code object as a new reference. */ -static PyObject * -compile_source(PyObject *pathname, PyObject *source) -{ - PyObject *code, *fixed_source; - - fixed_source = normalize_line_endings(source); - if (fixed_source == NULL) { - return NULL; - } - - code = Py_CompileStringObject(PyBytes_AsString(fixed_source), - pathname, Py_file_input, NULL, -1); - - Py_DECREF(fixed_source); - return code; -} - -/* Convert the date/time values found in the Zip archive to a value - that's compatible with the time stamp stored in .pyc files. */ -static time_t -parse_dostime(int dostime, int dosdate) -{ - struct tm stm; - - memset((void *) &stm, '\0', sizeof(stm)); - - stm.tm_sec = (dostime & 0x1f) * 2; - stm.tm_min = (dostime >> 5) & 0x3f; - stm.tm_hour = (dostime >> 11) & 0x1f; - stm.tm_mday = dosdate & 0x1f; - stm.tm_mon = ((dosdate >> 5) & 0x0f) - 1; - stm.tm_year = ((dosdate >> 9) & 0x7f) + 80; - stm.tm_isdst = -1; /* wday/yday is ignored */ - - return mktime(&stm); -} - -/* Given a path to a .pyc file in the archive, return the - modification time of the matching .py file, or 0 if no source - is available. */ -static time_t -get_mtime_of_source(ZipImporter *self, PyObject *path) -{ - PyObject *toc_entry, *stripped; - time_t mtime; - - /* strip 'c' from *.pyc */ - if (PyUnicode_READY(path) == -1) - return (time_t)-1; - stripped = PyUnicode_FromKindAndData(PyUnicode_KIND(path), - PyUnicode_DATA(path), - PyUnicode_GET_LENGTH(path) - 1); - if (stripped == NULL) - return (time_t)-1; - - toc_entry = PyDict_GetItem(self->files, stripped); - Py_DECREF(stripped); - if (toc_entry != NULL && PyTuple_Check(toc_entry) && - PyTuple_Size(toc_entry) == 8) { - /* fetch the time stamp of the .py file for comparison - with an embedded pyc time stamp */ - int time, date; - time = PyLong_AsLong(PyTuple_GetItem(toc_entry, 5)); - date = PyLong_AsLong(PyTuple_GetItem(toc_entry, 6)); - mtime = parse_dostime(time, date); - } else - mtime = 0; - return mtime; -} - -/* Return the code object for the module named by 'fullname' from the - Zip archive as a new reference. */ -static PyObject * -get_code_from_data(ZipImporter *self, int ispackage, int isbytecode, - time_t mtime, PyObject *toc_entry) -{ - PyObject *data, *modpath, *code; - - data = get_data(self->archive, toc_entry); - if (data == NULL) - return NULL; - - modpath = PyTuple_GetItem(toc_entry, 0); - if (isbytecode) - code = unmarshal_code(modpath, data, mtime); - else - code = compile_source(modpath, data); - Py_DECREF(data); - return code; -} - -/* Get the code object associated with the module specified by - 'fullname'. */ -static PyObject * -get_module_code(ZipImporter *self, PyObject *fullname, - int *p_ispackage, PyObject **p_modpath) -{ - PyObject *code = NULL, *toc_entry, *subname; - PyObject *path, *fullpath = NULL; - struct st_zip_searchorder *zso; - - if (self->prefix == NULL) { - PyErr_SetString(PyExc_ValueError, - "zipimporter.__init__() wasn't called"); - return NULL; - } - - subname = get_subname(fullname); - if (subname == NULL) - return NULL; - - path = make_filename(self->prefix, subname); - Py_DECREF(subname); - if (path == NULL) - return NULL; - - for (zso = zip_searchorder; *zso->suffix; zso++) { - code = NULL; - - fullpath = PyUnicode_FromFormat("%U%s", path, zso->suffix); - if (fullpath == NULL) - goto exit; - - if (Py_VerboseFlag > 1) - PySys_FormatStderr("# trying %U%c%U\n", - self->archive, (int)SEP, fullpath); - toc_entry = PyDict_GetItem(self->files, fullpath); - if (toc_entry != NULL) { - time_t mtime = 0; - int ispackage = zso->type & IS_PACKAGE; - int isbytecode = zso->type & IS_BYTECODE; - - if (isbytecode) { - mtime = get_mtime_of_source(self, fullpath); - if (mtime == (time_t)-1 && PyErr_Occurred()) { - goto exit; - } - } - Py_CLEAR(fullpath); - if (p_ispackage != NULL) - *p_ispackage = ispackage; - code = get_code_from_data(self, ispackage, - isbytecode, mtime, - toc_entry); - if (code == Py_None) { - /* bad magic number or non-matching mtime - in byte code, try next */ - Py_DECREF(code); - continue; - } - if (code != NULL && p_modpath != NULL) { - *p_modpath = PyTuple_GetItem(toc_entry, 0); - Py_INCREF(*p_modpath); - } - goto exit; - } - else - Py_CLEAR(fullpath); - } - PyErr_Format(ZipImportError, "can't find module %R", fullname); -exit: - Py_DECREF(path); - Py_XDECREF(fullpath); - return code; -} - - -/* Module init */ - -PyDoc_STRVAR(zipimport_doc, -"zipimport provides support for importing Python modules from Zip archives.\n\ -\n\ -This module exports three objects:\n\ -- zipimporter: a class; its constructor takes a path to a Zip archive.\n\ -- ZipImportError: exception raised by zipimporter objects. It's a\n\ - subclass of ImportError, so it can be caught as ImportError, too.\n\ -- _zip_directory_cache: a dict, mapping archive paths to zip directory\n\ - info dicts, as used in zipimporter._files.\n\ -\n\ -It is usually not needed to use the zipimport module explicitly; it is\n\ -used by the builtin import mechanism for sys.path items that are paths\n\ -to Zip archives."); - -static struct PyModuleDef zipimportmodule = { - PyModuleDef_HEAD_INIT, - "zipimport", - zipimport_doc, - -1, - NULL, - NULL, - NULL, - NULL, - NULL -}; - -PyMODINIT_FUNC -PyInit_zipimport(void) -{ - PyObject *mod; - - if (PyType_Ready(&ZipImporter_Type) < 0) - return NULL; - - /* Correct directory separator */ - zip_searchorder[0].suffix[0] = SEP; - zip_searchorder[1].suffix[0] = SEP; - - mod = PyModule_Create(&zipimportmodule); - if (mod == NULL) - return NULL; - - ZipImportError = PyErr_NewException("zipimport.ZipImportError", - PyExc_ImportError, NULL); - if (ZipImportError == NULL) - return NULL; - - Py_INCREF(ZipImportError); - if (PyModule_AddObject(mod, "ZipImportError", - ZipImportError) < 0) - return NULL; - - Py_INCREF(&ZipImporter_Type); - if (PyModule_AddObject(mod, "zipimporter", - (PyObject *)&ZipImporter_Type) < 0) - return NULL; - - zip_directory_cache = PyDict_New(); - if (zip_directory_cache == NULL) - return NULL; - Py_INCREF(zip_directory_cache); - if (PyModule_AddObject(mod, "_zip_directory_cache", - zip_directory_cache) < 0) - return NULL; - return mod; -} diff --git a/PC/config.c b/PC/config.c index 568a0fa9a46..43347dddeba 100644 --- a/PC/config.c +++ b/PC/config.c @@ -35,7 +35,6 @@ extern PyObject* PyInit__weakref(void); /* XXX: These two should really be extracted to standalone extensions. */ extern PyObject* PyInit_xxsubtype(void); extern PyObject* PyInit__xxsubinterpreters(void); -extern PyObject* PyInit_zipimport(void); extern PyObject* PyInit__random(void); extern PyObject* PyInit_itertools(void); extern PyObject* PyInit__collections(void); @@ -131,7 +130,6 @@ struct _inittab _PyImport_Inittab[] = { {"xxsubtype", PyInit_xxsubtype}, {"_xxsubinterpreters", PyInit__xxsubinterpreters}, - {"zipimport", PyInit_zipimport}, #ifdef _Py_HAVE_ZLIB {"zlib", PyInit_zlib}, #endif diff --git a/PCbuild/_freeze_importlib.vcxproj b/PCbuild/_freeze_importlib.vcxproj index c73266301e8..34e754658d7 100644 --- a/PCbuild/_freeze_importlib.vcxproj +++ b/PCbuild/_freeze_importlib.vcxproj @@ -77,19 +77,26 @@ + importlib._bootstrap $(IntDir)importlib.g.h $(PySourcePath)Python\importlib.h + importlib._bootstrap_external $(IntDir)importlib_external.g.h $(PySourcePath)Python\importlib_external.h + + zipimport + $(IntDir)importlib_zipimport.g.h + $(PySourcePath)Python\importlib_zipimport.h + - + <_OldContent Condition="Exists($(OutTargetPath))"> @@ -114,6 +121,7 @@ + diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj index 42455f5c7da..4a05d590be5 100644 --- a/PCbuild/pythoncore.vcxproj +++ b/PCbuild/pythoncore.vcxproj @@ -282,7 +282,6 @@ - diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters index 582114f6f47..25b1011340a 100644 --- a/PCbuild/pythoncore.vcxproj.filters +++ b/PCbuild/pythoncore.vcxproj.filters @@ -617,9 +617,6 @@ Modules - - Modules - Modules diff --git a/Programs/_freeze_importlib.c b/Programs/_freeze_importlib.c index 8830d131d6f..3f43757ecb1 100644 --- a/Programs/_freeze_importlib.c +++ b/Programs/_freeze_importlib.c @@ -27,28 +27,30 @@ static const struct _frozen _PyImport_FrozenModules[] = { const struct _frozen *PyImport_FrozenModules; #endif -const char header[] = "/* Auto-generated by Programs/_freeze_importlib.c */"; +static const char header[] = + "/* Auto-generated by Programs/_freeze_importlib.c */"; int main(int argc, char *argv[]) { - char *inpath, *outpath, *code_name; + const char *name, *inpath, *outpath; + char buf[100]; FILE *infile = NULL, *outfile = NULL; struct _Py_stat_struct status; - size_t text_size, data_size, n; + size_t text_size, data_size, i, n; char *text = NULL; unsigned char *data; PyObject *code = NULL, *marshalled = NULL; - int is_bootstrap = 1; PyImport_FrozenModules = _PyImport_FrozenModules; - if (argc != 3) { - fprintf(stderr, "need to specify input and output paths\n"); + if (argc != 4) { + fprintf(stderr, "need to specify the name, input and output paths\n"); return 2; } - inpath = argv[1]; - outpath = argv[2]; + name = argv[1]; + inpath = argv[2]; + outpath = argv[3]; infile = fopen(inpath, "rb"); if (infile == NULL) { fprintf(stderr, "cannot open '%s' for reading\n", inpath); @@ -90,14 +92,8 @@ main(int argc, char *argv[]) _Py_FatalInitError(err); } - if (strstr(inpath, "_external") != NULL) { - is_bootstrap = 0; - } - - code_name = is_bootstrap ? - "" : - ""; - code = Py_CompileStringExFlags(text, code_name, Py_file_input, NULL, 0); + sprintf(buf, "", name); + code = Py_CompileStringExFlags(text, buf, Py_file_input, NULL, 0); if (code == NULL) goto error; free(text); @@ -120,11 +116,13 @@ main(int argc, char *argv[]) goto error; } fprintf(outfile, "%s\n", header); - if (is_bootstrap) - fprintf(outfile, "const unsigned char _Py_M__importlib[] = {\n"); - else - fprintf(outfile, - "const unsigned char _Py_M__importlib_external[] = {\n"); + for (i = n = 0; name[i] != '\0'; i++) { + if (name[i] != '.') { + buf[n++] = name[i]; + } + } + buf[n] = '\0'; + fprintf(outfile, "const unsigned char _Py_M__%s[] = {\n", buf); for (n = 0; n < data_size; n += 16) { size_t i, end = Py_MIN(n + 16, data_size); fprintf(outfile, " "); diff --git a/Python/frozen.c b/Python/frozen.c index 7e04f3ca025..f1901d24dee 100644 --- a/Python/frozen.c +++ b/Python/frozen.c @@ -4,6 +4,7 @@ #include "Python.h" #include "importlib.h" #include "importlib_external.h" +#include "importlib_zipimport.h" /* In order to test the support for frozen modules, by default we define a single frozen module, __hello__. Loading it will print @@ -29,9 +30,12 @@ static unsigned char M___hello__[] = { static const struct _frozen _PyImport_FrozenModules[] = { /* importlib */ - {"_frozen_importlib", _Py_M__importlib, (int)sizeof(_Py_M__importlib)}, - {"_frozen_importlib_external", _Py_M__importlib_external, - (int)sizeof(_Py_M__importlib_external)}, + {"_frozen_importlib", _Py_M__importlib_bootstrap, + (int)sizeof(_Py_M__importlib_bootstrap)}, + {"_frozen_importlib_external", _Py_M__importlib_bootstrap_external, + (int)sizeof(_Py_M__importlib_bootstrap_external)}, + {"zipimport", _Py_M__zipimport, + (int)sizeof(_Py_M__zipimport)}, /* Test module */ {"__hello__", M___hello__, SIZE}, /* Test package (negative size indicates package-ness) */ diff --git a/Python/importlib.h b/Python/importlib.h index 1d2576005e9..82e340676b6 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -1,5 +1,5 @@ /* Auto-generated by Programs/_freeze_importlib.c */ -const unsigned char _Py_M__importlib[] = { +const unsigned char _Py_M__importlib_bootstrap[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, 0,64,0,0,0,115,208,1,0,0,100,0,90,0,100,1, 97,1,100,2,100,3,132,0,90,2,100,4,100,5,132,0, diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 9a813c963e0..a597ca3d935 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,850 +1,865 @@ /* Auto-generated by Programs/_freeze_importlib.c */ -const unsigned char _Py_M__importlib_external[] = { +const unsigned char _Py_M__importlib_bootstrap_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,64,0,0,0,115,44,2,0,0,100,0,90,0,100,1, + 0,64,0,0,0,115,52,2,0,0,100,0,90,0,100,1, 90,1,100,2,90,2,101,2,101,1,23,0,90,3,100,3, 100,4,132,0,90,4,100,5,100,6,132,0,90,5,100,7, 100,8,132,0,90,6,100,9,100,10,132,0,90,7,100,11, 100,12,132,0,90,8,100,13,100,14,132,0,90,9,100,15, 100,16,132,0,90,10,100,17,100,18,132,0,90,11,100,19, 100,20,132,0,90,12,100,21,100,22,132,0,90,13,100,23, - 102,1,100,24,100,25,132,1,90,14,101,15,101,14,106,16, - 131,1,90,17,100,26,160,18,100,27,100,28,161,2,100,29, - 23,0,90,19,101,20,160,21,101,19,100,28,161,2,90,22, - 100,30,90,23,100,31,90,24,100,32,103,1,90,25,100,33, - 103,1,90,26,101,26,4,0,90,27,90,28,100,34,102,1, - 100,34,100,35,156,1,100,36,100,37,132,3,90,29,100,38, - 100,39,132,0,90,30,100,40,100,41,132,0,90,31,100,42, + 100,24,132,0,90,14,100,25,102,1,100,26,100,27,132,1, + 90,15,101,16,101,15,106,17,131,1,90,18,100,28,160,19, + 100,29,100,30,161,2,100,31,23,0,90,20,101,21,160,22, + 101,20,100,30,161,2,90,23,100,32,90,24,100,33,90,25, + 100,34,103,1,90,26,100,35,103,1,90,27,101,27,4,0, + 90,28,90,29,100,36,102,1,100,36,100,37,156,1,100,38, + 100,39,132,3,90,30,100,40,100,41,132,0,90,31,100,42, 100,43,132,0,90,32,100,44,100,45,132,0,90,33,100,46, 100,47,132,0,90,34,100,48,100,49,132,0,90,35,100,50, 100,51,132,0,90,36,100,52,100,53,132,0,90,37,100,54, - 100,55,132,0,90,38,100,34,100,34,100,34,102,3,100,56, - 100,57,132,1,90,39,100,58,100,58,102,2,100,59,100,60, - 132,1,90,40,100,61,102,1,100,62,100,63,132,1,90,41, - 100,64,100,65,132,0,90,42,101,43,131,0,90,44,100,34, - 102,1,100,34,101,44,100,66,156,2,100,67,100,68,132,3, - 90,45,71,0,100,69,100,70,132,0,100,70,131,2,90,46, - 71,0,100,71,100,72,132,0,100,72,131,2,90,47,71,0, - 100,73,100,74,132,0,100,74,101,47,131,3,90,48,71,0, - 100,75,100,76,132,0,100,76,131,2,90,49,71,0,100,77, - 100,78,132,0,100,78,101,49,101,48,131,4,90,50,71,0, - 100,79,100,80,132,0,100,80,101,49,101,47,131,4,90,51, - 103,0,90,52,71,0,100,81,100,82,132,0,100,82,101,49, - 101,47,131,4,90,53,71,0,100,83,100,84,132,0,100,84, - 131,2,90,54,71,0,100,85,100,86,132,0,100,86,131,2, - 90,55,71,0,100,87,100,88,132,0,100,88,131,2,90,56, - 71,0,100,89,100,90,132,0,100,90,131,2,90,57,100,34, - 102,1,100,91,100,92,132,1,90,58,100,93,100,94,132,0, + 100,55,132,0,90,38,100,56,100,57,132,0,90,39,100,36, + 100,36,100,36,102,3,100,58,100,59,132,1,90,40,100,60, + 100,60,102,2,100,61,100,62,132,1,90,41,100,63,102,1, + 100,64,100,65,132,1,90,42,100,66,100,67,132,0,90,43, + 101,44,131,0,90,45,100,36,102,1,100,36,101,45,100,68, + 156,2,100,69,100,70,132,3,90,46,71,0,100,71,100,72, + 132,0,100,72,131,2,90,47,71,0,100,73,100,74,132,0, + 100,74,131,2,90,48,71,0,100,75,100,76,132,0,100,76, + 101,48,131,3,90,49,71,0,100,77,100,78,132,0,100,78, + 131,2,90,50,71,0,100,79,100,80,132,0,100,80,101,50, + 101,49,131,4,90,51,71,0,100,81,100,82,132,0,100,82, + 101,50,101,48,131,4,90,52,103,0,90,53,71,0,100,83, + 100,84,132,0,100,84,101,50,101,48,131,4,90,54,71,0, + 100,85,100,86,132,0,100,86,131,2,90,55,71,0,100,87, + 100,88,132,0,100,88,131,2,90,56,71,0,100,89,100,90, + 132,0,100,90,131,2,90,57,71,0,100,91,100,92,132,0, + 100,92,131,2,90,58,100,36,102,1,100,93,100,94,132,1, 90,59,100,95,100,96,132,0,90,60,100,97,100,98,132,0, - 90,61,100,34,83,0,41,99,97,94,1,0,0,67,111,114, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,112,97,116,104,45,98,97,115,101,100,32,105, - 109,112,111,114,116,46,10,10,84,104,105,115,32,109,111,100, - 117,108,101,32,105,115,32,78,79,84,32,109,101,97,110,116, - 32,116,111,32,98,101,32,100,105,114,101,99,116,108,121,32, - 105,109,112,111,114,116,101,100,33,32,73,116,32,104,97,115, - 32,98,101,101,110,32,100,101,115,105,103,110,101,100,32,115, - 117,99,104,10,116,104,97,116,32,105,116,32,99,97,110,32, - 98,101,32,98,111,111,116,115,116,114,97,112,112,101,100,32, - 105,110,116,111,32,80,121,116,104,111,110,32,97,115,32,116, - 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,105,109,112,111,114,116,46,32,65,115,10, - 115,117,99,104,32,105,116,32,114,101,113,117,105,114,101,115, - 32,116,104,101,32,105,110,106,101,99,116,105,111,110,32,111, - 102,32,115,112,101,99,105,102,105,99,32,109,111,100,117,108, - 101,115,32,97,110,100,32,97,116,116,114,105,98,117,116,101, - 115,32,105,110,32,111,114,100,101,114,32,116,111,10,119,111, - 114,107,46,32,79,110,101,32,115,104,111,117,108,100,32,117, - 115,101,32,105,109,112,111,114,116,108,105,98,32,97,115,32, - 116,104,101,32,112,117,98,108,105,99,45,102,97,99,105,110, - 103,32,118,101,114,115,105,111,110,32,111,102,32,116,104,105, - 115,32,109,111,100,117,108,101,46,10,10,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,1,0,0, - 0,3,0,0,0,3,0,0,0,115,60,0,0,0,116,0, - 106,1,160,2,116,3,161,1,114,48,116,0,106,1,160,2, - 116,4,161,1,114,30,100,1,137,0,110,4,100,2,137,0, - 135,0,102,1,100,3,100,4,132,8,125,0,110,8,100,5, - 100,4,132,0,125,0,124,0,83,0,41,6,78,90,12,80, - 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0, - 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, - 0,115,10,0,0,0,136,0,116,0,106,1,107,6,83,0, - 41,1,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,41,2,218,3,95,111,115, - 90,7,101,110,118,105,114,111,110,169,0,41,1,218,3,107, - 101,121,114,2,0,0,0,250,38,60,102,114,111,122,101,110, - 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, - 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218, - 11,95,114,101,108,97,120,95,99,97,115,101,36,0,0,0, - 115,2,0,0,0,0,2,122,37,95,109,97,107,101,95,114, - 101,108,97,120,95,99,97,115,101,46,60,108,111,99,97,108, - 115,62,46,95,114,101,108,97,120,95,99,97,115,101,99,0, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,83, - 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,53, - 84,114,117,101,32,105,102,32,102,105,108,101,110,97,109,101, - 115,32,109,117,115,116,32,98,101,32,99,104,101,99,107,101, - 100,32,99,97,115,101,45,105,110,115,101,110,115,105,116,105, - 118,101,108,121,46,70,114,2,0,0,0,114,2,0,0,0, - 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,114, - 5,0,0,0,40,0,0,0,115,2,0,0,0,0,2,41, - 5,218,3,115,121,115,218,8,112,108,97,116,102,111,114,109, - 218,10,115,116,97,114,116,115,119,105,116,104,218,27,95,67, - 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, - 80,76,65,84,70,79,82,77,83,218,35,95,67,65,83,69, - 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, - 84,70,79,82,77,83,95,83,84,82,95,75,69,89,41,1, - 114,5,0,0,0,114,2,0,0,0,41,1,114,3,0,0, - 0,114,4,0,0,0,218,16,95,109,97,107,101,95,114,101, - 108,97,120,95,99,97,115,101,29,0,0,0,115,14,0,0, - 0,0,1,12,1,12,1,6,2,4,2,14,4,8,3,114, - 11,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, - 0,4,0,0,0,67,0,0,0,115,20,0,0,0,116,0, - 124,0,131,1,100,1,64,0,160,1,100,2,100,3,161,2, - 83,0,41,4,122,42,67,111,110,118,101,114,116,32,97,32, - 51,50,45,98,105,116,32,105,110,116,101,103,101,114,32,116, - 111,32,108,105,116,116,108,101,45,101,110,100,105,97,110,46, - 108,3,0,0,0,255,127,255,127,3,0,233,4,0,0,0, - 218,6,108,105,116,116,108,101,41,2,218,3,105,110,116,218, - 8,116,111,95,98,121,116,101,115,41,1,218,1,120,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,218,7,95, - 119,95,108,111,110,103,46,0,0,0,115,2,0,0,0,0, - 2,114,17,0,0,0,99,1,0,0,0,0,0,0,0,1, - 0,0,0,4,0,0,0,67,0,0,0,115,12,0,0,0, - 116,0,160,1,124,0,100,1,161,2,83,0,41,2,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, - 13,0,0,0,41,2,114,14,0,0,0,218,10,102,114,111, - 109,95,98,121,116,101,115,41,1,90,9,105,110,116,95,98, - 121,116,101,115,114,2,0,0,0,114,2,0,0,0,114,4, - 0,0,0,218,7,95,114,95,108,111,110,103,51,0,0,0, - 115,2,0,0,0,0,2,114,19,0,0,0,99,0,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,0, - 0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,0, - 124,0,68,0,131,1,161,1,83,0,41,3,122,31,82,101, - 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, - 46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,0, - 0,0,0,0,0,0,2,0,0,0,5,0,0,0,83,0, - 0,0,115,26,0,0,0,103,0,124,0,93,18,125,1,124, - 1,114,22,124,1,160,0,116,1,161,1,145,2,113,4,83, - 0,114,2,0,0,0,41,2,218,6,114,115,116,114,105,112, - 218,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, - 115,41,2,218,2,46,48,218,4,112,97,114,116,114,2,0, - 0,0,114,2,0,0,0,114,4,0,0,0,218,10,60,108, - 105,115,116,99,111,109,112,62,58,0,0,0,115,6,0,0, - 0,6,1,2,0,4,255,122,30,95,112,97,116,104,95,106, - 111,105,110,46,60,108,111,99,97,108,115,62,46,60,108,105, - 115,116,99,111,109,112,62,41,2,218,8,112,97,116,104,95, - 115,101,112,218,4,106,111,105,110,41,1,218,10,112,97,116, - 104,95,112,97,114,116,115,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,218,10,95,112,97,116,104,95,106,111, - 105,110,56,0,0,0,115,6,0,0,0,0,2,10,1,2, - 255,114,28,0,0,0,99,1,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,67,0,0,0,115,96,0,0,0, - 116,0,116,1,131,1,100,1,107,2,114,36,124,0,160,2, - 116,3,161,1,92,3,125,1,125,2,125,3,124,1,124,3, - 102,2,83,0,116,4,124,0,131,1,68,0,93,42,125,4, - 124,4,116,1,107,6,114,44,124,0,106,5,124,4,100,1, - 100,2,141,2,92,2,125,1,125,3,124,1,124,3,102,2, - 2,0,1,0,83,0,113,44,100,3,124,0,102,2,83,0, - 41,4,122,32,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,115,112,108,105, - 116,40,41,46,233,1,0,0,0,41,1,90,8,109,97,120, - 115,112,108,105,116,218,0,41,6,218,3,108,101,110,114,21, - 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,114, - 25,0,0,0,218,8,114,101,118,101,114,115,101,100,218,6, - 114,115,112,108,105,116,41,5,218,4,112,97,116,104,90,5, - 102,114,111,110,116,218,1,95,218,4,116,97,105,108,114,16, - 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,218,11,95,112,97,116,104,95,115,112,108,105,116,62, - 0,0,0,115,16,0,0,0,0,2,12,1,16,1,8,1, - 12,1,8,1,18,1,14,1,114,38,0,0,0,99,1,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,115,10,0,0,0,116,0,160,1,124,0,161,1,83, - 0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97, - 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, - 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, - 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, - 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, - 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, - 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, - 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, - 32,32,32,41,2,114,1,0,0,0,90,4,115,116,97,116, - 41,1,114,35,0,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,218,10,95,112,97,116,104,95,115,116, - 97,116,74,0,0,0,115,2,0,0,0,0,7,114,39,0, - 0,0,99,2,0,0,0,0,0,0,0,3,0,0,0,8, - 0,0,0,67,0,0,0,115,50,0,0,0,122,12,116,0, - 124,0,131,1,125,2,87,0,110,22,4,0,116,1,107,10, - 114,34,1,0,1,0,1,0,89,0,100,1,83,0,88,0, - 124,2,106,2,100,2,64,0,124,1,107,2,83,0,41,3, - 122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,116, - 104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,121, - 112,101,46,70,105,0,240,0,0,41,3,114,39,0,0,0, - 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, - 100,101,41,3,114,35,0,0,0,218,4,109,111,100,101,90, - 9,115,116,97,116,95,105,110,102,111,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,218,18,95,112,97,116,104, - 95,105,115,95,109,111,100,101,95,116,121,112,101,84,0,0, - 0,115,10,0,0,0,0,2,2,1,12,1,14,1,8,1, - 114,43,0,0,0,99,1,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,67,0,0,0,115,10,0,0,0,116, - 0,124,0,100,1,131,2,83,0,41,2,122,31,82,101,112, - 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,105,115,102,105,108,101,46,105,0,128,0, - 0,41,1,114,43,0,0,0,41,1,114,35,0,0,0,114, - 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,12, - 95,112,97,116,104,95,105,115,102,105,108,101,93,0,0,0, - 115,2,0,0,0,0,2,114,44,0,0,0,99,1,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,22,0,0,0,124,0,115,12,116,0,160,1,161,0, - 125,0,116,2,124,0,100,1,131,2,83,0,41,2,122,30, + 90,61,100,99,100,100,132,0,90,62,100,36,83,0,41,101, + 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, + 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, + 84,104,105,115,32,109,111,100,117,108,101,32,105,115,32,78, + 79,84,32,109,101,97,110,116,32,116,111,32,98,101,32,100, + 105,114,101,99,116,108,121,32,105,109,112,111,114,116,101,100, + 33,32,73,116,32,104,97,115,32,98,101,101,110,32,100,101, + 115,105,103,110,101,100,32,115,117,99,104,10,116,104,97,116, + 32,105,116,32,99,97,110,32,98,101,32,98,111,111,116,115, + 116,114,97,112,112,101,100,32,105,110,116,111,32,80,121,116, + 104,111,110,32,97,115,32,116,104,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112, + 111,114,116,46,32,65,115,10,115,117,99,104,32,105,116,32, + 114,101,113,117,105,114,101,115,32,116,104,101,32,105,110,106, + 101,99,116,105,111,110,32,111,102,32,115,112,101,99,105,102, + 105,99,32,109,111,100,117,108,101,115,32,97,110,100,32,97, + 116,116,114,105,98,117,116,101,115,32,105,110,32,111,114,100, + 101,114,32,116,111,10,119,111,114,107,46,32,79,110,101,32, + 115,104,111,117,108,100,32,117,115,101,32,105,109,112,111,114, + 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108, + 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111, + 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, + 46,10,10,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,1,0,0,0,3,0,0,0,3,0,0, + 0,115,60,0,0,0,116,0,106,1,160,2,116,3,161,1, + 114,48,116,0,106,1,160,2,116,4,161,1,114,30,100,1, + 137,0,110,4,100,2,137,0,135,0,102,1,100,3,100,4, + 132,8,125,0,110,8,100,5,100,4,132,0,125,0,124,0, + 83,0,41,6,78,90,12,80,89,84,72,79,78,67,65,83, + 69,79,75,115,12,0,0,0,80,89,84,72,79,78,67,65, + 83,69,79,75,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,19,0,0,0,115,10,0,0,0,136,0, + 116,0,106,1,107,6,83,0,41,1,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,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, + 110,169,0,41,1,218,3,107,101,121,114,2,0,0,0,250, + 38,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, + 105,98,46,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,62,218,11,95,114,101,108,97,120,95, + 99,97,115,101,36,0,0,0,115,2,0,0,0,0,2,122, + 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, + 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, + 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, + 100,1,83,0,41,2,122,53,84,114,117,101,32,105,102,32, + 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, + 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, + 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,2, + 0,0,0,114,2,0,0,0,114,2,0,0,0,114,2,0, + 0,0,114,4,0,0,0,114,5,0,0,0,40,0,0,0, + 115,2,0,0,0,0,2,41,5,218,3,115,121,115,218,8, + 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, + 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,218,35,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,83, + 84,82,95,75,69,89,41,1,114,5,0,0,0,114,2,0, + 0,0,41,1,114,3,0,0,0,114,4,0,0,0,218,16, + 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, + 29,0,0,0,115,14,0,0,0,0,1,12,1,12,1,6, + 2,4,2,14,4,8,3,114,11,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, + 0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,0, + 160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,111, + 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105, + 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101, + 45,101,110,100,105,97,110,46,108,3,0,0,0,255,127,255, + 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101, + 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101, + 115,41,1,218,1,120,114,2,0,0,0,114,2,0,0,0, + 114,4,0,0,0,218,12,95,112,97,99,107,95,117,105,110, + 116,51,50,46,0,0,0,115,2,0,0,0,0,2,114,17, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,67,0,0,0,115,28,0,0,0,116,0,124, + 0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160, + 3,124,0,100,2,161,2,83,0,41,3,122,47,67,111,110, + 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, + 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, + 32,97,110,32,105,110,116,101,103,101,114,46,114,12,0,0, + 0,114,13,0,0,0,41,4,218,3,108,101,110,218,14,65, + 115,115,101,114,116,105,111,110,69,114,114,111,114,114,14,0, + 0,0,218,10,102,114,111,109,95,98,121,116,101,115,41,1, + 218,4,100,97,116,97,114,2,0,0,0,114,2,0,0,0, + 114,4,0,0,0,218,14,95,117,110,112,97,99,107,95,117, + 105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2, + 16,1,114,22,0,0,0,99,1,0,0,0,0,0,0,0, + 1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0, + 0,116,0,124,0,131,1,100,1,107,2,115,16,116,1,130, + 1,116,2,160,3,124,0,100,2,161,2,83,0,41,3,122, + 47,67,111,110,118,101,114,116,32,50,32,98,121,116,101,115, + 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, + 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, + 233,2,0,0,0,114,13,0,0,0,41,4,114,18,0,0, + 0,114,19,0,0,0,114,14,0,0,0,114,20,0,0,0, + 41,1,114,21,0,0,0,114,2,0,0,0,114,2,0,0, + 0,114,4,0,0,0,218,14,95,117,110,112,97,99,107,95, + 117,105,110,116,49,54,56,0,0,0,115,4,0,0,0,0, + 2,16,1,114,24,0,0,0,99,0,0,0,0,0,0,0, + 0,1,0,0,0,4,0,0,0,71,0,0,0,115,20,0, + 0,0,116,0,160,1,100,1,100,2,132,0,124,0,68,0, + 131,1,161,1,83,0,41,3,122,31,82,101,112,108,97,99, + 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, + 104,46,106,111,105,110,40,41,46,99,1,0,0,0,0,0, + 0,0,2,0,0,0,5,0,0,0,83,0,0,0,115,26, + 0,0,0,103,0,124,0,93,18,125,1,124,1,114,22,124, + 1,160,0,116,1,161,1,145,2,113,4,83,0,114,2,0, + 0,0,41,2,218,6,114,115,116,114,105,112,218,15,112,97, + 116,104,95,115,101,112,97,114,97,116,111,114,115,41,2,218, + 2,46,48,218,4,112,97,114,116,114,2,0,0,0,114,2, + 0,0,0,114,4,0,0,0,218,10,60,108,105,115,116,99, + 111,109,112,62,64,0,0,0,115,6,0,0,0,6,1,2, + 0,4,255,122,30,95,112,97,116,104,95,106,111,105,110,46, + 60,108,111,99,97,108,115,62,46,60,108,105,115,116,99,111, + 109,112,62,41,2,218,8,112,97,116,104,95,115,101,112,218, + 4,106,111,105,110,41,1,218,10,112,97,116,104,95,112,97, + 114,116,115,114,2,0,0,0,114,2,0,0,0,114,4,0, + 0,0,218,10,95,112,97,116,104,95,106,111,105,110,62,0, + 0,0,115,6,0,0,0,0,2,10,1,2,255,114,33,0, + 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,96,0,0,0,116,0,116,1, + 131,1,100,1,107,2,114,36,124,0,160,2,116,3,161,1, + 92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,0, + 116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,1, + 107,6,114,44,124,0,106,5,124,4,100,1,100,2,141,2, + 92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,0, + 83,0,113,44,100,3,124,0,102,2,83,0,41,4,122,32, 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, - 111,115,46,112,97,116,104,46,105,115,100,105,114,46,105,0, - 64,0,0,41,3,114,1,0,0,0,218,6,103,101,116,99, - 119,100,114,43,0,0,0,41,1,114,35,0,0,0,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,218,11,95, - 112,97,116,104,95,105,115,100,105,114,98,0,0,0,115,6, - 0,0,0,0,2,4,1,8,1,114,46,0,0,0,99,1, - 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, - 0,0,0,115,26,0,0,0,124,0,160,0,116,1,161,1, - 112,24,124,0,100,1,100,2,133,2,25,0,116,2,107,6, - 83,0,41,3,122,142,82,101,112,108,97,99,101,109,101,110, - 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115, - 97,98,115,46,10,10,32,32,32,32,67,111,110,115,105,100, - 101,114,115,32,97,32,87,105,110,100,111,119,115,32,100,114, - 105,118,101,45,114,101,108,97,116,105,118,101,32,112,97,116, - 104,32,40,110,111,32,100,114,105,118,101,44,32,98,117,116, - 32,115,116,97,114,116,115,32,119,105,116,104,32,115,108,97, - 115,104,41,32,116,111,10,32,32,32,32,115,116,105,108,108, - 32,98,101,32,34,97,98,115,111,108,117,116,101,34,46,10, - 32,32,32,32,114,29,0,0,0,233,3,0,0,0,41,3, - 114,8,0,0,0,114,21,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, - 41,1,114,35,0,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,218,11,95,112,97,116,104,95,105,115, - 97,98,115,105,0,0,0,115,2,0,0,0,0,6,114,49, - 0,0,0,105,182,1,0,0,99,3,0,0,0,0,0,0, - 0,6,0,0,0,11,0,0,0,67,0,0,0,115,162,0, - 0,0,100,1,160,0,124,0,116,1,124,0,131,1,161,2, - 125,3,116,2,160,3,124,3,116,2,106,4,116,2,106,5, - 66,0,116,2,106,6,66,0,124,2,100,2,64,0,161,3, - 125,4,122,50,116,7,160,8,124,4,100,3,161,2,143,16, - 125,5,124,5,160,9,124,1,161,1,1,0,87,0,53,0, - 81,0,82,0,88,0,116,2,160,10,124,3,124,0,161,2, - 1,0,87,0,110,58,4,0,116,11,107,10,114,156,1,0, - 1,0,1,0,122,14,116,2,160,12,124,3,161,1,1,0, - 87,0,110,20,4,0,116,11,107,10,114,148,1,0,1,0, - 1,0,89,0,110,2,88,0,130,0,89,0,110,2,88,0, - 100,4,83,0,41,5,122,162,66,101,115,116,45,101,102,102, - 111,114,116,32,102,117,110,99,116,105,111,110,32,116,111,32, - 119,114,105,116,101,32,100,97,116,97,32,116,111,32,97,32, - 112,97,116,104,32,97,116,111,109,105,99,97,108,108,121,46, - 10,32,32,32,32,66,101,32,112,114,101,112,97,114,101,100, - 32,116,111,32,104,97,110,100,108,101,32,97,32,70,105,108, - 101,69,120,105,115,116,115,69,114,114,111,114,32,105,102,32, - 99,111,110,99,117,114,114,101,110,116,32,119,114,105,116,105, - 110,103,32,111,102,32,116,104,101,10,32,32,32,32,116,101, - 109,112,111,114,97,114,121,32,102,105,108,101,32,105,115,32, - 97,116,116,101,109,112,116,101,100,46,122,5,123,125,46,123, - 125,105,182,1,0,0,90,2,119,98,78,41,13,218,6,102, - 111,114,109,97,116,218,2,105,100,114,1,0,0,0,90,4, - 111,112,101,110,90,6,79,95,69,88,67,76,90,7,79,95, - 67,82,69,65,84,90,8,79,95,87,82,79,78,76,89,218, - 3,95,105,111,218,6,70,105,108,101,73,79,218,5,119,114, - 105,116,101,218,7,114,101,112,108,97,99,101,114,40,0,0, - 0,90,6,117,110,108,105,110,107,41,6,114,35,0,0,0, - 218,4,100,97,116,97,114,42,0,0,0,90,8,112,97,116, - 104,95,116,109,112,90,2,102,100,218,4,102,105,108,101,114, - 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,13, - 95,119,114,105,116,101,95,97,116,111,109,105,99,114,0,0, - 0,115,30,0,0,0,0,5,16,1,6,1,16,0,6,255, - 4,2,2,3,14,1,20,1,16,1,14,1,2,1,14,1, - 14,1,6,1,114,58,0,0,0,105,73,13,0,0,233,2, - 0,0,0,114,13,0,0,0,115,2,0,0,0,13,10,90, - 11,95,95,112,121,99,97,99,104,101,95,95,122,4,111,112, - 116,45,122,3,46,112,121,122,4,46,112,121,99,78,41,1, - 218,12,111,112,116,105,109,105,122,97,116,105,111,110,99,2, - 0,0,0,1,0,0,0,12,0,0,0,5,0,0,0,67, - 0,0,0,115,88,1,0,0,124,1,100,1,107,9,114,52, - 116,0,160,1,100,2,116,2,161,2,1,0,124,2,100,1, - 107,9,114,40,100,3,125,3,116,3,124,3,131,1,130,1, - 124,1,114,48,100,4,110,2,100,5,125,2,116,4,160,5, - 124,0,161,1,125,0,116,6,124,0,131,1,92,2,125,4, - 125,5,124,5,160,7,100,6,161,1,92,3,125,6,125,7, - 125,8,116,8,106,9,106,10,125,9,124,9,100,1,107,8, - 114,114,116,11,100,7,131,1,130,1,100,4,160,12,124,6, - 114,126,124,6,110,2,124,8,124,7,124,9,103,3,161,1, - 125,10,124,2,100,1,107,8,114,172,116,8,106,13,106,14, - 100,8,107,2,114,164,100,4,125,2,110,8,116,8,106,13, - 106,14,125,2,116,15,124,2,131,1,125,2,124,2,100,4, - 107,3,114,224,124,2,160,16,161,0,115,210,116,17,100,9, - 160,18,124,2,161,1,131,1,130,1,100,10,160,18,124,10, - 116,19,124,2,161,3,125,10,124,10,116,20,100,8,25,0, - 23,0,125,11,116,8,106,21,100,1,107,9,144,1,114,76, - 116,22,124,4,131,1,144,1,115,16,116,23,116,4,160,24, - 161,0,124,4,131,2,125,4,124,4,100,5,25,0,100,11, - 107,2,144,1,114,56,124,4,100,8,25,0,116,25,107,7, - 144,1,114,56,124,4,100,12,100,1,133,2,25,0,125,4, - 116,23,116,8,106,21,124,4,160,26,116,25,161,1,124,11, - 131,3,83,0,116,23,124,4,116,27,124,11,131,3,83,0, - 41,13,97,254,2,0,0,71,105,118,101,110,32,116,104,101, - 32,112,97,116,104,32,116,111,32,97,32,46,112,121,32,102, - 105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,99, - 32,102,105,108,101,46,10,10,32,32,32,32,84,104,101,32, - 46,112,121,32,102,105,108,101,32,100,111,101,115,32,110,111, - 116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59, - 32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116, - 117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111, - 32,116,104,101,10,32,32,32,32,46,112,121,99,32,102,105, - 108,101,32,99,97,108,99,117,108,97,116,101,100,32,97,115, - 32,105,102,32,116,104,101,32,46,112,121,32,102,105,108,101, - 32,119,101,114,101,32,105,109,112,111,114,116,101,100,46,10, - 10,32,32,32,32,84,104,101,32,39,111,112,116,105,109,105, - 122,97,116,105,111,110,39,32,112,97,114,97,109,101,116,101, - 114,32,99,111,110,116,114,111,108,115,32,116,104,101,32,112, - 114,101,115,117,109,101,100,32,111,112,116,105,109,105,122,97, - 116,105,111,110,32,108,101,118,101,108,32,111,102,10,32,32, - 32,32,116,104,101,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,46,32,73,102,32,39,111,112,116,105,109,105,122, - 97,116,105,111,110,39,32,105,115,32,110,111,116,32,78,111, - 110,101,44,32,116,104,101,32,115,116,114,105,110,103,32,114, - 101,112,114,101,115,101,110,116,97,116,105,111,110,10,32,32, - 32,32,111,102,32,116,104,101,32,97,114,103,117,109,101,110, - 116,32,105,115,32,116,97,107,101,110,32,97,110,100,32,118, - 101,114,105,102,105,101,100,32,116,111,32,98,101,32,97,108, - 112,104,97,110,117,109,101,114,105,99,32,40,101,108,115,101, - 32,86,97,108,117,101,69,114,114,111,114,10,32,32,32,32, - 105,115,32,114,97,105,115,101,100,41,46,10,10,32,32,32, - 32,84,104,101,32,100,101,98,117,103,95,111,118,101,114,114, - 105,100,101,32,112,97,114,97,109,101,116,101,114,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,73,102,32, - 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,105, - 115,32,110,111,116,32,78,111,110,101,44,10,32,32,32,32, - 97,32,84,114,117,101,32,118,97,108,117,101,32,105,115,32, - 116,104,101,32,115,97,109,101,32,97,115,32,115,101,116,116, - 105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,111, - 110,39,32,116,111,32,116,104,101,32,101,109,112,116,121,32, - 115,116,114,105,110,103,10,32,32,32,32,119,104,105,108,101, - 32,97,32,70,97,108,115,101,32,118,97,108,117,101,32,105, - 115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32, - 115,101,116,116,105,110,103,32,39,111,112,116,105,109,105,122, - 97,116,105,111,110,39,32,116,111,32,39,49,39,46,10,10, - 32,32,32,32,73,102,32,115,121,115,46,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, - 116,97,103,32,105,115,32,78,111,110,101,32,116,104,101,110, - 32,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10, - 10,32,32,32,32,78,122,70,116,104,101,32,100,101,98,117, - 103,95,111,118,101,114,114,105,100,101,32,112,97,114,97,109, - 101,116,101,114,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,59,32,117,115,101,32,39,111,112,116,105,109,105,122, - 97,116,105,111,110,39,32,105,110,115,116,101,97,100,122,50, - 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,111, - 114,32,111,112,116,105,109,105,122,97,116,105,111,110,32,109, - 117,115,116,32,98,101,32,115,101,116,32,116,111,32,78,111, - 110,101,114,30,0,0,0,114,29,0,0,0,218,1,46,122, - 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,233,0,0,0,0,122,24,123,33,114,125, - 32,105,115,32,110,111,116,32,97,108,112,104,97,110,117,109, - 101,114,105,99,122,7,123,125,46,123,125,123,125,250,1,58, - 114,59,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,1,0,0,0,218,6,102,115, - 112,97,116,104,114,38,0,0,0,114,32,0,0,0,114,6, - 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,26,0,0,0,218,5,102,108,97,103,115,218, - 8,111,112,116,105,109,105,122,101,218,3,115,116,114,218,7, - 105,115,97,108,110,117,109,218,10,86,97,108,117,101,69,114, - 114,111,114,114,50,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,49,0,0,0,114,28,0,0,0,114,45,0,0,0, - 114,21,0,0,0,218,6,108,115,116,114,105,112,218,8,95, - 80,89,67,65,67,72,69,41,12,114,35,0,0,0,90,14, - 100,101,98,117,103,95,111,118,101,114,114,105,100,101,114,60, - 0,0,0,218,7,109,101,115,115,97,103,101,218,4,104,101, - 97,100,114,37,0,0,0,90,4,98,97,115,101,218,3,115, - 101,112,218,4,114,101,115,116,90,3,116,97,103,90,15,97, - 108,109,111,115,116,95,102,105,108,101,110,97,109,101,218,8, - 102,105,108,101,110,97,109,101,114,2,0,0,0,114,2,0, - 0,0,114,4,0,0,0,218,17,99,97,99,104,101,95,102, - 114,111,109,95,115,111,117,114,99,101,26,1,0,0,115,72, - 0,0,0,0,18,8,1,6,1,2,255,4,2,8,1,4, - 1,8,1,12,1,10,1,12,1,16,1,8,1,8,1,8, - 1,24,1,8,1,12,1,6,2,8,1,8,1,8,1,8, - 1,14,1,14,1,12,1,12,9,10,1,14,5,28,1,12, - 4,2,1,4,1,8,1,2,253,4,5,114,87,0,0,0, - 99,1,0,0,0,0,0,0,0,10,0,0,0,5,0,0, - 0,67,0,0,0,115,46,1,0,0,116,0,106,1,106,2, - 100,1,107,8,114,20,116,3,100,2,131,1,130,1,116,4, - 160,5,124,0,161,1,125,0,116,6,124,0,131,1,92,2, - 125,1,125,2,100,3,125,3,116,0,106,7,100,1,107,9, - 114,102,116,0,106,7,160,8,116,9,161,1,125,4,124,1, - 160,10,124,4,116,11,23,0,161,1,114,102,124,1,116,12, - 124,4,131,1,100,1,133,2,25,0,125,1,100,4,125,3, - 124,3,115,144,116,6,124,1,131,1,92,2,125,1,125,5, - 124,5,116,13,107,3,114,144,116,14,116,13,155,0,100,5, - 124,0,155,2,157,3,131,1,130,1,124,2,160,15,100,6, - 161,1,125,6,124,6,100,7,107,7,114,178,116,14,100,8, - 124,2,155,2,157,2,131,1,130,1,110,92,124,6,100,9, - 107,2,144,1,114,14,124,2,160,16,100,6,100,10,161,2, - 100,11,25,0,125,7,124,7,160,10,116,17,161,1,115,228, - 116,14,100,12,116,17,155,2,157,2,131,1,130,1,124,7, - 116,12,116,17,131,1,100,1,133,2,25,0,125,8,124,8, - 160,18,161,0,144,1,115,14,116,14,100,13,124,7,155,2, - 100,14,157,3,131,1,130,1,124,2,160,19,100,6,161,1, - 100,15,25,0,125,9,116,20,124,1,124,9,116,21,100,15, - 25,0,23,0,131,2,83,0,41,16,97,110,1,0,0,71, - 105,118,101,110,32,116,104,101,32,112,97,116,104,32,116,111, - 32,97,32,46,112,121,99,46,32,102,105,108,101,44,32,114, - 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, - 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10, - 10,32,32,32,32,84,104,101,32,46,112,121,99,32,102,105, - 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100, - 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32, - 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116, - 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116, - 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99, - 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115, - 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99, - 32,102,105,108,101,46,32,32,73,102,32,112,97,116,104,32, - 100,111,101,115,10,32,32,32,32,110,111,116,32,99,111,110, - 102,111,114,109,32,116,111,32,80,69,80,32,51,49,52,55, - 47,52,56,56,32,102,111,114,109,97,116,44,32,86,97,108, - 117,101,69,114,114,111,114,32,119,105,108,108,32,98,101,32, - 114,97,105,115,101,100,46,32,73,102,10,32,32,32,32,115, - 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78, - 111,110,101,32,116,104,101,110,32,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,32,105,115,32, - 114,97,105,115,101,100,46,10,10,32,32,32,32,78,122,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,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,61,0,0,0,62,2,0,0, - 0,114,59,0,0,0,114,47,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,47,0,0,0,114, - 59,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,62,0,0,0,41,22,114,6,0,0,0, - 114,69,0,0,0,114,70,0,0,0,114,71,0,0,0,114, - 1,0,0,0,114,68,0,0,0,114,38,0,0,0,114,79, - 0,0,0,114,20,0,0,0,114,21,0,0,0,114,8,0, - 0,0,114,25,0,0,0,114,31,0,0,0,114,81,0,0, - 0,114,76,0,0,0,218,5,99,111,117,110,116,114,34,0, - 0,0,114,77,0,0,0,114,75,0,0,0,218,9,112,97, - 114,116,105,116,105,111,110,114,28,0,0,0,218,15,83,79, - 85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,114, - 35,0,0,0,114,83,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,60,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,2,0,0,0,114,2,0,0,0, - 114,4,0,0,0,218,17,115,111,117,114,99,101,95,102,114, - 111,109,95,99,97,99,104,101,97,1,0,0,115,52,0,0, - 0,0,9,12,1,8,1,10,1,12,1,4,1,10,1,12, - 1,14,1,16,1,4,1,4,1,12,1,8,1,18,2,10, - 1,8,1,16,1,10,1,16,1,10,1,14,2,16,1,10, - 1,16,2,14,1,114,92,0,0,0,99,1,0,0,0,0, - 0,0,0,5,0,0,0,9,0,0,0,67,0,0,0,115, - 126,0,0,0,116,0,124,0,131,1,100,1,107,2,114,16, - 100,2,83,0,124,0,160,1,100,3,161,1,92,3,125,1, - 125,2,125,3,124,1,114,56,124,3,160,2,161,0,100,4, - 100,5,133,2,25,0,100,6,107,3,114,60,124,0,83,0, - 122,12,116,3,124,0,131,1,125,4,87,0,110,36,4,0, - 116,4,116,5,102,2,107,10,114,108,1,0,1,0,1,0, - 124,0,100,2,100,5,133,2,25,0,125,4,89,0,110,2, - 88,0,116,6,124,4,131,1,114,122,124,4,83,0,124,0, - 83,0,41,7,122,188,67,111,110,118,101,114,116,32,97,32, - 98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,97, - 116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,112, - 97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,101, - 41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, - 99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,114, - 101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,100, - 115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,32, - 102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,116, - 95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,87, - 105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,105, - 110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,32, - 32,32,114,62,0,0,0,78,114,61,0,0,0,233,253,255, - 255,255,233,255,255,255,255,90,2,112,121,41,7,114,31,0, - 0,0,114,32,0,0,0,218,5,108,111,119,101,114,114,92, - 0,0,0,114,71,0,0,0,114,76,0,0,0,114,44,0, - 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, - 97,116,104,114,85,0,0,0,114,36,0,0,0,90,9,101, - 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, - 95,112,97,116,104,114,2,0,0,0,114,2,0,0,0,114, - 4,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, - 101,102,105,108,101,137,1,0,0,115,20,0,0,0,0,7, - 12,1,4,1,16,1,24,1,4,1,2,1,12,1,18,1, - 18,1,114,98,0,0,0,99,1,0,0,0,0,0,0,0, - 1,0,0,0,8,0,0,0,67,0,0,0,115,74,0,0, - 0,124,0,160,0,116,1,116,2,131,1,161,1,114,48,122, - 10,116,3,124,0,131,1,87,0,83,0,4,0,116,4,107, - 10,114,44,1,0,1,0,1,0,89,0,113,70,88,0,110, - 22,124,0,160,0,116,1,116,5,131,1,161,1,114,66,124, - 0,83,0,100,0,83,0,100,0,83,0,41,1,78,41,6, - 218,8,101,110,100,115,119,105,116,104,218,5,116,117,112,108, - 101,114,91,0,0,0,114,87,0,0,0,114,71,0,0,0, - 114,78,0,0,0,41,1,114,86,0,0,0,114,2,0,0, - 0,114,2,0,0,0,114,4,0,0,0,218,11,95,103,101, - 116,95,99,97,99,104,101,100,156,1,0,0,115,16,0,0, - 0,0,1,14,1,2,1,10,1,14,1,8,1,14,1,4, - 2,114,101,0,0,0,99,1,0,0,0,0,0,0,0,2, - 0,0,0,8,0,0,0,67,0,0,0,115,52,0,0,0, - 122,14,116,0,124,0,131,1,106,1,125,1,87,0,110,24, - 4,0,116,2,107,10,114,38,1,0,1,0,1,0,100,1, - 125,1,89,0,110,2,88,0,124,1,100,2,79,0,125,1, - 124,1,83,0,41,3,122,51,67,97,108,99,117,108,97,116, - 101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105, - 115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,46,105,182,1,0,0, - 233,128,0,0,0,41,3,114,39,0,0,0,114,41,0,0, - 0,114,40,0,0,0,41,2,114,35,0,0,0,114,42,0, - 0,0,114,2,0,0,0,114,2,0,0,0,114,4,0,0, - 0,218,10,95,99,97,108,99,95,109,111,100,101,168,1,0, - 0,115,12,0,0,0,0,2,2,1,14,1,14,1,10,3, - 8,1,114,103,0,0,0,99,1,0,0,0,0,0,0,0, - 3,0,0,0,8,0,0,0,3,0,0,0,115,68,0,0, - 0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,122, - 10,116,0,106,1,125,2,87,0,110,28,4,0,116,2,107, - 10,114,52,1,0,1,0,1,0,100,4,100,5,132,0,125, - 2,89,0,110,2,88,0,124,2,124,1,136,0,131,2,1, - 0,124,1,83,0,41,7,122,252,68,101,99,111,114,97,116, - 111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,97, - 116,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, - 110,103,32,114,101,113,117,101,115,116,101,100,32,109,97,116, - 99,104,101,115,32,116,104,101,32,111,110,101,32,116,104,101, - 10,32,32,32,32,108,111,97,100,101,114,32,99,97,110,32, - 104,97,110,100,108,101,46,10,10,32,32,32,32,84,104,101, - 32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,32, - 40,115,101,108,102,41,32,109,117,115,116,32,100,101,102,105, - 110,101,32,95,110,97,109,101,32,119,104,105,99,104,32,116, - 104,101,32,115,101,99,111,110,100,32,97,114,103,117,109,101, - 110,116,32,105,115,10,32,32,32,32,99,111,109,112,97,114, - 101,100,32,97,103,97,105,110,115,116,46,32,73,102,32,116, - 104,101,32,99,111,109,112,97,114,105,115,111,110,32,102,97, - 105,108,115,32,116,104,101,110,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,10, - 10,32,32,32,32,78,99,2,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,31,0,0,0,115,66,0,0,0, - 124,1,100,0,107,8,114,16,124,0,106,0,125,1,110,32, - 124,0,106,0,124,1,107,3,114,48,116,1,100,1,124,0, - 106,0,124,1,102,2,22,0,124,1,100,2,141,2,130,1, - 136,0,124,0,124,1,102,2,124,2,158,2,124,3,142,1, - 83,0,41,3,78,122,30,108,111,97,100,101,114,32,102,111, - 114,32,37,115,32,99,97,110,110,111,116,32,104,97,110,100, - 108,101,32,37,115,41,1,218,4,110,97,109,101,41,2,114, - 104,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,104,0,0,0,218,4, - 97,114,103,115,90,6,107,119,97,114,103,115,41,1,218,6, - 109,101,116,104,111,100,114,2,0,0,0,114,4,0,0,0, - 218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,114, - 97,112,112,101,114,188,1,0,0,115,18,0,0,0,0,1, - 8,1,8,1,10,1,4,1,8,255,2,1,2,255,6,2, - 122,40,95,99,104,101,99,107,95,110,97,109,101,46,60,108, - 111,99,97,108,115,62,46,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,99,2,0,0,0,0, - 0,0,0,3,0,0,0,7,0,0,0,83,0,0,0,115, - 56,0,0,0,100,1,68,0,93,32,125,2,116,0,124,1, - 124,2,131,2,114,4,116,1,124,0,124,2,116,2,124,1, - 124,2,131,2,131,3,1,0,113,4,124,0,106,3,160,4, - 124,1,106,3,161,1,1,0,100,0,83,0,41,2,78,41, - 4,218,10,95,95,109,111,100,117,108,101,95,95,218,8,95, - 95,110,97,109,101,95,95,218,12,95,95,113,117,97,108,110, - 97,109,101,95,95,218,7,95,95,100,111,99,95,95,41,5, - 218,7,104,97,115,97,116,116,114,218,7,115,101,116,97,116, - 116,114,218,7,103,101,116,97,116,116,114,218,8,95,95,100, - 105,99,116,95,95,218,6,117,112,100,97,116,101,41,3,90, - 3,110,101,119,90,3,111,108,100,114,55,0,0,0,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,218,5,95, - 119,114,97,112,199,1,0,0,115,8,0,0,0,0,1,8, - 1,10,1,20,1,122,26,95,99,104,101,99,107,95,110,97, - 109,101,46,60,108,111,99,97,108,115,62,46,95,119,114,97, - 112,41,1,78,41,3,218,10,95,98,111,111,116,115,116,114, - 97,112,114,119,0,0,0,218,9,78,97,109,101,69,114,114, - 111,114,41,3,114,108,0,0,0,114,109,0,0,0,114,119, - 0,0,0,114,2,0,0,0,41,1,114,108,0,0,0,114, - 4,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, - 101,180,1,0,0,115,14,0,0,0,0,8,14,7,2,1, - 10,1,14,2,14,5,10,1,114,122,0,0,0,99,2,0, - 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, - 0,0,115,60,0,0,0,124,0,160,0,124,1,161,1,92, - 2,125,2,125,3,124,2,100,1,107,8,114,56,116,1,124, - 3,131,1,114,56,100,2,125,4,116,2,160,3,124,4,160, - 4,124,3,100,3,25,0,161,1,116,5,161,2,1,0,124, - 2,83,0,41,4,122,155,84,114,121,32,116,111,32,102,105, - 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,32,98,121,32,100,101,108,101,103,97,116,105, - 110,103,32,116,111,10,32,32,32,32,115,101,108,102,46,102, - 105,110,100,95,108,111,97,100,101,114,40,41,46,10,10,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,105,110,32, - 102,97,118,111,114,32,111,102,32,102,105,110,100,101,114,46, - 102,105,110,100,95,115,112,101,99,40,41,46,10,10,32,32, - 32,32,78,122,44,78,111,116,32,105,109,112,111,114,116,105, - 110,103,32,100,105,114,101,99,116,111,114,121,32,123,125,58, - 32,109,105,115,115,105,110,103,32,95,95,105,110,105,116,95, - 95,114,62,0,0,0,41,6,218,11,102,105,110,100,95,108, - 111,97,100,101,114,114,31,0,0,0,114,64,0,0,0,114, - 65,0,0,0,114,50,0,0,0,218,13,73,109,112,111,114, - 116,87,97,114,110,105,110,103,41,5,114,106,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, + 111,115,46,112,97,116,104,46,115,112,108,105,116,40,41,46, + 233,1,0,0,0,41,1,90,8,109,97,120,115,112,108,105, + 116,218,0,41,6,114,18,0,0,0,114,26,0,0,0,218, + 10,114,112,97,114,116,105,116,105,111,110,114,30,0,0,0, + 218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108, + 105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110, + 116,218,1,95,218,4,116,97,105,108,114,16,0,0,0,114, + 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,11, + 95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,115, + 16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,1, + 18,1,14,1,114,42,0,0,0,99,1,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,10, + 0,0,0,116,0,160,1,124,0,161,1,83,0,41,1,122, + 126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,10, + 10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,97, + 114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,111, + 32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32, + 116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,101, + 120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,40, + 101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,32, + 114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,41, + 2,114,1,0,0,0,90,4,115,116,97,116,41,1,114,39, + 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, + 0,0,218,10,95,112,97,116,104,95,115,116,97,116,80,0, + 0,0,115,2,0,0,0,0,7,114,43,0,0,0,99,2, + 0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,67, + 0,0,0,115,50,0,0,0,122,12,116,0,124,0,131,1, + 125,2,87,0,110,22,4,0,116,1,107,10,114,34,1,0, + 1,0,1,0,89,0,100,1,83,0,88,0,124,2,106,2, + 100,2,64,0,124,1,107,2,83,0,41,3,122,49,84,101, + 115,116,32,119,104,101,116,104,101,114,32,116,104,101,32,112, + 97,116,104,32,105,115,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,109,111,100,101,32,116,121,112,101,46,70, + 105,0,240,0,0,41,3,114,43,0,0,0,218,7,79,83, + 69,114,114,111,114,218,7,115,116,95,109,111,100,101,41,3, + 114,39,0,0,0,218,4,109,111,100,101,90,9,115,116,97, + 116,95,105,110,102,111,114,2,0,0,0,114,2,0,0,0, + 114,4,0,0,0,218,18,95,112,97,116,104,95,105,115,95, + 109,111,100,101,95,116,121,112,101,90,0,0,0,115,10,0, + 0,0,0,2,2,1,12,1,14,1,8,1,114,47,0,0, + 0,99,1,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,100, + 1,131,2,83,0,41,2,122,31,82,101,112,108,97,99,101, + 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, + 46,105,115,102,105,108,101,46,105,0,128,0,0,41,1,114, + 47,0,0,0,41,1,114,39,0,0,0,114,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,218,12,95,112,97,116, + 104,95,105,115,102,105,108,101,99,0,0,0,115,2,0,0, + 0,0,2,114,48,0,0,0,99,1,0,0,0,0,0,0, + 0,1,0,0,0,3,0,0,0,67,0,0,0,115,22,0, + 0,0,124,0,115,12,116,0,160,1,161,0,125,0,116,2, + 124,0,100,1,131,2,83,0,41,2,122,30,82,101,112,108, + 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, + 97,116,104,46,105,115,100,105,114,46,105,0,64,0,0,41, + 3,114,1,0,0,0,218,6,103,101,116,99,119,100,114,47, + 0,0,0,41,1,114,39,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,218,11,95,112,97,116,104, + 95,105,115,100,105,114,104,0,0,0,115,6,0,0,0,0, + 2,4,1,8,1,114,50,0,0,0,99,1,0,0,0,0, + 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, + 26,0,0,0,124,0,160,0,116,1,161,1,112,24,124,0, + 100,1,100,2,133,2,25,0,116,2,107,6,83,0,41,3, + 122,142,82,101,112,108,97,99,101,109,101,110,116,32,102,111, + 114,32,111,115,46,112,97,116,104,46,105,115,97,98,115,46, + 10,10,32,32,32,32,67,111,110,115,105,100,101,114,115,32, + 97,32,87,105,110,100,111,119,115,32,100,114,105,118,101,45, + 114,101,108,97,116,105,118,101,32,112,97,116,104,32,40,110, + 111,32,100,114,105,118,101,44,32,98,117,116,32,115,116,97, + 114,116,115,32,119,105,116,104,32,115,108,97,115,104,41,32, + 116,111,10,32,32,32,32,115,116,105,108,108,32,98,101,32, + 34,97,98,115,111,108,117,116,101,34,46,10,32,32,32,32, + 114,34,0,0,0,233,3,0,0,0,41,3,114,8,0,0, + 0,114,26,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,41,1,114,39, + 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, + 0,0,218,11,95,112,97,116,104,95,105,115,97,98,115,111, + 0,0,0,115,2,0,0,0,0,6,114,53,0,0,0,105, + 182,1,0,0,99,3,0,0,0,0,0,0,0,6,0,0, + 0,11,0,0,0,67,0,0,0,115,162,0,0,0,100,1, + 160,0,124,0,116,1,124,0,131,1,161,2,125,3,116,2, + 160,3,124,3,116,2,106,4,116,2,106,5,66,0,116,2, + 106,6,66,0,124,2,100,2,64,0,161,3,125,4,122,50, + 116,7,160,8,124,4,100,3,161,2,143,16,125,5,124,5, + 160,9,124,1,161,1,1,0,87,0,53,0,81,0,82,0, + 88,0,116,2,160,10,124,3,124,0,161,2,1,0,87,0, + 110,58,4,0,116,11,107,10,114,156,1,0,1,0,1,0, + 122,14,116,2,160,12,124,3,161,1,1,0,87,0,110,20, + 4,0,116,11,107,10,114,148,1,0,1,0,1,0,89,0, + 110,2,88,0,130,0,89,0,110,2,88,0,100,4,83,0, + 41,5,122,162,66,101,115,116,45,101,102,102,111,114,116,32, + 102,117,110,99,116,105,111,110,32,116,111,32,119,114,105,116, + 101,32,100,97,116,97,32,116,111,32,97,32,112,97,116,104, + 32,97,116,111,109,105,99,97,108,108,121,46,10,32,32,32, + 32,66,101,32,112,114,101,112,97,114,101,100,32,116,111,32, + 104,97,110,100,108,101,32,97,32,70,105,108,101,69,120,105, + 115,116,115,69,114,114,111,114,32,105,102,32,99,111,110,99, + 117,114,114,101,110,116,32,119,114,105,116,105,110,103,32,111, + 102,32,116,104,101,10,32,32,32,32,116,101,109,112,111,114, + 97,114,121,32,102,105,108,101,32,105,115,32,97,116,116,101, + 109,112,116,101,100,46,122,5,123,125,46,123,125,105,182,1, + 0,0,90,2,119,98,78,41,13,218,6,102,111,114,109,97, + 116,218,2,105,100,114,1,0,0,0,90,4,111,112,101,110, + 90,6,79,95,69,88,67,76,90,7,79,95,67,82,69,65, + 84,90,8,79,95,87,82,79,78,76,89,218,3,95,105,111, + 218,6,70,105,108,101,73,79,218,5,119,114,105,116,101,218, + 7,114,101,112,108,97,99,101,114,44,0,0,0,90,6,117, + 110,108,105,110,107,41,6,114,39,0,0,0,114,21,0,0, + 0,114,46,0,0,0,90,8,112,97,116,104,95,116,109,112, + 90,2,102,100,218,4,102,105,108,101,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,218,13,95,119,114,105,116, + 101,95,97,116,111,109,105,99,120,0,0,0,115,30,0,0, + 0,0,5,16,1,6,1,16,0,6,255,4,2,2,3,14, + 1,20,1,16,1,14,1,2,1,14,1,14,1,6,1,114, + 61,0,0,0,105,73,13,0,0,114,23,0,0,0,114,13, + 0,0,0,115,2,0,0,0,13,10,90,11,95,95,112,121, + 99,97,99,104,101,95,95,122,4,111,112,116,45,122,3,46, + 112,121,122,4,46,112,121,99,78,41,1,218,12,111,112,116, + 105,109,105,122,97,116,105,111,110,99,2,0,0,0,1,0, + 0,0,12,0,0,0,5,0,0,0,67,0,0,0,115,88, + 1,0,0,124,1,100,1,107,9,114,52,116,0,160,1,100, + 2,116,2,161,2,1,0,124,2,100,1,107,9,114,40,100, + 3,125,3,116,3,124,3,131,1,130,1,124,1,114,48,100, + 4,110,2,100,5,125,2,116,4,160,5,124,0,161,1,125, + 0,116,6,124,0,131,1,92,2,125,4,125,5,124,5,160, + 7,100,6,161,1,92,3,125,6,125,7,125,8,116,8,106, + 9,106,10,125,9,124,9,100,1,107,8,114,114,116,11,100, + 7,131,1,130,1,100,4,160,12,124,6,114,126,124,6,110, + 2,124,8,124,7,124,9,103,3,161,1,125,10,124,2,100, + 1,107,8,114,172,116,8,106,13,106,14,100,8,107,2,114, + 164,100,4,125,2,110,8,116,8,106,13,106,14,125,2,116, + 15,124,2,131,1,125,2,124,2,100,4,107,3,114,224,124, + 2,160,16,161,0,115,210,116,17,100,9,160,18,124,2,161, + 1,131,1,130,1,100,10,160,18,124,10,116,19,124,2,161, + 3,125,10,124,10,116,20,100,8,25,0,23,0,125,11,116, + 8,106,21,100,1,107,9,144,1,114,76,116,22,124,4,131, + 1,144,1,115,16,116,23,116,4,160,24,161,0,124,4,131, + 2,125,4,124,4,100,5,25,0,100,11,107,2,144,1,114, + 56,124,4,100,8,25,0,116,25,107,7,144,1,114,56,124, + 4,100,12,100,1,133,2,25,0,125,4,116,23,116,8,106, + 21,124,4,160,26,116,25,161,1,124,11,131,3,83,0,116, + 23,124,4,116,27,124,11,131,3,83,0,41,13,97,254,2, + 0,0,71,105,118,101,110,32,116,104,101,32,112,97,116,104, + 32,116,111,32,97,32,46,112,121,32,102,105,108,101,44,32, + 114,101,116,117,114,110,32,116,104,101,32,112,97,116,104,32, + 116,111,32,105,116,115,32,46,112,121,99,32,102,105,108,101, + 46,10,10,32,32,32,32,84,104,101,32,46,112,121,32,102, + 105,108,101,32,100,111,101,115,32,110,111,116,32,110,101,101, + 100,32,116,111,32,101,120,105,115,116,59,32,116,104,105,115, + 32,115,105,109,112,108,121,32,114,101,116,117,114,110,115,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,10, + 32,32,32,32,46,112,121,99,32,102,105,108,101,32,99,97, + 108,99,117,108,97,116,101,100,32,97,115,32,105,102,32,116, + 104,101,32,46,112,121,32,102,105,108,101,32,119,101,114,101, + 32,105,109,112,111,114,116,101,100,46,10,10,32,32,32,32, + 84,104,101,32,39,111,112,116,105,109,105,122,97,116,105,111, + 110,39,32,112,97,114,97,109,101,116,101,114,32,99,111,110, + 116,114,111,108,115,32,116,104,101,32,112,114,101,115,117,109, + 101,100,32,111,112,116,105,109,105,122,97,116,105,111,110,32, + 108,101,118,101,108,32,111,102,10,32,32,32,32,116,104,101, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,46,32, + 73,102,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,105,115,32,110,111,116,32,78,111,110,101,44,32,116, + 104,101,32,115,116,114,105,110,103,32,114,101,112,114,101,115, + 101,110,116,97,116,105,111,110,10,32,32,32,32,111,102,32, + 116,104,101,32,97,114,103,117,109,101,110,116,32,105,115,32, + 116,97,107,101,110,32,97,110,100,32,118,101,114,105,102,105, + 101,100,32,116,111,32,98,101,32,97,108,112,104,97,110,117, + 109,101,114,105,99,32,40,101,108,115,101,32,86,97,108,117, + 101,69,114,114,111,114,10,32,32,32,32,105,115,32,114,97, + 105,115,101,100,41,46,10,10,32,32,32,32,84,104,101,32, + 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,112, + 97,114,97,109,101,116,101,114,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,73,102,32,100,101,98,117,103, + 95,111,118,101,114,114,105,100,101,32,105,115,32,110,111,116, + 32,78,111,110,101,44,10,32,32,32,32,97,32,84,114,117, + 101,32,118,97,108,117,101,32,105,115,32,116,104,101,32,115, + 97,109,101,32,97,115,32,115,101,116,116,105,110,103,32,39, + 111,112,116,105,109,105,122,97,116,105,111,110,39,32,116,111, + 32,116,104,101,32,101,109,112,116,121,32,115,116,114,105,110, + 103,10,32,32,32,32,119,104,105,108,101,32,97,32,70,97, + 108,115,101,32,118,97,108,117,101,32,105,115,32,101,113,117, + 105,118,97,108,101,110,116,32,116,111,32,115,101,116,116,105, + 110,103,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,116,111,32,39,49,39,46,10,10,32,32,32,32,73, + 102,32,115,121,115,46,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,46,99,97,99,104,101,95,116,97,103,32,105, + 115,32,78,111,110,101,32,116,104,101,110,32,78,111,116,73, + 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,46,10,10,32,32,32,32, + 78,122,70,116,104,101,32,100,101,98,117,103,95,111,118,101, + 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,117, + 115,101,32,39,111,112,116,105,109,105,122,97,116,105,111,110, + 39,32,105,110,115,116,101,97,100,122,50,100,101,98,117,103, + 95,111,118,101,114,114,105,100,101,32,111,114,32,111,112,116, + 105,109,105,122,97,116,105,111,110,32,109,117,115,116,32,98, + 101,32,115,101,116,32,116,111,32,78,111,110,101,114,35,0, + 0,0,114,34,0,0,0,218,1,46,122,36,115,121,115,46, + 105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,99, + 97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,101, + 233,0,0,0,0,122,24,123,33,114,125,32,105,115,32,110, + 111,116,32,97,108,112,104,97,110,117,109,101,114,105,99,122, + 7,123,125,46,123,125,123,125,250,1,58,114,23,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,1,0,0,0,218,6,102,115,112,97,116,104,114, + 42,0,0,0,114,36,0,0,0,114,6,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,31, + 0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,105, + 109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110, + 117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,54, + 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,53,0,0, + 0,114,33,0,0,0,114,49,0,0,0,114,26,0,0,0, + 218,6,108,115,116,114,105,112,218,8,95,80,89,67,65,67, + 72,69,41,12,114,39,0,0,0,90,14,100,101,98,117,103, + 95,111,118,101,114,114,105,100,101,114,62,0,0,0,218,7, + 109,101,115,115,97,103,101,218,4,104,101,97,100,114,41,0, + 0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,114, + 101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,116, + 95,102,105,108,101,110,97,109,101,218,8,102,105,108,101,110, + 97,109,101,114,2,0,0,0,114,2,0,0,0,114,4,0, + 0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,115, + 111,117,114,99,101,32,1,0,0,115,72,0,0,0,0,18, + 8,1,6,1,2,255,4,2,8,1,4,1,8,1,12,1, + 10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,1, + 12,1,6,2,8,1,8,1,8,1,8,1,14,1,14,1, + 12,1,12,9,10,1,14,5,28,1,12,4,2,1,4,1, + 8,1,2,253,4,5,114,89,0,0,0,99,1,0,0,0, + 0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,0, + 115,46,1,0,0,116,0,106,1,106,2,100,1,107,8,114, + 20,116,3,100,2,131,1,130,1,116,4,160,5,124,0,161, + 1,125,0,116,6,124,0,131,1,92,2,125,1,125,2,100, + 3,125,3,116,0,106,7,100,1,107,9,114,102,116,0,106, + 7,160,8,116,9,161,1,125,4,124,1,160,10,124,4,116, + 11,23,0,161,1,114,102,124,1,116,12,124,4,131,1,100, + 1,133,2,25,0,125,1,100,4,125,3,124,3,115,144,116, + 6,124,1,131,1,92,2,125,1,125,5,124,5,116,13,107, + 3,114,144,116,14,116,13,155,0,100,5,124,0,155,2,157, + 3,131,1,130,1,124,2,160,15,100,6,161,1,125,6,124, + 6,100,7,107,7,114,178,116,14,100,8,124,2,155,2,157, + 2,131,1,130,1,110,92,124,6,100,9,107,2,144,1,114, + 14,124,2,160,16,100,6,100,10,161,2,100,11,25,0,125, + 7,124,7,160,10,116,17,161,1,115,228,116,14,100,12,116, + 17,155,2,157,2,131,1,130,1,124,7,116,12,116,17,131, + 1,100,1,133,2,25,0,125,8,124,8,160,18,161,0,144, + 1,115,14,116,14,100,13,124,7,155,2,100,14,157,3,131, + 1,130,1,124,2,160,19,100,6,161,1,100,15,25,0,125, + 9,116,20,124,1,124,9,116,21,100,15,25,0,23,0,131, + 2,83,0,41,16,97,110,1,0,0,71,105,118,101,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,97,32,46,112, + 121,99,46,32,102,105,108,101,44,32,114,101,116,117,114,110, + 32,116,104,101,32,112,97,116,104,32,116,111,32,105,116,115, + 32,46,112,121,32,102,105,108,101,46,10,10,32,32,32,32, + 84,104,101,32,46,112,121,99,32,102,105,108,101,32,100,111, + 101,115,32,110,111,116,32,110,101,101,100,32,116,111,32,101, + 120,105,115,116,59,32,116,104,105,115,32,115,105,109,112,108, + 121,32,114,101,116,117,114,110,115,32,116,104,101,32,112,97, + 116,104,32,116,111,10,32,32,32,32,116,104,101,32,46,112, + 121,32,102,105,108,101,32,99,97,108,99,117,108,97,116,101, + 100,32,116,111,32,99,111,114,114,101,115,112,111,110,100,32, + 116,111,32,116,104,101,32,46,112,121,99,32,102,105,108,101, + 46,32,32,73,102,32,112,97,116,104,32,100,111,101,115,10, + 32,32,32,32,110,111,116,32,99,111,110,102,111,114,109,32, + 116,111,32,80,69,80,32,51,49,52,55,47,52,56,56,32, + 102,111,114,109,97,116,44,32,86,97,108,117,101,69,114,114, + 111,114,32,119,105,108,108,32,98,101,32,114,97,105,115,101, + 100,46,32,73,102,10,32,32,32,32,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,32,116, + 104,101,110,32,78,111,116,73,109,112,108,101,109,101,110,116, + 101,100,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,46,10,10,32,32,32,32,78,122,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,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,63,0,0,0,62,2,0,0,0,114,23,0,0, + 0,114,51,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,51,0,0,0,114,23,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, + 64,0,0,0,41,22,114,6,0,0,0,114,71,0,0,0, + 114,72,0,0,0,114,73,0,0,0,114,1,0,0,0,114, + 70,0,0,0,114,42,0,0,0,114,81,0,0,0,114,25, + 0,0,0,114,26,0,0,0,114,8,0,0,0,114,30,0, + 0,0,114,18,0,0,0,114,83,0,0,0,114,78,0,0, + 0,218,5,99,111,117,110,116,114,38,0,0,0,114,79,0, + 0,0,114,77,0,0,0,218,9,112,97,114,116,105,116,105, + 111,110,114,33,0,0,0,218,15,83,79,85,82,67,69,95, + 83,85,70,70,73,88,69,83,41,10,114,39,0,0,0,114, + 85,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,62,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,2,0,0,0,114,2,0,0,0,114,4,0,0,0, + 218,17,115,111,117,114,99,101,95,102,114,111,109,95,99,97, + 99,104,101,103,1,0,0,115,52,0,0,0,0,9,12,1, + 8,1,10,1,12,1,4,1,10,1,12,1,14,1,16,1, + 4,1,4,1,12,1,8,1,18,2,10,1,8,1,16,1, + 10,1,16,1,10,1,14,2,16,1,10,1,16,2,14,1, + 114,94,0,0,0,99,1,0,0,0,0,0,0,0,5,0, + 0,0,9,0,0,0,67,0,0,0,115,126,0,0,0,116, + 0,124,0,131,1,100,1,107,2,114,16,100,2,83,0,124, + 0,160,1,100,3,161,1,92,3,125,1,125,2,125,3,124, + 1,114,56,124,3,160,2,161,0,100,4,100,5,133,2,25, + 0,100,6,107,3,114,60,124,0,83,0,122,12,116,3,124, + 0,131,1,125,4,87,0,110,36,4,0,116,4,116,5,102, + 2,107,10,114,108,1,0,1,0,1,0,124,0,100,2,100, + 5,133,2,25,0,125,4,89,0,110,2,88,0,116,6,124, + 4,131,1,114,122,124,4,83,0,124,0,83,0,41,7,122, + 188,67,111,110,118,101,114,116,32,97,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,32,112,97,116,104,32,116,111, + 32,97,32,115,111,117,114,99,101,32,112,97,116,104,32,40, + 105,102,32,112,111,115,115,105,98,108,101,41,46,10,10,32, + 32,32,32,84,104,105,115,32,102,117,110,99,116,105,111,110, + 32,101,120,105,115,116,115,32,112,117,114,101,108,121,32,102, + 111,114,32,98,97,99,107,119,97,114,100,115,45,99,111,109, + 112,97,116,105,98,105,108,105,116,121,32,102,111,114,10,32, + 32,32,32,80,121,73,109,112,111,114,116,95,69,120,101,99, + 67,111,100,101,77,111,100,117,108,101,87,105,116,104,70,105, + 108,101,110,97,109,101,115,40,41,32,105,110,32,116,104,101, + 32,67,32,65,80,73,46,10,10,32,32,32,32,114,64,0, + 0,0,78,114,63,0,0,0,233,253,255,255,255,233,255,255, + 255,255,90,2,112,121,41,7,114,18,0,0,0,114,36,0, + 0,0,218,5,108,111,119,101,114,114,94,0,0,0,114,73, + 0,0,0,114,78,0,0,0,114,48,0,0,0,41,5,218, + 13,98,121,116,101,99,111,100,101,95,112,97,116,104,114,87, + 0,0,0,114,40,0,0,0,90,9,101,120,116,101,110,115, + 105,111,110,218,11,115,111,117,114,99,101,95,112,97,116,104, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,218, - 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, - 105,109,208,1,0,0,115,10,0,0,0,0,10,14,1,16, - 1,4,1,22,1,114,129,0,0,0,99,3,0,0,0,0, - 0,0,0,6,0,0,0,4,0,0,0,67,0,0,0,115, - 158,0,0,0,124,0,100,1,100,2,133,2,25,0,125,3, - 124,3,116,0,107,3,114,60,100,3,124,1,155,2,100,4, - 124,3,155,2,157,4,125,4,116,1,160,2,100,5,124,4, - 161,2,1,0,116,3,124,4,102,1,124,2,142,1,130,1, - 116,4,124,0,131,1,100,6,107,0,114,102,100,7,124,1, - 155,2,157,2,125,4,116,1,160,2,100,5,124,4,161,2, - 1,0,116,5,124,4,131,1,130,1,116,6,124,0,100,2, - 100,8,133,2,25,0,131,1,125,5,124,5,100,9,64,0, - 114,154,100,10,124,5,155,2,100,11,124,1,155,2,157,4, - 125,4,116,3,124,4,102,1,124,2,142,1,130,1,124,5, - 83,0,41,12,97,84,2,0,0,80,101,114,102,111,114,109, - 32,98,97,115,105,99,32,118,97,108,105,100,105,116,121,32, - 99,104,101,99,107,105,110,103,32,111,102,32,97,32,112,121, - 99,32,104,101,97,100,101,114,32,97,110,100,32,114,101,116, - 117,114,110,32,116,104,101,32,102,108,97,103,115,32,102,105, - 101,108,100,44,10,32,32,32,32,119,104,105,99,104,32,100, - 101,116,101,114,109,105,110,101,115,32,104,111,119,32,116,104, - 101,32,112,121,99,32,115,104,111,117,108,100,32,98,101,32, - 102,117,114,116,104,101,114,32,118,97,108,105,100,97,116,101, - 100,32,97,103,97,105,110,115,116,32,116,104,101,32,115,111, - 117,114,99,101,46,10,10,32,32,32,32,42,100,97,116,97, - 42,32,105,115,32,116,104,101,32,99,111,110,116,101,110,116, - 115,32,111,102,32,116,104,101,32,112,121,99,32,102,105,108, - 101,46,32,40,79,110,108,121,32,116,104,101,32,102,105,114, - 115,116,32,49,54,32,98,121,116,101,115,32,97,114,101,10, - 32,32,32,32,114,101,113,117,105,114,101,100,44,32,116,104, - 111,117,103,104,46,41,10,10,32,32,32,32,42,110,97,109, - 101,42,32,105,115,32,116,104,101,32,110,97,109,101,32,111, - 102,32,116,104,101,32,109,111,100,117,108,101,32,98,101,105, - 110,103,32,105,109,112,111,114,116,101,100,46,32,73,116,32, - 105,115,32,117,115,101,100,32,102,111,114,32,108,111,103,103, - 105,110,103,46,10,10,32,32,32,32,42,101,120,99,95,100, - 101,116,97,105,108,115,42,32,105,115,32,97,32,100,105,99, - 116,105,111,110,97,114,121,32,112,97,115,115,101,100,32,116, - 111,32,73,109,112,111,114,116,69,114,114,111,114,32,105,102, - 32,105,116,32,114,97,105,115,101,100,32,102,111,114,10,32, - 32,32,32,105,109,112,114,111,118,101,100,32,100,101,98,117, - 103,103,105,110,103,46,10,10,32,32,32,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101, - 100,32,119,104,101,110,32,116,104,101,32,109,97,103,105,99, - 32,110,117,109,98,101,114,32,105,115,32,105,110,99,111,114, - 114,101,99,116,32,111,114,32,119,104,101,110,32,116,104,101, - 32,102,108,97,103,115,10,32,32,32,32,102,105,101,108,100, - 32,105,115,32,105,110,118,97,108,105,100,46,32,69,79,70, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, - 119,104,101,110,32,116,104,101,32,100,97,116,97,32,105,115, - 32,102,111,117,110,100,32,116,111,32,98,101,32,116,114,117, - 110,99,97,116,101,100,46,10,10,32,32,32,32,78,114,12, - 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,122,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,120,0,0,0,218,16,95,118,101,114,98,111,115,101,95, - 109,101,115,115,97,103,101,114,105,0,0,0,114,31,0,0, - 0,218,8,69,79,70,69,114,114,111,114,114,19,0,0,0, - 41,6,114,56,0,0,0,114,104,0,0,0,218,11,101,120, - 99,95,100,101,116,97,105,108,115,90,5,109,97,103,105,99, - 114,82,0,0,0,114,72,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,218,13,95,99,108,97,115, - 115,105,102,121,95,112,121,99,225,1,0,0,115,28,0,0, - 0,0,16,12,1,8,1,16,1,12,1,12,1,12,1,10, - 1,12,1,8,1,16,2,8,1,16,1,12,1,114,137,0, - 0,0,99,5,0,0,0,0,0,0,0,6,0,0,0,4, - 0,0,0,67,0,0,0,115,112,0,0,0,116,0,124,0, - 100,1,100,2,133,2,25,0,131,1,124,1,100,3,64,0, - 107,3,114,58,100,4,124,3,155,2,157,2,125,5,116,1, - 160,2,100,5,124,5,161,2,1,0,116,3,124,5,102,1, - 124,4,142,1,130,1,124,2,100,6,107,9,114,108,116,0, - 124,0,100,2,100,7,133,2,25,0,131,1,124,2,100,3, - 64,0,107,3,114,108,116,3,100,4,124,3,155,2,157,2, - 102,1,124,4,142,1,130,1,100,6,83,0,41,8,97,7, - 2,0,0,86,97,108,105,100,97,116,101,32,97,32,112,121, - 99,32,97,103,97,105,110,115,116,32,116,104,101,32,115,111, - 117,114,99,101,32,108,97,115,116,45,109,111,100,105,102,105, - 101,100,32,116,105,109,101,46,10,10,32,32,32,32,42,100, - 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116, - 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32, - 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32, - 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97, - 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46, - 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,109, - 116,105,109,101,42,32,105,115,32,116,104,101,32,108,97,115, - 116,32,109,111,100,105,102,105,101,100,32,116,105,109,101,115, - 116,97,109,112,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,46,10,10,32,32,32,32,42,115, - 111,117,114,99,101,95,115,105,122,101,42,32,105,115,32,78, - 111,110,101,32,111,114,32,116,104,101,32,115,105,122,101,32, + 15,95,103,101,116,95,115,111,117,114,99,101,102,105,108,101, + 143,1,0,0,115,20,0,0,0,0,7,12,1,4,1,16, + 1,24,1,4,1,2,1,12,1,18,1,18,1,114,100,0, + 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,8, + 0,0,0,67,0,0,0,115,74,0,0,0,124,0,160,0, + 116,1,116,2,131,1,161,1,114,48,122,10,116,3,124,0, + 131,1,87,0,83,0,4,0,116,4,107,10,114,44,1,0, + 1,0,1,0,89,0,113,70,88,0,110,22,124,0,160,0, + 116,1,116,5,131,1,161,1,114,66,124,0,83,0,100,0, + 83,0,100,0,83,0,41,1,78,41,6,218,8,101,110,100, + 115,119,105,116,104,218,5,116,117,112,108,101,114,93,0,0, + 0,114,89,0,0,0,114,73,0,0,0,114,80,0,0,0, + 41,1,114,88,0,0,0,114,2,0,0,0,114,2,0,0, + 0,114,4,0,0,0,218,11,95,103,101,116,95,99,97,99, + 104,101,100,162,1,0,0,115,16,0,0,0,0,1,14,1, + 2,1,10,1,14,1,8,1,14,1,4,2,114,103,0,0, + 0,99,1,0,0,0,0,0,0,0,2,0,0,0,8,0, + 0,0,67,0,0,0,115,52,0,0,0,122,14,116,0,124, + 0,131,1,106,1,125,1,87,0,110,24,4,0,116,2,107, + 10,114,38,1,0,1,0,1,0,100,1,125,1,89,0,110, + 2,88,0,124,1,100,2,79,0,125,1,124,1,83,0,41, + 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, + 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, + 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, + 41,3,114,43,0,0,0,114,45,0,0,0,114,44,0,0, + 0,41,2,114,39,0,0,0,114,46,0,0,0,114,2,0, + 0,0,114,2,0,0,0,114,4,0,0,0,218,10,95,99, + 97,108,99,95,109,111,100,101,174,1,0,0,115,12,0,0, + 0,0,2,2,1,14,1,14,1,10,3,8,1,114,105,0, + 0,0,99,1,0,0,0,0,0,0,0,3,0,0,0,8, + 0,0,0,3,0,0,0,115,68,0,0,0,100,6,135,0, + 102,1,100,2,100,3,132,9,125,1,122,10,116,0,106,1, + 125,2,87,0,110,28,4,0,116,2,107,10,114,52,1,0, + 1,0,1,0,100,4,100,5,132,0,125,2,89,0,110,2, + 88,0,124,2,124,1,136,0,131,2,1,0,124,1,83,0, + 41,7,122,252,68,101,99,111,114,97,116,111,114,32,116,111, + 32,118,101,114,105,102,121,32,116,104,97,116,32,116,104,101, + 32,109,111,100,117,108,101,32,98,101,105,110,103,32,114,101, + 113,117,101,115,116,101,100,32,109,97,116,99,104,101,115,32, + 116,104,101,32,111,110,101,32,116,104,101,10,32,32,32,32, + 108,111,97,100,101,114,32,99,97,110,32,104,97,110,100,108, + 101,46,10,10,32,32,32,32,84,104,101,32,102,105,114,115, + 116,32,97,114,103,117,109,101,110,116,32,40,115,101,108,102, + 41,32,109,117,115,116,32,100,101,102,105,110,101,32,95,110, + 97,109,101,32,119,104,105,99,104,32,116,104,101,32,115,101, + 99,111,110,100,32,97,114,103,117,109,101,110,116,32,105,115, + 10,32,32,32,32,99,111,109,112,97,114,101,100,32,97,103, + 97,105,110,115,116,46,32,73,102,32,116,104,101,32,99,111, + 109,112,97,114,105,115,111,110,32,102,97,105,108,115,32,116, + 104,101,110,32,73,109,112,111,114,116,69,114,114,111,114,32, + 105,115,32,114,97,105,115,101,100,46,10,10,32,32,32,32, + 78,99,2,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,31,0,0,0,115,66,0,0,0,124,1,100,0,107, + 8,114,16,124,0,106,0,125,1,110,32,124,0,106,0,124, + 1,107,3,114,48,116,1,100,1,124,0,106,0,124,1,102, + 2,22,0,124,1,100,2,141,2,130,1,136,0,124,0,124, + 1,102,2,124,2,158,2,124,3,142,1,83,0,41,3,78, + 122,30,108,111,97,100,101,114,32,102,111,114,32,37,115,32, + 99,97,110,110,111,116,32,104,97,110,100,108,101,32,37,115, + 41,1,218,4,110,97,109,101,41,2,114,106,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,106,0,0,0,218,4,97,114,103,115,90, + 6,107,119,97,114,103,115,41,1,218,6,109,101,116,104,111, + 100,114,2,0,0,0,114,4,0,0,0,218,19,95,99,104, + 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, + 194,1,0,0,115,18,0,0,0,0,1,8,1,8,1,10, + 1,4,1,8,255,2,1,2,255,6,2,122,40,95,99,104, + 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, + 62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114, + 97,112,112,101,114,99,2,0,0,0,0,0,0,0,3,0, + 0,0,7,0,0,0,83,0,0,0,115,56,0,0,0,100, + 1,68,0,93,32,125,2,116,0,124,1,124,2,131,2,114, + 4,116,1,124,0,124,2,116,2,124,1,124,2,131,2,131, + 3,1,0,113,4,124,0,106,3,160,4,124,1,106,3,161, + 1,1,0,100,0,83,0,41,2,78,41,4,218,10,95,95, + 109,111,100,117,108,101,95,95,218,8,95,95,110,97,109,101, + 95,95,218,12,95,95,113,117,97,108,110,97,109,101,95,95, + 218,7,95,95,100,111,99,95,95,41,5,218,7,104,97,115, + 97,116,116,114,218,7,115,101,116,97,116,116,114,218,7,103, + 101,116,97,116,116,114,218,8,95,95,100,105,99,116,95,95, + 218,6,117,112,100,97,116,101,41,3,90,3,110,101,119,90, + 3,111,108,100,114,59,0,0,0,114,2,0,0,0,114,2, + 0,0,0,114,4,0,0,0,218,5,95,119,114,97,112,205, + 1,0,0,115,8,0,0,0,0,1,8,1,10,1,20,1, + 122,26,95,99,104,101,99,107,95,110,97,109,101,46,60,108, + 111,99,97,108,115,62,46,95,119,114,97,112,41,1,78,41, + 3,218,10,95,98,111,111,116,115,116,114,97,112,114,121,0, + 0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,114, + 110,0,0,0,114,111,0,0,0,114,121,0,0,0,114,2, + 0,0,0,41,1,114,110,0,0,0,114,4,0,0,0,218, + 11,95,99,104,101,99,107,95,110,97,109,101,186,1,0,0, + 115,14,0,0,0,0,8,14,7,2,1,10,1,14,2,14, + 5,10,1,114,124,0,0,0,99,2,0,0,0,0,0,0, + 0,5,0,0,0,6,0,0,0,67,0,0,0,115,60,0, + 0,0,124,0,160,0,124,1,161,1,92,2,125,2,125,3, + 124,2,100,1,107,8,114,56,116,1,124,3,131,1,114,56, + 100,2,125,4,116,2,160,3,124,4,160,4,124,3,100,3, + 25,0,161,1,116,5,161,2,1,0,124,2,83,0,41,4, + 122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32, + 98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111, + 10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108, + 111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114, + 32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,40,41,46,10,10,32,32,32,32,78,122,44, + 78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105, + 114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115, + 105,110,103,32,95,95,105,110,105,116,95,95,114,64,0,0, + 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114, + 114,18,0,0,0,114,66,0,0,0,114,67,0,0,0,114, + 54,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110, + 105,110,103,41,5,114,108,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,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,218,17,95,102,105,110, + 100,95,109,111,100,117,108,101,95,115,104,105,109,214,1,0, + 0,115,10,0,0,0,0,10,14,1,16,1,4,1,22,1, + 114,131,0,0,0,99,3,0,0,0,0,0,0,0,6,0, + 0,0,4,0,0,0,67,0,0,0,115,158,0,0,0,124, + 0,100,1,100,2,133,2,25,0,125,3,124,3,116,0,107, + 3,114,60,100,3,124,1,155,2,100,4,124,3,155,2,157, + 4,125,4,116,1,160,2,100,5,124,4,161,2,1,0,116, + 3,124,4,102,1,124,2,142,1,130,1,116,4,124,0,131, + 1,100,6,107,0,114,102,100,7,124,1,155,2,157,2,125, + 4,116,1,160,2,100,5,124,4,161,2,1,0,116,5,124, + 4,131,1,130,1,116,6,124,0,100,2,100,8,133,2,25, + 0,131,1,125,5,124,5,100,9,64,0,114,154,100,10,124, + 5,155,2,100,11,124,1,155,2,157,4,125,4,116,3,124, + 4,102,1,124,2,142,1,130,1,124,5,83,0,41,12,97, + 84,2,0,0,80,101,114,102,111,114,109,32,98,97,115,105, + 99,32,118,97,108,105,100,105,116,121,32,99,104,101,99,107, + 105,110,103,32,111,102,32,97,32,112,121,99,32,104,101,97, + 100,101,114,32,97,110,100,32,114,101,116,117,114,110,32,116, + 104,101,32,102,108,97,103,115,32,102,105,101,108,100,44,10, + 32,32,32,32,119,104,105,99,104,32,100,101,116,101,114,109, + 105,110,101,115,32,104,111,119,32,116,104,101,32,112,121,99, + 32,115,104,111,117,108,100,32,98,101,32,102,117,114,116,104, + 101,114,32,118,97,108,105,100,97,116,101,100,32,97,103,97, + 105,110,115,116,32,116,104,101,32,115,111,117,114,99,101,46, + 10,10,32,32,32,32,42,100,97,116,97,42,32,105,115,32, + 116,104,101,32,99,111,110,116,101,110,116,115,32,111,102,32, + 116,104,101,32,112,121,99,32,102,105,108,101,46,32,40,79, + 110,108,121,32,116,104,101,32,102,105,114,115,116,32,49,54, + 32,98,121,116,101,115,32,97,114,101,10,32,32,32,32,114, + 101,113,117,105,114,101,100,44,32,116,104,111,117,103,104,46, + 41,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, + 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, + 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, + 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, + 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, + 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, + 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, + 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, + 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, + 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, + 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, + 46,10,10,32,32,32,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,32,119,104,101, + 110,32,116,104,101,32,109,97,103,105,99,32,110,117,109,98, + 101,114,32,105,115,32,105,110,99,111,114,114,101,99,116,32, + 111,114,32,119,104,101,110,32,116,104,101,32,102,108,97,103, + 115,10,32,32,32,32,102,105,101,108,100,32,105,115,32,105, + 110,118,97,108,105,100,46,32,69,79,70,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,32,119,104,101,110,32, + 116,104,101,32,100,97,116,97,32,105,115,32,102,111,117,110, + 100,32,116,111,32,98,101,32,116,114,117,110,99,97,116,101, + 100,46,10,10,32,32,32,32,78,114,12,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,122,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,122,0,0,0, + 218,16,95,118,101,114,98,111,115,101,95,109,101,115,115,97, + 103,101,114,107,0,0,0,114,18,0,0,0,218,8,69,79, + 70,69,114,114,111,114,114,22,0,0,0,41,6,114,21,0, + 0,0,114,106,0,0,0,218,11,101,120,99,95,100,101,116, + 97,105,108,115,90,5,109,97,103,105,99,114,84,0,0,0, + 114,74,0,0,0,114,2,0,0,0,114,2,0,0,0,114, + 4,0,0,0,218,13,95,99,108,97,115,115,105,102,121,95, + 112,121,99,231,1,0,0,115,28,0,0,0,0,16,12,1, + 8,1,16,1,12,1,12,1,12,1,10,1,12,1,8,1, + 16,2,8,1,16,1,12,1,114,139,0,0,0,99,5,0, + 0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0, + 0,0,115,112,0,0,0,116,0,124,0,100,1,100,2,133, + 2,25,0,131,1,124,1,100,3,64,0,107,3,114,58,100, + 4,124,3,155,2,157,2,125,5,116,1,160,2,100,5,124, + 5,161,2,1,0,116,3,124,5,102,1,124,4,142,1,130, + 1,124,2,100,6,107,9,114,108,116,0,124,0,100,2,100, + 7,133,2,25,0,131,1,124,2,100,3,64,0,107,3,114, + 108,116,3,100,4,124,3,155,2,157,2,102,1,124,4,142, + 1,130,1,100,6,83,0,41,8,97,7,2,0,0,86,97, + 108,105,100,97,116,101,32,97,32,112,121,99,32,97,103,97, + 105,110,115,116,32,116,104,101,32,115,111,117,114,99,101,32, + 108,97,115,116,45,109,111,100,105,102,105,101,100,32,116,105, + 109,101,46,10,10,32,32,32,32,42,100,97,116,97,42,32, + 105,115,32,116,104,101,32,99,111,110,116,101,110,116,115,32, + 111,102,32,116,104,101,32,112,121,99,32,102,105,108,101,46, + 32,40,79,110,108,121,32,116,104,101,32,102,105,114,115,116, + 32,49,54,32,98,121,116,101,115,32,97,114,101,10,32,32, + 32,32,114,101,113,117,105,114,101,100,46,41,10,10,32,32, + 32,32,42,115,111,117,114,99,101,95,109,116,105,109,101,42, + 32,105,115,32,116,104,101,32,108,97,115,116,32,109,111,100, + 105,102,105,101,100,32,116,105,109,101,115,116,97,109,112,32, 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, - 108,101,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,131,0,0,0,233, - 12,0,0,0,108,3,0,0,0,255,127,255,127,3,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,2,123,125,78,114,130,0,0, - 0,41,4,114,19,0,0,0,114,120,0,0,0,114,134,0, - 0,0,114,105,0,0,0,41,6,114,56,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,104,0,0,0,114,136, - 0,0,0,114,82,0,0,0,114,2,0,0,0,114,2,0, - 0,0,114,4,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, - 2,2,0,0,115,16,0,0,0,0,19,24,1,10,1,12, - 1,12,1,8,1,22,255,2,2,114,141,0,0,0,99,4, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,38,0,0,0,124,0,100,1,100,2,133,2, - 25,0,124,1,107,3,114,34,116,0,100,3,124,2,155,2, - 157,2,102,1,124,3,142,1,130,1,100,4,83,0,41,5, - 97,243,1,0,0,86,97,108,105,100,97,116,101,32,97,32, - 104,97,115,104,45,98,97,115,101,100,32,112,121,99,32,98, - 121,32,99,104,101,99,107,105,110,103,32,116,104,101,32,114, - 101,97,108,32,115,111,117,114,99,101,32,104,97,115,104,32, - 97,103,97,105,110,115,116,32,116,104,101,32,111,110,101,32, - 105,110,10,32,32,32,32,116,104,101,32,112,121,99,32,104, - 101,97,100,101,114,46,10,10,32,32,32,32,42,100,97,116, - 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, - 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, - 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, - 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, - 10,32,32,32,32,114,101,113,117,105,114,101,100,46,41,10, - 10,32,32,32,32,42,115,111,117,114,99,101,95,104,97,115, - 104,42,32,105,115,32,116,104,101,32,105,109,112,111,114,116, - 108,105,98,46,117,116,105,108,46,115,111,117,114,99,101,95, - 104,97,115,104,40,41,32,111,102,32,116,104,101,32,115,111, - 117,114,99,101,32,102,105,108,101,46,10,10,32,32,32,32, - 42,110,97,109,101,42,32,105,115,32,116,104,101,32,110,97, - 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,46, - 32,73,116,32,105,115,32,117,115,101,100,32,102,111,114,32, - 108,111,103,103,105,110,103,46,10,10,32,32,32,32,42,101, - 120,99,95,100,101,116,97,105,108,115,42,32,105,115,32,97, - 32,100,105,99,116,105,111,110,97,114,121,32,112,97,115,115, - 101,100,32,116,111,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,102,32,105,116,32,114,97,105,115,101,100,32,102, - 111,114,10,32,32,32,32,105,109,112,114,111,118,101,100,32, - 100,101,98,117,103,103,105,110,103,46,10,10,32,32,32,32, - 65,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,32,105,102,32,116,104,101,32, - 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, - 101,46,10,10,32,32,32,32,114,131,0,0,0,114,130,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,105,0,0,0,41,4,114,56,0,0, - 0,218,11,115,111,117,114,99,101,95,104,97,115,104,114,104, - 0,0,0,114,136,0,0,0,114,2,0,0,0,114,2,0, - 0,0,114,4,0,0,0,218,18,95,118,97,108,105,100,97, - 116,101,95,104,97,115,104,95,112,121,99,30,2,0,0,115, - 12,0,0,0,0,17,16,1,2,1,8,255,2,2,2,254, - 114,143,0,0,0,99,4,0,0,0,0,0,0,0,5,0, - 0,0,5,0,0,0,67,0,0,0,115,82,0,0,0,116, - 0,160,1,124,0,161,1,125,4,116,2,124,4,116,3,131, - 2,114,58,116,4,160,5,100,1,124,2,161,2,1,0,124, - 3,100,2,107,9,114,52,116,6,160,7,124,4,124,3,161, - 2,1,0,124,4,83,0,110,20,116,8,100,3,160,9,124, - 2,161,1,124,1,124,2,100,4,141,3,130,1,100,2,83, - 0,41,5,122,35,67,111,109,112,105,108,101,32,98,121,116, - 101,99,111,100,101,32,97,115,32,102,111,117,110,100,32,105, - 110,32,97,32,112,121,99,46,122,21,99,111,100,101,32,111, - 98,106,101,99,116,32,102,114,111,109,32,123,33,114,125,78, - 122,23,78,111,110,45,99,111,100,101,32,111,98,106,101,99, - 116,32,105,110,32,123,33,114,125,41,2,114,104,0,0,0, - 114,35,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, - 120,0,0,0,114,134,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,105,0,0,0,114,50,0,0,0,41,5,114,56,0, - 0,0,114,104,0,0,0,114,96,0,0,0,114,97,0,0, - 0,218,4,99,111,100,101,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,218,17,95,99,111,109,112,105,108,101, - 95,98,121,116,101,99,111,100,101,54,2,0,0,115,20,0, - 0,0,0,2,10,1,10,1,12,1,8,1,12,1,6,2, - 10,1,2,0,2,255,114,149,0,0,0,114,62,0,0,0, - 99,3,0,0,0,0,0,0,0,4,0,0,0,5,0,0, - 0,67,0,0,0,115,70,0,0,0,116,0,116,1,131,1, - 125,3,124,3,160,2,116,3,100,1,131,1,161,1,1,0, - 124,3,160,2,116,3,124,1,131,1,161,1,1,0,124,3, - 160,2,116,3,124,2,131,1,161,1,1,0,124,3,160,2, - 116,4,160,5,124,0,161,1,161,1,1,0,124,3,83,0, - 41,2,122,43,80,114,111,100,117,99,101,32,116,104,101,32, - 100,97,116,97,32,102,111,114,32,97,32,116,105,109,101,115, - 116,97,109,112,45,98,97,115,101,100,32,112,121,99,46,114, - 62,0,0,0,41,6,218,9,98,121,116,101,97,114,114,97, - 121,114,133,0,0,0,218,6,101,120,116,101,110,100,114,17, - 0,0,0,114,144,0,0,0,218,5,100,117,109,112,115,41, - 4,114,148,0,0,0,218,5,109,116,105,109,101,114,140,0, - 0,0,114,56,0,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,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,67,2, - 0,0,115,12,0,0,0,0,2,8,1,14,1,14,1,14, - 1,16,1,114,154,0,0,0,84,99,3,0,0,0,0,0, - 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,80, - 0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,100, - 1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,131, - 1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,115, - 50,116,5,130,1,124,3,160,2,124,1,161,1,1,0,124, - 3,160,2,116,6,160,7,124,0,161,1,161,1,1,0,124, - 3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,116, - 104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,97, - 115,104,45,98,97,115,101,100,32,112,121,99,46,114,29,0, - 0,0,114,131,0,0,0,41,8,114,150,0,0,0,114,133, - 0,0,0,114,151,0,0,0,114,17,0,0,0,114,31,0, - 0,0,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,144,0,0,0,114,152,0,0,0,41,5,114,148, - 0,0,0,114,142,0,0,0,90,7,99,104,101,99,107,101, - 100,114,56,0,0,0,114,72,0,0,0,114,2,0,0,0, + 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,133,0,0,0,233,12,0,0,0,108, + 3,0,0,0,255,127,255,127,3,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,2,123,125,78,114,132,0,0,0,41,4,114,22, + 0,0,0,114,122,0,0,0,114,136,0,0,0,114,107,0, + 0,0,41,6,114,21,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,106,0,0,0,114,138,0,0,0,114,84, + 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,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,8,2,0,0,115, + 16,0,0,0,0,19,24,1,10,1,12,1,12,1,8,1, + 22,255,2,2,114,143,0,0,0,99,4,0,0,0,0,0, + 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, + 0,0,0,124,0,100,1,100,2,133,2,25,0,124,1,107, + 3,114,34,116,0,100,3,124,2,155,2,157,2,102,1,124, + 3,142,1,130,1,100,4,83,0,41,5,97,243,1,0,0, + 86,97,108,105,100,97,116,101,32,97,32,104,97,115,104,45, + 98,97,115,101,100,32,112,121,99,32,98,121,32,99,104,101, + 99,107,105,110,103,32,116,104,101,32,114,101,97,108,32,115, + 111,117,114,99,101,32,104,97,115,104,32,97,103,97,105,110, + 115,116,32,116,104,101,32,111,110,101,32,105,110,10,32,32, + 32,32,116,104,101,32,112,121,99,32,104,101,97,100,101,114, + 46,10,10,32,32,32,32,42,100,97,116,97,42,32,105,115, + 32,116,104,101,32,99,111,110,116,101,110,116,115,32,111,102, + 32,116,104,101,32,112,121,99,32,102,105,108,101,46,32,40, + 79,110,108,121,32,116,104,101,32,102,105,114,115,116,32,49, + 54,32,98,121,116,101,115,32,97,114,101,10,32,32,32,32, + 114,101,113,117,105,114,101,100,46,41,10,10,32,32,32,32, + 42,115,111,117,114,99,101,95,104,97,115,104,42,32,105,115, + 32,116,104,101,32,105,109,112,111,114,116,108,105,98,46,117, + 116,105,108,46,115,111,117,114,99,101,95,104,97,115,104,40, + 41,32,111,102,32,116,104,101,32,115,111,117,114,99,101,32, + 102,105,108,101,46,10,10,32,32,32,32,42,110,97,109,101, + 42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102, + 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, + 103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105, + 115,32,117,115,101,100,32,102,111,114,32,108,111,103,103,105, + 110,103,46,10,10,32,32,32,32,42,101,120,99,95,100,101, + 116,97,105,108,115,42,32,105,115,32,97,32,100,105,99,116, + 105,111,110,97,114,121,32,112,97,115,115,101,100,32,116,111, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, + 105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32, + 32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103, + 103,105,110,103,46,10,10,32,32,32,32,65,110,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,32,105,102,32,116,104,101,32,98,121,116,101,99, + 111,100,101,32,105,115,32,115,116,97,108,101,46,10,10,32, + 32,32,32,114,133,0,0,0,114,132,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,107,0,0,0,41,4,114,21,0,0,0,218,11,115,111, + 117,114,99,101,95,104,97,115,104,114,106,0,0,0,114,138, + 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, + 0,0,218,18,95,118,97,108,105,100,97,116,101,95,104,97, + 115,104,95,112,121,99,36,2,0,0,115,12,0,0,0,0, + 17,16,1,2,1,8,255,2,2,2,254,114,145,0,0,0, + 99,4,0,0,0,0,0,0,0,5,0,0,0,5,0,0, + 0,67,0,0,0,115,82,0,0,0,116,0,160,1,124,0, + 161,1,125,4,116,2,124,4,116,3,131,2,114,58,116,4, + 160,5,100,1,124,2,161,2,1,0,124,3,100,2,107,9, + 114,52,116,6,160,7,124,4,124,3,161,2,1,0,124,4, + 83,0,110,20,116,8,100,3,160,9,124,2,161,1,124,1, + 124,2,100,4,141,3,130,1,100,2,83,0,41,5,122,35, + 67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101, + 32,97,115,32,102,111,117,110,100,32,105,110,32,97,32,112, + 121,99,46,122,21,99,111,100,101,32,111,98,106,101,99,116, + 32,102,114,111,109,32,123,33,114,125,78,122,23,78,111,110, + 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, + 123,33,114,125,41,2,114,106,0,0,0,114,39,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,122,0,0,0,114, + 136,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,107,0,0, + 0,114,54,0,0,0,41,5,114,21,0,0,0,114,106,0, + 0,0,114,98,0,0,0,114,99,0,0,0,218,4,99,111, + 100,101,114,2,0,0,0,114,2,0,0,0,114,4,0,0, + 0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101, + 99,111,100,101,60,2,0,0,115,20,0,0,0,0,2,10, + 1,10,1,12,1,8,1,12,1,6,2,10,1,2,0,2, + 255,114,151,0,0,0,114,64,0,0,0,99,3,0,0,0, + 0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,0, + 115,70,0,0,0,116,0,116,1,131,1,125,3,124,3,160, + 2,116,3,100,1,131,1,161,1,1,0,124,3,160,2,116, + 3,124,1,131,1,161,1,1,0,124,3,160,2,116,3,124, + 2,131,1,161,1,1,0,124,3,160,2,116,4,160,5,124, + 0,161,1,161,1,1,0,124,3,83,0,41,2,122,43,80, + 114,111,100,117,99,101,32,116,104,101,32,100,97,116,97,32, + 102,111,114,32,97,32,116,105,109,101,115,116,97,109,112,45, + 98,97,115,101,100,32,112,121,99,46,114,64,0,0,0,41, + 6,218,9,98,121,116,101,97,114,114,97,121,114,135,0,0, + 0,218,6,101,120,116,101,110,100,114,17,0,0,0,114,146, + 0,0,0,218,5,100,117,109,112,115,41,4,114,150,0,0, + 0,218,5,109,116,105,109,101,114,142,0,0,0,114,21,0, + 0,0,114,2,0,0,0,114,2,0,0,0,114,4,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,73,2,0,0,115,12,0, + 0,0,0,2,8,1,14,1,14,1,14,1,16,1,114,156, + 0,0,0,84,99,3,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,0, + 116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,0, + 125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,0, + 116,4,124,1,131,1,100,2,107,2,115,50,116,5,130,1, + 124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,6, + 160,7,124,0,161,1,161,1,1,0,124,3,83,0,41,3, + 122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,97, + 116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,46,114,34,0,0,0,114,133,0, + 0,0,41,8,114,152,0,0,0,114,135,0,0,0,114,153, + 0,0,0,114,17,0,0,0,114,18,0,0,0,114,19,0, + 0,0,114,146,0,0,0,114,154,0,0,0,41,5,114,150, + 0,0,0,114,144,0,0,0,90,7,99,104,101,99,107,101, + 100,114,21,0,0,0,114,74,0,0,0,114,2,0,0,0, 114,2,0,0,0,114,4,0,0,0,218,17,95,99,111,100, - 101,95,116,111,95,104,97,115,104,95,112,121,99,77,2,0, + 101,95,116,111,95,104,97,115,104,95,112,121,99,83,2,0, 0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,1, - 10,1,16,1,114,156,0,0,0,99,1,0,0,0,0,0, + 10,1,16,1,114,157,0,0,0,99,1,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, @@ -857,21 +872,21 @@ const unsigned char _Py_M__importlib_external[] = { 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,62, + 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,64, 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, - 101,114,52,0,0,0,90,7,66,121,116,101,115,73,79,90, + 101,114,56,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,157,0, + 12,115,111,117,114,99,101,95,98,121,116,101,115,114,158,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,2,0,0,0,114,2,0,0,0,114,4, 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,88,2,0,0,115,10,0,0,0,0,5,8,1,12, - 1,10,1,12,1,114,161,0,0,0,41,2,114,126,0,0, + 99,101,94,2,0,0,115,10,0,0,0,0,5,8,1,12, + 1,10,1,12,1,114,162,0,0,0,41,2,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,99,2,0, 0,0,2,0,0,0,9,0,0,0,8,0,0,0,67,0, @@ -915,28 +930,28 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,218,6,111,114,105,103,105,110,84, - 218,10,105,115,95,112,97,99,107,97,103,101,114,62,0,0, - 0,41,17,114,114,0,0,0,114,163,0,0,0,114,105,0, - 0,0,114,1,0,0,0,114,68,0,0,0,114,120,0,0, + 218,10,105,115,95,112,97,99,107,97,103,101,114,64,0,0, + 0,41,17,114,116,0,0,0,114,164,0,0,0,114,107,0, + 0,0,114,1,0,0,0,114,70,0,0,0,114,122,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,99,0,0,0,114,100, - 0,0,0,114,126,0,0,0,218,9,95,80,79,80,85,76, - 65,84,69,114,165,0,0,0,114,162,0,0,0,114,38,0, - 0,0,218,6,97,112,112,101,110,100,41,9,114,104,0,0, - 0,90,8,108,111,99,97,116,105,111,110,114,126,0,0,0, - 114,162,0,0,0,218,4,115,112,101,99,218,12,108,111,97, + 101,95,108,111,97,100,101,114,115,114,101,0,0,0,114,102, + 0,0,0,114,128,0,0,0,218,9,95,80,79,80,85,76, + 65,84,69,114,166,0,0,0,114,163,0,0,0,114,42,0, + 0,0,218,6,97,112,112,101,110,100,41,9,114,106,0,0, + 0,90,8,108,111,99,97,116,105,111,110,114,128,0,0,0, + 114,163,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,165,0,0,0,90,7,100,105,114,110,97,109, + 120,101,115,114,166,0,0,0,90,7,100,105,114,110,97,109, 101,114,2,0,0,0,114,2,0,0,0,114,4,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,105,2,0,0,115,62,0, + 95,108,111,99,97,116,105,111,110,111,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,173,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 114,174,0,0,0,99,0,0,0,0,0,0,0,0,0,0, 0,0,4,0,0,0,64,0,0,0,115,86,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, @@ -964,11 +979,11 @@ const unsigned char _Py_M__importlib_external[] = { 4,124,1,161,2,6,0,89,0,83,0,88,0,100,0,83, 0,41,1,78,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,40,0,0,0, + 85,82,82,69,78,84,95,85,83,69,82,114,44,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,3,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,218, - 14,95,111,112,101,110,95,114,101,103,105,115,116,114,121,185, + 14,95,111,112,101,110,95,114,101,103,105,115,116,114,121,191, 2,0,0,115,8,0,0,0,0,2,2,1,16,1,14,1, 122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,114, 121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,101, @@ -982,20 +997,20 @@ const unsigned char _Py_M__importlib_external[] = { 82,0,88,0,87,0,110,26,4,0,116,9,107,10,114,112, 1,0,1,0,1,0,89,0,100,0,83,0,89,0,110,2, 88,0,124,5,83,0,41,5,78,122,5,37,100,46,37,100, - 114,59,0,0,0,41,2,114,125,0,0,0,90,11,115,121, - 115,95,118,101,114,115,105,111,110,114,30,0,0,0,41,10, + 114,23,0,0,0,41,2,114,127,0,0,0,90,11,115,121, + 115,95,118,101,114,115,105,111,110,114,35,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, - 50,0,0,0,114,6,0,0,0,218,12,118,101,114,115,105, - 111,110,95,105,110,102,111,114,177,0,0,0,114,175,0,0, - 0,90,10,81,117,101,114,121,86,97,108,117,101,114,40,0, - 0,0,41,6,114,176,0,0,0,114,125,0,0,0,90,12, + 54,0,0,0,114,6,0,0,0,218,12,118,101,114,115,105, + 111,110,95,105,110,102,111,114,178,0,0,0,114,176,0,0, + 0,90,10,81,117,101,114,121,86,97,108,117,101,114,44,0, + 0,0,41,6,114,177,0,0,0,114,127,0,0,0,90,12, 114,101,103,105,115,116,114,121,95,107,101,121,114,3,0,0, 0,90,4,104,107,101,121,218,8,102,105,108,101,112,97,116, 104,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, 218,16,95,115,101,97,114,99,104,95,114,101,103,105,115,116, - 114,121,192,2,0,0,115,24,0,0,0,0,2,6,1,8, + 114,121,198,2,0,0,115,24,0,0,0,0,2,6,1,8, 2,6,1,6,1,16,255,6,2,2,1,12,1,26,1,14, 1,12,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, @@ -1009,15 +1024,15 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,164,0,0,0,41,8,114,183,0,0, - 0,114,39,0,0,0,114,40,0,0,0,114,167,0,0,0, - 114,99,0,0,0,114,100,0,0,0,114,120,0,0,0,218, + 41,2,78,41,1,114,165,0,0,0,41,8,114,184,0,0, + 0,114,43,0,0,0,114,44,0,0,0,114,168,0,0,0, + 114,101,0,0,0,114,102,0,0,0,114,122,0,0,0,218, 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, - 114,41,8,114,176,0,0,0,114,125,0,0,0,114,35,0, - 0,0,218,6,116,97,114,103,101,116,114,182,0,0,0,114, - 126,0,0,0,114,172,0,0,0,114,170,0,0,0,114,2, + 114,41,8,114,177,0,0,0,114,127,0,0,0,114,39,0, + 0,0,218,6,116,97,114,103,101,116,114,183,0,0,0,114, + 128,0,0,0,114,173,0,0,0,114,171,0,0,0,114,2, 0,0,0,114,2,0,0,0,114,4,0,0,0,218,9,102, - 105,110,100,95,115,112,101,99,207,2,0,0,115,28,0,0, + 105,110,100,95,115,112,101,99,213,2,0,0,115,28,0,0, 0,0,2,10,1,8,1,4,1,2,1,12,1,14,1,8, 1,14,1,14,1,6,1,8,1,2,254,6,3,122,31,87, 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, @@ -1032,23 +1047,23 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,114,186,0, - 0,0,114,126,0,0,0,41,4,114,176,0,0,0,114,125, - 0,0,0,114,35,0,0,0,114,170,0,0,0,114,2,0, + 10,10,32,32,32,32,32,32,32,32,78,41,2,114,187,0, + 0,0,114,128,0,0,0,41,4,114,177,0,0,0,114,127, + 0,0,0,114,39,0,0,0,114,171,0,0,0,114,2,0, 0,0,114,2,0,0,0,114,4,0,0,0,218,11,102,105, - 110,100,95,109,111,100,117,108,101,223,2,0,0,115,8,0, + 110,100,95,109,111,100,117,108,101,229,2,0,0,115,8,0, 0,0,0,7,12,1,8,1,6,2,122,33,87,105,110,100, 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, - 111,0,0,0,114,110,0,0,0,114,112,0,0,0,114,113, - 0,0,0,114,180,0,0,0,114,179,0,0,0,114,178,0, + 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,115, + 0,0,0,114,181,0,0,0,114,180,0,0,0,114,179,0, 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, - 177,0,0,0,114,183,0,0,0,114,186,0,0,0,114,187, + 178,0,0,0,114,184,0,0,0,114,187,0,0,0,114,188, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,2,0, - 0,0,114,4,0,0,0,114,174,0,0,0,173,2,0,0, + 0,0,114,4,0,0,0,114,175,0,0,0,179,2,0,0, 115,30,0,0,0,8,2,4,3,2,255,2,4,2,255,2, 3,4,2,12,7,12,15,2,1,2,0,2,255,12,16,2, - 1,2,255,114,174,0,0,0,99,0,0,0,0,0,0,0, + 1,2,255,114,175,0,0,0,99,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, @@ -1074,14 +1089,14 @@ const unsigned char _Py_M__importlib_external[] = { 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,29,0,0,0,114,61,0,0,0,114,62,0, - 0,0,114,59,0,0,0,218,8,95,95,105,110,105,116,95, - 95,41,4,114,38,0,0,0,114,163,0,0,0,114,34,0, - 0,0,114,32,0,0,0,41,5,114,106,0,0,0,114,125, - 0,0,0,114,86,0,0,0,90,13,102,105,108,101,110,97, + 121,39,46,114,34,0,0,0,114,63,0,0,0,114,64,0, + 0,0,114,23,0,0,0,218,8,95,95,105,110,105,116,95, + 95,41,4,114,42,0,0,0,114,164,0,0,0,114,38,0, + 0,0,114,36,0,0,0,41,5,114,108,0,0,0,114,127, + 0,0,0,114,88,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,2,0,0,0,114,2,0,0,0,114,4,0,0, - 0,114,165,0,0,0,242,2,0,0,115,8,0,0,0,0, + 0,114,166,0,0,0,248,2,0,0,115,8,0,0,0,0, 3,18,1,16,1,14,1,122,24,95,76,111,97,100,101,114, 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, @@ -1089,9 +1104,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,2, - 0,0,0,41,2,114,106,0,0,0,114,170,0,0,0,114, + 0,0,0,41,2,114,108,0,0,0,114,171,0,0,0,114, 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,250,2,0, + 99,114,101,97,116,101,95,109,111,100,117,108,101,0,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,3,0, @@ -1105,13 +1120,13 @@ const unsigned char _Py_M__importlib_external[] = { 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,111,0,0,0,114,105,0,0,0,114,50,0,0,0, - 114,120,0,0,0,218,25,95,99,97,108,108,95,119,105,116, + 101,114,113,0,0,0,114,107,0,0,0,114,54,0,0,0, + 114,122,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,117,0,0,0,41,3,114,106,0, - 0,0,218,6,109,111,100,117,108,101,114,148,0,0,0,114, + 218,4,101,120,101,99,114,119,0,0,0,41,3,114,108,0, + 0,0,218,6,109,111,100,117,108,101,114,150,0,0,0,114, 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,11, - 101,120,101,99,95,109,111,100,117,108,101,253,2,0,0,115, + 101,120,101,99,95,109,111,100,117,108,101,3,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, @@ -1119,18 +1134,18 @@ const unsigned char _Py_M__importlib_external[] = { 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,120,0,0,0,218,17,95,108,111,97,100,95,109,111, - 100,117,108,101,95,115,104,105,109,41,2,114,106,0,0,0, - 114,125,0,0,0,114,2,0,0,0,114,2,0,0,0,114, + 2,114,122,0,0,0,218,17,95,108,111,97,100,95,109,111, + 100,117,108,101,95,115,104,105,109,41,2,114,108,0,0,0, + 114,127,0,0,0,114,2,0,0,0,114,2,0,0,0,114, 4,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108, - 101,5,3,0,0,115,2,0,0,0,0,2,122,25,95,76, + 101,11,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,111,0,0,0,114, - 110,0,0,0,114,112,0,0,0,114,113,0,0,0,114,165, - 0,0,0,114,191,0,0,0,114,196,0,0,0,114,198,0, + 95,109,111,100,117,108,101,78,41,8,114,113,0,0,0,114, + 112,0,0,0,114,114,0,0,0,114,115,0,0,0,114,166, + 0,0,0,114,192,0,0,0,114,197,0,0,0,114,199,0, 0,0,114,2,0,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,114,189,0,0,0,237,2,0,0,115, - 10,0,0,0,8,3,4,2,8,8,8,3,8,8,114,189, + 0,114,4,0,0,0,114,190,0,0,0,243,2,0,0,115, + 10,0,0,0,8,3,4,2,8,8,8,3,8,8,114,190, 0,0,0,99,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, @@ -1152,9 +1167,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,40,0,0,0,41,2,114,106,0,0,0,114,35, + 41,1,114,44,0,0,0,41,2,114,108,0,0,0,114,39, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,218,10,112,97,116,104,95,109,116,105,109,101,12,3, + 0,0,218,10,112,97,116,104,95,109,116,105,109,101,18,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,2,0,0,0,4, @@ -1186,10 +1201,10 @@ const unsigned char _Py_M__importlib_external[] = { 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,153,0,0,0, - 41,1,114,200,0,0,0,41,2,114,106,0,0,0,114,35, + 100,46,10,32,32,32,32,32,32,32,32,114,155,0,0,0, + 41,1,114,201,0,0,0,41,2,114,108,0,0,0,114,39, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,218,10,112,97,116,104,95,115,116,97,116,115,20,3, + 0,0,218,10,112,97,116,104,95,115,116,97,116,115,26,3, 0,0,115,2,0,0,0,0,11,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,4,0,0,0,4, @@ -1209,11 +1224,11 @@ const unsigned char _Py_M__importlib_external[] = { 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,106, - 0,0,0,114,97,0,0,0,90,10,99,97,99,104,101,95, - 112,97,116,104,114,56,0,0,0,114,2,0,0,0,114,2, + 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,108, + 0,0,0,114,99,0,0,0,90,10,99,97,99,104,101,95, + 112,97,116,104,114,21,0,0,0,114,2,0,0,0,114,2, 0,0,0,114,4,0,0,0,218,15,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,33,3,0,0,115,2,0, + 95,98,121,116,101,99,111,100,101,39,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,3,0,0,0,1, @@ -1228,9 +1243,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,0,0,0, - 41,3,114,106,0,0,0,114,35,0,0,0,114,56,0,0, + 41,3,114,108,0,0,0,114,39,0,0,0,114,21,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,202,0,0,0,43,3,0,0,115,2,0,0,0,0,4, + 114,203,0,0,0,49,3,0,0,115,2,0,0,0,0,4, 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, 5,0,0,0,10,0,0,0,67,0,0,0,115,82,0,0, @@ -1245,16 +1260,16 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,104,0,0,0,78,41,5,114,163, - 0,0,0,218,8,103,101,116,95,100,97,116,97,114,40,0, - 0,0,114,105,0,0,0,114,161,0,0,0,41,5,114,106, - 0,0,0,114,125,0,0,0,114,35,0,0,0,114,159,0, + 116,97,40,41,41,1,114,106,0,0,0,78,41,5,114,164, + 0,0,0,218,8,103,101,116,95,100,97,116,97,114,44,0, + 0,0,114,107,0,0,0,114,162,0,0,0,41,5,114,108, + 0,0,0,114,127,0,0,0,114,39,0,0,0,114,160,0, 0,0,218,3,101,120,99,114,2,0,0,0,114,2,0,0, 0,114,4,0,0,0,218,10,103,101,116,95,115,111,117,114, - 99,101,50,3,0,0,115,20,0,0,0,0,2,10,1,2, + 99,101,56,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,94,0,0,0,41,1,218, + 116,95,115,111,117,114,99,101,114,96,0,0,0,41,1,218, 9,95,111,112,116,105,109,105,122,101,99,3,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, @@ -1267,13 +1282,13 @@ const unsigned char _Py_M__importlib_external[] = { 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,194,0,0,0,84,41,2,218,12,100,111,110,116,95,105, - 110,104,101,114,105,116,114,73,0,0,0,41,3,114,120,0, - 0,0,114,193,0,0,0,218,7,99,111,109,112,105,108,101, - 41,4,114,106,0,0,0,114,56,0,0,0,114,35,0,0, - 0,114,207,0,0,0,114,2,0,0,0,114,2,0,0,0, + 114,195,0,0,0,84,41,2,218,12,100,111,110,116,95,105, + 110,104,101,114,105,116,114,75,0,0,0,41,3,114,122,0, + 0,0,114,194,0,0,0,218,7,99,111,109,112,105,108,101, + 41,4,114,108,0,0,0,114,21,0,0,0,114,39,0,0, + 0,114,208,0,0,0,114,2,0,0,0,114,2,0,0,0, 114,4,0,0,0,218,14,115,111,117,114,99,101,95,116,111, - 95,99,111,100,101,60,3,0,0,115,8,0,0,0,0,5, + 95,99,111,100,101,66,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,15,0,0,0, @@ -1325,34 +1340,34 @@ const unsigned char _Py_M__importlib_external[] = { 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,153,0,0,0,41,2,114,104,0,0,0,114,35,0,0, - 0,114,130,0,0,0,114,29,0,0,0,114,62,0,0,0, - 114,59,0,0,0,90,5,110,101,118,101,114,90,6,97,108, + 114,155,0,0,0,41,2,114,106,0,0,0,114,39,0,0, + 0,114,132,0,0,0,114,34,0,0,0,114,64,0,0,0, + 114,23,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,104,0,0,0, - 114,96,0,0,0,114,97,0,0,0,122,19,99,111,100,101, + 97,116,99,104,101,115,32,123,125,41,3,114,106,0,0,0, + 114,98,0,0,0,114,99,0,0,0,122,19,99,111,100,101, 32,111,98,106,101,99,116,32,102,114,111,109,32,123,125,122, - 10,119,114,111,116,101,32,123,33,114,125,41,27,114,163,0, - 0,0,114,87,0,0,0,114,71,0,0,0,114,201,0,0, - 0,114,40,0,0,0,114,14,0,0,0,114,204,0,0,0, - 114,137,0,0,0,218,10,109,101,109,111,114,121,118,105,101, - 119,114,147,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,142,0, + 10,119,114,111,116,101,32,123,33,114,125,41,27,114,164,0, + 0,0,114,89,0,0,0,114,73,0,0,0,114,202,0,0, + 0,114,44,0,0,0,114,14,0,0,0,114,205,0,0,0, + 114,139,0,0,0,218,10,109,101,109,111,114,121,118,105,101, + 119,114,149,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,144,0, 0,0,218,17,95,82,65,87,95,77,65,71,73,67,95,78, - 85,77,66,69,82,114,143,0,0,0,114,141,0,0,0,114, - 105,0,0,0,114,135,0,0,0,114,120,0,0,0,114,134, - 0,0,0,114,149,0,0,0,114,210,0,0,0,114,6,0, + 85,77,66,69,82,114,145,0,0,0,114,143,0,0,0,114, + 107,0,0,0,114,137,0,0,0,114,122,0,0,0,114,136, + 0,0,0,114,151,0,0,0,114,211,0,0,0,114,6,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,156,0,0,0,114,154,0,0, - 0,114,31,0,0,0,114,203,0,0,0,41,15,114,106,0, - 0,0,114,125,0,0,0,114,97,0,0,0,114,139,0,0, - 0,114,159,0,0,0,114,142,0,0,0,90,10,104,97,115, + 121,116,101,99,111,100,101,114,157,0,0,0,114,156,0,0, + 0,114,18,0,0,0,114,204,0,0,0,41,15,114,108,0, + 0,0,114,127,0,0,0,114,99,0,0,0,114,141,0,0, + 0,114,160,0,0,0,114,144,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,96,0,0,0,218,2,115,116,114,56, - 0,0,0,114,136,0,0,0,114,72,0,0,0,90,10,98, + 111,117,114,99,101,114,98,0,0,0,218,2,115,116,114,21, + 0,0,0,114,138,0,0,0,114,74,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,2,0,0,0,114,2,0,0,0, - 114,4,0,0,0,114,192,0,0,0,68,3,0,0,115,154, + 114,4,0,0,0,114,193,0,0,0,74,3,0,0,115,154, 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, @@ -1364,13 +1379,13 @@ const unsigned char _Py_M__importlib_external[] = { 1,6,255,4,2,6,1,10,1,10,1,14,2,6,1,6, 255,4,2,2,1,14,1,16,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,111,0,0,0,114,110,0,0, - 0,114,112,0,0,0,114,200,0,0,0,114,201,0,0,0, - 114,203,0,0,0,114,202,0,0,0,114,206,0,0,0,114, - 210,0,0,0,114,192,0,0,0,114,2,0,0,0,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,114,199,0, - 0,0,10,3,0,0,115,14,0,0,0,8,2,8,8,8, - 13,8,10,8,7,8,10,14,8,114,199,0,0,0,99,0, + 99,111,100,101,78,41,10,114,113,0,0,0,114,112,0,0, + 0,114,114,0,0,0,114,201,0,0,0,114,202,0,0,0, + 114,204,0,0,0,114,203,0,0,0,114,207,0,0,0,114, + 211,0,0,0,114,193,0,0,0,114,2,0,0,0,114,2, + 0,0,0,114,2,0,0,0,114,4,0,0,0,114,200,0, + 0,0,16,3,0,0,115,14,0,0,0,8,2,8,8,8, + 13,8,10,8,7,8,10,14,8,114,200,0,0,0,99,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, @@ -1395,27 +1410,27 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,2,114,104,0,0,0,114,35,0,0, - 0,41,3,114,106,0,0,0,114,125,0,0,0,114,35,0, + 100,101,114,46,78,41,2,114,106,0,0,0,114,39,0,0, + 0,41,3,114,108,0,0,0,114,127,0,0,0,114,39,0, 0,0,114,2,0,0,0,114,2,0,0,0,114,4,0,0, - 0,114,190,0,0,0,159,3,0,0,115,4,0,0,0,0, + 0,114,191,0,0,0,165,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,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,41,1,78,41,2,218, - 9,95,95,99,108,97,115,115,95,95,114,117,0,0,0,41, - 2,114,106,0,0,0,218,5,111,116,104,101,114,114,2,0, + 9,95,95,99,108,97,115,115,95,95,114,119,0,0,0,41, + 2,114,108,0,0,0,218,5,111,116,104,101,114,114,2,0, 0,0,114,2,0,0,0,114,4,0,0,0,218,6,95,95, - 101,113,95,95,165,3,0,0,115,6,0,0,0,0,1,12, + 101,113,95,95,171,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,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,41,1,78,41,3,218,4,104,97,115,104,114, - 104,0,0,0,114,35,0,0,0,41,1,114,106,0,0,0, + 106,0,0,0,114,39,0,0,0,41,1,114,108,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,218, - 8,95,95,104,97,115,104,95,95,169,3,0,0,115,2,0, + 8,95,95,104,97,115,104,95,95,175,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,2,0,0,0,3,0,0,0,3,0,0,0,115,16, @@ -1427,10 +1442,10 @@ const unsigned char _Py_M__importlib_external[] = { 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,216,0,0,0,114,198,0,0,0,41,2, - 114,106,0,0,0,114,125,0,0,0,41,1,114,217,0,0, - 0,114,2,0,0,0,114,4,0,0,0,114,198,0,0,0, - 172,3,0,0,115,2,0,0,0,0,10,122,22,70,105,108, + 117,112,101,114,114,217,0,0,0,114,199,0,0,0,41,2, + 114,108,0,0,0,114,127,0,0,0,41,1,114,218,0,0, + 0,114,2,0,0,0,114,4,0,0,0,114,199,0,0,0, + 178,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,2,0,0,0, 1,0,0,0,67,0,0,0,115,6,0,0,0,124,0,106, @@ -1438,9 +1453,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,35,0,0,0,41,2,114,106,0,0,0,114, - 125,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, - 0,0,0,114,163,0,0,0,184,3,0,0,115,2,0,0, + 46,41,1,114,39,0,0,0,41,2,114,108,0,0,0,114, + 127,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, + 0,0,0,114,164,0,0,0,190,3,0,0,115,2,0,0, 0,0,3,122,23,70,105,108,101,76,111,97,100,101,114,46, 103,101,116,95,102,105,108,101,110,97,109,101,99,2,0,0, 0,0,0,0,0,3,0,0,0,10,0,0,0,67,0,0, @@ -1450,77 +1465,77 @@ const unsigned char _Py_M__importlib_external[] = { 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,3,114,52,0,0,0,114,53,0,0,0,90,4,114, - 101,97,100,41,3,114,106,0,0,0,114,35,0,0,0,114, - 57,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, - 0,0,0,114,204,0,0,0,189,3,0,0,115,4,0,0, + 78,41,3,114,56,0,0,0,114,57,0,0,0,90,4,114, + 101,97,100,41,3,114,108,0,0,0,114,39,0,0,0,114, + 60,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, + 0,0,0,114,205,0,0,0,195,3,0,0,115,4,0,0, 0,0,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,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,41,1,78,41,1,114,165,0,0,0, - 41,2,114,106,0,0,0,114,195,0,0,0,114,2,0,0, + 83,0,100,0,83,0,41,1,78,41,1,114,166,0,0,0, + 41,2,114,108,0,0,0,114,196,0,0,0,114,2,0,0, 0,114,2,0,0,0,114,4,0,0,0,218,19,103,101,116, 95,114,101,115,111,117,114,99,101,95,114,101,97,100,101,114, - 196,3,0,0,115,6,0,0,0,0,2,10,1,4,1,122, + 202,3,0,0,115,6,0,0,0,0,2,10,1,4,1,122, 30,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, 114,101,115,111,117,114,99,101,95,114,101,97,100,101,114,99, 2,0,0,0,0,0,0,0,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,62,0,0, - 0,114,223,0,0,0,41,5,114,28,0,0,0,114,38,0, - 0,0,114,35,0,0,0,114,52,0,0,0,114,53,0,0, - 0,41,3,114,106,0,0,0,218,8,114,101,115,111,117,114, - 99,101,114,35,0,0,0,114,2,0,0,0,114,2,0,0, + 4,124,2,100,2,161,2,83,0,41,3,78,114,64,0,0, + 0,114,224,0,0,0,41,5,114,33,0,0,0,114,42,0, + 0,0,114,39,0,0,0,114,56,0,0,0,114,57,0,0, + 0,41,3,114,108,0,0,0,218,8,114,101,115,111,117,114, + 99,101,114,39,0,0,0,114,2,0,0,0,114,2,0,0, 0,114,4,0,0,0,218,13,111,112,101,110,95,114,101,115, - 111,117,114,99,101,202,3,0,0,115,4,0,0,0,0,1, + 111,117,114,99,101,208,3,0,0,115,4,0,0,0,0,1, 20,1,122,24,70,105,108,101,76,111,97,100,101,114,46,111, 112,101,110,95,114,101,115,111,117,114,99,101,99,2,0,0, 0,0,0,0,0,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,41,2,78,114, - 62,0,0,0,41,5,218,11,105,115,95,114,101,115,111,117, + 64,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,28,0,0,0,114,38,0,0,0, - 114,35,0,0,0,41,3,114,106,0,0,0,114,225,0,0, - 0,114,35,0,0,0,114,2,0,0,0,114,2,0,0,0, + 100,69,114,114,111,114,114,33,0,0,0,114,42,0,0,0, + 114,39,0,0,0,41,3,114,108,0,0,0,114,226,0,0, + 0,114,39,0,0,0,114,2,0,0,0,114,2,0,0,0, 114,4,0,0,0,218,13,114,101,115,111,117,114,99,101,95, - 112,97,116,104,206,3,0,0,115,8,0,0,0,0,1,10, + 112,97,116,104,212,3,0,0,115,8,0,0,0,0,1,10, 1,4,1,20,1,122,24,70,105,108,101,76,111,97,100,101, 114,46,114,101,115,111,117,114,99,101,95,112,97,116,104,99, 2,0,0,0,0,0,0,0,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,62,0,0,0,41,5,114,25,0,0, - 0,114,28,0,0,0,114,38,0,0,0,114,35,0,0,0, - 114,44,0,0,0,41,3,114,106,0,0,0,114,104,0,0, - 0,114,35,0,0,0,114,2,0,0,0,114,2,0,0,0, - 114,4,0,0,0,114,227,0,0,0,212,3,0,0,115,8, + 0,41,3,78,70,114,64,0,0,0,41,5,114,30,0,0, + 0,114,33,0,0,0,114,42,0,0,0,114,39,0,0,0, + 114,48,0,0,0,41,3,114,108,0,0,0,114,106,0,0, + 0,114,39,0,0,0,114,2,0,0,0,114,2,0,0,0, + 114,4,0,0,0,114,228,0,0,0,218,3,0,0,115,8, 0,0,0,0,1,8,1,4,1,20,1,122,22,70,105,108, 101,76,111,97,100,101,114,46,105,115,95,114,101,115,111,117, 114,99,101,99,1,0,0,0,0,0,0,0,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,41,2,78,114,62,0,0,0,41,5,218, + 1,131,1,83,0,41,2,78,114,64,0,0,0,41,5,218, 4,105,116,101,114,114,1,0,0,0,218,7,108,105,115,116, - 100,105,114,114,38,0,0,0,114,35,0,0,0,41,1,114, - 106,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, - 0,0,0,218,8,99,111,110,116,101,110,116,115,218,3,0, + 100,105,114,114,42,0,0,0,114,39,0,0,0,41,1,114, + 108,0,0,0,114,2,0,0,0,114,2,0,0,0,114,4, + 0,0,0,218,8,99,111,110,116,101,110,116,115,224,3,0, 0,115,2,0,0,0,0,1,122,19,70,105,108,101,76,111, 97,100,101,114,46,99,111,110,116,101,110,116,115,41,17,114, - 111,0,0,0,114,110,0,0,0,114,112,0,0,0,114,113, - 0,0,0,114,190,0,0,0,114,219,0,0,0,114,221,0, - 0,0,114,122,0,0,0,114,198,0,0,0,114,163,0,0, - 0,114,204,0,0,0,114,224,0,0,0,114,226,0,0,0, - 114,229,0,0,0,114,227,0,0,0,114,232,0,0,0,90, + 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,115, + 0,0,0,114,191,0,0,0,114,220,0,0,0,114,222,0, + 0,0,114,124,0,0,0,114,199,0,0,0,114,164,0,0, + 0,114,205,0,0,0,114,225,0,0,0,114,227,0,0,0, + 114,230,0,0,0,114,228,0,0,0,114,233,0,0,0,90, 13,95,95,99,108,97,115,115,99,101,108,108,95,95,114,2, - 0,0,0,114,2,0,0,0,41,1,114,217,0,0,0,114, - 4,0,0,0,114,216,0,0,0,154,3,0,0,115,24,0, + 0,0,0,114,2,0,0,0,41,1,114,218,0,0,0,114, + 4,0,0,0,114,217,0,0,0,160,3,0,0,115,24,0, 0,0,8,3,4,2,8,6,8,4,8,3,16,12,12,5, - 8,7,12,6,8,4,8,6,8,6,114,216,0,0,0,99, + 8,7,12,6,8,4,8,6,8,6,114,217,0,0,0,99, 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, @@ -1536,25 +1551,25 @@ const unsigned char _Py_M__importlib_external[] = { 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,153,0,0,0,114,211,0,0,0,41,3,114,39, + 41,2,114,155,0,0,0,114,212,0,0,0,41,3,114,43, 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,106,0,0,0,114,35,0, - 0,0,114,215,0,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,114,201,0,0,0,226,3,0,0,115, + 116,95,115,105,122,101,41,3,114,108,0,0,0,114,39,0, + 0,0,114,216,0,0,0,114,2,0,0,0,114,2,0,0, + 0,114,4,0,0,0,114,202,0,0,0,232,3,0,0,115, 4,0,0,0,0,2,8,1,122,27,83,111,117,114,99,101, 70,105,108,101,76,111,97,100,101,114,46,112,97,116,104,95, 115,116,97,116,115,99,4,0,0,0,0,0,0,0,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,41,1,218,5,95,109, - 111,100,101,41,2,114,103,0,0,0,114,202,0,0,0,41, - 5,114,106,0,0,0,114,97,0,0,0,114,96,0,0,0, - 114,56,0,0,0,114,42,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,203,0,0,0,231,3, + 111,100,101,41,2,114,105,0,0,0,114,203,0,0,0,41, + 5,114,108,0,0,0,114,99,0,0,0,114,98,0,0,0, + 114,21,0,0,0,114,46,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,204,0,0,0,237,3, 0,0,115,4,0,0,0,0,2,8,1,122,32,83,111,117, 114,99,101,70,105,108,101,76,111,97,100,101,114,46,95,99, 97,99,104,101,95,98,121,116,101,99,111,100,101,105,182,1, - 0,0,41,1,114,235,0,0,0,99,3,0,0,0,1,0, + 0,0,41,1,114,236,0,0,0,99,3,0,0,0,1,0, 0,0,9,0,0,0,11,0,0,0,67,0,0,0,115,0, 1,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, @@ -1577,26 +1592,26 @@ const unsigned char _Py_M__importlib_external[] = { 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,38,0,0,0,114,46,0,0,0,114,169,0,0,0,114, - 33,0,0,0,114,28,0,0,0,114,1,0,0,0,90,5, + 114,42,0,0,0,114,50,0,0,0,114,170,0,0,0,114, + 37,0,0,0,114,33,0,0,0,114,1,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,40,0,0,0,114,120,0,0,0, - 114,134,0,0,0,114,58,0,0,0,41,9,114,106,0,0, - 0,114,35,0,0,0,114,56,0,0,0,114,235,0,0,0, - 218,6,112,97,114,101,110,116,114,86,0,0,0,114,27,0, - 0,0,114,23,0,0,0,114,205,0,0,0,114,2,0,0, - 0,114,2,0,0,0,114,4,0,0,0,114,202,0,0,0, - 236,3,0,0,115,48,0,0,0,0,2,12,1,4,2,12, + 115,69,114,114,111,114,114,44,0,0,0,114,122,0,0,0, + 114,136,0,0,0,114,61,0,0,0,41,9,114,108,0,0, + 0,114,39,0,0,0,114,21,0,0,0,114,236,0,0,0, + 218,6,112,97,114,101,110,116,114,88,0,0,0,114,32,0, + 0,0,114,28,0,0,0,114,206,0,0,0,114,2,0,0, + 0,114,2,0,0,0,114,4,0,0,0,114,203,0,0,0, + 242,3,0,0,115,48,0,0,0,0,2,12,1,4,2,12, 1,12,1,12,2,12,1,10,1,2,1,14,1,14,2,8, 1,16,3,6,1,2,0,2,255,4,2,32,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,111,0,0,0,114,110,0,0, - 0,114,112,0,0,0,114,113,0,0,0,114,201,0,0,0, - 114,203,0,0,0,114,202,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,2,0,0,0,114,4,0,0,0,114,233, - 0,0,0,222,3,0,0,115,8,0,0,0,8,2,4,2, - 8,5,8,5,114,233,0,0,0,99,0,0,0,0,0,0, + 100,97,116,97,78,41,7,114,113,0,0,0,114,112,0,0, + 0,114,114,0,0,0,114,115,0,0,0,114,202,0,0,0, + 114,204,0,0,0,114,203,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,2,0,0,0,114,4,0,0,0,114,234, + 0,0,0,228,3,0,0,115,8,0,0,0,8,2,4,2, + 8,5,8,5,114,234,0,0,0,99,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, @@ -1610,14 +1625,14 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,2,114,104,0, - 0,0,114,35,0,0,0,114,130,0,0,0,41,2,114,104, - 0,0,0,114,96,0,0,0,41,5,114,163,0,0,0,114, - 204,0,0,0,114,137,0,0,0,114,149,0,0,0,114,212, - 0,0,0,41,5,114,106,0,0,0,114,125,0,0,0,114, - 35,0,0,0,114,56,0,0,0,114,136,0,0,0,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,114,192,0, - 0,0,15,4,0,0,115,22,0,0,0,0,1,10,1,10, + 124,2,100,3,141,3,83,0,41,4,78,41,2,114,106,0, + 0,0,114,39,0,0,0,114,132,0,0,0,41,2,114,106, + 0,0,0,114,98,0,0,0,41,5,114,164,0,0,0,114, + 205,0,0,0,114,139,0,0,0,114,151,0,0,0,114,213, + 0,0,0,41,5,114,108,0,0,0,114,127,0,0,0,114, + 39,0,0,0,114,21,0,0,0,114,138,0,0,0,114,2, + 0,0,0,114,2,0,0,0,114,4,0,0,0,114,193,0, + 0,0,21,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, @@ -1626,16 +1641,16 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,0,0,0,41, - 2,114,106,0,0,0,114,125,0,0,0,114,2,0,0,0, - 114,2,0,0,0,114,4,0,0,0,114,206,0,0,0,31, + 2,114,108,0,0,0,114,127,0,0,0,114,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,114,207,0,0,0,37, 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,111, - 0,0,0,114,110,0,0,0,114,112,0,0,0,114,113,0, - 0,0,114,192,0,0,0,114,206,0,0,0,114,2,0,0, + 46,103,101,116,95,115,111,117,114,99,101,78,41,6,114,113, + 0,0,0,114,112,0,0,0,114,114,0,0,0,114,115,0, + 0,0,114,193,0,0,0,114,207,0,0,0,114,2,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,238,0,0,0,11,4,0,0,115,6,0,0,0,8,2, - 4,2,8,16,114,238,0,0,0,99,0,0,0,0,0,0, + 114,239,0,0,0,17,4,0,0,115,6,0,0,0,8,2, + 4,2,8,16,114,239,0,0,0,99,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, @@ -1653,27 +1668,27 @@ const unsigned char _Py_M__importlib_external[] = { 10,32,32,32,32,99,3,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,41, - 1,78,41,2,114,104,0,0,0,114,35,0,0,0,41,3, - 114,106,0,0,0,114,104,0,0,0,114,35,0,0,0,114, - 2,0,0,0,114,2,0,0,0,114,4,0,0,0,114,190, - 0,0,0,48,4,0,0,115,4,0,0,0,0,1,6,1, + 1,78,41,2,114,106,0,0,0,114,39,0,0,0,41,3, + 114,108,0,0,0,114,106,0,0,0,114,39,0,0,0,114, + 2,0,0,0,114,2,0,0,0,114,4,0,0,0,114,191, + 0,0,0,54,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,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, - 41,1,78,41,2,114,217,0,0,0,114,117,0,0,0,41, - 2,114,106,0,0,0,114,218,0,0,0,114,2,0,0,0, - 114,2,0,0,0,114,4,0,0,0,114,219,0,0,0,52, + 41,1,78,41,2,114,218,0,0,0,114,119,0,0,0,41, + 2,114,108,0,0,0,114,219,0,0,0,114,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,114,220,0,0,0,58, 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,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,41,1,78,41,3,114,220,0, - 0,0,114,104,0,0,0,114,35,0,0,0,41,1,114,106, + 106,2,131,1,65,0,83,0,41,1,78,41,3,114,221,0, + 0,0,114,106,0,0,0,114,39,0,0,0,41,1,114,108, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,114,221,0,0,0,56,4,0,0,115,2,0,0,0, + 0,0,114,222,0,0,0,62,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,3,0,0,0,5,0,0, @@ -1685,12 +1700,12 @@ const unsigned char _Py_M__importlib_external[] = { 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,120,0,0,0,114,193,0,0,0,114,147,0,0, + 41,7,114,122,0,0,0,114,194,0,0,0,114,149,0,0, 0,90,14,99,114,101,97,116,101,95,100,121,110,97,109,105, - 99,114,134,0,0,0,114,104,0,0,0,114,35,0,0,0, - 41,3,114,106,0,0,0,114,170,0,0,0,114,195,0,0, + 99,114,136,0,0,0,114,106,0,0,0,114,39,0,0,0, + 41,3,114,108,0,0,0,114,171,0,0,0,114,196,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,191,0,0,0,59,4,0,0,115,18,0,0,0,0,2, + 114,192,0,0,0,65,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, @@ -1703,11 +1718,11 @@ const unsigned char _Py_M__importlib_external[] = { 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,120,0,0,0,114,193,0,0,0,114,147,0,0,0,90, - 12,101,120,101,99,95,100,121,110,97,109,105,99,114,134,0, - 0,0,114,104,0,0,0,114,35,0,0,0,41,2,114,106, - 0,0,0,114,195,0,0,0,114,2,0,0,0,114,2,0, - 0,0,114,4,0,0,0,114,196,0,0,0,67,4,0,0, + 114,122,0,0,0,114,194,0,0,0,114,149,0,0,0,90, + 12,101,120,101,99,95,100,121,110,97,109,105,99,114,136,0, + 0,0,114,106,0,0,0,114,39,0,0,0,41,2,114,108, + 0,0,0,114,196,0,0,0,114,2,0,0,0,114,2,0, + 0,0,114,4,0,0,0,114,197,0,0,0,73,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, @@ -1718,23 +1733,23 @@ const unsigned char _Py_M__importlib_external[] = { 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,29,0,0,0,99,1,0,0,0,0,0,0, + 103,101,46,114,34,0,0,0,99,1,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,190, - 0,0,0,78,114,2,0,0,0,41,2,114,22,0,0,0, + 107,2,86,0,1,0,113,2,100,1,83,0,41,2,114,191, + 0,0,0,78,114,2,0,0,0,41,2,114,27,0,0,0, 218,6,115,117,102,102,105,120,41,1,218,9,102,105,108,101, 95,110,97,109,101,114,2,0,0,0,114,4,0,0,0,218, - 9,60,103,101,110,101,120,112,114,62,76,4,0,0,115,4, + 9,60,103,101,110,101,120,112,114,62,82,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,38,0,0, - 0,114,35,0,0,0,218,3,97,110,121,218,18,69,88,84, + 46,60,103,101,110,101,120,112,114,62,41,4,114,42,0,0, + 0,114,39,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,41, - 2,114,106,0,0,0,114,125,0,0,0,114,2,0,0,0, - 41,1,114,241,0,0,0,114,4,0,0,0,114,165,0,0, - 0,73,4,0,0,115,8,0,0,0,0,2,14,1,12,1, + 2,114,108,0,0,0,114,127,0,0,0,114,2,0,0,0, + 41,1,114,242,0,0,0,114,4,0,0,0,114,166,0,0, + 0,79,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,2,0,0,0,1, @@ -1743,9 +1758,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,0,0,0,41,2,114,106,0,0,0, - 114,125,0,0,0,114,2,0,0,0,114,2,0,0,0,114, - 4,0,0,0,114,192,0,0,0,79,4,0,0,115,2,0, + 99,116,46,78,114,2,0,0,0,41,2,114,108,0,0,0, + 114,127,0,0,0,114,2,0,0,0,114,2,0,0,0,114, + 4,0,0,0,114,193,0,0,0,85,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,2,0,0,0,1, @@ -1754,8 +1769,8 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,0,0,0,41, - 2,114,106,0,0,0,114,125,0,0,0,114,2,0,0,0, - 114,2,0,0,0,114,4,0,0,0,114,206,0,0,0,83, + 2,114,108,0,0,0,114,127,0,0,0,114,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,114,207,0,0,0,89, 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, @@ -1764,20 +1779,20 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,35,0,0,0,41, - 2,114,106,0,0,0,114,125,0,0,0,114,2,0,0,0, - 114,2,0,0,0,114,4,0,0,0,114,163,0,0,0,87, + 32,102,105,110,100,101,114,46,41,1,114,39,0,0,0,41, + 2,114,108,0,0,0,114,127,0,0,0,114,2,0,0,0, + 114,2,0,0,0,114,4,0,0,0,114,164,0,0,0,93, 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, - 111,0,0,0,114,110,0,0,0,114,112,0,0,0,114,113, - 0,0,0,114,190,0,0,0,114,219,0,0,0,114,221,0, - 0,0,114,191,0,0,0,114,196,0,0,0,114,165,0,0, - 0,114,192,0,0,0,114,206,0,0,0,114,122,0,0,0, - 114,163,0,0,0,114,2,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,239,0,0,0,40,4, + 113,0,0,0,114,112,0,0,0,114,114,0,0,0,114,115, + 0,0,0,114,191,0,0,0,114,220,0,0,0,114,222,0, + 0,0,114,192,0,0,0,114,197,0,0,0,114,166,0,0, + 0,114,193,0,0,0,114,207,0,0,0,114,124,0,0,0, + 114,164,0,0,0,114,2,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,240,0,0,0,46,4, 0,0,115,20,0,0,0,8,6,4,2,8,4,8,4,8, - 3,8,8,8,6,8,6,8,4,8,4,114,239,0,0,0, + 3,8,8,8,6,8,6,8,4,8,4,114,240,0,0,0, 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, 0,64,0,0,0,115,96,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, @@ -1810,14 +1825,14 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,78,41,6,218,5,95,110,97,109, - 101,218,5,95,112,97,116,104,114,100,0,0,0,218,16,95, + 101,218,5,95,112,97,116,104,114,102,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, - 41,4,114,106,0,0,0,114,104,0,0,0,114,35,0,0, + 41,4,114,108,0,0,0,114,106,0,0,0,114,39,0,0, 0,218,11,112,97,116,104,95,102,105,110,100,101,114,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,114,190,0, - 0,0,100,4,0,0,115,8,0,0,0,0,1,6,1,6, + 0,0,0,114,2,0,0,0,114,4,0,0,0,114,191,0, + 0,0,106,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,4,0,0,0,3,0,0,0,67,0,0, @@ -1827,27 +1842,27 @@ const unsigned char _Py_M__importlib_external[] = { 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,61, - 0,0,0,114,30,0,0,0,41,2,114,6,0,0,0,114, - 35,0,0,0,90,8,95,95,112,97,116,104,95,95,41,2, - 114,246,0,0,0,114,32,0,0,0,41,4,114,106,0,0, - 0,114,237,0,0,0,218,3,100,111,116,90,2,109,101,114, + 97,116,104,45,97,116,116,114,45,110,97,109,101,41,114,63, + 0,0,0,114,35,0,0,0,41,2,114,6,0,0,0,114, + 39,0,0,0,90,8,95,95,112,97,116,104,95,95,41,2, + 114,247,0,0,0,114,36,0,0,0,41,4,114,108,0,0, + 0,114,238,0,0,0,218,3,100,111,116,90,2,109,101,114, 2,0,0,0,114,2,0,0,0,114,4,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,106,4,0,0,115,8,0,0,0, + 104,95,110,97,109,101,115,112,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,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,41,1,78,41,4,114,253,0,0,0, - 114,116,0,0,0,114,6,0,0,0,218,7,109,111,100,117, - 108,101,115,41,3,114,106,0,0,0,90,18,112,97,114,101, + 124,2,131,2,83,0,41,1,78,41,4,114,254,0,0,0, + 114,118,0,0,0,114,6,0,0,0,218,7,109,111,100,117, + 108,101,115,41,3,114,108,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,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,114,248,0, - 0,0,116,4,0,0,115,4,0,0,0,0,1,12,1,122, + 0,0,0,114,2,0,0,0,114,4,0,0,0,114,249,0, + 0,0,122,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,3,0,0,0,4,0,0, @@ -1857,72 +1872,72 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,78,41,8,114, - 100,0,0,0,114,248,0,0,0,114,249,0,0,0,114,250, - 0,0,0,114,246,0,0,0,114,126,0,0,0,114,162,0, - 0,0,114,247,0,0,0,41,3,114,106,0,0,0,90,11, - 112,97,114,101,110,116,95,112,97,116,104,114,170,0,0,0, + 102,0,0,0,114,249,0,0,0,114,250,0,0,0,114,251, + 0,0,0,114,247,0,0,0,114,128,0,0,0,114,163,0, + 0,0,114,248,0,0,0,41,3,114,108,0,0,0,90,11, + 112,97,114,101,110,116,95,112,97,116,104,114,171,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,218, - 12,95,114,101,99,97,108,99,117,108,97,116,101,120,4,0, + 12,95,114,101,99,97,108,99,117,108,97,116,101,126,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,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,41,1,78,41,2,114,230, - 0,0,0,114,255,0,0,0,41,1,114,106,0,0,0,114, + 0,160,1,161,0,131,1,83,0,41,1,78,41,2,114,231, + 0,0,0,114,0,1,0,0,41,1,114,108,0,0,0,114, 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,8, - 95,95,105,116,101,114,95,95,133,4,0,0,115,2,0,0, + 95,95,105,116,101,114,95,95,139,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,3,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,41,1,78,41,1,114,247,0,0,0,41,3, - 114,106,0,0,0,218,5,105,110,100,101,120,114,35,0,0, + 100,0,83,0,41,1,78,41,1,114,248,0,0,0,41,3, + 114,108,0,0,0,218,5,105,110,100,101,120,114,39,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 218,11,95,95,115,101,116,105,116,101,109,95,95,136,4,0, + 218,11,95,95,115,101,116,105,116,101,109,95,95,142,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,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,41,1,78,41,2,114, - 31,0,0,0,114,255,0,0,0,41,1,114,106,0,0,0, + 18,0,0,0,114,0,1,0,0,41,1,114,108,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,218, - 7,95,95,108,101,110,95,95,139,4,0,0,115,2,0,0, + 7,95,95,108,101,110,95,95,145,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,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,50,0,0, - 0,114,247,0,0,0,41,1,114,106,0,0,0,114,2,0, + 80,97,116,104,40,123,33,114,125,41,41,2,114,54,0,0, + 0,114,248,0,0,0,41,1,114,108,0,0,0,114,2,0, 0,0,114,2,0,0,0,114,4,0,0,0,218,8,95,95, - 114,101,112,114,95,95,142,4,0,0,115,2,0,0,0,0, + 114,101,112,114,95,95,148,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,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, - 41,1,78,41,1,114,255,0,0,0,41,2,114,106,0,0, + 41,1,78,41,1,114,0,1,0,0,41,2,114,108,0,0, 0,218,4,105,116,101,109,114,2,0,0,0,114,2,0,0, 0,114,4,0,0,0,218,12,95,95,99,111,110,116,97,105, - 110,115,95,95,145,4,0,0,115,2,0,0,0,0,1,122, + 110,115,95,95,151,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,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,41,1,78,41,2,114,247,0,0,0, - 114,169,0,0,0,41,2,114,106,0,0,0,114,5,1,0, + 1,0,100,0,83,0,41,1,78,41,2,114,248,0,0,0, + 114,170,0,0,0,41,2,114,108,0,0,0,114,6,1,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,169,0,0,0,148,4,0,0,115,2,0,0,0,0,1, + 114,170,0,0,0,154,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,14,114,111,0,0,0,114, - 110,0,0,0,114,112,0,0,0,114,113,0,0,0,114,190, - 0,0,0,114,253,0,0,0,114,248,0,0,0,114,255,0, - 0,0,114,0,1,0,0,114,2,1,0,0,114,3,1,0, - 0,114,4,1,0,0,114,6,1,0,0,114,169,0,0,0, + 46,97,112,112,101,110,100,78,41,14,114,113,0,0,0,114, + 112,0,0,0,114,114,0,0,0,114,115,0,0,0,114,191, + 0,0,0,114,254,0,0,0,114,249,0,0,0,114,0,1, + 0,0,114,1,1,0,0,114,3,1,0,0,114,4,1,0, + 0,114,5,1,0,0,114,7,1,0,0,114,170,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,2,0,0,0,114, - 4,0,0,0,114,245,0,0,0,93,4,0,0,115,22,0, + 4,0,0,0,114,246,0,0,0,99,4,0,0,115,22,0, 0,0,8,5,4,2,8,6,8,10,8,4,8,13,8,3, - 8,3,8,3,8,3,8,3,114,245,0,0,0,99,0,0, + 8,3,8,3,8,3,8,3,114,246,0,0,0,99,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, @@ -1933,11 +1948,11 @@ const unsigned char _Py_M__importlib_external[] = { 115,112,97,99,101,76,111,97,100,101,114,99,4,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,41,1,78,41,2,114,245,0,0, - 0,114,247,0,0,0,41,4,114,106,0,0,0,114,104,0, - 0,0,114,35,0,0,0,114,251,0,0,0,114,2,0,0, - 0,114,2,0,0,0,114,4,0,0,0,114,190,0,0,0, - 154,4,0,0,115,2,0,0,0,0,1,122,25,95,78,97, + 0,95,1,100,0,83,0,41,1,78,41,2,114,246,0,0, + 0,114,248,0,0,0,41,4,114,108,0,0,0,114,106,0, + 0,0,114,39,0,0,0,114,252,0,0,0,114,2,0,0, + 0,114,2,0,0,0,114,4,0,0,0,114,191,0,0,0, + 160,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,2, 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, @@ -1951,33 +1966,33 @@ const unsigned char _Py_M__importlib_external[] = { 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,50,0,0,0,114,111,0,0,0,41,2,114,176,0,0, - 0,114,195,0,0,0,114,2,0,0,0,114,2,0,0,0, + 114,54,0,0,0,114,113,0,0,0,41,2,114,177,0,0, + 0,114,196,0,0,0,114,2,0,0,0,114,2,0,0,0, 114,4,0,0,0,218,11,109,111,100,117,108,101,95,114,101, - 112,114,157,4,0,0,115,2,0,0,0,0,7,122,28,95, + 112,114,163,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,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,2,0, - 0,0,41,2,114,106,0,0,0,114,125,0,0,0,114,2, - 0,0,0,114,2,0,0,0,114,4,0,0,0,114,165,0, - 0,0,166,4,0,0,115,2,0,0,0,0,1,122,27,95, + 0,0,41,2,114,108,0,0,0,114,127,0,0,0,114,2, + 0,0,0,114,2,0,0,0,114,4,0,0,0,114,166,0, + 0,0,172,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,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,30,0,0,0, - 114,2,0,0,0,41,2,114,106,0,0,0,114,125,0,0, + 4,0,0,0,100,1,83,0,41,2,78,114,35,0,0,0, + 114,2,0,0,0,41,2,114,108,0,0,0,114,127,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,206,0,0,0,169,4,0,0,115,2,0,0,0,0,1, + 114,207,0,0,0,175,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,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,30,0,0,0,122, - 8,60,115,116,114,105,110,103,62,114,194,0,0,0,84,41, - 1,114,208,0,0,0,41,1,114,209,0,0,0,41,2,114, - 106,0,0,0,114,125,0,0,0,114,2,0,0,0,114,2, - 0,0,0,114,4,0,0,0,114,192,0,0,0,172,4,0, + 4,100,5,141,4,83,0,41,6,78,114,35,0,0,0,122, + 8,60,115,116,114,105,110,103,62,114,195,0,0,0,84,41, + 1,114,209,0,0,0,41,1,114,210,0,0,0,41,2,114, + 108,0,0,0,114,127,0,0,0,114,2,0,0,0,114,2, + 0,0,0,114,4,0,0,0,114,193,0,0,0,178,4,0, 0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,99, 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, @@ -1985,16 +2000,16 @@ const unsigned char _Py_M__importlib_external[] = { 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,2,0,0,0,41,2,114,106,0,0,0,114,170,0,0, + 114,2,0,0,0,41,2,114,108,0,0,0,114,171,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,191,0,0,0,175,4,0,0,115,2,0,0,0,0,1, + 114,192,0,0,0,181,4,0,0,115,2,0,0,0,0,1, 122,30,95,78,97,109,101,115,112,97,99,101,76,111,97,100, 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, 0,67,0,0,0,115,4,0,0,0,100,0,83,0,41,1, - 78,114,2,0,0,0,41,2,114,106,0,0,0,114,195,0, + 78,114,2,0,0,0,41,2,114,108,0,0,0,114,196,0, 0,0,114,2,0,0,0,114,2,0,0,0,114,4,0,0, - 0,114,196,0,0,0,178,4,0,0,115,2,0,0,0,0, + 0,114,197,0,0,0,184,4,0,0,115,2,0,0,0,0, 1,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, 2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, @@ -2009,20 +2024,20 @@ const unsigned char _Py_M__importlib_external[] = { 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,120,0,0,0,114,134,0,0,0,114,247,0, - 0,0,114,197,0,0,0,41,2,114,106,0,0,0,114,125, + 125,41,4,114,122,0,0,0,114,136,0,0,0,114,248,0, + 0,0,114,198,0,0,0,41,2,114,108,0,0,0,114,127, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,114,198,0,0,0,181,4,0,0,115,8,0,0,0, + 0,0,114,199,0,0,0,187,4,0,0,115,8,0,0,0, 0,7,6,1,4,255,4,2,122,28,95,78,97,109,101,115, 112,97,99,101,76,111,97,100,101,114,46,108,111,97,100,95, - 109,111,100,117,108,101,78,41,12,114,111,0,0,0,114,110, - 0,0,0,114,112,0,0,0,114,190,0,0,0,114,188,0, - 0,0,114,8,1,0,0,114,165,0,0,0,114,206,0,0, - 0,114,192,0,0,0,114,191,0,0,0,114,196,0,0,0, - 114,198,0,0,0,114,2,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,7,1,0,0,153,4, + 109,111,100,117,108,101,78,41,12,114,113,0,0,0,114,112, + 0,0,0,114,114,0,0,0,114,191,0,0,0,114,189,0, + 0,0,114,9,1,0,0,114,166,0,0,0,114,207,0,0, + 0,114,193,0,0,0,114,192,0,0,0,114,197,0,0,0, + 114,199,0,0,0,114,2,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,8,1,0,0,159,4, 0,0,115,16,0,0,0,8,1,8,3,12,9,8,3,8, - 3,8,3,8,3,8,3,114,7,1,0,0,99,0,0,0, + 3,8,3,8,3,8,3,114,8,1,0,0,99,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,101,4,100,2,100,3,132,0,131,1,90,5,101,4, @@ -2053,11 +2068,11 @@ const unsigned char _Py_M__importlib_external[] = { 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,6,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,114, - 0,0,0,114,10,1,0,0,41,3,114,176,0,0,0,114, - 104,0,0,0,218,6,102,105,110,100,101,114,114,2,0,0, - 0,114,2,0,0,0,114,4,0,0,0,114,10,1,0,0, - 199,4,0,0,115,10,0,0,0,0,4,22,1,8,1,10, + 114,95,99,97,99,104,101,218,5,105,116,101,109,115,114,116, + 0,0,0,114,11,1,0,0,41,3,114,177,0,0,0,114, + 106,0,0,0,218,6,102,105,110,100,101,114,114,2,0,0, + 0,114,2,0,0,0,114,4,0,0,0,114,11,1,0,0, + 205,4,0,0,115,10,0,0,0,0,4,22,1,8,1,10, 1,10,1,122,28,80,97,116,104,70,105,110,100,101,114,46, 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, 115,99,2,0,0,0,0,0,0,0,3,0,0,0,9,0, @@ -2072,12 +2087,12 @@ const unsigned char _Py_M__importlib_external[] = { 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,6,0, - 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,64, - 0,0,0,114,65,0,0,0,114,124,0,0,0,114,105,0, - 0,0,41,3,114,176,0,0,0,114,35,0,0,0,90,4, + 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,66, + 0,0,0,114,67,0,0,0,114,126,0,0,0,114,107,0, + 0,0,41,3,114,177,0,0,0,114,39,0,0,0,90,4, 104,111,111,107,114,2,0,0,0,114,2,0,0,0,114,4, 0,0,0,218,11,95,112,97,116,104,95,104,111,111,107,115, - 209,4,0,0,115,16,0,0,0,0,3,16,1,12,1,10, + 215,4,0,0,115,16,0,0,0,0,3,16,1,12,1,10, 1,2,1,14,1,14,1,12,2,122,22,80,97,116,104,70, 105,110,100,101,114,46,95,112,97,116,104,95,104,111,111,107, 115,99,2,0,0,0,0,0,0,0,3,0,0,0,8,0, @@ -2101,13 +2116,13 @@ const unsigned char _Py_M__importlib_external[] = { 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,30,0,0,0,78,41, - 7,114,1,0,0,0,114,45,0,0,0,114,228,0,0,0, - 114,6,0,0,0,114,12,1,0,0,218,8,75,101,121,69, - 114,114,111,114,114,16,1,0,0,41,3,114,176,0,0,0, - 114,35,0,0,0,114,14,1,0,0,114,2,0,0,0,114, + 10,32,32,32,32,32,32,32,32,114,35,0,0,0,78,41, + 7,114,1,0,0,0,114,49,0,0,0,114,229,0,0,0, + 114,6,0,0,0,114,13,1,0,0,218,8,75,101,121,69, + 114,114,111,114,114,17,1,0,0,41,3,114,177,0,0,0, + 114,39,0,0,0,114,15,1,0,0,114,2,0,0,0,114, 2,0,0,0,114,4,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,222, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,228, 4,0,0,115,22,0,0,0,0,8,8,1,2,1,12,1, 14,3,8,1,2,1,14,1,14,1,10,1,16,1,122,31, 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, @@ -2118,14 +2133,14 @@ const unsigned char _Py_M__importlib_external[] = { 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,123, - 0,0,0,41,7,114,114,0,0,0,114,123,0,0,0,114, - 187,0,0,0,114,120,0,0,0,114,184,0,0,0,114,166, - 0,0,0,114,162,0,0,0,41,6,114,176,0,0,0,114, - 125,0,0,0,114,14,1,0,0,114,126,0,0,0,114,127, - 0,0,0,114,170,0,0,0,114,2,0,0,0,114,2,0, + 5,124,4,124,5,95,6,124,5,83,0,41,2,78,114,125, + 0,0,0,41,7,114,116,0,0,0,114,125,0,0,0,114, + 188,0,0,0,114,122,0,0,0,114,185,0,0,0,114,167, + 0,0,0,114,163,0,0,0,41,6,114,177,0,0,0,114, + 127,0,0,0,114,15,1,0,0,114,128,0,0,0,114,129, + 0,0,0,114,171,0,0,0,114,2,0,0,0,114,2,0, 0,0,114,4,0,0,0,218,16,95,108,101,103,97,99,121, - 95,103,101,116,95,115,112,101,99,244,4,0,0,115,18,0, + 95,103,101,116,95,115,112,101,99,250,4,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, @@ -2145,18 +2160,18 @@ const unsigned char _Py_M__importlib_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,186,0,0,0,122,19,115,112,101, + 110,97,109,101,46,78,114,187,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,145,0,0,0,114,74,0,0,0,218,5,98,121, - 116,101,115,114,18,1,0,0,114,114,0,0,0,114,186,0, - 0,0,114,19,1,0,0,114,126,0,0,0,114,162,0,0, - 0,114,105,0,0,0,114,151,0,0,0,114,120,0,0,0, - 114,166,0,0,0,41,9,114,176,0,0,0,114,125,0,0, - 0,114,35,0,0,0,114,185,0,0,0,218,14,110,97,109, + 41,13,114,147,0,0,0,114,76,0,0,0,218,5,98,121, + 116,101,115,114,19,1,0,0,114,116,0,0,0,114,187,0, + 0,0,114,20,1,0,0,114,128,0,0,0,114,163,0,0, + 0,114,107,0,0,0,114,153,0,0,0,114,122,0,0,0, + 114,167,0,0,0,41,9,114,177,0,0,0,114,127,0,0, + 0,114,39,0,0,0,114,186,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,14,1,0,0,114,170,0,0,0,114,127,0,0, + 114,121,114,15,1,0,0,114,171,0,0,0,114,129,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 218,9,95,103,101,116,95,115,112,101,99,3,5,0,0,115, + 218,9,95,103,101,116,95,115,112,101,99,9,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, @@ -2178,12 +2193,12 @@ const unsigned char _Py_M__importlib_external[] = { 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,6,0,0,0,114,35,0,0,0,114,22, - 1,0,0,114,126,0,0,0,114,162,0,0,0,114,164,0, - 0,0,114,245,0,0,0,41,6,114,176,0,0,0,114,125, - 0,0,0,114,35,0,0,0,114,185,0,0,0,114,170,0, - 0,0,114,21,1,0,0,114,2,0,0,0,114,2,0,0, - 0,114,4,0,0,0,114,186,0,0,0,35,5,0,0,115, + 32,78,41,7,114,6,0,0,0,114,39,0,0,0,114,23, + 1,0,0,114,128,0,0,0,114,163,0,0,0,114,165,0, + 0,0,114,246,0,0,0,41,6,114,177,0,0,0,114,127, + 0,0,0,114,39,0,0,0,114,186,0,0,0,114,171,0, + 0,0,114,22,1,0,0,114,2,0,0,0,114,2,0,0, + 0,114,4,0,0,0,114,187,0,0,0,41,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, @@ -2201,21 +2216,21 @@ const unsigned char _Py_M__importlib_external[] = { 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, 99,97,116,101,100,46,32,32,85,115,101,32,102,105,110,100, 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,78,41,2,114,186,0, - 0,0,114,126,0,0,0,41,4,114,176,0,0,0,114,125, - 0,0,0,114,35,0,0,0,114,170,0,0,0,114,2,0, - 0,0,114,2,0,0,0,114,4,0,0,0,114,187,0,0, - 0,59,5,0,0,115,8,0,0,0,0,8,12,1,8,1, + 10,10,32,32,32,32,32,32,32,32,78,41,2,114,187,0, + 0,0,114,128,0,0,0,41,4,114,177,0,0,0,114,127, + 0,0,0,114,39,0,0,0,114,171,0,0,0,114,2,0, + 0,0,114,2,0,0,0,114,4,0,0,0,114,188,0,0, + 0,65,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,41,12,114,111,0,0, - 0,114,110,0,0,0,114,112,0,0,0,114,113,0,0,0, - 114,188,0,0,0,114,10,1,0,0,114,16,1,0,0,114, - 18,1,0,0,114,19,1,0,0,114,22,1,0,0,114,186, - 0,0,0,114,187,0,0,0,114,2,0,0,0,114,2,0, - 0,0,114,2,0,0,0,114,4,0,0,0,114,9,1,0, - 0,195,4,0,0,115,30,0,0,0,8,2,4,2,12,10, + 105,110,100,95,109,111,100,117,108,101,41,12,114,113,0,0, + 0,114,112,0,0,0,114,114,0,0,0,114,115,0,0,0, + 114,189,0,0,0,114,11,1,0,0,114,17,1,0,0,114, + 19,1,0,0,114,20,1,0,0,114,23,1,0,0,114,187, + 0,0,0,114,188,0,0,0,114,2,0,0,0,114,2,0, + 0,0,114,2,0,0,0,114,4,0,0,0,114,10,1,0, + 0,201,4,0,0,115,30,0,0,0,8,2,4,2,12,10, 12,13,12,22,12,15,2,1,2,255,12,32,2,1,2,0, - 2,255,12,24,2,1,2,255,114,9,1,0,0,99,0,0, + 2,255,12,24,2,1,2,255,114,10,1,0,0,99,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, @@ -2255,21 +2270,21 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,78,114,2,0,0, - 0,41,2,114,22,0,0,0,114,240,0,0,0,41,1,114, - 126,0,0,0,114,2,0,0,0,114,4,0,0,0,114,242, - 0,0,0,88,5,0,0,115,4,0,0,0,4,0,2,0, + 0,41,2,114,27,0,0,0,114,241,0,0,0,41,1,114, + 128,0,0,0,114,2,0,0,0,114,4,0,0,0,114,243, + 0,0,0,94,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,61,0,0,0,114,94,0, - 0,0,78,41,7,114,151,0,0,0,218,8,95,108,111,97, - 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, + 103,101,110,101,120,112,114,62,114,63,0,0,0,114,96,0, + 0,0,78,41,7,114,153,0,0,0,218,8,95,108,111,97, + 100,101,114,115,114,39,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, - 106,0,0,0,114,35,0,0,0,218,14,108,111,97,100,101, + 108,0,0,0,114,39,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,172,0,0,0,114,2,0,0,0,41,1,114,126, - 0,0,0,114,4,0,0,0,114,190,0,0,0,82,5,0, + 114,115,114,173,0,0,0,114,2,0,0,0,41,1,114,128, + 0,0,0,114,4,0,0,0,114,191,0,0,0,88,5,0, 0,115,16,0,0,0,0,4,4,1,12,1,26,1,6,2, 10,1,6,1,8,1,122,19,70,105,108,101,70,105,110,100, 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, @@ -2277,9 +2292,9 @@ const unsigned char _Py_M__importlib_external[] = { 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,94,0,0,0,78,41,1,114,25,1,0,0,41, - 1,114,106,0,0,0,114,2,0,0,0,114,2,0,0,0, - 114,4,0,0,0,114,10,1,0,0,96,5,0,0,115,2, + 101,46,114,96,0,0,0,78,41,1,114,26,1,0,0,41, + 1,114,108,0,0,0,114,2,0,0,0,114,2,0,0,0, + 114,4,0,0,0,114,11,1,0,0,102,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,3,0,0,0, @@ -2299,21 +2314,21 @@ const unsigned char _Py_M__importlib_external[] = { 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,186,0,0,0,114,126,0,0,0,114,162,0, - 0,0,41,3,114,106,0,0,0,114,125,0,0,0,114,170, + 78,41,3,114,187,0,0,0,114,128,0,0,0,114,163,0, + 0,0,41,3,114,108,0,0,0,114,127,0,0,0,114,171, 0,0,0,114,2,0,0,0,114,2,0,0,0,114,4,0, - 0,0,114,123,0,0,0,102,5,0,0,115,8,0,0,0, + 0,0,114,125,0,0,0,108,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,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,41,2,114,126,0,0,0,114,162, - 0,0,0,41,1,114,173,0,0,0,41,7,114,106,0,0, - 0,114,171,0,0,0,114,125,0,0,0,114,35,0,0,0, - 90,4,115,109,115,108,114,185,0,0,0,114,126,0,0,0, + 141,4,83,0,41,2,78,41,2,114,128,0,0,0,114,163, + 0,0,0,41,1,114,174,0,0,0,41,7,114,108,0,0, + 0,114,172,0,0,0,114,127,0,0,0,114,39,0,0,0, + 90,4,115,109,115,108,114,186,0,0,0,114,128,0,0,0, 114,2,0,0,0,114,2,0,0,0,114,4,0,0,0,114, - 22,1,0,0,114,5,0,0,115,8,0,0,0,0,1,10, + 23,1,0,0,120,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,14,0,0,0,8,0,0,0,67,0,0, @@ -2347,27 +2362,27 @@ const unsigned char _Py_M__importlib_external[] = { 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,61,0,0,0,114,59,0,0,0,114,94,0,0,0,114, - 190,0,0,0,122,9,116,114,121,105,110,103,32,123,125,41, + 114,63,0,0,0,114,23,0,0,0,114,96,0,0,0,114, + 191,0,0,0,122,9,116,114,121,105,110,103,32,123,125,41, 1,90,9,118,101,114,98,111,115,105,116,121,78,122,25,112, 111,115,115,105,98,108,101,32,110,97,109,101,115,112,97,99, - 101,32,102,111,114,32,123,125,41,22,114,32,0,0,0,114, - 39,0,0,0,114,35,0,0,0,114,1,0,0,0,114,45, - 0,0,0,114,234,0,0,0,114,40,0,0,0,114,25,1, + 101,32,102,111,114,32,123,125,41,22,114,36,0,0,0,114, + 43,0,0,0,114,39,0,0,0,114,1,0,0,0,114,49, + 0,0,0,114,235,0,0,0,114,44,0,0,0,114,26,1, 0,0,218,11,95,102,105,108,108,95,99,97,99,104,101,114, - 5,0,0,0,114,28,1,0,0,114,95,0,0,0,114,27, - 1,0,0,114,28,0,0,0,114,24,1,0,0,114,44,0, - 0,0,114,22,1,0,0,114,46,0,0,0,114,120,0,0, - 0,114,134,0,0,0,114,166,0,0,0,114,162,0,0,0, - 41,14,114,106,0,0,0,114,125,0,0,0,114,185,0,0, + 5,0,0,0,114,29,1,0,0,114,97,0,0,0,114,28, + 1,0,0,114,33,0,0,0,114,25,1,0,0,114,48,0, + 0,0,114,23,1,0,0,114,50,0,0,0,114,122,0,0, + 0,114,136,0,0,0,114,167,0,0,0,114,163,0,0,0, + 41,14,114,108,0,0,0,114,127,0,0,0,114,186,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,153,0,0, + 11,116,97,105,108,95,109,111,100,117,108,101,114,155,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,240,0,0,0,114,171,0,0,0,90,13,105,110,105, + 104,114,241,0,0,0,114,172,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,170,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,186,0,0,0,119,5, + 95,112,97,116,104,114,171,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,187,0,0,0,125,5, 0,0,115,74,0,0,0,0,5,4,1,14,1,2,1,24, 1,14,1,10,1,10,1,8,1,6,2,6,1,6,1,10, 2,6,1,4,2,8,1,12,1,14,1,8,1,10,1,8, @@ -2392,31 +2407,31 @@ const unsigned char _Py_M__importlib_external[] = { 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,0,0,0,0,114,61,0,0, + 101,99,116,111,114,121,46,114,0,0,0,0,114,63,0,0, 0,122,5,123,125,46,123,125,99,1,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,2,0,0,0,41,1,114,95,0, - 0,0,41,2,114,22,0,0,0,90,2,102,110,114,2,0, + 146,2,113,4,83,0,114,2,0,0,0,41,1,114,97,0, + 0,0,41,2,114,27,0,0,0,90,2,102,110,114,2,0, 0,0,114,2,0,0,0,114,4,0,0,0,218,9,60,115, - 101,116,99,111,109,112,62,196,5,0,0,115,4,0,0,0, + 101,116,99,111,109,112,62,202,5,0,0,115,4,0,0,0, 6,0,2,0,122,41,70,105,108,101,70,105,110,100,101,114, 46,95,102,105,108,108,95,99,97,99,104,101,46,60,108,111, 99,97,108,115,62,46,60,115,101,116,99,111,109,112,62,78, - 41,18,114,35,0,0,0,114,1,0,0,0,114,231,0,0, - 0,114,45,0,0,0,114,228,0,0,0,218,15,80,101,114, + 41,18,114,39,0,0,0,114,1,0,0,0,114,232,0,0, + 0,114,49,0,0,0,114,229,0,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,6,0,0,0,114,7,0,0,0,114,8,0,0,0,114, - 26,1,0,0,114,27,1,0,0,114,90,0,0,0,114,50, - 0,0,0,114,95,0,0,0,218,3,97,100,100,114,9,0, - 0,0,114,28,1,0,0,41,9,114,106,0,0,0,114,35, - 0,0,0,114,232,0,0,0,90,21,108,111,119,101,114,95, + 27,1,0,0,114,28,1,0,0,114,92,0,0,0,114,54, + 0,0,0,114,97,0,0,0,218,3,97,100,100,114,9,0, + 0,0,114,29,1,0,0,41,9,114,108,0,0,0,114,39, + 0,0,0,114,233,0,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, - 5,1,0,0,114,104,0,0,0,114,252,0,0,0,114,240, + 6,1,0,0,114,106,0,0,0,114,253,0,0,0,114,241, 0,0,0,90,8,110,101,119,95,110,97,109,101,114,2,0, - 0,0,114,2,0,0,0,114,4,0,0,0,114,30,1,0, - 0,167,5,0,0,115,34,0,0,0,0,2,6,1,2,1, + 0,0,114,2,0,0,0,114,4,0,0,0,114,31,1,0, + 0,173,5,0,0,115,34,0,0,0,0,2,6,1,2,1, 22,1,20,3,10,3,12,1,12,7,6,1,8,1,16,1, 4,1,18,2,4,1,12,1,6,1,12,1,122,22,70,105, 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, @@ -2449,38 +2464,38 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,35,0,0,0,41, - 2,114,46,0,0,0,114,105,0,0,0,41,1,114,35,0, - 0,0,41,2,114,176,0,0,0,114,29,1,0,0,114,2, + 117,112,112,111,114,116,101,100,41,1,114,39,0,0,0,41, + 2,114,50,0,0,0,114,107,0,0,0,41,1,114,39,0, + 0,0,41,2,114,177,0,0,0,114,30,1,0,0,114,2, 0,0,0,114,4,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,208,5,0,0,115,6,0,0,0,0,2,8,1,12, + 101,114,214,5,0,0,115,6,0,0,0,0,2,8,1,12, 1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, 105,108,101,70,105,110,100,101,114,114,2,0,0,0,41,3, - 114,176,0,0,0,114,29,1,0,0,114,35,1,0,0,114, - 2,0,0,0,41,2,114,176,0,0,0,114,29,1,0,0, + 114,177,0,0,0,114,30,1,0,0,114,36,1,0,0,114, + 2,0,0,0,41,2,114,177,0,0,0,114,30,1,0,0, 114,4,0,0,0,218,9,112,97,116,104,95,104,111,111,107, - 198,5,0,0,115,4,0,0,0,0,10,14,6,122,20,70, + 204,5,0,0,115,4,0,0,0,0,10,14,6,122,20,70, 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, 111,111,107,99,1,0,0,0,0,0,0,0,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,50,0,0,0,114,35,0,0,0,41,1,114,106,0,0, + 114,54,0,0,0,114,39,0,0,0,41,1,114,108,0,0, 0,114,2,0,0,0,114,2,0,0,0,114,4,0,0,0, - 114,4,1,0,0,216,5,0,0,115,2,0,0,0,0,1, + 114,5,1,0,0,222,5,0,0,115,2,0,0,0,0,1, 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,114, - 101,112,114,95,95,41,1,78,41,15,114,111,0,0,0,114, - 110,0,0,0,114,112,0,0,0,114,113,0,0,0,114,190, - 0,0,0,114,10,1,0,0,114,129,0,0,0,114,187,0, - 0,0,114,123,0,0,0,114,22,1,0,0,114,186,0,0, - 0,114,30,1,0,0,114,188,0,0,0,114,36,1,0,0, - 114,4,1,0,0,114,2,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,23,1,0,0,73,5, + 101,112,114,95,95,41,1,78,41,15,114,113,0,0,0,114, + 112,0,0,0,114,114,0,0,0,114,115,0,0,0,114,191, + 0,0,0,114,11,1,0,0,114,131,0,0,0,114,188,0, + 0,0,114,125,0,0,0,114,23,1,0,0,114,187,0,0, + 0,114,31,1,0,0,114,189,0,0,0,114,37,1,0,0, + 114,5,1,0,0,114,2,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,24,1,0,0,79,5, 0,0,115,20,0,0,0,8,7,4,2,8,14,8,4,4, - 2,8,12,8,5,10,48,8,31,12,18,114,23,1,0,0, + 2,8,12,8,5,10,48,8,31,12,18,114,24,1,0,0, 99,4,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, @@ -2493,18 +2508,18 @@ const unsigned char _Py_M__importlib_external[] = { 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,41,1,114,126,0,0,0,90,8,95,95, + 112,101,99,95,95,41,1,114,128,0,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,126,0,0,0,114,238, - 0,0,0,114,233,0,0,0,114,173,0,0,0,218,9,69, - 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,104, + 95,95,41,6,218,3,103,101,116,114,128,0,0,0,114,239, + 0,0,0,114,234,0,0,0,114,174,0,0,0,218,9,69, + 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,106, 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,126,0,0,0,114,170,0, + 112,97,116,104,110,97,109,101,114,128,0,0,0,114,171,0, 0,0,114,2,0,0,0,114,2,0,0,0,114,4,0,0, 0,218,14,95,102,105,120,95,117,112,95,109,111,100,117,108, - 101,222,5,0,0,115,34,0,0,0,0,2,10,1,10,1, + 101,228,5,0,0,115,34,0,0,0,0,2,10,1,10,1, 4,1,4,1,8,1,8,1,12,2,10,1,4,1,14,1, - 2,1,8,1,8,1,8,1,12,1,14,2,114,41,1,0, + 2,1,8,1,8,1,8,1,12,1,14,2,114,42,1,0, 0,99,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, @@ -2515,14 +2530,14 @@ const unsigned char _Py_M__importlib_external[] = { 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,239,0,0,0,114,147,0,0,0, + 32,32,32,32,41,7,114,240,0,0,0,114,149,0,0,0, 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, - 105,120,101,115,114,233,0,0,0,114,91,0,0,0,114,238, - 0,0,0,114,78,0,0,0,41,3,90,10,101,120,116,101, + 105,120,101,115,114,234,0,0,0,114,93,0,0,0,114,239, + 0,0,0,114,80,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,2,0,0,0,114,2,0, - 0,0,114,4,0,0,0,114,167,0,0,0,245,5,0,0, - 115,8,0,0,0,0,5,12,1,8,1,8,1,114,167,0, + 0,0,114,4,0,0,0,114,168,0,0,0,251,5,0,0, + 115,8,0,0,0,0,5,12,1,8,1,8,1,114,168,0, 0,0,99,1,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, @@ -2565,57 +2580,57 @@ const unsigned char _Py_M__importlib_external[] = { 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,52,0,0,0,114,64,0,0,0,218,8,98,117,105, - 108,116,105,110,115,114,144,0,0,0,90,5,112,111,115,105, + 4,114,56,0,0,0,114,66,0,0,0,218,8,98,117,105, + 108,116,105,110,115,114,146,0,0,0,90,5,112,111,115,105, 120,250,1,47,90,2,110,116,250,1,92,99,1,0,0,0, 0,0,0,0,2,0,0,0,3,0,0,0,115,0,0,0, 115,26,0,0,0,124,0,93,18,125,1,116,0,124,1,131, 1,100,0,107,2,86,0,1,0,113,2,100,1,83,0,41, - 2,114,29,0,0,0,78,41,1,114,31,0,0,0,41,2, - 114,22,0,0,0,114,84,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,242,0,0,0,25,6, + 2,114,34,0,0,0,78,41,1,114,18,0,0,0,41,2, + 114,27,0,0,0,114,86,0,0,0,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,243,0,0,0,31,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,62,0,0,0,122,30,105,109,112, + 110,101,120,112,114,62,114,64,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,1,0,0,0, - 114,25,0,0,0,114,21,0,0,0,114,30,0,0,0,114, - 48,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, + 114,30,0,0,0,114,26,0,0,0,114,35,0,0,0,114, + 52,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, 0,4,0,0,0,83,0,0,0,115,22,0,0,0,104,0, 124,0,93,14,125,1,100,0,124,1,155,0,157,2,146,2, - 113,4,83,0,41,1,114,63,0,0,0,114,2,0,0,0, - 41,2,114,22,0,0,0,218,1,115,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,114,31,1,0,0,41,6, + 113,4,83,0,41,1,114,65,0,0,0,114,2,0,0,0, + 41,2,114,27,0,0,0,218,1,115,114,2,0,0,0,114, + 2,0,0,0,114,4,0,0,0,114,32,1,0,0,47,6, 0,0,115,4,0,0,0,6,0,2,0,122,25,95,115,101, 116,117,112,46,60,108,111,99,97,108,115,62,46,60,115,101, 116,99,111,109,112,62,90,7,95,116,104,114,101,97,100,90, 8,95,119,101,97,107,114,101,102,90,6,119,105,110,114,101, - 103,114,175,0,0,0,114,5,0,0,0,122,4,46,112,121, - 119,122,6,95,100,46,112,121,100,84,78,41,19,114,120,0, - 0,0,114,6,0,0,0,114,147,0,0,0,114,254,0,0, - 0,114,111,0,0,0,90,18,95,98,117,105,108,116,105,110, - 95,102,114,111,109,95,110,97,109,101,114,115,0,0,0,218, - 3,97,108,108,114,155,0,0,0,114,105,0,0,0,114,26, - 0,0,0,114,11,0,0,0,114,244,0,0,0,114,151,0, - 0,0,114,42,1,0,0,114,91,0,0,0,114,169,0,0, - 0,114,174,0,0,0,114,178,0,0,0,41,12,218,17,95, + 103,114,176,0,0,0,114,5,0,0,0,122,4,46,112,121, + 119,122,6,95,100,46,112,121,100,84,78,41,19,114,122,0, + 0,0,114,6,0,0,0,114,149,0,0,0,114,255,0,0, + 0,114,113,0,0,0,90,18,95,98,117,105,108,116,105,110, + 95,102,114,111,109,95,110,97,109,101,114,117,0,0,0,218, + 3,97,108,108,114,19,0,0,0,114,107,0,0,0,114,31, + 0,0,0,114,11,0,0,0,114,245,0,0,0,114,153,0, + 0,0,114,43,1,0,0,114,93,0,0,0,114,170,0,0, + 0,114,175,0,0,0,114,179,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,21,0,0,0,114,25,0,0,0,90,9,111, + 95,111,115,114,26,0,0,0,114,30,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,2,0,0,0,114,2,0,0,0, - 114,4,0,0,0,218,6,95,115,101,116,117,112,0,6,0, + 114,4,0,0,0,218,6,95,115,101,116,117,112,6,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,49,1,0,0,99,1,0,0,0,0,0, + 10,1,10,1,114,50,1,0,0,99,1,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, @@ -2623,48 +2638,48 @@ const unsigned char _Py_M__importlib_external[] = { 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,49,1,0,0,114,167,0,0,0,114, - 6,0,0,0,114,15,1,0,0,114,151,0,0,0,114,23, - 1,0,0,114,36,1,0,0,218,9,109,101,116,97,95,112, - 97,116,104,114,169,0,0,0,114,9,1,0,0,41,2,114, - 48,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, + 115,46,78,41,10,114,50,1,0,0,114,168,0,0,0,114, + 6,0,0,0,114,16,1,0,0,114,153,0,0,0,114,24, + 1,0,0,114,37,1,0,0,218,9,109,101,116,97,95,112, + 97,116,104,114,170,0,0,0,114,10,1,0,0,41,2,114, + 49,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, 108,111,97,100,101,114,115,114,2,0,0,0,114,2,0,0, 0,114,4,0,0,0,218,8,95,105,110,115,116,97,108,108, - 65,6,0,0,115,8,0,0,0,0,2,8,1,6,1,20, - 1,114,51,1,0,0,41,62,114,113,0,0,0,114,10,0, + 71,6,0,0,115,8,0,0,0,0,2,8,1,6,1,20, + 1,114,52,1,0,0,41,63,114,115,0,0,0,114,10,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,9,0,0,0,114,11, - 0,0,0,114,17,0,0,0,114,19,0,0,0,114,28,0, - 0,0,114,38,0,0,0,114,39,0,0,0,114,43,0,0, - 0,114,44,0,0,0,114,46,0,0,0,114,49,0,0,0, - 114,58,0,0,0,218,4,116,121,112,101,218,8,95,95,99, - 111,100,101,95,95,114,146,0,0,0,114,15,0,0,0,114, - 133,0,0,0,114,14,0,0,0,114,18,0,0,0,114,213, - 0,0,0,114,81,0,0,0,114,77,0,0,0,114,91,0, - 0,0,114,78,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,87,0, - 0,0,114,92,0,0,0,114,98,0,0,0,114,101,0,0, - 0,114,103,0,0,0,114,122,0,0,0,114,129,0,0,0, - 114,137,0,0,0,114,141,0,0,0,114,143,0,0,0,114, - 149,0,0,0,114,154,0,0,0,114,156,0,0,0,114,161, - 0,0,0,218,6,111,98,106,101,99,116,114,168,0,0,0, - 114,173,0,0,0,114,174,0,0,0,114,189,0,0,0,114, - 199,0,0,0,114,216,0,0,0,114,233,0,0,0,114,238, - 0,0,0,114,244,0,0,0,114,239,0,0,0,114,245,0, - 0,0,114,7,1,0,0,114,9,1,0,0,114,23,1,0, - 0,114,41,1,0,0,114,167,0,0,0,114,49,1,0,0, - 114,51,1,0,0,114,2,0,0,0,114,2,0,0,0,114, - 2,0,0,0,114,4,0,0,0,218,8,60,109,111,100,117, - 108,101,62,8,0,0,0,115,124,0,0,0,4,15,4,1, - 4,1,2,1,2,255,4,4,8,17,8,5,8,5,8,6, - 8,12,8,10,8,9,8,5,8,7,8,9,12,22,10,127, - 0,7,16,1,12,2,4,1,4,2,6,2,6,2,8,2, - 18,71,8,40,8,19,8,12,8,12,8,28,8,17,8,33, - 8,28,8,24,16,13,14,10,12,11,8,14,6,3,6,1, - 2,255,12,68,14,64,14,29,16,127,0,17,14,68,18,45, - 18,26,4,3,18,53,14,60,14,42,14,127,0,7,14,127, - 0,22,12,23,8,11,8,65, + 0,0,0,114,17,0,0,0,114,22,0,0,0,114,24,0, + 0,0,114,33,0,0,0,114,42,0,0,0,114,43,0,0, + 0,114,47,0,0,0,114,48,0,0,0,114,50,0,0,0, + 114,53,0,0,0,114,61,0,0,0,218,4,116,121,112,101, + 218,8,95,95,99,111,100,101,95,95,114,148,0,0,0,114, + 15,0,0,0,114,135,0,0,0,114,14,0,0,0,114,20, + 0,0,0,114,214,0,0,0,114,83,0,0,0,114,79,0, + 0,0,114,93,0,0,0,114,80,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,89,0,0,0,114,94,0,0,0,114,100,0,0, + 0,114,103,0,0,0,114,105,0,0,0,114,124,0,0,0, + 114,131,0,0,0,114,139,0,0,0,114,143,0,0,0,114, + 145,0,0,0,114,151,0,0,0,114,156,0,0,0,114,157, + 0,0,0,114,162,0,0,0,218,6,111,98,106,101,99,116, + 114,169,0,0,0,114,174,0,0,0,114,175,0,0,0,114, + 190,0,0,0,114,200,0,0,0,114,217,0,0,0,114,234, + 0,0,0,114,239,0,0,0,114,245,0,0,0,114,240,0, + 0,0,114,246,0,0,0,114,8,1,0,0,114,10,1,0, + 0,114,24,1,0,0,114,42,1,0,0,114,168,0,0,0, + 114,50,1,0,0,114,52,1,0,0,114,2,0,0,0,114, + 2,0,0,0,114,2,0,0,0,114,4,0,0,0,218,8, + 60,109,111,100,117,108,101,62,8,0,0,0,115,126,0,0, + 0,4,15,4,1,4,1,2,1,2,255,4,4,8,17,8, + 5,8,5,8,6,8,6,8,12,8,10,8,9,8,5,8, + 7,8,9,12,22,10,127,0,7,16,1,12,2,4,1,4, + 2,6,2,6,2,8,2,18,71,8,40,8,19,8,12,8, + 12,8,28,8,17,8,33,8,28,8,24,16,13,14,10,12, + 11,8,14,6,3,6,1,2,255,12,68,14,64,14,29,16, + 127,0,17,14,68,18,45,18,26,4,3,18,53,14,60,14, + 42,14,127,0,7,14,127,0,22,12,23,8,11,8,65, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h new file mode 100644 index 00000000000..6ca737a0139 --- /dev/null +++ b/Python/importlib_zipimport.h @@ -0,0 +1,900 @@ +/* Auto-generated by Programs/_freeze_importlib.c */ +const unsigned char _Py_M__zipimport[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,48,1,0,0,100,0,90,0,100,1, + 100,2,108,1,90,2,100,1,100,3,108,1,109,3,90,3, + 109,4,90,4,1,0,100,1,100,2,108,5,90,6,100,1, + 100,2,108,7,90,7,100,1,100,2,108,8,90,8,100,1, + 100,2,108,9,90,9,100,1,100,2,108,10,90,10,100,1, + 100,2,108,11,90,11,100,4,100,5,103,2,90,12,101,2, + 106,13,90,13,101,2,106,14,100,6,100,2,133,2,25,0, + 90,15,71,0,100,7,100,4,132,0,100,4,101,16,131,3, + 90,17,105,0,90,18,101,19,101,10,131,1,90,20,71,0, + 100,8,100,5,132,0,100,5,131,2,90,21,101,13,100,9, + 23,0,100,10,100,10,102,3,101,13,100,11,23,0,100,12, + 100,10,102,3,100,13,100,14,102,4,90,22,100,15,100,16, + 132,0,90,23,100,17,100,18,132,0,90,24,100,19,100,20, + 132,0,90,25,100,21,100,22,132,0,90,26,100,23,90,27, + 100,12,97,28,100,24,100,25,132,0,90,29,100,26,100,27, + 132,0,90,30,100,28,100,29,132,0,90,31,100,30,100,31, + 132,0,90,32,101,19,101,32,106,33,131,1,90,34,100,32, + 100,33,132,0,90,35,100,34,100,35,132,0,90,36,100,36, + 100,37,132,0,90,37,100,38,100,39,132,0,90,38,100,40, + 100,41,132,0,90,39,100,2,83,0,41,42,97,80,2,0, + 0,122,105,112,105,109,112,111,114,116,32,112,114,111,118,105, + 100,101,115,32,115,117,112,112,111,114,116,32,102,111,114,32, + 105,109,112,111,114,116,105,110,103,32,80,121,116,104,111,110, + 32,109,111,100,117,108,101,115,32,102,114,111,109,32,90,105, + 112,32,97,114,99,104,105,118,101,115,46,10,10,84,104,105, + 115,32,109,111,100,117,108,101,32,101,120,112,111,114,116,115, + 32,116,104,114,101,101,32,111,98,106,101,99,116,115,58,10, + 45,32,122,105,112,105,109,112,111,114,116,101,114,58,32,97, + 32,99,108,97,115,115,59,32,105,116,115,32,99,111,110,115, + 116,114,117,99,116,111,114,32,116,97,107,101,115,32,97,32, + 112,97,116,104,32,116,111,32,97,32,90,105,112,32,97,114, + 99,104,105,118,101,46,10,45,32,90,105,112,73,109,112,111, + 114,116,69,114,114,111,114,58,32,101,120,99,101,112,116,105, + 111,110,32,114,97,105,115,101,100,32,98,121,32,122,105,112, + 105,109,112,111,114,116,101,114,32,111,98,106,101,99,116,115, + 46,32,73,116,39,115,32,97,10,32,32,115,117,98,99,108, + 97,115,115,32,111,102,32,73,109,112,111,114,116,69,114,114, + 111,114,44,32,115,111,32,105,116,32,99,97,110,32,98,101, + 32,99,97,117,103,104,116,32,97,115,32,73,109,112,111,114, + 116,69,114,114,111,114,44,32,116,111,111,46,10,45,32,95, + 122,105,112,95,100,105,114,101,99,116,111,114,121,95,99,97, + 99,104,101,58,32,97,32,100,105,99,116,44,32,109,97,112, + 112,105,110,103,32,97,114,99,104,105,118,101,32,112,97,116, + 104,115,32,116,111,32,122,105,112,32,100,105,114,101,99,116, + 111,114,121,10,32,32,105,110,102,111,32,100,105,99,116,115, + 44,32,97,115,32,117,115,101,100,32,105,110,32,122,105,112, + 105,109,112,111,114,116,101,114,46,95,102,105,108,101,115,46, + 10,10,73,116,32,105,115,32,117,115,117,97,108,108,121,32, + 110,111,116,32,110,101,101,100,101,100,32,116,111,32,117,115, + 101,32,116,104,101,32,122,105,112,105,109,112,111,114,116,32, + 109,111,100,117,108,101,32,101,120,112,108,105,99,105,116,108, + 121,59,32,105,116,32,105,115,10,117,115,101,100,32,98,121, + 32,116,104,101,32,98,117,105,108,116,105,110,32,105,109,112, + 111,114,116,32,109,101,99,104,97,110,105,115,109,32,102,111, + 114,32,115,121,115,46,112,97,116,104,32,105,116,101,109,115, + 32,116,104,97,116,32,97,114,101,32,112,97,116,104,115,10, + 116,111,32,90,105,112,32,97,114,99,104,105,118,101,115,46, + 10,233,0,0,0,0,78,41,2,218,14,95,117,110,112,97, + 99,107,95,117,105,110,116,49,54,218,14,95,117,110,112,97, + 99,107,95,117,105,110,116,51,50,218,14,90,105,112,73,109, + 112,111,114,116,69,114,114,111,114,218,11,122,105,112,105,109, + 112,111,114,116,101,114,233,1,0,0,0,99,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,114,3,0,0,0,78,41,3,218,8,95,95,110, + 97,109,101,95,95,218,10,95,95,109,111,100,117,108,101,95, + 95,218,12,95,95,113,117,97,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,33,0,0,0,115,2,0,0,0,8,1,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 64,0,0,0,115,108,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,25,100, + 5,100,6,132,1,90,5,100,26,100,7,100,8,132,1,90, + 6,100,9,100,10,132,0,90,7,100,11,100,12,132,0,90, + 8,100,13,100,14,132,0,90,9,100,15,100,16,132,0,90, + 10,100,17,100,18,132,0,90,11,100,19,100,20,132,0,90, + 12,100,21,100,22,132,0,90,13,100,23,100,24,132,0,90, + 14,100,4,83,0,41,27,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,8,0,0,0,9,0,0, + 0,67,0,0,0,115,36,1,0,0,116,0,124,1,116,1, + 131,2,115,28,100,1,100,0,108,2,125,2,124,2,160,3, + 124,1,161,1,125,1,124,1,115,44,116,4,100,2,124,1, + 100,3,141,2,130,1,116,5,114,60,124,1,160,6,116,5, + 116,7,161,2,125,1,103,0,125,3,122,14,116,8,160,9, + 124,1,161,1,125,4,87,0,110,72,4,0,116,10,116,11, + 102,2,107,10,114,150,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,132,116,4,100,4,124,1,100,3,141,2,130,1,124,5, + 125,1,124,3,160,13,124,6,161,1,1,0,89,0,113,64, + 88,0,124,4,106,14,100,5,64,0,100,6,107,3,114,182, + 116,4,100,4,124,1,100,3,141,2,130,1,113,182,113,64, + 122,12,116,15,124,1,25,0,125,7,87,0,110,36,4,0, + 116,16,107,10,114,230,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,2, + 88,0,124,7,124,0,95,18,124,1,124,0,95,19,116,8, + 106,20,124,3,100,0,100,0,100,7,133,3,25,0,142,0, + 124,0,95,21,124,0,106,21,144,1,114,32,124,0,4,0, + 106,21,116,7,55,0,2,0,95,21,100,0,83,0,41,8, + 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,41,1,218, + 4,112,97,116,104,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,11,0, + 0,0,114,15,0,0,0,114,29,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,60,0,0,0,115,58,0,0,0,0,1,10,1, + 8,1,10,1,4,1,12,1,4,1,12,2,4,2,2,1, + 14,1,18,3,14,1,8,1,12,1,4,1,16,3,14,2, + 12,1,4,2,2,1,12,1,14,1,8,1,14,1,6,1, + 6,2,22,1,8,1,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,5,0,0,0,4,0,0,0,67,0, + 0,0,115,78,0,0,0,116,0,124,0,124,1,131,2,125, + 3,124,3,100,1,107,9,114,26,124,0,103,0,102,2,83, + 0,116,1,124,0,124,1,131,2,125,4,116,2,124,0,124, + 4,131,2,114,70,100,1,124,0,106,3,155,0,116,4,155, + 0,124,4,155,0,157,3,103,1,102,2,83,0,100,1,103, + 0,102,2,83,0,41,2,97,239,1,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,32,32,32,32,32,32,32,32,78,41,5,218,16, + 95,103,101,116,95,109,111,100,117,108,101,95,105,110,102,111, + 218,16,95,103,101,116,95,109,111,100,117,108,101,95,112,97, + 116,104,218,7,95,105,115,95,100,105,114,114,27,0,0,0, + 114,18,0,0,0,41,5,114,30,0,0,0,218,8,102,117, + 108,108,110,97,109,101,114,11,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,106,0,0,0,115,14,0,0,0,0,10,10, + 1,8,2,8,7,10,1,10,4,24,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,3,0,0, + 0,4,0,0,0,67,0,0,0,115,16,0,0,0,124,0, + 160,0,124,1,124,2,161,2,100,1,25,0,83,0,41,2, + 97,139,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,32,32,32,32,32,32,32,32, + 114,0,0,0,0,41,1,114,39,0,0,0,41,3,114,30, + 0,0,0,114,36,0,0,0,114,11,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,138,0,0,0,115,2,0, + 0,0,0,9,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,2,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,1,122,163,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,102,111,117,110,100,46,10,32,32,32,32,32,32, + 32,32,41,1,218,16,95,103,101,116,95,109,111,100,117,108, + 101,95,99,111,100,101,41,5,114,30,0,0,0,114,36,0, + 0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,107, + 97,103,101,114,38,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,150,0,0,0,115,4,0,0,0,0,6,16,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,4,0,0, + 0,8,0,0,0,67,0,0,0,115,118,0,0,0,116,0, + 114,16,124,1,160,1,116,0,116,2,161,2,125,1,124,1, + 125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,1, + 114,58,124,1,116,5,124,0,106,4,116,2,23,0,131,1, + 100,1,133,2,25,0,125,2,122,14,124,0,106,6,124,2, + 25,0,125,3,87,0,110,32,4,0,116,7,107,10,114,104, + 1,0,1,0,1,0,116,8,100,2,100,3,124,2,131,3, + 130,1,89,0,110,2,88,0,116,9,124,0,106,4,124,3, + 131,2,83,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,16,0,0, + 0,114,17,0,0,0,114,18,0,0,0,218,10,115,116,97, + 114,116,115,119,105,116,104,114,27,0,0,0,218,3,108,101, + 110,114,26,0,0,0,114,24,0,0,0,114,20,0,0,0, + 218,9,95,103,101,116,95,100,97,116,97,41,4,114,30,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,160,0,0,0,115,20,0,0,0,0,6, + 4,1,12,2,4,1,16,1,22,2,2,1,14,1,14,1, + 18,1,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,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,1,122,106,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,46,10,32,32,32,32, + 32,32,32,32,41,1,114,41,0,0,0,41,5,114,30,0, + 0,0,114,36,0,0,0,114,42,0,0,0,114,43,0,0, + 0,114,38,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,181,0,0,0,115,4,0,0,0,0,7,16,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,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,107,8,114,36,116,1,100,2,124,1,155,2,157,2, + 124,1,100,3,141,2,130,1,116,2,124,0,124,1,131,2, + 125,3,124,2,114,64,116,3,160,4,124,3,100,4,161,2, + 125,4,110,10,124,3,155,0,100,5,157,2,125,4,122,14, + 124,0,106,5,124,4,25,0,125,5,87,0,110,22,4,0, + 116,6,107,10,114,110,1,0,1,0,1,0,89,0,100,1, + 83,0,88,0,116,7,124,0,106,8,124,5,131,2,160,9, + 161,0,83,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,122,18,99,97,110,39,116,32,102,105, + 110,100,32,109,111,100,117,108,101,32,41,1,218,4,110,97, + 109,101,122,11,95,95,105,110,105,116,95,95,46,112,121,122, + 3,46,112,121,41,10,114,33,0,0,0,114,3,0,0,0, + 114,34,0,0,0,114,19,0,0,0,114,28,0,0,0,114, + 26,0,0,0,114,24,0,0,0,114,48,0,0,0,114,27, + 0,0,0,218,6,100,101,99,111,100,101,41,6,114,30,0, + 0,0,114,36,0,0,0,114,37,0,0,0,114,11,0,0, + 0,218,8,102,117,108,108,112,97,116,104,114,50,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,192,0,0,0,115, + 24,0,0,0,0,7,10,1,8,1,18,2,10,1,4,1, + 14,2,10,2,2,1,14,1,14,2,8,1,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,3,0,0, + 0,4,0,0,0,67,0,0,0,115,40,0,0,0,116,0, + 124,0,124,1,131,2,125,2,124,2,100,1,107,8,114,36, + 116,1,100,2,124,1,155,2,157,2,124,1,100,3,141,2, + 130,1,124,2,83,0,41,4,122,171,105,115,95,112,97,99, + 107,97,103,101,40,102,117,108,108,110,97,109,101,41,32,45, + 62,32,98,111,111,108,46,10,10,32,32,32,32,32,32,32, + 32,82,101,116,117,114,110,32,84,114,117,101,32,105,102,32, + 116,104,101,32,109,111,100,117,108,101,32,115,112,101,99,105, + 102,105,101,100,32,98,121,32,102,117,108,108,110,97,109,101, + 32,105,115,32,97,32,112,97,99,107,97,103,101,46,10,32, + 32,32,32,32,32,32,32,82,97,105,115,101,32,90,105,112, + 73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,116, + 104,101,32,109,111,100,117,108,101,32,99,111,117,108,100,110, + 39,116,32,98,101,32,102,111,117,110,100,46,10,32,32,32, + 32,32,32,32,32,78,122,18,99,97,110,39,116,32,102,105, + 110,100,32,109,111,100,117,108,101,32,41,1,114,53,0,0, + 0,41,2,114,33,0,0,0,114,3,0,0,0,41,3,114, + 30,0,0,0,114,36,0,0,0,114,37,0,0,0,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,218,10,105, + 115,95,112,97,99,107,97,103,101,218,0,0,0,115,8,0, + 0,0,0,6,10,1,8,1,18,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,8,0,0,0,8, + 0,0,0,67,0,0,0,115,248,0,0,0,116,0,124,0, + 124,1,131,2,92,3,125,2,125,3,125,4,116,1,106,2, + 160,3,124,1,161,1,125,5,124,5,100,1,107,8,115,46, + 116,4,124,5,116,5,131,2,115,64,116,5,124,1,131,1, + 125,5,124,5,116,1,106,2,124,1,60,0,124,0,124,5, + 95,6,122,84,124,3,114,108,116,7,124,0,124,1,131,2, + 125,6,116,8,160,9,124,0,106,10,124,6,161,2,125,7, + 124,7,103,1,124,5,95,11,116,12,124,5,100,2,131,2, + 115,124,116,13,124,5,95,13,116,8,160,14,124,5,106,15, + 124,1,124,4,161,3,1,0,116,16,124,2,124,5,106,15, + 131,2,1,0,87,0,110,22,1,0,1,0,1,0,116,1, + 106,2,124,1,61,0,130,0,89,0,110,2,88,0,122,14, + 116,1,106,2,124,1,25,0,125,5,87,0,110,36,4,0, + 116,17,107,10,114,228,1,0,1,0,1,0,116,18,100,3, + 124,1,155,2,100,4,157,3,131,1,130,1,89,0,110,2, + 88,0,116,19,160,20,100,5,124,1,124,4,161,3,1,0, + 124,5,83,0,41,6,122,245,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,119,97,115,110,39,116,32,102,111, + 117,110,100,46,10,32,32,32,32,32,32,32,32,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,21,114,41,0,0,0,218,3, + 115,121,115,218,7,109,111,100,117,108,101,115,218,3,103,101, + 116,114,13,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,34,0,0,0,114,19,0,0,0,114,28,0,0,0,114, + 27,0,0,0,90,8,95,95,112,97,116,104,95,95,218,7, + 104,97,115,97,116,116,114,114,58,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,24,0,0, + 0,218,11,73,109,112,111,114,116,69,114,114,111,114,218,10, + 95,98,111,111,116,115,116,114,97,112,218,16,95,118,101,114, + 98,111,115,101,95,109,101,115,115,97,103,101,41,8,114,30, + 0,0,0,114,36,0,0,0,114,42,0,0,0,114,43,0, + 0,0,114,38,0,0,0,90,3,109,111,100,114,11,0,0, + 0,114,55,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,231,0,0,0,115,48,0,0,0,0,7,16,1,12, + 1,18,1,8,1,10,1,6,2,2,1,4,3,10,1,14, + 1,8,2,10,1,6,1,16,1,16,1,6,1,8,1,8, + 2,2,1,14,1,14,1,22,1,14,1,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,3,0,0, + 0,4,0,0,0,67,0,0,0,115,24,0,0,0,100,1, + 100,2,108,0,109,1,125,2,1,0,124,2,160,2,124,0, + 124,1,161,2,83,0,41,3,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,114,0,0,0,0,41,1,218,9,114, + 101,115,111,117,114,99,101,115,41,3,90,9,105,109,112,111, + 114,116,108,105,98,114,71,0,0,0,90,30,95,122,105,112, + 105,109,112,111,114,116,95,103,101,116,95,114,101,115,111,117, + 114,99,101,95,114,101,97,100,101,114,41,3,114,30,0,0, + 0,114,36,0,0,0,114,71,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,13, + 1,0,0,115,4,0,0,0,0,6,12,1,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,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, + 27,0,0,0,114,18,0,0,0,114,29,0,0,0,41,1, + 114,30,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,23,1, + 0,0,115,2,0,0,0,0,1,122,20,122,105,112,105,109, + 112,111,114,116,101,114,46,95,95,114,101,112,114,95,95,41, + 1,78,41,1,78,41,15,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, + 32,0,0,0,114,39,0,0,0,114,40,0,0,0,114,44, + 0,0,0,114,51,0,0,0,114,52,0,0,0,114,56,0, + 0,0,114,57,0,0,0,114,70,0,0,0,114,72,0,0, + 0,114,73,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,42, + 0,0,0,115,24,0,0,0,8,13,4,5,8,46,10,32, + 10,12,8,10,8,21,8,11,8,26,8,13,8,38,8,10, + 122,12,95,95,105,110,105,116,95,95,46,112,121,99,84,122, + 11,95,95,105,110,105,116,95,95,46,112,121,70,41,3,122, + 4,46,112,121,99,84,70,41,3,122,3,46,112,121,70,70, + 99,2,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,29,0,0,0, + 218,10,114,112,97,114,116,105,116,105,111,110,41,2,114,30, + 0,0,0,114,36,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,34,0,0,0,41,1,0,0, + 115,2,0,0,0,0,1,114,34,0,0,0,99,2,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,107,6,83,0,41,1,78,41,2,114,18,0, + 0,0,114,26,0,0,0,41,3,114,30,0,0,0,114,11, + 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,35,0,0,0, + 45,1,0,0,115,4,0,0,0,0,4,8,2,114,35,0, + 0,0,99,2,0,0,0,0,0,0,0,7,0,0,0,4, + 0,0,0,67,0,0,0,115,56,0,0,0,116,0,124,0, + 124,1,131,2,125,2,116,1,68,0,93,36,92,3,125,3, + 125,4,125,5,124,2,124,3,23,0,125,6,124,6,124,0, + 106,2,107,6,114,14,124,5,2,0,1,0,83,0,113,14, + 100,0,83,0,41,1,78,41,3,114,34,0,0,0,218,16, + 95,122,105,112,95,115,101,97,114,99,104,111,114,100,101,114, + 114,26,0,0,0,41,7,114,30,0,0,0,114,36,0,0, + 0,114,11,0,0,0,218,6,115,117,102,102,105,120,218,10, + 105,115,98,121,116,101,99,111,100,101,114,43,0,0,0,114, + 55,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, + 0,0,0,114,33,0,0,0,54,1,0,0,115,12,0,0, + 0,0,1,10,1,14,1,8,1,10,1,10,1,114,33,0, + 0,0,99,1,0,0,0,0,0,0,0,23,0,0,0,9, + 0,0,0,67,0,0,0,115,20,4,0,0,122,16,116,0, + 160,1,124,0,100,1,161,2,125,1,87,0,110,38,4,0, + 116,2,107,10,114,54,1,0,1,0,1,0,116,3,100,2, + 124,0,155,2,157,2,124,0,100,3,141,2,130,1,89,0, + 110,2,88,0,124,1,144,3,143,190,1,0,122,34,124,1, + 160,4,100,4,100,5,161,2,1,0,124,1,160,5,161,0, + 125,2,124,1,160,6,100,6,161,1,125,3,87,0,110,38, + 4,0,116,2,107,10,114,136,1,0,1,0,1,0,116,3, + 100,7,124,0,155,2,157,2,124,0,100,3,141,2,130,1, + 89,0,110,2,88,0,116,7,124,3,131,1,100,6,107,3, + 114,168,116,3,100,7,124,0,155,2,157,2,124,0,100,3, + 141,2,130,1,124,3,100,0,100,8,133,2,25,0,100,9, + 107,3,114,202,116,3,100,10,124,0,155,2,157,2,124,0, + 100,3,141,2,130,1,116,8,124,3,100,11,100,12,133,2, + 25,0,131,1,125,4,116,8,124,3,100,12,100,13,133,2, + 25,0,131,1,125,5,124,2,124,4,107,0,144,1,114,6, + 116,3,100,14,124,0,155,2,157,2,124,0,100,3,141,2, + 130,1,124,2,124,5,107,0,144,1,114,34,116,3,100,15, + 124,0,155,2,157,2,124,0,100,3,141,2,130,1,124,2, + 124,4,56,0,125,2,124,2,124,5,24,0,125,6,124,6, + 100,16,107,0,144,1,114,78,116,3,100,17,124,0,155,2, + 157,2,124,0,100,3,141,2,130,1,105,0,125,7,100,16, + 125,8,122,14,124,1,160,4,124,2,161,1,1,0,87,0, + 110,40,4,0,116,2,107,10,144,1,114,140,1,0,1,0, + 1,0,116,3,100,7,124,0,155,2,157,2,124,0,100,3, + 141,2,130,1,89,0,110,2,88,0,124,1,160,6,100,18, + 161,1,125,3,116,7,124,3,131,1,100,8,107,0,144,1, + 114,174,116,9,100,19,131,1,130,1,124,3,100,0,100,8, + 133,2,25,0,100,20,107,3,144,1,114,196,144,3,113,248, + 116,7,124,3,131,1,100,18,107,3,144,1,114,218,116,9, + 100,19,131,1,130,1,116,10,124,3,100,21,100,22,133,2, + 25,0,131,1,125,9,116,10,124,3,100,22,100,11,133,2, + 25,0,131,1,125,10,116,10,124,3,100,11,100,23,133,2, + 25,0,131,1,125,11,116,10,124,3,100,23,100,12,133,2, + 25,0,131,1,125,12,116,8,124,3,100,12,100,13,133,2, + 25,0,131,1,125,13,116,8,124,3,100,13,100,24,133,2, + 25,0,131,1,125,14,116,8,124,3,100,24,100,25,133,2, + 25,0,131,1,125,15,116,10,124,3,100,25,100,26,133,2, + 25,0,131,1,125,16,116,10,124,3,100,26,100,27,133,2, + 25,0,131,1,125,17,116,10,124,3,100,27,100,28,133,2, + 25,0,131,1,125,18,116,8,124,3,100,29,100,18,133,2, + 25,0,131,1,125,19,124,16,124,17,23,0,124,18,23,0, + 125,4,124,19,124,5,107,4,144,2,114,178,116,3,100,30, + 124,0,155,2,157,2,124,0,100,3,141,2,130,1,124,19, + 124,6,55,0,125,19,122,14,124,1,160,6,124,16,161,1, + 125,20,87,0,110,40,4,0,116,2,107,10,144,2,114,240, + 1,0,1,0,1,0,116,3,100,7,124,0,155,2,157,2, + 124,0,100,3,141,2,130,1,89,0,110,2,88,0,116,7, + 124,20,131,1,124,16,107,3,144,3,114,18,116,3,100,7, + 124,0,155,2,157,2,124,0,100,3,141,2,130,1,122,50, + 116,7,124,1,160,6,124,4,124,16,24,0,161,1,131,1, + 124,4,124,16,24,0,107,3,144,3,114,66,116,3,100,7, + 124,0,155,2,157,2,124,0,100,3,141,2,130,1,87,0, + 110,40,4,0,116,2,107,10,144,3,114,108,1,0,1,0, + 1,0,116,3,100,7,124,0,155,2,157,2,124,0,100,3, + 141,2,130,1,89,0,110,2,88,0,124,9,100,31,64,0, + 144,3,114,130,124,20,160,11,161,0,125,20,110,54,122,14, + 124,20,160,11,100,32,161,1,125,20,87,0,110,38,4,0, + 116,12,107,10,144,3,114,182,1,0,1,0,1,0,124,20, + 160,11,100,33,161,1,160,13,116,14,161,1,125,20,89,0, + 110,2,88,0,124,20,160,15,100,34,116,16,161,2,125,20, + 116,17,160,18,124,0,124,20,161,2,125,21,124,21,124,10, + 124,14,124,15,124,19,124,11,124,12,124,13,102,8,125,22, + 124,22,124,7,124,20,60,0,124,8,100,35,55,0,125,8, + 144,1,113,142,87,0,53,0,81,0,82,0,88,0,116,19, + 160,20,100,36,124,8,124,0,161,3,1,0,124,7,83,0, + 41,37,78,218,2,114,98,122,21,99,97,110,39,116,32,111, + 112,101,110,32,90,105,112,32,102,105,108,101,58,32,41,1, + 114,11,0,0,0,105,234,255,255,255,114,76,0,0,0,233, + 22,0,0,0,122,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, + 115,4,0,0,0,80,75,5,6,122,16,110,111,116,32,97, + 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,114,0,0,0,0,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,233,46,0,0,0,122,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,21,218,3,95,105,111,218,4, + 111,112,101,110,114,20,0,0,0,114,3,0,0,0,218,4, + 115,101,101,107,90,4,116,101,108,108,218,4,114,101,97,100, + 114,47,0,0,0,114,2,0,0,0,218,8,69,79,70,69, + 114,114,111,114,114,1,0,0,0,114,54,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,17,0,0,0,114, + 18,0,0,0,114,19,0,0,0,114,28,0,0,0,114,68, + 0,0,0,114,69,0,0,0,41,23,114,27,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,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,31,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,102, + 105,108,101,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,53,0,0,0,114, + 11,0,0,0,218,1,116,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,25,0,0,0,85,1,0,0,115, + 154,0,0,0,0,1,2,1,16,1,14,1,24,2,8,1, + 2,1,12,1,8,1,14,1,14,1,24,1,12,1,18,1, + 16,2,18,2,16,1,16,1,10,1,18,1,10,1,18,1, + 8,1,8,1,10,1,18,2,4,2,4,1,2,1,14,1, + 16,1,24,2,10,1,14,1,8,2,18,1,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,2, + 2,1,14,1,16,1,24,1,14,1,18,4,2,1,28,1, + 22,1,16,1,24,2,10,2,10,3,2,1,14,1,16,1, + 22,2,12,1,12,1,20,1,8,1,22,1,14,1,114,25, + 0,0,0,117,190,1,0,0,0,1,2,3,4,5,6,7, + 8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55, + 56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71, + 72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87, + 88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119, + 120,121,122,123,124,125,126,127,195,135,195,188,195,169,195,162, + 195,164,195,160,195,165,195,167,195,170,195,171,195,168,195,175, + 195,174,195,172,195,132,195,133,195,137,195,166,195,134,195,180, + 195,182,195,178,195,187,195,185,195,191,195,150,195,156,194,162, + 194,163,194,165,226,130,167,198,146,195,161,195,173,195,179,195, + 186,195,177,195,145,194,170,194,186,194,191,226,140,144,194,172, + 194,189,194,188,194,161,194,171,194,187,226,150,145,226,150,146, + 226,150,147,226,148,130,226,148,164,226,149,161,226,149,162,226, + 149,150,226,149,149,226,149,163,226,149,145,226,149,151,226,149, + 157,226,149,156,226,149,155,226,148,144,226,148,148,226,148,180, + 226,148,172,226,148,156,226,148,128,226,148,188,226,149,158,226, + 149,159,226,149,154,226,149,148,226,149,169,226,149,166,226,149, + 160,226,149,144,226,149,172,226,149,167,226,149,168,226,149,164, + 226,149,165,226,149,153,226,149,152,226,149,146,226,149,147,226, + 149,171,226,149,170,226,148,152,226,148,140,226,150,136,226,150, + 132,226,150,140,226,150,144,226,150,128,206,177,195,159,206,147, + 207,128,206,163,207,131,194,181,207,132,206,166,206,152,206,169, + 206,180,226,136,158,207,134,206,181,226,136,169,226,137,161,194, + 177,226,137,165,226,137,164,226,140,160,226,140,161,195,183,226, + 137,136,194,176,226,136,153,194,183,226,136,154,226,129,191,194, + 178,226,150,160,194,160,99,0,0,0,0,0,0,0,0,1, + 0,0,0,8,0,0,0,67,0,0,0,115,108,0,0,0, + 116,0,114,22,116,1,160,2,100,1,161,1,1,0,116,3, + 100,2,131,1,130,1,100,3,97,0,122,60,122,16,100,4, + 100,5,108,4,109,5,125,0,1,0,87,0,110,38,4,0, + 116,6,107,10,114,82,1,0,1,0,1,0,116,1,160,2, + 100,1,161,1,1,0,116,3,100,2,131,1,130,1,89,0, + 110,2,88,0,87,0,53,0,100,6,97,0,88,0,116,1, + 160,2,100,7,161,1,1,0,124,0,83,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,122,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,41,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,68,0,0,0,114, + 69,0,0,0,114,3,0,0,0,90,4,122,108,105,98,114, + 122,0,0,0,218,9,69,120,99,101,112,116,105,111,110,41, + 1,114,122,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,220,1,0,0,115, + 24,0,0,0,0,2,4,3,10,1,8,2,4,1,4,1, + 16,1,14,1,10,1,18,2,6,2,10,1,114,125,0,0, + 0,99,2,0,0,0,0,0,0,0,17,0,0,0,9,0, + 0,0,67,0,0,0,115,130,1,0,0,124,1,92,8,125, + 2,125,3,125,4,125,5,125,6,125,7,125,8,125,9,124, + 4,100,1,107,0,114,36,116,0,100,2,131,1,130,1,116, + 1,160,2,124,0,100,3,161,2,144,1,143,8,125,10,122, + 14,124,10,160,3,124,6,161,1,1,0,87,0,110,38,4, + 0,116,4,107,10,114,104,1,0,1,0,1,0,116,0,100, + 4,124,0,155,2,157,2,124,0,100,5,141,2,130,1,89, + 0,110,2,88,0,124,10,160,5,100,6,161,1,125,11,116, + 6,124,11,131,1,100,6,107,3,114,136,116,7,100,7,131, + 1,130,1,124,11,100,0,100,8,133,2,25,0,100,9,107, + 3,114,170,116,0,100,10,124,0,155,2,157,2,124,0,100, + 5,141,2,130,1,116,8,124,11,100,11,100,12,133,2,25, + 0,131,1,125,12,116,8,124,11,100,12,100,6,133,2,25, + 0,131,1,125,13,100,6,124,12,23,0,124,13,23,0,125, + 14,124,6,124,14,55,0,125,6,122,14,124,10,160,3,124, + 6,161,1,1,0,87,0,110,40,4,0,116,4,107,10,144, + 1,114,20,1,0,1,0,1,0,116,0,100,4,124,0,155, + 2,157,2,124,0,100,5,141,2,130,1,89,0,110,2,88, + 0,124,10,160,5,124,4,161,1,125,15,116,6,124,15,131, + 1,124,4,107,3,144,1,114,54,116,4,100,13,131,1,130, + 1,87,0,53,0,81,0,82,0,88,0,124,3,100,1,107, + 2,144,1,114,78,124,15,83,0,122,10,116,9,131,0,125, + 16,87,0,110,30,4,0,116,10,107,10,144,1,114,118,1, + 0,1,0,1,0,116,0,100,14,131,1,130,1,89,0,110, + 2,88,0,124,16,124,15,100,15,131,2,83,0,41,16,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,81,0,0,0,122,21, + 99,97,110,39,116,32,114,101,97,100,32,90,105,112,32,102, + 105,108,101,58,32,41,1,114,11,0,0,0,114,93,0,0, + 0,122,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,114,83, + 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,92,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,122,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,105,241,255,255,255,41,11,114,3,0, + 0,0,114,99,0,0,0,114,100,0,0,0,114,101,0,0, + 0,114,20,0,0,0,114,102,0,0,0,114,47,0,0,0, + 114,103,0,0,0,114,1,0,0,0,114,125,0,0,0,114, + 124,0,0,0,41,17,114,27,0,0,0,114,50,0,0,0, + 90,8,100,97,116,97,112,97,116,104,114,112,0,0,0,114, + 116,0,0,0,114,117,0,0,0,114,120,0,0,0,114,113, + 0,0,0,114,114,0,0,0,114,115,0,0,0,114,107,0, + 0,0,114,108,0,0,0,114,118,0,0,0,114,119,0,0, + 0,114,109,0,0,0,90,8,114,97,119,95,100,97,116,97, + 114,122,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,48,0,0,0,241,1,0,0,115,62,0, + 0,0,0,1,20,1,8,1,8,2,16,2,2,1,14,1, + 14,1,24,1,10,1,12,1,8,2,16,2,18,2,16,1, + 16,1,12,1,8,1,2,1,14,1,16,1,24,1,10,1, + 14,1,18,2,10,2,4,3,2,1,10,1,16,1,14,1, + 114,48,0,0,0,99,2,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,31,2,0,0,115,2,0,0,0,0,2,114,128,0, + 0,0,99,3,0,0,0,0,0,0,0,5,0,0,0,5, + 0,0,0,67,0,0,0,115,206,0,0,0,116,0,124,1, + 131,1,100,1,107,0,114,20,116,1,100,2,131,1,130,1, + 124,1,100,0,100,3,133,2,25,0,116,2,106,3,107,3, + 114,54,116,4,160,5,100,4,124,0,161,2,1,0,100,0, + 83,0,116,6,124,1,100,3,100,5,133,2,25,0,131,1, + 125,3,124,3,100,6,107,3,114,112,116,7,106,8,100,7, + 107,3,114,110,124,3,100,8,107,3,115,106,116,7,106,8, + 100,9,107,2,114,110,100,0,83,0,110,46,124,2,100,6, + 107,3,114,158,116,9,116,6,124,1,100,5,100,10,133,2, + 25,0,131,1,124,2,131,2,115,158,116,4,160,5,100,11, + 124,0,161,2,1,0,100,0,83,0,116,10,160,11,124,1, + 100,1,100,0,133,2,25,0,161,1,125,4,116,12,124,4, + 116,13,131,2,115,202,116,14,100,12,124,0,155,2,100,13, + 157,3,131,1,130,1,124,4,83,0,41,14,78,114,85,0, + 0,0,122,12,98,97,100,32,112,121,99,32,100,97,116,97, + 114,83,0,0,0,122,18,123,33,114,125,32,104,97,115,32, + 98,97,100,32,109,97,103,105,99,114,88,0,0,0,114,0, + 0,0,0,90,5,110,101,118,101,114,114,5,0,0,0,90, + 6,97,108,119,97,121,115,114,84,0,0,0,122,18,123,33, + 114,125,32,104,97,115,32,98,97,100,32,109,116,105,109,101, + 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,15,114,47,0,0,0, + 114,3,0,0,0,114,19,0,0,0,90,12,77,65,71,73, + 67,95,78,85,77,66,69,82,114,68,0,0,0,114,69,0, + 0,0,114,2,0,0,0,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,114,128,0,0,0,218,7,109,97,114,115,104, + 97,108,90,5,108,111,97,100,115,114,13,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,5,114,49,0,0,0,218,4,100,97, + 116,97,218,5,109,116,105,109,101,114,111,0,0,0,114,42, + 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,39,2,0,0,115,40,0,0,0,0,1,12,1, + 8,2,18,1,12,1,4,2,16,1,8,5,10,1,6,255, + 2,1,8,255,2,2,6,1,30,1,12,1,4,4,18,1, + 10,1,16,1,114,135,0,0,0,99,1,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,17,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,72,2, + 0,0,115,6,0,0,0,0,1,12,1,12,1,114,139,0, + 0,0,99,2,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,66,0,0,0,84,41,1,90, + 12,100,111,110,116,95,105,110,104,101,114,105,116,41,2,114, + 139,0,0,0,218,7,99,111,109,112,105,108,101,41,2,114, + 49,0,0,0,114,138,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,79,2,0,0,115,4,0, + 0,0,0,1,8,1,114,141,0,0,0,99,2,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, + 76,0,0,0,114,12,0,0,0,41,2,114,113,0,0,0, + 90,6,109,107,116,105,109,101,41,2,218,1,100,114,121,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,85,2,0,0,115,24,0,0,0,0,1,4,1,10,1, + 10,1,6,1,6,1,10,1,10,1,2,0,2,0,2,250, + 2,255,114,149,0,0,0,99,2,0,0,0,0,0,0,0, + 5,0,0,0,10,0,0,0,67,0,0,0,115,104,0,0, + 0,122,70,124,1,100,1,100,0,133,2,25,0,100,2,107, + 6,115,22,116,0,130,1,124,1,100,0,100,1,133,2,25, + 0,125,1,124,0,106,1,124,1,25,0,125,2,124,2,100, + 3,25,0,125,3,124,2,100,4,25,0,125,4,116,2,124, + 4,124,3,131,2,87,0,83,0,4,0,116,3,116,4,116, + 5,102,3,107,10,114,98,1,0,1,0,1,0,89,0,100, + 5,83,0,88,0,100,0,83,0,41,6,78,114,12,0,0, + 0,41,2,218,1,99,218,1,111,114,143,0,0,0,233,6, + 0,0,0,114,0,0,0,0,41,6,218,14,65,115,115,101, + 114,116,105,111,110,69,114,114,111,114,114,26,0,0,0,114, + 149,0,0,0,114,24,0,0,0,218,10,73,110,100,101,120, + 69,114,114,111,114,114,132,0,0,0,41,5,114,30,0,0, + 0,114,11,0,0,0,114,50,0,0,0,114,113,0,0,0, + 114,114,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,109,116,105,109,101, + 95,111,102,95,115,111,117,114,99,101,98,2,0,0,115,18, + 0,0,0,0,1,2,2,20,1,12,1,10,3,8,1,8, + 1,12,1,20,1,114,155,0,0,0,99,2,0,0,0,0, + 0,0,0,12,0,0,0,9,0,0,0,67,0,0,0,115, + 204,0,0,0,116,0,124,0,124,1,131,2,125,2,116,1, + 68,0,93,166,92,3,125,3,125,4,125,5,124,2,124,3, + 23,0,125,6,116,2,106,3,100,1,124,0,106,4,116,5, + 124,6,100,2,100,3,141,5,1,0,122,14,124,0,106,6, + 124,6,25,0,125,7,87,0,110,20,4,0,116,7,107,10, + 114,88,1,0,1,0,1,0,89,0,113,14,88,0,124,7, + 100,4,25,0,125,8,116,8,124,0,106,4,124,7,131,2, + 125,9,124,4,114,138,116,9,124,0,124,6,131,2,125,10, + 116,10,124,8,124,9,124,10,131,3,125,11,110,10,116,11, + 124,8,124,9,131,2,125,11,124,11,100,0,107,8,114,158, + 113,14,124,7,100,4,25,0,125,8,124,11,124,5,124,8, + 102,3,2,0,1,0,83,0,113,14,116,12,100,5,124,1, + 155,2,157,2,124,1,100,6,141,2,130,1,100,0,83,0, + 41,7,78,122,13,116,114,121,105,110,103,32,123,125,123,125, + 123,125,114,76,0,0,0,41,1,90,9,118,101,114,98,111, + 115,105,116,121,114,0,0,0,0,122,18,99,97,110,39,116, + 32,102,105,110,100,32,109,111,100,117,108,101,32,41,1,114, + 53,0,0,0,41,13,114,34,0,0,0,114,78,0,0,0, + 114,68,0,0,0,114,69,0,0,0,114,27,0,0,0,114, + 18,0,0,0,114,26,0,0,0,114,24,0,0,0,114,48, + 0,0,0,114,155,0,0,0,114,135,0,0,0,114,141,0, + 0,0,114,3,0,0,0,41,12,114,30,0,0,0,114,36, + 0,0,0,114,11,0,0,0,114,79,0,0,0,114,80,0, + 0,0,114,43,0,0,0,114,55,0,0,0,114,50,0,0, + 0,114,38,0,0,0,114,133,0,0,0,114,134,0,0,0, + 114,42,0,0,0,114,9,0,0,0,114,9,0,0,0,114, + 10,0,0,0,114,41,0,0,0,114,2,0,0,115,38,0, + 0,0,0,1,10,1,14,1,8,1,22,1,2,1,14,1, + 14,1,6,2,8,1,12,1,4,1,10,1,14,2,10,1, + 8,3,2,1,8,1,16,2,114,41,0,0,0,41,40,114, + 74,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,19,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,68,0,0,0,114,129,0,0,0,114,99,0,0, + 0,114,130,0,0,0,114,59,0,0,0,114,113,0,0,0, + 90,7,95,95,97,108,108,95,95,114,18,0,0,0,90,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114, + 16,0,0,0,114,67,0,0,0,114,3,0,0,0,114,23, + 0,0,0,218,4,116,121,112,101,114,62,0,0,0,114,4, + 0,0,0,114,78,0,0,0,114,34,0,0,0,114,35,0, + 0,0,114,33,0,0,0,114,25,0,0,0,114,106,0,0, + 0,114,123,0,0,0,114,125,0,0,0,114,48,0,0,0, + 114,128,0,0,0,114,135,0,0,0,218,8,95,95,99,111, + 100,101,95,95,114,131,0,0,0,114,139,0,0,0,114,141, + 0,0,0,114,149,0,0,0,114,155,0,0,0,114,41,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, + 13,0,0,0,115,78,0,0,0,4,4,8,1,16,1,8, + 1,8,1,8,1,8,1,8,1,8,2,8,3,6,1,14, + 3,16,4,4,2,8,3,14,127,0,120,12,1,12,1,2, + 1,2,253,2,255,2,9,8,4,8,9,8,31,8,103,2, + 254,2,29,4,5,8,21,8,46,8,8,8,28,10,5,8, + 7,8,6,8,13,8,16, +}; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index b735228ea56..06ea6b4dcd7 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -191,7 +191,6 @@ initimport(PyInterpreterState *interp, PyObject *sysmod) PyObject *importlib; PyObject *impmod; PyObject *value; - _PyInitError err; /* Import _importlib through its frozen version, _frozen_importlib. */ if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { @@ -233,11 +232,6 @@ initimport(PyInterpreterState *interp, PyObject *sysmod) Py_DECREF(value); Py_DECREF(impmod); - err = _PyImportZip_Init(); - if (_Py_INIT_FAILED(err)) { - return err; - } - return _Py_INIT_OK(); } @@ -252,7 +246,7 @@ initexternalimport(PyInterpreterState *interp) return _Py_INIT_ERR("external importer setup failed"); } Py_DECREF(value); - return _Py_INIT_OK(); + return _PyImportZip_Init(); } /* Helper functions to better handle the legacy C locale