From a1d873b7d66a66c76ee24dfae5626a0274233039 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 25 Mar 2019 22:23:55 -0400 Subject: [PATCH 01/23] Commit importlib.metadata as found at https://gitlab.com/python-devs/importlib_metadata/commit/6f8bd81d --- Doc/library/importlib_metadata.rst | 256 +++++++++++++ Lib/importlib/metadata/__init__.py | 17 + Lib/importlib/metadata/_hooks.py | 138 +++++++ Lib/importlib/metadata/abc.py | 21 ++ Lib/importlib/metadata/api.py | 353 ++++++++++++++++++ Lib/importlib/metadata/zipp.py | 110 ++++++ Lib/test/test_importlib/data/__init__.py | 0 .../data/example-21.12-py3-none-any.whl | Bin 0 -> 1453 bytes Lib/test/test_importlib/fixtures.py | 175 +++++++++ Lib/test/test_importlib/test_main.py | 157 ++++++++ Lib/test/test_importlib/test_metadata_api.py | 134 +++++++ Lib/test/test_importlib/test_zip.py | 48 +++ 12 files changed, 1409 insertions(+) create mode 100644 Doc/library/importlib_metadata.rst create mode 100644 Lib/importlib/metadata/__init__.py create mode 100644 Lib/importlib/metadata/_hooks.py create mode 100644 Lib/importlib/metadata/abc.py create mode 100644 Lib/importlib/metadata/api.py create mode 100644 Lib/importlib/metadata/zipp.py create mode 100644 Lib/test/test_importlib/data/__init__.py create mode 100644 Lib/test/test_importlib/data/example-21.12-py3-none-any.whl create mode 100644 Lib/test/test_importlib/fixtures.py create mode 100644 Lib/test/test_importlib/test_main.py create mode 100644 Lib/test/test_importlib/test_metadata_api.py create mode 100644 Lib/test/test_importlib/test_zip.py diff --git a/Doc/library/importlib_metadata.rst b/Doc/library/importlib_metadata.rst new file mode 100644 index 00000000000000..93dad3df1f143a --- /dev/null +++ b/Doc/library/importlib_metadata.rst @@ -0,0 +1,256 @@ +.. _using: + +========================== + Using importlib_metadata +========================== + +``importlib_metadata`` is a library that provides for access to installed +package metadata. Built in part on Python's import system, this library +intends to replace similar functionality in the `entry point +API`_ and `metadata API`_ of ``pkg_resources``. Along with +``importlib.resources`` in `Python 3.7 +and newer`_ (backported as `importlib_resources`_ for older versions of +Python), this can eliminate the need to use the older and less efficient +``pkg_resources`` package. + +By "installed package" we generally mean a third-party package installed into +Python's ``site-packages`` directory via tools such as `pip +`_. Specifically, +it means a package with either a discoverable ``dist-info`` or ``egg-info`` +directory, and metadata defined by `PEP 566`_ or its older specifications. +By default, package metadata can live on the file system or in wheels on +``sys.path``. Through an extension mechanism, the metadata can live almost +anywhere. + + +Overview +======== + +Let's say you wanted to get the version string for a package you've installed +using ``pip``. We start by creating a virtual environment and installing +something into it:: + + $ python3 -m venv example + $ source example/bin/activate + (example) $ pip install importlib_metadata + (example) $ pip install wheel + +You can get the version string for ``wheel`` by running the following:: + + (example) $ python + >>> from importlib_metadata import version + >>> version('wheel') + '0.32.3' + +You can also get the set of entry points keyed by group, such as +``console_scripts``, ``distutils.commands`` and others. Each group contains a +sequence of :ref:`EntryPoint ` objects. + +You can get the :ref:`metadata for a distribution `:: + + >>> list(metadata('wheel')) + ['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Requires-Dist', 'Requires-Dist'] + +You can also get a :ref:`distribution's version number `, list its +:ref:`constituent files `_, and get a list of the distribution's +:ref:`requirements`_. + + +Distributions +============= + +.. CAUTION:: The ``Distribution`` class described here may or may not end up + in the final stable public API. Consider this class `provisional + `_ until the 1.0 + release. + +While the above API is the most common and convenient usage, you can get all +of that information from the ``Distribution`` class. A ``Distribution`` is an +abstract object that represents the metadata for a Python package. You can +get the ``Distribution`` instance:: + + >>> from importlib_metadata import distribution + >>> dist = distribution('wheel') + +Thus, an alternative way to get the version number is through the +``Distribution`` instance:: + + >>> dist.version + '0.32.3' + +There are all kinds of additional metadata available on the ``Distribution`` +instance:: + + >>> d.metadata['Requires-Python'] + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' + >>> d.metadata['License'] + 'MIT' + +The full set of available metadata is not described here. See `PEP 566 +`_ for additional details. + + +Functional API +============== + +This package provides the following functionality via its public API. + + +.. _entry-points:: + +Entry points +------------ + +The ``entry_points()`` function returns a dictionary of all entry points, +keyed by group. Entry points are represented by ``EntryPoint`` instances; +each ``EntryPoint`` has a ``.name``, ``.group``, and ``.value`` attributes and +a ``.load()`` method to resolve the value. + + >>> eps = entry_points() + >>> list(eps) + ['console_scripts', 'distutils.commands', 'distutils.setup_keywords', 'egg_info.writers', 'setuptools.installation'] + >>> scripts = eps['console_scripts'] + >>> wheel = [ep for ep in scripts if ep.name == 'wheel'][0] + >>> wheel + EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts') + >>> main = wheel.load() + >>> main + + +The ``group`` and ``name`` are arbitrary values defined by the package author +and usually a client will wish to resolve all entry points for a particular +group. Read `the setuptools docs +`_ +for more information on entrypoints, their definition, and usage. + + +.. _metadata:: + +Distribution metadata +--------------------- + +Every distribution includes some metadata, which you can extract using the +``metadata()`` function:: + + >>> wheel_metadata = metadata('wheel') + +The keys of the returned data structure [#f1]_ name the metadata keywords, and +their values are returned unparsed from the distribution metadata:: + + >>> wheel_metadata['Requires-Python'] + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' + + +.. _version:: + +Distribution versions +--------------------- + +The ``version()`` function is the quickest way to get a distribution's version +number, as a string:: + + >>> version('wheel') + '0.32.3' + + +.. _files:: + +Distribution files +------------------ + +You can also get the full set of files contained within a distribution. The +``files()`` function takes a distribution package name and returns all of the +files installed by this distribution. Each file object returned is a +``PackagePath``, a `pathlib.Path`_ derived object with additional ``dist``, +``size``, and ``hash`` properties as indicated by the metadata. For example:: + + >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0] + >>> util + PackagePath('wheel/util.py') + >>> util.size + 859 + >>> util.dist + + >>> util.hash + + +Once you have the file, you can also read its contents:: + + >>> print(util.read_text()) + import base64 + import sys + ... + def as_bytes(s): + if isinstance(s, text_type): + return s.encode('utf-8') + return s + + +.. _requirements:: + +Distribution requirements +------------------------- + +To get the full set of requirements for a distribution, use the ``requires()`` +function. Note that this returns an iterator:: + + >>> list(requires('wheel')) + ["pytest (>=3.0.0) ; extra == 'test'"] + + + +Extending the search algorithm +============================== + +Because package metadata is not available through ``sys.path`` searches, or +package loaders directly, the metadata for a package is found through import +system `finders`_. To find a distribution package's metadata, +``importlib_metadata`` queries the list of `meta path finders`_ on +`sys.meta_path`_. + +By default ``importlib_metadata`` installs a finder for distribution packages +found on the file system. This finder doesn't actually find any *packages*, +but it can find the packages' metadata. + +The abstract class :py:class:`importlib.abc.MetaPathFinder` defines the +interface expected of finders by Python's import system. +``importlib_metadata`` extends this protocol by looking for an optional +``find_distributions`` callable on the finders from +``sys.meta_path``. If the finder has this method, it must return +an iterator over instances of the ``Distribution`` abstract class. This +method must have the signature:: + + def find_distributions(name=None, path=sys.path): + """Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ + +What this means in practice is that to support finding distribution package +metadata in locations other than the file system, you should derive from +``Distribution`` and implement the ``load_metadata()`` method. This takes a +single argument which is the name of the package whose metadata is being +found. This instance of the ``Distribution`` base abstract class is what your +finder's ``find_distributions()`` method should return. + + +.. _`entry point API`: https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points +.. _`metadata API`: https://setuptools.readthedocs.io/en/latest/pkg_resources.html#metadata-api +.. _`Python 3.7 and newer`: https://docs.python.org/3/library/importlib.html#module-importlib.resources +.. _`importlib_resources`: https://importlib-resources.readthedocs.io/en/latest/index.html +.. _`PEP 566`: https://www.python.org/dev/peps/pep-0566/ +.. _`finders`: https://docs.python.org/3/reference/import.html#finders-and-loaders +.. _`meta path finders`: https://docs.python.org/3/glossary.html#term-meta-path-finder +.. _`sys.meta_path`: https://docs.python.org/3/library/sys.html#sys.meta_path +.. _`pathlib.Path`: https://docs.python.org/3/library/pathlib.html#pathlib.Path + + +.. rubric:: Footnotes + +.. [#f1] Technically, the returned distribution metadata object is an + `email.message.Message + `_ + instance, but this is an implementation detail, and not part of the + stable API. You should only use dictionary-like methods and syntax + to access the metadata contents. diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py new file mode 100644 index 00000000000000..314ece65afe751 --- /dev/null +++ b/Lib/importlib/metadata/__init__.py @@ -0,0 +1,17 @@ +from .api import distribution, Distribution, PackageNotFoundError # noqa: F401 +from .api import ( + metadata, entry_points, version, files, requires, distributions, + ) + +# Import for installation side-effects. +from . import _hooks # noqa: F401 + + +__all__ = [ + 'entry_points', + 'files', + 'metadata', + 'requires', + 'version', + 'distributions', + ] diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py new file mode 100644 index 00000000000000..5f9bdb54a2e15c --- /dev/null +++ b/Lib/importlib/metadata/_hooks.py @@ -0,0 +1,138 @@ +import re +import sys +import itertools + +from . import zipp +from .api import Distribution +from .abc import DistributionFinder +from contextlib import suppress +from pathlib import Path + + +def install(cls): + """Class decorator for installation on sys.meta_path.""" + sys.meta_path.append(cls()) + return cls + + +class NullFinder(DistributionFinder): + """ + A "Finder" (aka "MetaClassFinder") that never finds any modules, + but may find distributions. + """ + @staticmethod + def find_spec(*args, **kwargs): + return None + + +@install +class MetadataPathFinder(NullFinder): + """A degenerate finder for distribution packages on the file system. + + This finder supplies only a find_distributions() method for versions + of Python that do not have a PathFinder find_distributions(). + """ + search_template = r'{pattern}(-.*)?\.(dist|egg)-info' + + def find_distributions(self, name=None, path=None): + """Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ + if path is None: + path = sys.path + pattern = '.*' if name is None else re.escape(name) + found = self._search_paths(pattern, path) + return map(PathDistribution, found) + + @classmethod + def _search_paths(cls, pattern, paths): + """ + Find metadata directories in paths heuristically. + """ + return itertools.chain.from_iterable( + cls._search_path(path, pattern) + for path in map(Path, paths) + ) + + @classmethod + def _search_path(cls, root, pattern): + if not root.is_dir(): + return () + normalized = pattern.replace('-', '_') + return ( + item + for item in root.iterdir() + if item.is_dir() + and re.match( + cls.search_template.format(pattern=normalized), + str(item.name), + flags=re.IGNORECASE, + ) + ) + + +class PathDistribution(Distribution): + def __init__(self, path): + """Construct a distribution from a path to the metadata directory.""" + self._path = path + + def read_text(self, filename): + with suppress(FileNotFoundError): + with self._path.joinpath(filename).open(encoding='utf-8') as fp: + return fp.read() + return None + read_text.__doc__ = Distribution.read_text.__doc__ + + def locate_file(self, path): + return self._path.parent / path + + +@install +class WheelMetadataFinder(NullFinder): + """A degenerate finder for distribution packages in wheels. + + This finder supplies only a find_distributions() method for versions + of Python that do not have a PathFinder find_distributions(). + """ + search_template = r'{pattern}(-.*)?\.whl' + + def find_distributions(self, name=None, path=None): + """Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ + if path is None: + path = sys.path + pattern = '.*' if name is None else re.escape(name) + found = self._search_paths(pattern, path) + return map(WheelDistribution, found) + + @classmethod + def _search_paths(cls, pattern, paths): + return ( + path + for path in map(Path, paths) + if re.match( + cls.search_template.format(pattern=pattern), + str(path.name), + flags=re.IGNORECASE, + ) + ) + + +class WheelDistribution(Distribution): + def __init__(self, archive): + self._archive = zipp.Path(archive) + name, version = archive.name.split('-')[0:2] + self._dist_info = '{}-{}.dist-info'.format(name, version) + + def read_text(self, filename): + target = self._archive / self._dist_info / filename + return target.read_text() if target.exists() else None + read_text.__doc__ = Distribution.read_text.__doc__ + + def locate_file(self, path): + return self._archive / path diff --git a/Lib/importlib/metadata/abc.py b/Lib/importlib/metadata/abc.py new file mode 100644 index 00000000000000..1785cf3c1c27ba --- /dev/null +++ b/Lib/importlib/metadata/abc.py @@ -0,0 +1,21 @@ +from __future__ import absolute_import + + +import abc + +from importlib.abc import MetaPathFinder + + +class DistributionFinder(MetaPathFinder): + """ + A MetaPathFinder capable of discovering installed distributions. + """ + + @abc.abstractmethod + def find_distributions(self, name=None, path=None): + """ + Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ diff --git a/Lib/importlib/metadata/api.py b/Lib/importlib/metadata/api.py new file mode 100644 index 00000000000000..df19aff438bb7a --- /dev/null +++ b/Lib/importlib/metadata/api.py @@ -0,0 +1,353 @@ +from __future__ import absolute_import + +import re +import abc +import csv +import sys +import email +import operator +import functools +import itertools +import collections + +from importlib import import_module +from itertools import starmap + +import pathlib +from configparser import ConfigParser + +__metaclass__ = type + + +class PackageNotFoundError(ModuleNotFoundError): + """The package was not found.""" + + +class EntryPoint(collections.namedtuple('EntryPointBase', 'name value group')): + """An entry point as defined by Python packaging conventions.""" + + pattern = re.compile( + r'(?P[\w.]+)\s*' + r'(:\s*(?P[\w.]+))?\s*' + r'(?P\[.*\])?\s*$' + ) + """ + A regular expression describing the syntax for an entry point, + which might look like: + + - module + - package.module + - package.module:attribute + - package.module:object.attribute + - package.module:attr [extra1, extra2] + + Other combinations are possible as well. + + The expression is lenient about whitespace around the ':', + following the attr, and following any extras. + """ + + def load(self): + """Load the entry point from its definition. If only a module + is indicated by the value, return that module. Otherwise, + return the named object. + """ + match = self.pattern.match(self.value) + module = import_module(match.group('module')) + attrs = filter(None, (match.group('attr') or '').split('.')) + return functools.reduce(getattr, attrs, module) + + @property + def extras(self): + match = self.pattern.match(self.value) + return list(re.finditer(r'\w+', match.group('extras') or '')) + + @classmethod + def _from_config(cls, config): + return [ + cls(name, value, group) + for group in config.sections() + for name, value in config.items(group) + ] + + @classmethod + def _from_text(cls, text): + config = ConfigParser() + config.read_string(text) + return EntryPoint._from_config(config) + + def __iter__(self): + """ + Supply iter so one may construct dicts of EntryPoints easily. + """ + return iter((self.name, self)) + + +class PackagePath(pathlib.PurePosixPath): + """A reference to a path in a package""" + + def read_text(self, encoding='utf-8'): + with self.locate().open(encoding=encoding) as stream: + return stream.read() + + def read_binary(self): + with self.locate().open('rb') as stream: + return stream.read() + + def locate(self): + """Return a path-like object for this path""" + return self.dist.locate_file(self) + + +class FileHash: + def __init__(self, spec): + self.mode, _, self.value = spec.partition('=') + + def __repr__(self): + return ''.format(self.mode, self.value) + + +class Distribution: + """A Python distribution package.""" + + @abc.abstractmethod + def read_text(self, filename): + """Attempt to load metadata file given by the name. + + :param filename: The name of the file in the distribution info. + :return: The text if found, otherwise None. + """ + + @abc.abstractmethod + def locate_file(self, path): + """ + Given a path to a file in this distribution, return a path + to it. + """ + + @classmethod + def from_name(cls, name): + """Return the Distribution for the given package name. + + :param name: The name of the distribution package to search for. + :return: The Distribution instance (or subclass thereof) for the named + package, if found. + :raises PackageNotFoundError: When the named package's distribution + metadata cannot be found. + """ + for resolver in cls._discover_resolvers(): + dists = resolver(name) + dist = next(dists, None) + if dist is not None: + return dist + else: + raise PackageNotFoundError(name) + + @classmethod + def discover(cls): + """Return an iterable of Distribution objects for all packages. + + :return: Iterable of Distribution objects for all packages. + """ + return itertools.chain.from_iterable( + resolver() + for resolver in cls._discover_resolvers() + ) + + @staticmethod + def _discover_resolvers(): + """Search the meta_path for resolvers.""" + declared = ( + getattr(finder, 'find_distributions', None) + for finder in sys.meta_path + ) + return filter(None, declared) + + @classmethod + def find_local(cls): + dists = itertools.chain.from_iterable( + resolver(path=['.']) + for resolver in cls._discover_resolvers() + ) + dist, = dists + return dist + + @property + def metadata(self): + """Return the parsed metadata for this Distribution. + + The returned object will have keys that name the various bits of + metadata. See PEP 566 for details. + """ + text = self.read_text('METADATA') or self.read_text('PKG-INFO') + return email.message_from_string(text) + + @property + def version(self): + """Return the 'Version' metadata for the distribution package.""" + return self.metadata['Version'] + + @property + def entry_points(self): + return EntryPoint._from_text(self.read_text('entry_points.txt')) + + @property + def files(self): + file_lines = self._read_files_distinfo() or self._read_files_egginfo() + + def make_file(name, hash=None, size_str=None): + result = PackagePath(name) + result.hash = FileHash(hash) if hash else None + result.size = int(size_str) if size_str else None + result.dist = self + return result + + return file_lines and starmap(make_file, csv.reader(file_lines)) + + def _read_files_distinfo(self): + """ + Read the lines of RECORD + """ + text = self.read_text('RECORD') + return text and text.splitlines() + + def _read_files_egginfo(self): + """ + SOURCES.txt might contain literal commas, so wrap each line + in quotes. + """ + text = self.read_text('SOURCES.txt') + return text and map('"{}"'.format, text.splitlines()) + + @property + def requires(self): + """Generated requirements specified for this Distribution""" + return self._read_dist_info_reqs() or self._read_egg_info_reqs() + + def _read_dist_info_reqs(self): + spec = self.metadata['Requires-Dist'] + return spec and filter(None, spec.splitlines()) + + def _read_egg_info_reqs(self): + source = self.read_text('requires.txt') + return self._deps_from_requires_text(source) + + @classmethod + def _deps_from_requires_text(cls, source): + section_pairs = cls._read_sections(source.splitlines()) + sections = { + section: list(map(operator.itemgetter('line'), results)) + for section, results in + itertools.groupby(section_pairs, operator.itemgetter('section')) + } + return cls._convert_egg_info_reqs_to_simple_reqs(sections) + + @staticmethod + def _read_sections(lines): + section = None + for line in filter(None, lines): + section_match = re.match(r'\[(.*)\]$', line) + if section_match: + section = section_match.group(1) + continue + yield locals() + + @staticmethod + def _convert_egg_info_reqs_to_simple_reqs(sections): + """ + Historically, setuptools would solicit and store 'extra' + requirements, including those with environment markers, + in separate sections. More modern tools expect each + dependency to be defined separately, with any relevant + extras and environment markers attached directly to that + requirement. This method converts the former to the + latter. See _test_deps_from_requires_text for an example. + """ + def make_condition(name): + return name and 'extra == "{name}"'.format(name=name) + + def parse_condition(section): + section = section or '' + extra, sep, markers = section.partition(':') + if extra and markers: + markers = '({markers})'.format(markers=markers) + conditions = list(filter(None, [markers, make_condition(extra)])) + return '; ' + ' and '.join(conditions) if conditions else '' + + for section, deps in sections.items(): + for dep in deps: + yield dep + parse_condition(section) + + +def distribution(package): + """Get the ``Distribution`` instance for the given package. + + :param package: The name of the package as a string. + :return: A ``Distribution`` instance (or subclass thereof). + """ + return Distribution.from_name(package) + + +def distributions(): + """Get all ``Distribution`` instances in the current environment. + + :return: An iterable of ``Distribution`` instances. + """ + return Distribution.discover() + + +def local_distribution(): + """Get the ``Distribution`` instance for the package in CWD. + + :return: A ``Distribution`` instance (or subclass thereof). + """ + return Distribution.find_local() + + +def metadata(package): + """Get the metadata for the package. + + :param package: The name of the distribution package to query. + :return: An email.Message containing the parsed metadata. + """ + return Distribution.from_name(package).metadata + + +def version(package): + """Get the version string for the named package. + + :param package: The name of the distribution package to query. + :return: The version string for the package as defined in the package's + "Version" metadata key. + """ + return distribution(package).version + + +def entry_points(): + """Return EntryPoint objects for all installed packages. + + :return: EntryPoint objects for all installed packages. + """ + eps = itertools.chain.from_iterable( + dist.entry_points for dist in distributions()) + by_group = operator.attrgetter('group') + ordered = sorted(eps, key=by_group) + grouped = itertools.groupby(ordered, by_group) + return { + group: tuple(eps) + for group, eps in grouped + } + + +def files(package): + return distribution(package).files + + +def requires(package): + """ + Return a list of requirements for the indicated distribution. + + :return: An iterator of requirements, suitable for + packaging.requirement.Requirement. + """ + return distribution(package).requires diff --git a/Lib/importlib/metadata/zipp.py b/Lib/importlib/metadata/zipp.py new file mode 100644 index 00000000000000..ffd129f63b054c --- /dev/null +++ b/Lib/importlib/metadata/zipp.py @@ -0,0 +1,110 @@ +""" +>>> root = Path(getfixture('zipfile_abcde')) +>>> a, b = root.iterdir() +>>> a +Path('abcde.zip', 'a.txt') +>>> b +Path('abcde.zip', 'b/') +>>> b.name +'b' +>>> c = b / 'c.txt' +>>> c +Path('abcde.zip', 'b/c.txt') +>>> c.name +'c.txt' +>>> c.read_text() +'content of c' +>>> c.exists() +True +>>> (b / 'missing.txt').exists() +False +>>> str(c) +'abcde.zip/b/c.txt' +""" + +from __future__ import division + +import io +import sys +import posixpath +import zipfile +import operator +import functools + +__metaclass__ = type + + +class Path: + __repr = '{self.__class__.__name__}({self.root.filename!r}, {self.at!r})' + + def __init__(self, root, at=''): + self.root = root if isinstance(root, zipfile.ZipFile) \ + else zipfile.ZipFile(self._pathlib_compat(root)) + self.at = at + + @staticmethod + def _pathlib_compat(path): + """ + For path-like objects, convert to a filename for compatibility + on Python 3.6.1 and earlier. + """ + try: + return path.__fspath__() + except AttributeError: + return str(path) + + @property + def open(self): + return functools.partial(self.root.open, self.at) + + @property + def name(self): + return posixpath.basename(self.at.rstrip('/')) + + def read_text(self, *args, **kwargs): + with self.open() as strm: + return io.TextIOWrapper(strm, *args, **kwargs).read() + + def read_bytes(self): + with self.open() as strm: + return strm.read() + + def _is_child(self, path): + return posixpath.dirname(path.at.rstrip('/')) == self.at.rstrip('/') + + def _next(self, at): + return Path(self.root, at) + + def is_dir(self): + return not self.at or self.at.endswith('/') + + def is_file(self): + return not self.is_dir() + + def exists(self): + return self.at in self.root.namelist() + + def iterdir(self): + if not self.is_dir(): + raise ValueError("Can't listdir a file") + names = map(operator.attrgetter('filename'), self.root.infolist()) + subs = map(self._next, names) + return filter(self._is_child, subs) + + def __str__(self): + return posixpath.join(self.root.filename, self.at) + + def __repr__(self): + return self.__repr.format(self=self) + + def __truediv__(self, add): + add = self._pathlib_compat(add) + next = posixpath.join(self.at, add) + next_dir = posixpath.join(self.at, add, '') + names = self.root.namelist() + return self._next( + next_dir if next not in names and next_dir in names else next + ) + + if sys.version_info < (3,): + __div__ = __truediv__ \ No newline at end of file diff --git a/Lib/test/test_importlib/data/__init__.py b/Lib/test/test_importlib/data/__init__.py new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/Lib/test/test_importlib/data/example-21.12-py3-none-any.whl b/Lib/test/test_importlib/data/example-21.12-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..f92f7716e3e613a2a9703be785135fd8b35cfb1c GIT binary patch literal 1453 zcmWIWW@Zs#U|`^2$X%l2E2Vj`LJ`OVVPPOntw_u*$Vt_YkI&4@EQycTE2#AL^bJ1Y zd*;mL3tJuqF*Gf@GU?JH8`iH^x{lmwniEp0#}EKF@#|6@-~Vw}E~^1e(gI=)go(OF zhI)oZdMTO3CAyh;Y5Dr8c_l@a@df#rc_qbqB^4#ze&^0>pF8i_tM8|GN=HMp@2S^X zk2AU_JVQ5xHf&l`By9Y7#||{R?xt`CaRKe%0Af`#eJG?#%hkK?YZh9~AkY_15*$IjO%X$iwTT zj$Wre`^vxz1{aLYt{7i=!gcDr{>864*LXE_z0RKW*%YLqspb2W%hP9jkj4s=YiCcN z_rB_TX7!Ut=+0vKml077bk1%dR>0#dU)K;v7sn9C*zS#7hYUnqzke6~*(h?!FxuR) z*JA$j=D}6nJuk63>$g|^aHQ)0StmYywxSwA=est9~!zT(kqV|fK2BE1^mxK0q zD(qh)b?4sPb$w-l5$bn#F3Qs`KJ!0*^MQ6R{<p(1r$KgS)&i+9zwP$x1H90UiT)ZdwKjq+uV@j;~jI4*9 zFSbRdFl*>>tZs;(uk_eQ>hgU{@!k)&u4PPICc4gJ)}^;Bzl1h5{m``K-uhy9=9lTe z-NnTxRmGRCybveUZnWu;{lQCXJ}s6};eD{ z#=6?Q%UABG&=n2Q`J~J@GtS}8)q{&~{}TM{1aZ}u05ukm*h zl5ERPr=_}oV=S9Bfwe1=@2=aOxF-kSE;PEja34gdfE literal 0 HcmV?d00001 diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py new file mode 100644 index 00000000000000..8a8b4add31cad6 --- /dev/null +++ b/Lib/test/test_importlib/fixtures.py @@ -0,0 +1,175 @@ +from __future__ import unicode_literals + +import os +import sys +import shutil +import tempfile +import textwrap +import contextlib + +try: + from contextlib import ExitStack +except ImportError: + from contextlib2 import ExitStack + +try: + import pathlib +except ImportError: + import pathlib2 as pathlib + + +__metaclass__ = type + + +@contextlib.contextmanager +def tempdir(): + tmpdir = tempfile.mkdtemp() + sys.path[:0] = [tmpdir] + try: + yield pathlib.Path(tmpdir) + finally: + sys.path.remove(tmpdir) + shutil.rmtree(tmpdir) + + +@contextlib.contextmanager +def save_cwd(): + orig = os.getcwd() + try: + yield + finally: + os.chdir(orig) + + +@contextlib.contextmanager +def tempdir_as_cwd(): + with tempdir() as tmp: + with save_cwd(): + os.chdir(str(tmp)) + yield tmp + + +class SiteDir: + @staticmethod + @contextlib.contextmanager + def site_dir(): + with tempdir() as tmp: + sys.path[:0] = [str(tmp)] + yield tmp + + def setUp(self): + self.fixtures = ExitStack() + self.addCleanup(self.fixtures.close) + self.site_dir = self.fixtures.enter_context(self.site_dir()) + + +class DistInfoPkg(SiteDir): + files = { + "distinfo_pkg-1.0.0.dist-info": { + "METADATA": """ + Name: distinfo-pkg + Author: Steven Ma + Version: 1.0.0 + Requires-Dist: wheel >= 1.0 + Requires-Dist: pytest; extra == 'test' + """, + "RECORD": "mod.py,sha256=abc,20\n", + "entry_points.txt": """ + [entries] + main = mod:main + """ + }, + "mod.py": """ + def main(): + print("hello world") + """, + } + + def setUp(self): + super(DistInfoPkg, self).setUp() + build_files(DistInfoPkg.files, self.site_dir) + + +class EggInfoPkg(SiteDir): + files = { + "egginfo_pkg.egg-info": { + "PKG-INFO": """ + Name: egginfo-pkg + Author: Steven Ma + License: Unknown + Version: 1.0.0 + Classifier: Intended Audience :: Developers + Classifier: Topic :: Software Development :: Libraries + """, + "SOURCES.txt": """ + mod.py + egginfo_pkg.egg-info/top_level.txt + """, + "entry_points.txt": """ + [entries] + main = mod:main + """, + "requires.txt": """ + wheel >= 1.0; python_version >= "2.7" + [test] + pytest + """, + "top_level.txt": "mod\n" + }, + "mod.py": """ + def main(): + print("hello world") + """, + } + + def setUp(self): + super(EggInfoPkg, self).setUp() + build_files(EggInfoPkg.files, prefix=self.site_dir) + + +class LocalPackage: + def setUp(self): + self.fixtures = ExitStack() + self.addCleanup(self.fixtures.close) + self.fixtures.enter_context(tempdir_as_cwd()) + build_files(EggInfoPkg.files) + + +def build_files(file_defs, prefix=pathlib.Path()): + """ + Build a set of files/directories, as described by the + file_defs dictionary. + Each key/value pair in the dictionary is interpreted as + a filename/contents + pair. If the contents value is a dictionary, a directory + is created, and the + dictionary interpreted as the files within it, recursively. + For example: + {"README.txt": "A README file", + "foo": { + "__init__.py": "", + "bar": { + "__init__.py": "", + }, + "baz.py": "# Some code", + } + } + """ + for name, contents in file_defs.items(): + full_name = prefix / name + if isinstance(contents, dict): + full_name.mkdir() + build_files(contents, prefix=full_name) + else: + if isinstance(contents, bytes): + with full_name.open('wb') as f: + f.write(contents) + else: + with full_name.open('w') as f: + f.write(DALS(contents)) + + +def DALS(str): + "Dedent and left-strip" + return textwrap.dedent(str).lstrip() + diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py new file mode 100644 index 00000000000000..64270850a9fe72 --- /dev/null +++ b/Lib/test/test_importlib/test_main.py @@ -0,0 +1,157 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re +import textwrap +import unittest +import importlib +import importlib.metadata + +from . import fixtures +from importlib.metadata import _hooks + + +class BasicTests(fixtures.DistInfoPkg, unittest.TestCase): + version_pattern = r'\d+\.\d+(\.\d)?' + + def test_retrieves_version_of_self(self): + dist = importlib.metadata.Distribution.from_name('distinfo-pkg') + assert isinstance(dist.version, str) + assert re.match(self.version_pattern, dist.version) + + def test_for_name_does_not_exist(self): + with self.assertRaises(importlib.metadata.PackageNotFoundError): + importlib.metadata.Distribution.from_name('does-not-exist') + + def test_new_style_classes(self): + self.assertIsInstance(importlib.metadata.Distribution, type) + self.assertIsInstance(_hooks.MetadataPathFinder, type) + self.assertIsInstance(_hooks.WheelMetadataFinder, type) + self.assertIsInstance(_hooks.WheelDistribution, type) + + +class ImportTests(fixtures.DistInfoPkg, unittest.TestCase): + def test_import_nonexistent_module(self): + # Ensure that the MetadataPathFinder does not crash an import of a + # non-existant module. + with self.assertRaises(ImportError): + importlib.import_module('does_not_exist') + + def test_resolve(self): + entries = dict(importlib.metadata.entry_points()['entries']) + ep = entries['main'] + self.assertEqual(ep.load().__name__, "main") + + def test_resolve_without_attr(self): + ep = importlib.metadata.api.EntryPoint( + name='ep', + value='importlib.metadata.api', + group='grp', + ) + assert ep.load() is importlib.metadata.api + + +class NameNormalizationTests(fixtures.SiteDir, unittest.TestCase): + @staticmethod + def pkg_with_dashes(site_dir): + """ + Create minimal metadata for a package with dashes + in the name (and thus underscores in the filename). + """ + metadata_dir = site_dir / 'my_pkg.dist-info' + metadata_dir.mkdir() + metadata = metadata_dir / 'METADATA' + with metadata.open('w') as strm: + strm.write('Version: 1.0\n') + return 'my-pkg' + + def test_dashes_in_dist_name_found_as_underscores(self): + """ + For a package with a dash in the name, the dist-info metadata + uses underscores in the name. Ensure the metadata loads. + """ + pkg_name = self.pkg_with_dashes(self.site_dir) + assert importlib.metadata.version(pkg_name) == '1.0' + + @staticmethod + def pkg_with_mixed_case(site_dir): + """ + Create minimal metadata for a package with mixed case + in the name. + """ + metadata_dir = site_dir / 'CherryPy.dist-info' + metadata_dir.mkdir() + metadata = metadata_dir / 'METADATA' + with metadata.open('w') as strm: + strm.write('Version: 1.0\n') + return 'CherryPy' + + def test_dist_name_found_as_any_case(self): + """ + Ensure the metadata loads when queried with any case. + """ + pkg_name = self.pkg_with_mixed_case(self.site_dir) + assert importlib.metadata.version(pkg_name) == '1.0' + assert importlib.metadata.version(pkg_name.lower()) == '1.0' + assert importlib.metadata.version(pkg_name.upper()) == '1.0' + + +class NonASCIITests(fixtures.SiteDir, unittest.TestCase): + @staticmethod + def pkg_with_non_ascii_description(site_dir): + """ + Create minimal metadata for a package with non-ASCII in + the description. + """ + metadata_dir = site_dir / 'portend.dist-info' + metadata_dir.mkdir() + metadata = metadata_dir / 'METADATA' + with metadata.open('w', encoding='utf-8') as fp: + fp.write('Description: pôrˈtend\n') + return 'portend' + + @staticmethod + def pkg_with_non_ascii_description_egg_info(site_dir): + """ + Create minimal metadata for an egg-info package with + non-ASCII in the description. + """ + metadata_dir = site_dir / 'portend.dist-info' + metadata_dir.mkdir() + metadata = metadata_dir / 'METADATA' + with metadata.open('w', encoding='utf-8') as fp: + fp.write(textwrap.dedent(""" + Name: portend + + pôrˈtend + """).lstrip()) + return 'portend' + + def test_metadata_loads(self): + pkg_name = self.pkg_with_non_ascii_description(self.site_dir) + meta = importlib.metadata.metadata(pkg_name) + assert meta['Description'] == 'pôrˈtend' + + def test_metadata_loads_egg_info(self): + pkg_name = self.pkg_with_non_ascii_description_egg_info(self.site_dir) + meta = importlib.metadata.metadata(pkg_name) + assert meta.get_payload() == 'pôrˈtend\n' + + +class DiscoveryTests(fixtures.EggInfoPkg, fixtures.DistInfoPkg, + unittest.TestCase): + + def test_package_discovery(self): + dists = list(importlib.metadata.api.distributions()) + assert all( + isinstance(dist, importlib.metadata.Distribution) + for dist in dists + ) + assert any( + dist.metadata['Name'] == 'egginfo-pkg' + for dist in dists + ) + assert any( + dist.metadata['Name'] == 'distinfo-pkg' + for dist in dists + ) diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py new file mode 100644 index 00000000000000..a6aa395831d92a --- /dev/null +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -0,0 +1,134 @@ +import re +import textwrap +import unittest +import importlib.metadata + +from collections.abc import Iterator + +from . import fixtures + + +class APITests(fixtures.EggInfoPkg, fixtures.DistInfoPkg, unittest.TestCase): + version_pattern = r'\d+\.\d+(\.\d)?' + + def test_retrieves_version_of_self(self): + version = importlib.metadata.version('egginfo-pkg') + assert isinstance(version, str) + assert re.match(self.version_pattern, version) + + def test_retrieves_version_of_pip(self): + version = importlib.metadata.version('distinfo-pkg') + assert isinstance(version, str) + assert re.match(self.version_pattern, version) + + def test_for_name_does_not_exist(self): + with self.assertRaises(importlib.metadata.PackageNotFoundError): + importlib.metadata.distribution('does-not-exist') + + def test_for_top_level(self): + distribution = importlib.metadata.distribution('egginfo-pkg') + self.assertEqual( + distribution.read_text('top_level.txt').strip(), + 'mod') + + def test_read_text(self): + top_level = [ + path for path in importlib.metadata.files('egginfo-pkg') + if path.name == 'top_level.txt' + ][0] + self.assertEqual(top_level.read_text(), 'mod\n') + + def test_entry_points(self): + entires = importlib.metadata.entry_points()['entries'] + entries = dict(entires) + ep = entries['main'] + self.assertEqual(ep.value, 'mod:main') + self.assertEqual(ep.extras, []) + + def test_metadata_for_this_package(self): + md = importlib.metadata.metadata('egginfo-pkg') + assert md['author'] == 'Steven Ma' + assert md['LICENSE'] == 'Unknown' + assert md['Name'] == 'egginfo-pkg' + classifiers = md.get_all('Classifier') + assert 'Topic :: Software Development :: Libraries' in classifiers + + @staticmethod + def _test_files(files_iter): + assert isinstance(files_iter, Iterator), files_iter + files = list(files_iter) + root = files[0].root + for file in files: + assert file.root == root + assert not file.hash or file.hash.value + assert not file.hash or file.hash.mode == 'sha256' + assert not file.size or file.size >= 0 + assert file.locate().exists() + assert isinstance(file.read_binary(), bytes) + if file.name.endswith('.py'): + file.read_text() + + def test_file_hash_repr(self): + assertRegex = self.assertRegex + + util = [ + p for p in importlib.metadata.files('distinfo-pkg') + if p.name == 'mod.py' + ][0] + assertRegex( + repr(util.hash), + '') + + def test_files_dist_info(self): + self._test_files(importlib.metadata.files('distinfo-pkg')) + + def test_files_egg_info(self): + self._test_files(importlib.metadata.files('egginfo-pkg')) + + def test_requires(self): + deps = importlib.metadata.requires('egginfo-pkg') + assert any( + dep == 'wheel >= 1.0; python_version >= "2.7"' + for dep in deps + ) + + def test_requires_dist_info(self): + deps = list(importlib.metadata.requires('distinfo-pkg')) + assert deps and all(deps) + + def test_more_complex_deps_requires_text(self): + requires = textwrap.dedent(""" + dep1 + dep2 + + [:python_version < "3"] + dep3 + + [extra1] + dep4 + + [extra2:python_version < "3"] + dep5 + """) + deps = sorted( + importlib.metadata.api.Distribution._deps_from_requires_text( + requires) + ) + expected = [ + 'dep1', + 'dep2', + 'dep3; python_version < "3"', + 'dep4; extra == "extra1"', + 'dep5; (python_version < "3") and extra == "extra2"', + ] + # It's important that the environment marker expression be + # wrapped in parentheses to avoid the following 'and' binding more + # tightly than some other part of the environment expression. + + assert deps == expected + + +class LocalProjectTests(fixtures.LocalPackage, unittest.TestCase): + def test_find_local(self): + dist = importlib.metadata.api.local_distribution() + assert dist.metadata['Name'] == 'egginfo-pkg' diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py new file mode 100644 index 00000000000000..4af027a12bef1c --- /dev/null +++ b/Lib/test/test_importlib/test_zip.py @@ -0,0 +1,48 @@ +import sys +import unittest +import importlib.metadata + +from importlib.resources import path + +try: + from contextlib import ExitStack +except ImportError: + from contextlib2 import ExitStack + + +class BespokeLoader: + archive = 'bespoke' + + +class TestZip(unittest.TestCase): + def setUp(self): + # Find the path to the example.*.whl so we can add it to the front of + # sys.path, where we'll then try to find the metadata thereof. + self.resources = ExitStack() + self.addCleanup(self.resources.close) + wheel = self.resources.enter_context( + path('test.test_importlib.data', + 'example-21.12-py3-none-any.whl')) + sys.path.insert(0, str(wheel)) + self.resources.callback(sys.path.pop, 0) + + def test_zip_version(self): + self.assertEqual(importlib.metadata.version('example'), '21.12') + + def test_zip_entry_points(self): + scripts = dict(importlib.metadata.entry_points()['console_scripts']) + entry_point = scripts['example'] + self.assertEqual(entry_point.value, 'example:main') + + def test_missing_metadata(self): + distribution = importlib.metadata.distribution('example') + self.assertIsNone(distribution.read_text('does not exist')) + + def test_case_insensitive(self): + self.assertEqual(importlib.metadata.version('Example'), '21.12') + + def test_files(self): + files = importlib.metadata.files('example') + for file in files: + path = str(file.dist.locate_file(file)) + assert '.whl/' in path, path From 6d7e3a8592f70c9a13dac0bdec6ad3f8da1c6c5e Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 10:02:31 -0400 Subject: [PATCH 02/23] Update implementation based on importlib_metadata 0.10 --- Doc/library/importlib_metadata.rst | 69 ++++++------ Lib/importlib/metadata/_hooks.py | 41 ++++--- Lib/importlib/metadata/api.py | 11 +- Lib/importlib/metadata/zipp.py | 110 ------------------- Lib/test/test_importlib/fixtures.py | 37 +++++-- Lib/test/test_importlib/test_metadata_api.py | 15 ++- 6 files changed, 113 insertions(+), 170 deletions(-) delete mode 100644 Lib/importlib/metadata/zipp.py diff --git a/Doc/library/importlib_metadata.rst b/Doc/library/importlib_metadata.rst index 93dad3df1f143a..3ab66cdfb7054f 100644 --- a/Doc/library/importlib_metadata.rst +++ b/Doc/library/importlib_metadata.rst @@ -22,6 +22,13 @@ By default, package metadata can live on the file system or in wheels on ``sys.path``. Through an extension mechanism, the metadata can live almost anywhere. +.. note:: Although this package supports loading metadata from wheels + on ``sys.path``, that support is provisional and does not serve to + contravene the `PEP 427 directive + `_, + which states that relying on this format is discouraged, and use is + at your own risk. + Overview ======== @@ -56,40 +63,6 @@ You can also get a :ref:`distribution's version number `, list its :ref:`requirements`_. -Distributions -============= - -.. CAUTION:: The ``Distribution`` class described here may or may not end up - in the final stable public API. Consider this class `provisional - `_ until the 1.0 - release. - -While the above API is the most common and convenient usage, you can get all -of that information from the ``Distribution`` class. A ``Distribution`` is an -abstract object that represents the metadata for a Python package. You can -get the ``Distribution`` instance:: - - >>> from importlib_metadata import distribution - >>> dist = distribution('wheel') - -Thus, an alternative way to get the version number is through the -``Distribution`` instance:: - - >>> dist.version - '0.32.3' - -There are all kinds of additional metadata available on the ``Distribution`` -instance:: - - >>> d.metadata['Requires-Python'] - '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' - >>> d.metadata['License'] - 'MIT' - -The full set of available metadata is not described here. See `PEP 566 -`_ for additional details. - - Functional API ============== @@ -198,6 +171,34 @@ function. Note that this returns an iterator:: ["pytest (>=3.0.0) ; extra == 'test'"] +Distributions +============= + +While the above API is the most common and convenient usage, you can get all +of that information from the ``Distribution`` class. A ``Distribution`` is an +abstract object that represents the metadata for a Python package. You can +get the ``Distribution`` instance:: + + >>> from importlib_metadata import distribution + >>> dist = distribution('wheel') + +Thus, an alternative way to get the version number is through the +``Distribution`` instance:: + + >>> dist.version + '0.32.3' + +There are all kinds of additional metadata available on the ``Distribution`` +instance:: + + >>> d.metadata['Requires-Python'] + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' + >>> d.metadata['License'] + 'MIT' + +The full set of available metadata is not described here. See `PEP 566 +`_ for additional details. + Extending the search algorithm ============================== diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py index 5f9bdb54a2e15c..e624844217dfdf 100644 --- a/Lib/importlib/metadata/_hooks.py +++ b/Lib/importlib/metadata/_hooks.py @@ -1,8 +1,8 @@ import re import sys +import zipfile import itertools -from . import zipp from .api import Distribution from .abc import DistributionFinder from contextlib import suppress @@ -25,14 +25,12 @@ def find_spec(*args, **kwargs): return None -@install -class MetadataPathFinder(NullFinder): +class MetadataPathBaseFinder(NullFinder): """A degenerate finder for distribution packages on the file system. This finder supplies only a find_distributions() method for versions of Python that do not have a PathFinder find_distributions(). """ - search_template = r'{pattern}(-.*)?\.(dist|egg)-info' def find_distributions(self, name=None, path=None): """Return an iterable of all Distribution instances capable of @@ -56,21 +54,34 @@ def _search_paths(cls, pattern, paths): for path in map(Path, paths) ) + @classmethod + def _predicate(cls, pattern, root, item): + return re.match(pattern, str(item.name), flags=re.IGNORECASE) + @classmethod def _search_path(cls, root, pattern): if not root.is_dir(): return () normalized = pattern.replace('-', '_') + matcher = cls.search_template.format(pattern=normalized) + return (item for item in root.iterdir() + if cls._predicate(matcher, root, item)) + + +@install +class MetadataPathFinder(MetadataPathBaseFinder): + search_template = r'{pattern}(-.*)?\.(dist|egg)-info' + + +@install +class MetadataPathEggInfoFileFinder(MetadataPathBaseFinder): + search_template = r'{pattern}(-.*)?\.egg-info' + + @classmethod + def _predicate(cls, pattern, root, item): return ( - item - for item in root.iterdir() - if item.is_dir() - and re.match( - cls.search_template.format(pattern=normalized), - str(item.name), - flags=re.IGNORECASE, - ) - ) + (root / item).is_file() and + re.match(pattern, str(item.name), flags=re.IGNORECASE)) class PathDistribution(Distribution): @@ -79,7 +90,7 @@ def __init__(self, path): self._path = path def read_text(self, filename): - with suppress(FileNotFoundError): + with suppress(FileNotFoundError, NotADirectoryError): with self._path.joinpath(filename).open(encoding='utf-8') as fp: return fp.read() return None @@ -125,7 +136,7 @@ def _search_paths(cls, pattern, paths): class WheelDistribution(Distribution): def __init__(self, archive): - self._archive = zipp.Path(archive) + self._archive = zipfile.Path(archive) name, version = archive.name.split('-')[0:2] self._dist_info = '{}-{}.dist-info'.format(name, version) diff --git a/Lib/importlib/metadata/api.py b/Lib/importlib/metadata/api.py index df19aff438bb7a..b95bc454cc6f92 100644 --- a/Lib/importlib/metadata/api.py +++ b/Lib/importlib/metadata/api.py @@ -179,7 +179,14 @@ def metadata(self): The returned object will have keys that name the various bits of metadata. See PEP 566 for details. """ - text = self.read_text('METADATA') or self.read_text('PKG-INFO') + text = ( + self.read_text('METADATA') + or self.read_text('PKG-INFO') + # This last clause is here to support old egg-info files. Its + # effect is to just end up using the PathDistribution's self._path + # (which points to the egg-info file) attribute unchanged. + or self.read_text('') + ) return email.message_from_string(text) @property @@ -230,7 +237,7 @@ def _read_dist_info_reqs(self): def _read_egg_info_reqs(self): source = self.read_text('requires.txt') - return self._deps_from_requires_text(source) + return source and self._deps_from_requires_text(source) @classmethod def _deps_from_requires_text(cls, source): diff --git a/Lib/importlib/metadata/zipp.py b/Lib/importlib/metadata/zipp.py deleted file mode 100644 index ffd129f63b054c..00000000000000 --- a/Lib/importlib/metadata/zipp.py +++ /dev/null @@ -1,110 +0,0 @@ -""" ->>> root = Path(getfixture('zipfile_abcde')) ->>> a, b = root.iterdir() ->>> a -Path('abcde.zip', 'a.txt') ->>> b -Path('abcde.zip', 'b/') ->>> b.name -'b' ->>> c = b / 'c.txt' ->>> c -Path('abcde.zip', 'b/c.txt') ->>> c.name -'c.txt' ->>> c.read_text() -'content of c' ->>> c.exists() -True ->>> (b / 'missing.txt').exists() -False ->>> str(c) -'abcde.zip/b/c.txt' -""" - -from __future__ import division - -import io -import sys -import posixpath -import zipfile -import operator -import functools - -__metaclass__ = type - - -class Path: - __repr = '{self.__class__.__name__}({self.root.filename!r}, {self.at!r})' - - def __init__(self, root, at=''): - self.root = root if isinstance(root, zipfile.ZipFile) \ - else zipfile.ZipFile(self._pathlib_compat(root)) - self.at = at - - @staticmethod - def _pathlib_compat(path): - """ - For path-like objects, convert to a filename for compatibility - on Python 3.6.1 and earlier. - """ - try: - return path.__fspath__() - except AttributeError: - return str(path) - - @property - def open(self): - return functools.partial(self.root.open, self.at) - - @property - def name(self): - return posixpath.basename(self.at.rstrip('/')) - - def read_text(self, *args, **kwargs): - with self.open() as strm: - return io.TextIOWrapper(strm, *args, **kwargs).read() - - def read_bytes(self): - with self.open() as strm: - return strm.read() - - def _is_child(self, path): - return posixpath.dirname(path.at.rstrip('/')) == self.at.rstrip('/') - - def _next(self, at): - return Path(self.root, at) - - def is_dir(self): - return not self.at or self.at.endswith('/') - - def is_file(self): - return not self.is_dir() - - def exists(self): - return self.at in self.root.namelist() - - def iterdir(self): - if not self.is_dir(): - raise ValueError("Can't listdir a file") - names = map(operator.attrgetter('filename'), self.root.infolist()) - subs = map(self._next, names) - return filter(self._is_child, subs) - - def __str__(self): - return posixpath.join(self.root.filename, self.at) - - def __repr__(self): - return self.__repr.format(self=self) - - def __truediv__(self, add): - add = self._pathlib_compat(add) - next = posixpath.join(self.at, add) - next_dir = posixpath.join(self.at, add, '') - names = self.root.namelist() - return self._next( - next_dir if next not in names and next_dir in names else next - ) - - if sys.version_info < (3,): - __div__ = __truediv__ \ No newline at end of file diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 8a8b4add31cad6..737ea4be7aa39f 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -127,6 +127,27 @@ def setUp(self): build_files(EggInfoPkg.files, prefix=self.site_dir) +class EggInfoFile(SiteDir): + files = { + "egginfo_file.egg-info": """ + Metadata-Version: 1.0 + Name: egginfo_file + Version: 0.1 + Summary: An example package + Home-page: www.example.com + Author: Eric Haffa-Vee + Author-email: eric@example.coms + License: UNKNOWN + Description: UNKNOWN + Platform: UNKNOWN + """, + } + + def setUp(self): + super(EggInfoFile, self).setUp() + build_files(EggInfoFile.files, prefix=self.site_dir) + + class LocalPackage: def setUp(self): self.fixtures = ExitStack() @@ -136,15 +157,15 @@ def setUp(self): def build_files(file_defs, prefix=pathlib.Path()): - """ - Build a set of files/directories, as described by the - file_defs dictionary. - Each key/value pair in the dictionary is interpreted as - a filename/contents - pair. If the contents value is a dictionary, a directory - is created, and the - dictionary interpreted as the files within it, recursively. + """Build a set of files/directories, as described by the + + file_defs dictionary. Each key/value pair in the dictionary is + interpreted as a filename/contents pair. If the contents value is a + dictionary, a directory is created, and the dictionary interpreted + as the files within it, recursively. + For example: + {"README.txt": "A README file", "foo": { "__init__.py": "", diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index a6aa395831d92a..4aba1af7392b4b 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -8,7 +8,12 @@ from . import fixtures -class APITests(fixtures.EggInfoPkg, fixtures.DistInfoPkg, unittest.TestCase): +class APITests( + fixtures.EggInfoPkg, + fixtures.DistInfoPkg, + fixtures.EggInfoFile, + unittest.TestCase): + version_pattern = r'\d+\.\d+(\.\d)?' def test_retrieves_version_of_self(self): @@ -85,6 +90,14 @@ def test_files_dist_info(self): def test_files_egg_info(self): self._test_files(importlib.metadata.files('egginfo-pkg')) + def test_version_egg_info_file(self): + version = importlib_metadata.version('egginfo-file') + self.assertEqual(version, '0.1') + + def test_requires_egg_info_file(self): + requirements = importlib_metadata.requires('egginfo-file') + self.assertIsNone(requirements) + def test_requires(self): deps = importlib.metadata.requires('egginfo-pkg') assert any( From dc500ddc35762ef5cd18fd97114dbaff1a9d41a5 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 10:22:38 -0400 Subject: [PATCH 03/23] Merge fixes to docs syntax --- Doc/library/importlib_metadata.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Doc/library/importlib_metadata.rst b/Doc/library/importlib_metadata.rst index 3ab66cdfb7054f..ecf0986ce0792d 100644 --- a/Doc/library/importlib_metadata.rst +++ b/Doc/library/importlib_metadata.rst @@ -59,8 +59,8 @@ You can get the :ref:`metadata for a distribution `:: ['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Requires-Dist', 'Requires-Dist'] You can also get a :ref:`distribution's version number `, list its -:ref:`constituent files `_, and get a list of the distribution's -:ref:`requirements`_. +:ref:`constituent files `, and get a list of the distribution's +:ref:`requirements`. Functional API @@ -69,7 +69,7 @@ Functional API This package provides the following functionality via its public API. -.. _entry-points:: +.. _entry-points: Entry points ------------ @@ -97,7 +97,7 @@ group. Read `the setuptools docs for more information on entrypoints, their definition, and usage. -.. _metadata:: +.. _metadata: Distribution metadata --------------------- @@ -114,7 +114,7 @@ their values are returned unparsed from the distribution metadata:: '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' -.. _version:: +.. _version: Distribution versions --------------------- @@ -126,7 +126,7 @@ number, as a string:: '0.32.3' -.. _files:: +.. _files: Distribution files ------------------ @@ -159,7 +159,7 @@ Once you have the file, you can also read its contents:: return s -.. _requirements:: +.. _requirements: Distribution requirements ------------------------- From f0cad2b43cedee28873c0a63ffcd2a29cedbe391 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 10:45:28 -0400 Subject: [PATCH 04/23] Rename doc to appear under the correct name --- Doc/library/{importlib_metadata.rst => importlib.metadata.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Doc/library/{importlib_metadata.rst => importlib.metadata.rst} (100%) diff --git a/Doc/library/importlib_metadata.rst b/Doc/library/importlib.metadata.rst similarity index 100% rename from Doc/library/importlib_metadata.rst rename to Doc/library/importlib.metadata.rst From a630dfa361c58ec2841125cd7ed170ca87d82f00 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 10:45:57 -0400 Subject: [PATCH 05/23] Add reference to importlib.metadata --- Doc/library/modules.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/Doc/library/modules.rst b/Doc/library/modules.rst index 6b2a40a1b71476..565ce0525c2c99 100644 --- a/Doc/library/modules.rst +++ b/Doc/library/modules.rst @@ -17,3 +17,4 @@ The full list of modules described in this chapter is: modulefinder.rst runpy.rst importlib.rst + importlib.metadata.rst From 9bde7faf6f051d4a7306ac8629d915ce069392f7 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 11:13:07 -0400 Subject: [PATCH 06/23] Update with latest changes from importlib_metadata --- Doc/library/importlib.metadata.rst | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index ecf0986ce0792d..ad17d939d71596 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -1,10 +1,10 @@ .. _using: ========================== - Using importlib_metadata + Using importlib.metadata ========================== -``importlib_metadata`` is a library that provides for access to installed +``importlib.metadata`` is a library that provides for access to installed package metadata. Built in part on Python's import system, this library intends to replace similar functionality in the `entry point API`_ and `metadata API`_ of ``pkg_resources``. Along with @@ -37,15 +37,18 @@ Let's say you wanted to get the version string for a package you've installed using ``pip``. We start by creating a virtual environment and installing something into it:: +.. highlight:: none + $ python3 -m venv example $ source example/bin/activate - (example) $ pip install importlib_metadata (example) $ pip install wheel You can get the version string for ``wheel`` by running the following:: +.. highlight:: none + (example) $ python - >>> from importlib_metadata import version + >>> from importlib.metadata import version >>> version('wheel') '0.32.3' @@ -143,7 +146,7 @@ files installed by this distribution. Each file object returned is a >>> util.size 859 >>> util.dist - + >>> util.hash @@ -179,7 +182,7 @@ of that information from the ``Distribution`` class. A ``Distribution`` is an abstract object that represents the metadata for a Python package. You can get the ``Distribution`` instance:: - >>> from importlib_metadata import distribution + >>> from importlib.metadata import distribution >>> dist = distribution('wheel') Thus, an alternative way to get the version number is through the @@ -206,16 +209,16 @@ Extending the search algorithm Because package metadata is not available through ``sys.path`` searches, or package loaders directly, the metadata for a package is found through import system `finders`_. To find a distribution package's metadata, -``importlib_metadata`` queries the list of `meta path finders`_ on +``importlib.metadata`` queries the list of `meta path finders`_ on `sys.meta_path`_. -By default ``importlib_metadata`` installs a finder for distribution packages +By default ``importlib.metadata`` installs a finder for distribution packages found on the file system. This finder doesn't actually find any *packages*, but it can find the packages' metadata. The abstract class :py:class:`importlib.abc.MetaPathFinder` defines the interface expected of finders by Python's import system. -``importlib_metadata`` extends this protocol by looking for an optional +``importlib.metadata`` extends this protocol by looking for an optional ``find_distributions`` callable on the finders from ``sys.meta_path``. If the finder has this method, it must return an iterator over instances of the ``Distribution`` abstract class. This From 6816cc0f00025977d3efef9b5d23851f299bec86 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 12:21:39 -0400 Subject: [PATCH 07/23] Add ignores to suspicious check --- Doc/tools/susp-ignored.csv | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 3672955bf55b11..250c59bc603dfa 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -350,3 +350,6 @@ whatsnew/3.7,,::,error::BytesWarning whatsnew/changelog,,::,error::BytesWarning whatsnew/changelog,,::,default::BytesWarning whatsnew/changelog,,::,default::DeprecationWarning +library/importlib.metadata,,.. highlight:,.. highlight:: none +library/importlib.metadata,,:main,"EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts')" +library/importlib.metadata,,`,of directories ``path`` (defaults to sys.path). From 071cbd4ea122c9e10003e048096063b438a18c81 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Wed, 8 May 2019 12:41:39 -0400 Subject: [PATCH 08/23] Update with latest changes from importlib_metadata --- Lib/test/test_importlib/test_metadata_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 4aba1af7392b4b..8e4c95cc672e69 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -91,11 +91,11 @@ def test_files_egg_info(self): self._test_files(importlib.metadata.files('egginfo-pkg')) def test_version_egg_info_file(self): - version = importlib_metadata.version('egginfo-file') + version = importlib.metadata.version('egginfo-file') self.assertEqual(version, '0.1') def test_requires_egg_info_file(self): - requirements = importlib_metadata.requires('egginfo-file') + requirements = importlib.metadata.requires('egginfo-file') self.assertIsNone(requirements) def test_requires(self): From 21eaaf47ac3424548cdd09655397910541aba29f Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 10 May 2019 09:11:01 -0400 Subject: [PATCH 09/23] Apply changes from importlib_metadata 0.11 --- Doc/library/importlib.metadata.rst | 9 +-- Lib/importlib/metadata/__init__.py | 10 ++- Lib/importlib/metadata/_hooks.py | 83 +++----------------- Lib/importlib/metadata/abc.py | 3 - Lib/importlib/metadata/api.py | 2 - Lib/test/test_importlib/test_main.py | 41 +++++----- Lib/test/test_importlib/test_metadata_api.py | 56 +++++++------ Lib/test/test_importlib/test_zip.py | 20 ++--- 8 files changed, 73 insertions(+), 151 deletions(-) diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index ad17d939d71596..8a5b66d04e1201 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -18,17 +18,10 @@ Python's ``site-packages`` directory via tools such as `pip `_. Specifically, it means a package with either a discoverable ``dist-info`` or ``egg-info`` directory, and metadata defined by `PEP 566`_ or its older specifications. -By default, package metadata can live on the file system or in wheels on +By default, package metadata can live on the file system or in zip archives on ``sys.path``. Through an extension mechanism, the metadata can live almost anywhere. -.. note:: Although this package supports loading metadata from wheels - on ``sys.path``, that support is provisional and does not serve to - contravene the `PEP 427 directive - `_, - which states that relying on this format is discouraged, and use is - at your own risk. - Overview ======== diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index 314ece65afe751..8d4b0a344cd054 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -1,17 +1,19 @@ -from .api import distribution, Distribution, PackageNotFoundError # noqa: F401 from .api import ( - metadata, entry_points, version, files, requires, distributions, - ) + Distribution, PackageNotFoundError, distribution, distributions, + entry_points, files, metadata, requires, version) # Import for installation side-effects. from . import _hooks # noqa: F401 __all__ = [ + 'Distribution', + 'PackageNotFoundError', + 'distribution', + 'distributions', 'entry_points', 'files', 'metadata', 'requires', 'version', - 'distributions', ] diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py index e624844217dfdf..f6bed1a67fd3c5 100644 --- a/Lib/importlib/metadata/_hooks.py +++ b/Lib/importlib/metadata/_hooks.py @@ -25,12 +25,14 @@ def find_spec(*args, **kwargs): return None -class MetadataPathBaseFinder(NullFinder): +@install +class MetadataPathFinder(NullFinder): """A degenerate finder for distribution packages on the file system. This finder supplies only a find_distributions() method for versions of Python that do not have a PathFinder find_distributions(). """ + search_template = r'{pattern}(-.*)?\.(dist|egg)-info' def find_distributions(self, name=None, path=None): """Return an iterable of all Distribution instances capable of @@ -51,9 +53,15 @@ def _search_paths(cls, pattern, paths): """ return itertools.chain.from_iterable( cls._search_path(path, pattern) - for path in map(Path, paths) + for path in map(cls._switch_path, paths) ) + @staticmethod + def _switch_path(path): + with suppress(Exception): + return zipfile.Path(path) + return Path(path) + @classmethod def _predicate(cls, pattern, root, item): return re.match(pattern, str(item.name), flags=re.IGNORECASE) @@ -68,82 +76,15 @@ def _search_path(cls, root, pattern): if cls._predicate(matcher, root, item)) -@install -class MetadataPathFinder(MetadataPathBaseFinder): - search_template = r'{pattern}(-.*)?\.(dist|egg)-info' - - -@install -class MetadataPathEggInfoFileFinder(MetadataPathBaseFinder): - search_template = r'{pattern}(-.*)?\.egg-info' - - @classmethod - def _predicate(cls, pattern, root, item): - return ( - (root / item).is_file() and - re.match(pattern, str(item.name), flags=re.IGNORECASE)) - - class PathDistribution(Distribution): def __init__(self, path): """Construct a distribution from a path to the metadata directory.""" self._path = path def read_text(self, filename): - with suppress(FileNotFoundError, NotADirectoryError): - with self._path.joinpath(filename).open(encoding='utf-8') as fp: - return fp.read() - return None + with suppress(FileNotFoundError, NotADirectoryError, KeyError): + return self._path.joinpath(filename).read_text(encoding='utf-8') read_text.__doc__ = Distribution.read_text.__doc__ def locate_file(self, path): return self._path.parent / path - - -@install -class WheelMetadataFinder(NullFinder): - """A degenerate finder for distribution packages in wheels. - - This finder supplies only a find_distributions() method for versions - of Python that do not have a PathFinder find_distributions(). - """ - search_template = r'{pattern}(-.*)?\.whl' - - def find_distributions(self, name=None, path=None): - """Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the name - (or all names if not supplied) along the paths in the list - of directories ``path`` (defaults to sys.path). - """ - if path is None: - path = sys.path - pattern = '.*' if name is None else re.escape(name) - found = self._search_paths(pattern, path) - return map(WheelDistribution, found) - - @classmethod - def _search_paths(cls, pattern, paths): - return ( - path - for path in map(Path, paths) - if re.match( - cls.search_template.format(pattern=pattern), - str(path.name), - flags=re.IGNORECASE, - ) - ) - - -class WheelDistribution(Distribution): - def __init__(self, archive): - self._archive = zipfile.Path(archive) - name, version = archive.name.split('-')[0:2] - self._dist_info = '{}-{}.dist-info'.format(name, version) - - def read_text(self, filename): - target = self._archive / self._dist_info / filename - return target.read_text() if target.exists() else None - read_text.__doc__ = Distribution.read_text.__doc__ - - def locate_file(self, path): - return self._archive / path diff --git a/Lib/importlib/metadata/abc.py b/Lib/importlib/metadata/abc.py index 1785cf3c1c27ba..845e41afff7a33 100644 --- a/Lib/importlib/metadata/abc.py +++ b/Lib/importlib/metadata/abc.py @@ -1,6 +1,3 @@ -from __future__ import absolute_import - - import abc from importlib.abc import MetaPathFinder diff --git a/Lib/importlib/metadata/api.py b/Lib/importlib/metadata/api.py index b95bc454cc6f92..ba5c17120b96a4 100644 --- a/Lib/importlib/metadata/api.py +++ b/Lib/importlib/metadata/api.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import re import abc import csv diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 64270850a9fe72..926064ed486a95 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -1,33 +1,31 @@ # coding: utf-8 -from __future__ import unicode_literals import re import textwrap import unittest import importlib -import importlib.metadata from . import fixtures -from importlib.metadata import _hooks +from importlib.metadata import ( + Distribution, PackageNotFoundError, _hooks, api, distributions, + entry_points, metadata, version) class BasicTests(fixtures.DistInfoPkg, unittest.TestCase): version_pattern = r'\d+\.\d+(\.\d)?' def test_retrieves_version_of_self(self): - dist = importlib.metadata.Distribution.from_name('distinfo-pkg') + dist = Distribution.from_name('distinfo-pkg') assert isinstance(dist.version, str) assert re.match(self.version_pattern, dist.version) def test_for_name_does_not_exist(self): - with self.assertRaises(importlib.metadata.PackageNotFoundError): - importlib.metadata.Distribution.from_name('does-not-exist') + with self.assertRaises(PackageNotFoundError): + Distribution.from_name('does-not-exist') def test_new_style_classes(self): - self.assertIsInstance(importlib.metadata.Distribution, type) + self.assertIsInstance(Distribution, type) self.assertIsInstance(_hooks.MetadataPathFinder, type) - self.assertIsInstance(_hooks.WheelMetadataFinder, type) - self.assertIsInstance(_hooks.WheelDistribution, type) class ImportTests(fixtures.DistInfoPkg, unittest.TestCase): @@ -38,17 +36,17 @@ def test_import_nonexistent_module(self): importlib.import_module('does_not_exist') def test_resolve(self): - entries = dict(importlib.metadata.entry_points()['entries']) + entries = dict(entry_points()['entries']) ep = entries['main'] self.assertEqual(ep.load().__name__, "main") def test_resolve_without_attr(self): - ep = importlib.metadata.api.EntryPoint( + ep = api.EntryPoint( name='ep', value='importlib.metadata.api', group='grp', ) - assert ep.load() is importlib.metadata.api + assert ep.load() is api class NameNormalizationTests(fixtures.SiteDir, unittest.TestCase): @@ -71,7 +69,7 @@ def test_dashes_in_dist_name_found_as_underscores(self): uses underscores in the name. Ensure the metadata loads. """ pkg_name = self.pkg_with_dashes(self.site_dir) - assert importlib.metadata.version(pkg_name) == '1.0' + assert version(pkg_name) == '1.0' @staticmethod def pkg_with_mixed_case(site_dir): @@ -91,9 +89,9 @@ def test_dist_name_found_as_any_case(self): Ensure the metadata loads when queried with any case. """ pkg_name = self.pkg_with_mixed_case(self.site_dir) - assert importlib.metadata.version(pkg_name) == '1.0' - assert importlib.metadata.version(pkg_name.lower()) == '1.0' - assert importlib.metadata.version(pkg_name.upper()) == '1.0' + assert version(pkg_name) == '1.0' + assert version(pkg_name.lower()) == '1.0' + assert version(pkg_name.upper()) == '1.0' class NonASCIITests(fixtures.SiteDir, unittest.TestCase): @@ -129,22 +127,23 @@ def pkg_with_non_ascii_description_egg_info(site_dir): def test_metadata_loads(self): pkg_name = self.pkg_with_non_ascii_description(self.site_dir) - meta = importlib.metadata.metadata(pkg_name) + meta = metadata(pkg_name) assert meta['Description'] == 'pôrˈtend' def test_metadata_loads_egg_info(self): pkg_name = self.pkg_with_non_ascii_description_egg_info(self.site_dir) - meta = importlib.metadata.metadata(pkg_name) + meta = metadata(pkg_name) assert meta.get_payload() == 'pôrˈtend\n' -class DiscoveryTests(fixtures.EggInfoPkg, fixtures.DistInfoPkg, +class DiscoveryTests(fixtures.EggInfoPkg, + fixtures.DistInfoPkg, unittest.TestCase): def test_package_discovery(self): - dists = list(importlib.metadata.api.distributions()) + dists = list(distributions()) assert all( - isinstance(dist, importlib.metadata.Distribution) + isinstance(dist, Distribution) for dist in dists ) assert any( diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 8e4c95cc672e69..f837a6343eb842 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -1,11 +1,15 @@ import re import textwrap import unittest -import importlib.metadata from collections.abc import Iterator from . import fixtures +from importlib.metadata import ( + Distribution, PackageNotFoundError, distribution, + entry_points, files, metadata, requires, version, + ) +from importlib.metadata.api import local_distribution class APITests( @@ -17,41 +21,39 @@ class APITests( version_pattern = r'\d+\.\d+(\.\d)?' def test_retrieves_version_of_self(self): - version = importlib.metadata.version('egginfo-pkg') - assert isinstance(version, str) - assert re.match(self.version_pattern, version) + pkg_version = version('egginfo-pkg') + assert isinstance(pkg_version, str) + assert re.match(self.version_pattern, pkg_version) - def test_retrieves_version_of_pip(self): - version = importlib.metadata.version('distinfo-pkg') - assert isinstance(version, str) - assert re.match(self.version_pattern, version) + def test_retrieves_version_of_distinfo_pkg(self): + pkg_version = version('distinfo-pkg') + assert isinstance(pkg_version, str) + assert re.match(self.version_pattern, pkg_version) def test_for_name_does_not_exist(self): - with self.assertRaises(importlib.metadata.PackageNotFoundError): - importlib.metadata.distribution('does-not-exist') + with self.assertRaises(PackageNotFoundError): + distribution('does-not-exist') def test_for_top_level(self): - distribution = importlib.metadata.distribution('egginfo-pkg') self.assertEqual( - distribution.read_text('top_level.txt').strip(), + distribution('egginfo-pkg').read_text('top_level.txt').strip(), 'mod') def test_read_text(self): top_level = [ - path for path in importlib.metadata.files('egginfo-pkg') + path for path in files('egginfo-pkg') if path.name == 'top_level.txt' ][0] self.assertEqual(top_level.read_text(), 'mod\n') def test_entry_points(self): - entires = importlib.metadata.entry_points()['entries'] - entries = dict(entires) + entries = dict(entry_points()['entries']) ep = entries['main'] self.assertEqual(ep.value, 'mod:main') self.assertEqual(ep.extras, []) def test_metadata_for_this_package(self): - md = importlib.metadata.metadata('egginfo-pkg') + md = metadata('egginfo-pkg') assert md['author'] == 'Steven Ma' assert md['LICENSE'] == 'Unknown' assert md['Name'] == 'egginfo-pkg' @@ -77,7 +79,7 @@ def test_file_hash_repr(self): assertRegex = self.assertRegex util = [ - p for p in importlib.metadata.files('distinfo-pkg') + p for p in files('distinfo-pkg') if p.name == 'mod.py' ][0] assertRegex( @@ -85,28 +87,27 @@ def test_file_hash_repr(self): '') def test_files_dist_info(self): - self._test_files(importlib.metadata.files('distinfo-pkg')) + self._test_files(files('distinfo-pkg')) def test_files_egg_info(self): - self._test_files(importlib.metadata.files('egginfo-pkg')) + self._test_files(files('egginfo-pkg')) def test_version_egg_info_file(self): - version = importlib.metadata.version('egginfo-file') - self.assertEqual(version, '0.1') + self.assertEqual(version('egginfo-file'), '0.1') def test_requires_egg_info_file(self): - requirements = importlib.metadata.requires('egginfo-file') + requirements = requires('egginfo-file') self.assertIsNone(requirements) def test_requires(self): - deps = importlib.metadata.requires('egginfo-pkg') + deps = requires('egginfo-pkg') assert any( dep == 'wheel >= 1.0; python_version >= "2.7"' for dep in deps ) def test_requires_dist_info(self): - deps = list(importlib.metadata.requires('distinfo-pkg')) + deps = list(requires('distinfo-pkg')) assert deps and all(deps) def test_more_complex_deps_requires_text(self): @@ -123,10 +124,7 @@ def test_more_complex_deps_requires_text(self): [extra2:python_version < "3"] dep5 """) - deps = sorted( - importlib.metadata.api.Distribution._deps_from_requires_text( - requires) - ) + deps = sorted(Distribution._deps_from_requires_text(requires)) expected = [ 'dep1', 'dep2', @@ -143,5 +141,5 @@ def test_more_complex_deps_requires_text(self): class LocalProjectTests(fixtures.LocalPackage, unittest.TestCase): def test_find_local(self): - dist = importlib.metadata.api.local_distribution() + dist = local_distribution() assert dist.metadata['Name'] == 'egginfo-pkg' diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index 4af027a12bef1c..c7c8c0b1843b20 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -1,14 +1,10 @@ import sys import unittest -import importlib.metadata +from contextlib import ExitStack +from importlib.metadata import distribution, entry_points, files, version from importlib.resources import path -try: - from contextlib import ExitStack -except ImportError: - from contextlib2 import ExitStack - class BespokeLoader: archive = 'bespoke' @@ -27,22 +23,20 @@ def setUp(self): self.resources.callback(sys.path.pop, 0) def test_zip_version(self): - self.assertEqual(importlib.metadata.version('example'), '21.12') + self.assertEqual(version('example'), '21.12') def test_zip_entry_points(self): - scripts = dict(importlib.metadata.entry_points()['console_scripts']) + scripts = dict(entry_points()['console_scripts']) entry_point = scripts['example'] self.assertEqual(entry_point.value, 'example:main') def test_missing_metadata(self): - distribution = importlib.metadata.distribution('example') - self.assertIsNone(distribution.read_text('does not exist')) + self.assertIsNone(distribution('example').read_text('does not exist')) def test_case_insensitive(self): - self.assertEqual(importlib.metadata.version('Example'), '21.12') + self.assertEqual(version('Example'), '21.12') def test_files(self): - files = importlib.metadata.files('example') - for file in files: + for file in files('example'): path = str(file.dist.locate_file(file)) assert '.whl/' in path, path From 58533a71b2de37c6b3b5dbd645e6b1b6702a4aff Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 10 May 2019 12:26:20 -0400 Subject: [PATCH 10/23] Refresh from importlib_metadata@cpython --- Lib/test/test_importlib/fixtures.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 737ea4be7aa39f..00fcffa9d92d98 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -24,11 +24,9 @@ @contextlib.contextmanager def tempdir(): tmpdir = tempfile.mkdtemp() - sys.path[:0] = [tmpdir] try: yield pathlib.Path(tmpdir) finally: - sys.path.remove(tmpdir) shutil.rmtree(tmpdir) @@ -55,7 +53,10 @@ class SiteDir: def site_dir(): with tempdir() as tmp: sys.path[:0] = [str(tmp)] - yield tmp + try: + yield tmp + finally: + sys.path.remove(str(tmp)) def setUp(self): self.fixtures = ExitStack() @@ -193,4 +194,3 @@ def build_files(file_defs, prefix=pathlib.Path()): def DALS(str): "Dedent and left-strip" return textwrap.dedent(str).lstrip() - From 3b19b9d823ff3534d6c7b434075adba34f34fbb6 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 10 May 2019 14:55:40 -0400 Subject: [PATCH 11/23] Inline the find_distributions functionality on PathFinder. --- Lib/importlib/_bootstrap_external.py | 51 + Lib/importlib/metadata/_hooks.py | 55 - Lib/test/test_importlib/test_main.py | 3 +- Python/importlib_external.h | 1406 ++++++++++++++------------ 4 files changed, 822 insertions(+), 693 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index f8ff5f4f2c5c69..b111ea3163f3a1 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1359,6 +1359,57 @@ def find_module(cls, fullname, path=None): return None return spec.loader + search_template = r'{pattern}(-.*)?\.(dist|egg)-info' + + @classmethod + def find_distributions(cls, name=None, path=None): + """Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ + import re + from importlib.metadata._hooks import PathDistribution + if path is None: + path = sys.path + pattern = '.*' if name is None else re.escape(name) + found = cls._search_paths(pattern, path) + return map(PathDistribution, found) + + @classmethod + def _search_paths(cls, pattern, paths): + """ + Find metadata directories in paths heuristically. + """ + import itertools + return itertools.chain.from_iterable( + cls._search_path(path, pattern) + for path in map(cls._switch_path, paths) + ) + + @staticmethod + def _switch_path(path): + from contextlib import suppress + import zipfile + from pathlib import Path + with suppress(Exception): + return zipfile.Path(path) + return Path(path) + + @classmethod + def _predicate(cls, pattern, root, item): + import re + return re.match(pattern, str(item.name), flags=re.IGNORECASE) + + @classmethod + def _search_path(cls, root, pattern): + if not root.is_dir(): + return () + normalized = pattern.replace('-', '_') + matcher = cls.search_template.format(pattern=normalized) + return (item for item in root.iterdir() + if cls._predicate(matcher, root, item)) + class FileFinder: diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py index f6bed1a67fd3c5..11b94772a5352b 100644 --- a/Lib/importlib/metadata/_hooks.py +++ b/Lib/importlib/metadata/_hooks.py @@ -1,12 +1,8 @@ -import re import sys -import zipfile -import itertools from .api import Distribution from .abc import DistributionFinder from contextlib import suppress -from pathlib import Path def install(cls): @@ -25,57 +21,6 @@ def find_spec(*args, **kwargs): return None -@install -class MetadataPathFinder(NullFinder): - """A degenerate finder for distribution packages on the file system. - - This finder supplies only a find_distributions() method for versions - of Python that do not have a PathFinder find_distributions(). - """ - search_template = r'{pattern}(-.*)?\.(dist|egg)-info' - - def find_distributions(self, name=None, path=None): - """Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the name - (or all names if not supplied) along the paths in the list - of directories ``path`` (defaults to sys.path). - """ - if path is None: - path = sys.path - pattern = '.*' if name is None else re.escape(name) - found = self._search_paths(pattern, path) - return map(PathDistribution, found) - - @classmethod - def _search_paths(cls, pattern, paths): - """ - Find metadata directories in paths heuristically. - """ - return itertools.chain.from_iterable( - cls._search_path(path, pattern) - for path in map(cls._switch_path, paths) - ) - - @staticmethod - def _switch_path(path): - with suppress(Exception): - return zipfile.Path(path) - return Path(path) - - @classmethod - def _predicate(cls, pattern, root, item): - return re.match(pattern, str(item.name), flags=re.IGNORECASE) - - @classmethod - def _search_path(cls, root, pattern): - if not root.is_dir(): - return () - normalized = pattern.replace('-', '_') - matcher = cls.search_template.format(pattern=normalized) - return (item for item in root.iterdir() - if cls._predicate(matcher, root, item)) - - class PathDistribution(Distribution): def __init__(self, path): """Construct a distribution from a path to the metadata directory.""" diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 926064ed486a95..22529b1cc88e2a 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -7,7 +7,7 @@ from . import fixtures from importlib.metadata import ( - Distribution, PackageNotFoundError, _hooks, api, distributions, + Distribution, PackageNotFoundError, api, distributions, entry_points, metadata, version) @@ -25,7 +25,6 @@ def test_for_name_does_not_exist(self): def test_new_style_classes(self): self.assertIsInstance(Distribution, type) - self.assertIsInstance(_hooks.MetadataPathFinder, type) class ImportTests(fixtures.DistInfoPkg, unittest.TestCase): diff --git a/Python/importlib_external.h b/Python/importlib_external.h index b5b4df228057a3..c7df32d4ad04f8 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2045,650 +2045,784 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 8,1,8,3,2,1,10,8,8,3,8,3,8,3,8,3, 8,3,114,43,1,0,0,99,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0, - 115,106,0,0,0,101,0,90,1,100,0,90,2,100,1,90, + 115,172,0,0,0,101,0,90,1,100,0,90,2,100,1,90, 3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,100, 4,100,5,132,0,131,1,90,6,101,4,100,6,100,7,132, 0,131,1,90,7,101,4,100,8,100,9,132,0,131,1,90, - 8,101,4,100,17,100,11,100,12,132,1,131,1,90,9,101, - 4,100,18,100,13,100,14,132,1,131,1,90,10,101,4,100, - 19,100,15,100,16,132,1,131,1,90,11,100,10,83,0,41, - 20,218,10,80,97,116,104,70,105,110,100,101,114,122,62,77, - 101,116,97,32,112,97,116,104,32,102,105,110,100,101,114,32, - 102,111,114,32,115,121,115,46,112,97,116,104,32,97,110,100, - 32,112,97,99,107,97,103,101,32,95,95,112,97,116,104,95, - 95,32,97,116,116,114,105,98,117,116,101,115,46,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,64,0,0,0,116,0,116,1,106, - 2,160,3,161,0,131,1,68,0,93,44,92,2,125,1,125, - 2,124,2,100,1,107,8,114,40,116,1,106,2,124,1,61, - 0,113,14,116,4,124,2,100,2,131,2,114,14,124,2,160, - 5,161,0,1,0,113,14,100,1,83,0,41,3,122,125,67, - 97,108,108,32,116,104,101,32,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,40,41,32,109,101,116,104, - 111,100,32,111,110,32,97,108,108,32,112,97,116,104,32,101, - 110,116,114,121,32,102,105,110,100,101,114,115,10,32,32,32, - 32,32,32,32,32,115,116,111,114,101,100,32,105,110,32,115, - 121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114, - 95,99,97,99,104,101,115,32,40,119,104,101,114,101,32,105, - 109,112,108,101,109,101,110,116,101,100,41,46,78,218,17,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 41,6,218,4,108,105,115,116,114,8,0,0,0,218,19,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,218,5,105,116,101,109,115,114,128,0,0,0,114,46, - 1,0,0,41,3,114,193,0,0,0,114,117,0,0,0,218, - 6,102,105,110,100,101,114,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,46,1,0,0,209,4,0,0,115, - 10,0,0,0,0,4,22,1,8,1,10,1,10,1,122,28, - 80,97,116,104,70,105,110,100,101,114,46,105,110,118,97,108, - 105,100,97,116,101,95,99,97,99,104,101,115,99,2,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,9,0,0, - 0,67,0,0,0,115,84,0,0,0,116,0,106,1,100,1, - 107,9,114,28,116,0,106,1,115,28,116,2,160,3,100,2, - 116,4,161,2,1,0,116,0,106,1,68,0,93,44,125,2, - 122,14,124,2,124,1,131,1,87,0,2,0,1,0,83,0, - 4,0,116,5,107,10,114,76,1,0,1,0,1,0,89,0, - 113,34,89,0,113,34,88,0,113,34,100,1,83,0,41,3, - 122,46,83,101,97,114,99,104,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,102,111,114,32,97,32,102,105, - 110,100,101,114,32,102,111,114,32,39,112,97,116,104,39,46, - 78,122,23,115,121,115,46,112,97,116,104,95,104,111,111,107, - 115,32,105,115,32,101,109,112,116,121,41,6,114,8,0,0, - 0,218,10,112,97,116,104,95,104,111,111,107,115,114,75,0, - 0,0,114,76,0,0,0,114,138,0,0,0,114,118,0,0, - 0,41,3,114,193,0,0,0,114,44,0,0,0,90,4,104, - 111,111,107,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,219, - 4,0,0,115,16,0,0,0,0,3,16,1,12,1,10,1, - 2,1,14,1,14,1,12,2,122,22,80,97,116,104,70,105, - 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,8,0,0,0,67,0,0,0,115,104,0,0,0,124,1, - 100,1,107,2,114,44,122,12,116,0,160,1,161,0,125,1, - 87,0,110,22,4,0,116,2,107,10,114,42,1,0,1,0, - 1,0,89,0,100,2,83,0,88,0,122,14,116,3,106,4, - 124,1,25,0,125,2,87,0,110,40,4,0,116,5,107,10, - 114,98,1,0,1,0,1,0,124,0,160,6,124,1,161,1, - 125,2,124,2,116,3,106,4,124,1,60,0,89,0,110,2, - 88,0,124,2,83,0,41,3,122,210,71,101,116,32,116,104, - 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, + 8,101,4,100,28,100,11,100,12,132,1,131,1,90,9,101, + 4,100,29,100,13,100,14,132,1,131,1,90,10,101,4,100, + 30,100,15,100,16,132,1,131,1,90,11,100,17,90,12,101, + 4,100,31,100,18,100,19,132,1,131,1,90,13,101,4,100, + 20,100,21,132,0,131,1,90,14,101,15,100,22,100,23,132, + 0,131,1,90,16,101,4,100,24,100,25,132,0,131,1,90, + 17,101,4,100,26,100,27,132,0,131,1,90,18,100,10,83, + 0,41,32,218,10,80,97,116,104,70,105,110,100,101,114,122, + 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, + 114,32,102,111,114,32,115,121,115,46,112,97,116,104,32,97, + 110,100,32,112,97,99,107,97,103,101,32,95,95,112,97,116, + 104,95,95,32,97,116,116,114,105,98,117,116,101,115,46,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,116, + 1,106,2,160,3,161,0,131,1,68,0,93,44,92,2,125, + 1,125,2,124,2,100,1,107,8,114,40,116,1,106,2,124, + 1,61,0,113,14,116,4,124,2,100,2,131,2,114,14,124, + 2,160,5,161,0,1,0,113,14,100,1,83,0,41,3,122, + 125,67,97,108,108,32,116,104,101,32,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,40,41,32,109,101, + 116,104,111,100,32,111,110,32,97,108,108,32,112,97,116,104, + 32,101,110,116,114,121,32,102,105,110,100,101,114,115,10,32, + 32,32,32,32,32,32,32,115,116,111,114,101,100,32,105,110, + 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,115,32,40,119,104,101,114,101, + 32,105,109,112,108,101,109,101,110,116,101,100,41,46,78,218, + 17,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, + 101,115,41,6,218,4,108,105,115,116,114,8,0,0,0,218, + 19,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,218,5,105,116,101,109,115,114,128,0,0,0, + 114,46,1,0,0,41,3,114,193,0,0,0,114,117,0,0, + 0,218,6,102,105,110,100,101,114,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,46,1,0,0,209,4,0, + 0,115,10,0,0,0,0,4,22,1,8,1,10,1,10,1, + 122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,9, + 0,0,0,67,0,0,0,115,84,0,0,0,116,0,106,1, + 100,1,107,9,114,28,116,0,106,1,115,28,116,2,160,3, + 100,2,116,4,161,2,1,0,116,0,106,1,68,0,93,44, + 125,2,122,14,124,2,124,1,131,1,87,0,2,0,1,0, + 83,0,4,0,116,5,107,10,114,76,1,0,1,0,1,0, + 89,0,113,34,89,0,113,34,88,0,113,34,100,1,83,0, + 41,3,122,46,83,101,97,114,99,104,32,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,102,111,114,32,97,32, + 102,105,110,100,101,114,32,102,111,114,32,39,112,97,116,104, + 39,46,78,122,23,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,105,115,32,101,109,112,116,121,41,6,114,8, + 0,0,0,218,10,112,97,116,104,95,104,111,111,107,115,114, + 75,0,0,0,114,76,0,0,0,114,138,0,0,0,114,118, + 0,0,0,41,3,114,193,0,0,0,114,44,0,0,0,90, + 4,104,111,111,107,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,218,11,95,112,97,116,104,95,104,111,111,107, + 115,219,4,0,0,115,16,0,0,0,0,3,16,1,12,1, + 10,1,2,1,14,1,14,1,12,2,122,22,80,97,116,104, + 70,105,110,100,101,114,46,95,112,97,116,104,95,104,111,111, + 107,115,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,8,0,0,0,67,0,0,0,115,104,0,0,0, + 124,1,100,1,107,2,114,44,122,12,116,0,160,1,161,0, + 125,1,87,0,110,22,4,0,116,2,107,10,114,42,1,0, + 1,0,1,0,89,0,100,2,83,0,88,0,122,14,116,3, + 106,4,124,1,25,0,125,2,87,0,110,40,4,0,116,5, + 107,10,114,98,1,0,1,0,1,0,124,0,160,6,124,1, + 161,1,125,2,124,2,116,3,106,4,124,1,60,0,89,0, + 110,2,88,0,124,2,83,0,41,3,122,210,71,101,116,32, + 116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,116, + 104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,114, + 111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, + 32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,110, + 32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,100, + 32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101, + 32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,32, + 97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,102, + 32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,118, + 97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,78, + 111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,40, + 0,0,0,78,41,7,114,2,0,0,0,114,55,0,0,0, + 114,2,1,0,0,114,8,0,0,0,114,48,1,0,0,218, + 8,75,101,121,69,114,114,111,114,114,52,1,0,0,41,3, + 114,193,0,0,0,114,44,0,0,0,114,50,1,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,20, + 95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,232,4,0,0,115,22,0,0,0,0,8,8, + 1,2,1,12,1,14,3,8,1,2,1,14,1,14,1,10, + 1,16,1,122,31,80,97,116,104,70,105,110,100,101,114,46, + 95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, + 97,99,104,101,99,3,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,4,0,0,0,67,0,0,0,115,82,0, + 0,0,116,0,124,2,100,1,131,2,114,26,124,2,160,1, + 124,1,161,1,92,2,125,3,125,4,110,14,124,2,160,2, + 124,1,161,1,125,3,103,0,125,4,124,3,100,0,107,9, + 114,60,116,3,160,4,124,1,124,3,161,2,83,0,116,3, + 160,5,124,1,100,0,161,2,125,5,124,4,124,5,95,6, + 124,5,83,0,41,2,78,114,137,0,0,0,41,7,114,128, + 0,0,0,114,137,0,0,0,114,206,0,0,0,114,134,0, + 0,0,114,201,0,0,0,114,183,0,0,0,114,178,0,0, + 0,41,6,114,193,0,0,0,114,139,0,0,0,114,50,1, + 0,0,114,140,0,0,0,114,141,0,0,0,114,187,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,16,95,108,101,103,97,99,121,95,103,101,116,95,115,112, + 101,99,254,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,99,78,99,4,0,0,0, + 0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,0, + 67,0,0,0,115,166,0,0,0,103,0,125,4,124,2,68, + 0,93,134,125,5,116,0,124,5,116,1,116,2,102,2,131, + 2,115,28,113,8,124,0,160,3,124,5,161,1,125,6,124, + 6,100,1,107,9,114,8,116,4,124,6,100,2,131,2,114, + 70,124,6,160,5,124,1,124,3,161,2,125,7,110,12,124, + 0,160,6,124,1,124,6,161,2,125,7,124,7,100,1,107, + 8,114,92,113,8,124,7,106,7,100,1,107,9,114,110,124, + 7,2,0,1,0,83,0,124,7,106,8,125,8,124,8,100, + 1,107,8,114,132,116,9,100,3,131,1,130,1,124,4,160, + 10,124,8,161,1,1,0,113,8,116,11,160,12,124,1,100, + 1,161,2,125,7,124,4,124,7,95,8,124,7,83,0,41, + 4,122,63,70,105,110,100,32,116,104,101,32,108,111,97,100, + 101,114,32,111,114,32,110,97,109,101,115,112,97,99,101,95, + 112,97,116,104,32,102,111,114,32,116,104,105,115,32,109,111, + 100,117,108,101,47,112,97,99,107,97,103,101,32,110,97,109, + 101,46,78,114,203,0,0,0,122,19,115,112,101,99,32,109, + 105,115,115,105,110,103,32,108,111,97,100,101,114,41,13,114, + 161,0,0,0,114,85,0,0,0,218,5,98,121,116,101,115, + 114,54,1,0,0,114,128,0,0,0,114,203,0,0,0,114, + 55,1,0,0,114,140,0,0,0,114,178,0,0,0,114,118, + 0,0,0,114,167,0,0,0,114,134,0,0,0,114,183,0, + 0,0,41,9,114,193,0,0,0,114,139,0,0,0,114,44, + 0,0,0,114,202,0,0,0,218,14,110,97,109,101,115,112, + 97,99,101,95,112,97,116,104,90,5,101,110,116,114,121,114, + 50,1,0,0,114,187,0,0,0,114,141,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,9,95, + 103,101,116,95,115,112,101,99,13,5,0,0,115,40,0,0, + 0,0,5,4,1,8,1,14,1,2,1,10,1,8,1,10, + 1,14,2,12,1,8,1,2,1,10,1,8,1,6,1,8, + 1,8,5,12,2,12,1,6,1,122,20,80,97,116,104,70, + 105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 5,0,0,0,67,0,0,0,115,100,0,0,0,124,2,100, + 1,107,8,114,14,116,0,106,1,125,2,124,0,160,2,124, + 1,124,2,124,3,161,3,125,4,124,4,100,1,107,8,114, + 40,100,1,83,0,124,4,106,3,100,1,107,8,114,92,124, + 4,106,4,125,5,124,5,114,86,100,1,124,4,95,5,116, + 6,124,1,124,5,124,0,106,2,131,3,124,4,95,4,124, + 4,83,0,100,1,83,0,110,4,124,4,83,0,100,1,83, + 0,41,2,122,141,84,114,121,32,116,111,32,102,105,110,100, + 32,97,32,115,112,101,99,32,102,111,114,32,39,102,117,108, + 108,110,97,109,101,39,32,111,110,32,115,121,115,46,112,97, + 116,104,32,111,114,32,39,112,97,116,104,39,46,10,10,32, + 32,32,32,32,32,32,32,84,104,101,32,115,101,97,114,99, + 104,32,105,115,32,98,97,115,101,100,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, - 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, - 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, - 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, - 100,32,99,97,99,104,101,32,105,116,46,32,73,102,32,110, - 111,32,102,105,110,100,101,114,32,105,115,32,97,118,97,105, - 108,97,98,108,101,44,32,115,116,111,114,101,32,78,111,110, - 101,46,10,10,32,32,32,32,32,32,32,32,114,40,0,0, - 0,78,41,7,114,2,0,0,0,114,55,0,0,0,114,2, - 1,0,0,114,8,0,0,0,114,48,1,0,0,218,8,75, - 101,121,69,114,114,111,114,114,52,1,0,0,41,3,114,193, - 0,0,0,114,44,0,0,0,114,50,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,20,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,232,4,0,0,115,22,0,0,0,0,8,8,1,2, - 1,12,1,14,3,8,1,2,1,14,1,14,1,10,1,16, - 1,122,31,80,97,116,104,70,105,110,100,101,114,46,95,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,99,3,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,4,0,0,0,67,0,0,0,115,82,0,0,0, - 116,0,124,2,100,1,131,2,114,26,124,2,160,1,124,1, - 161,1,92,2,125,3,125,4,110,14,124,2,160,2,124,1, - 161,1,125,3,103,0,125,4,124,3,100,0,107,9,114,60, - 116,3,160,4,124,1,124,3,161,2,83,0,116,3,160,5, - 124,1,100,0,161,2,125,5,124,4,124,5,95,6,124,5, - 83,0,41,2,78,114,137,0,0,0,41,7,114,128,0,0, - 0,114,137,0,0,0,114,206,0,0,0,114,134,0,0,0, - 114,201,0,0,0,114,183,0,0,0,114,178,0,0,0,41, - 6,114,193,0,0,0,114,139,0,0,0,114,50,1,0,0, - 114,140,0,0,0,114,141,0,0,0,114,187,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,16, - 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, - 254,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,99,78,99,4,0,0,0,0,0, - 0,0,0,0,0,0,9,0,0,0,5,0,0,0,67,0, - 0,0,115,166,0,0,0,103,0,125,4,124,2,68,0,93, - 134,125,5,116,0,124,5,116,1,116,2,102,2,131,2,115, - 28,113,8,124,0,160,3,124,5,161,1,125,6,124,6,100, - 1,107,9,114,8,116,4,124,6,100,2,131,2,114,70,124, - 6,160,5,124,1,124,3,161,2,125,7,110,12,124,0,160, - 6,124,1,124,6,161,2,125,7,124,7,100,1,107,8,114, - 92,113,8,124,7,106,7,100,1,107,9,114,110,124,7,2, - 0,1,0,83,0,124,7,106,8,125,8,124,8,100,1,107, - 8,114,132,116,9,100,3,131,1,130,1,124,4,160,10,124, - 8,161,1,1,0,113,8,116,11,160,12,124,1,100,1,161, - 2,125,7,124,4,124,7,95,8,124,7,83,0,41,4,122, - 63,70,105,110,100,32,116,104,101,32,108,111,97,100,101,114, - 32,111,114,32,110,97,109,101,115,112,97,99,101,95,112,97, - 116,104,32,102,111,114,32,116,104,105,115,32,109,111,100,117, - 108,101,47,112,97,99,107,97,103,101,32,110,97,109,101,46, - 78,114,203,0,0,0,122,19,115,112,101,99,32,109,105,115, - 115,105,110,103,32,108,111,97,100,101,114,41,13,114,161,0, - 0,0,114,85,0,0,0,218,5,98,121,116,101,115,114,54, - 1,0,0,114,128,0,0,0,114,203,0,0,0,114,55,1, - 0,0,114,140,0,0,0,114,178,0,0,0,114,118,0,0, - 0,114,167,0,0,0,114,134,0,0,0,114,183,0,0,0, - 41,9,114,193,0,0,0,114,139,0,0,0,114,44,0,0, - 0,114,202,0,0,0,218,14,110,97,109,101,115,112,97,99, - 101,95,112,97,116,104,90,5,101,110,116,114,121,114,50,1, - 0,0,114,187,0,0,0,114,141,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,9,95,103,101, - 116,95,115,112,101,99,13,5,0,0,115,40,0,0,0,0, - 5,4,1,8,1,14,1,2,1,10,1,8,1,10,1,14, - 2,12,1,8,1,2,1,10,1,8,1,6,1,8,1,8, - 5,12,2,12,1,6,1,122,20,80,97,116,104,70,105,110, - 100,101,114,46,95,103,101,116,95,115,112,101,99,99,4,0, - 0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0, - 0,0,67,0,0,0,115,100,0,0,0,124,2,100,1,107, - 8,114,14,116,0,106,1,125,2,124,0,160,2,124,1,124, - 2,124,3,161,3,125,4,124,4,100,1,107,8,114,40,100, - 1,83,0,124,4,106,3,100,1,107,8,114,92,124,4,106, - 4,125,5,124,5,114,86,100,1,124,4,95,5,116,6,124, - 1,124,5,124,0,106,2,131,3,124,4,95,4,124,4,83, - 0,100,1,83,0,110,4,124,4,83,0,100,1,83,0,41, - 2,122,141,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,115,112,101,99,32,102,111,114,32,39,102,117,108,108,110, - 97,109,101,39,32,111,110,32,115,121,115,46,112,97,116,104, - 32,111,114,32,39,112,97,116,104,39,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,115,101,97,114,99,104,32, - 105,115,32,98,97,115,101,100,32,111,110,32,115,121,115,46, - 112,97,116,104,95,104,111,111,107,115,32,97,110,100,32,115, + 101,114,95,99,97,99,104,101,46,10,32,32,32,32,32,32, + 32,32,78,41,7,114,8,0,0,0,114,44,0,0,0,114, + 58,1,0,0,114,140,0,0,0,114,178,0,0,0,114,181, + 0,0,0,114,22,1,0,0,41,6,114,193,0,0,0,114, + 139,0,0,0,114,44,0,0,0,114,202,0,0,0,114,187, + 0,0,0,114,57,1,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,203,0,0,0,45,5,0,0, + 115,26,0,0,0,0,6,8,1,6,1,14,1,8,1,4, + 1,10,1,6,1,4,3,6,1,16,1,4,2,6,2,122, + 20,80,97,116,104,70,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,30, + 0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,124, + 3,100,1,107,8,114,24,100,1,83,0,124,3,106,1,83, + 0,41,2,122,170,102,105,110,100,32,116,104,101,32,109,111, + 100,117,108,101,32,111,110,32,115,121,115,46,112,97,116,104, + 32,111,114,32,39,112,97,116,104,39,32,98,97,115,101,100, + 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,97,110,100,10,32,32,32,32,32,32,32,32,115, 121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,114, - 95,99,97,99,104,101,46,10,32,32,32,32,32,32,32,32, - 78,41,7,114,8,0,0,0,114,44,0,0,0,114,58,1, - 0,0,114,140,0,0,0,114,178,0,0,0,114,181,0,0, - 0,114,22,1,0,0,41,6,114,193,0,0,0,114,139,0, - 0,0,114,44,0,0,0,114,202,0,0,0,114,187,0,0, - 0,114,57,1,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,203,0,0,0,45,5,0,0,115,26, - 0,0,0,0,6,8,1,6,1,14,1,8,1,4,1,10, - 1,6,1,4,3,6,1,16,1,4,2,6,2,122,20,80, - 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,3,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,4,0,0,0,67,0,0,0,115,30,0,0, - 0,124,0,160,0,124,1,124,2,161,2,125,3,124,3,100, - 1,107,8,114,24,100,1,83,0,124,3,106,1,83,0,41, - 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, - 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,114,204, - 0,0,0,114,205,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,206,0,0,0,69,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,1,78,41,2,78,78,41,1,78,41, - 12,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, + 95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, + 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, + 114,204,0,0,0,114,205,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,206,0,0,0,69,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,122,32,123,112,97,116,116,101,114, + 110,125,40,45,46,42,41,63,92,46,40,100,105,115,116,124, + 101,103,103,41,45,105,110,102,111,99,3,0,0,0,0,0, + 0,0,0,0,0,0,7,0,0,0,4,0,0,0,67,0, + 0,0,115,78,0,0,0,100,1,100,2,108,0,125,3,100, + 1,100,3,108,1,109,2,125,4,1,0,124,2,100,2,107, + 8,114,34,116,3,106,4,125,2,124,1,100,2,107,8,114, + 46,100,4,110,8,124,3,160,5,124,1,161,1,125,5,124, + 0,160,6,124,5,124,2,161,2,125,6,116,7,124,4,124, + 6,131,2,83,0,41,5,122,251,82,101,116,117,114,110,32, + 97,110,32,105,116,101,114,97,98,108,101,32,111,102,32,97, + 108,108,32,68,105,115,116,114,105,98,117,116,105,111,110,32, + 105,110,115,116,97,110,99,101,115,32,99,97,112,97,98,108, + 101,32,111,102,10,32,32,32,32,32,32,32,32,108,111,97, + 100,105,110,103,32,116,104,101,32,109,101,116,97,100,97,116, + 97,32,102,111,114,32,112,97,99,107,97,103,101,115,32,109, + 97,116,99,104,105,110,103,32,116,104,101,32,110,97,109,101, + 10,32,32,32,32,32,32,32,32,40,111,114,32,97,108,108, + 32,110,97,109,101,115,32,105,102,32,110,111,116,32,115,117, + 112,112,108,105,101,100,41,32,97,108,111,110,103,32,116,104, + 101,32,112,97,116,104,115,32,105,110,32,116,104,101,32,108, + 105,115,116,10,32,32,32,32,32,32,32,32,111,102,32,100, + 105,114,101,99,116,111,114,105,101,115,32,96,96,112,97,116, + 104,96,96,32,40,100,101,102,97,117,108,116,115,32,116,111, + 32,115,121,115,46,112,97,116,104,41,46,10,32,32,32,32, + 32,32,32,32,114,73,0,0,0,78,41,1,218,16,80,97, + 116,104,68,105,115,116,114,105,98,117,116,105,111,110,122,2, + 46,42,41,8,218,2,114,101,90,25,105,109,112,111,114,116, + 108,105,98,46,109,101,116,97,100,97,116,97,46,95,104,111, + 111,107,115,114,59,1,0,0,114,8,0,0,0,114,44,0, + 0,0,90,6,101,115,99,97,112,101,218,13,95,115,101,97, + 114,99,104,95,112,97,116,104,115,218,3,109,97,112,41,7, + 114,193,0,0,0,114,117,0,0,0,114,44,0,0,0,114, + 60,1,0,0,114,59,1,0,0,218,7,112,97,116,116,101, + 114,110,90,5,102,111,117,110,100,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,18,102,105,110,100,95,100, + 105,115,116,114,105,98,117,116,105,111,110,115,84,5,0,0, + 115,14,0,0,0,0,7,8,1,12,1,8,1,6,1,22, + 1,12,1,122,29,80,97,116,104,70,105,110,100,101,114,46, + 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, + 110,115,99,3,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,6,0,0,0,3,0,0,0,115,44,0,0,0, + 100,1,100,2,108,0,125,3,124,3,106,1,160,2,135,0, + 135,1,102,2,100,3,100,4,132,8,116,3,136,0,106,4, + 124,2,131,2,68,0,131,1,161,1,83,0,41,5,122,67, + 10,32,32,32,32,32,32,32,32,70,105,110,100,32,109,101, + 116,97,100,97,116,97,32,100,105,114,101,99,116,111,114,105, + 101,115,32,105,110,32,112,97,116,104,115,32,104,101,117,114, + 105,115,116,105,99,97,108,108,121,46,10,32,32,32,32,32, + 32,32,32,114,73,0,0,0,78,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,5,0,0,0,51,0, + 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,160, + 0,124,1,136,1,161,2,86,0,1,0,113,2,100,0,83, + 0,114,110,0,0,0,41,1,218,12,95,115,101,97,114,99, + 104,95,112,97,116,104,41,2,114,32,0,0,0,114,44,0, + 0,0,169,2,114,193,0,0,0,114,63,1,0,0,114,3, + 0,0,0,114,6,0,0,0,114,19,1,0,0,105,5,0, + 0,115,4,0,0,0,4,2,2,255,122,43,80,97,116,104, + 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, + 97,116,104,115,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,41,5,218,9,105,116,101,114,116, + 111,111,108,115,90,5,99,104,97,105,110,90,13,102,114,111, + 109,95,105,116,101,114,97,98,108,101,114,62,1,0,0,218, + 12,95,115,119,105,116,99,104,95,112,97,116,104,41,4,114, + 193,0,0,0,114,63,1,0,0,90,5,112,97,116,104,115, + 114,67,1,0,0,114,3,0,0,0,114,66,1,0,0,114, + 6,0,0,0,114,61,1,0,0,99,5,0,0,115,8,0, + 0,0,0,5,8,1,18,2,10,254,122,24,80,97,116,104, + 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, + 97,116,104,115,99,1,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,10,0,0,0,67,0,0,0,115,76,0, + 0,0,100,1,100,2,108,0,109,1,125,1,1,0,100,1, + 100,0,108,2,125,2,100,1,100,0,108,3,125,3,124,1, + 116,4,131,1,143,24,1,0,124,2,160,5,124,0,161,1, + 87,0,2,0,53,0,81,0,82,0,163,0,83,0,81,0, + 82,0,88,0,124,3,160,5,124,0,161,1,83,0,41,3, + 78,114,73,0,0,0,41,1,218,8,115,117,112,112,114,101, + 115,115,41,6,90,10,99,111,110,116,101,120,116,108,105,98, + 114,69,1,0,0,218,7,122,105,112,102,105,108,101,218,7, + 112,97,116,104,108,105,98,218,9,69,120,99,101,112,116,105, + 111,110,90,4,80,97,116,104,41,4,114,44,0,0,0,114, + 69,1,0,0,114,70,1,0,0,114,71,1,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,68,1, + 0,0,110,5,0,0,115,12,0,0,0,0,2,12,1,8, + 1,8,1,10,1,28,1,122,23,80,97,116,104,70,105,110, + 100,101,114,46,95,115,119,105,116,99,104,95,112,97,116,104, + 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,5,0,0,0,67,0,0,0,115,32,0,0,0,100,1, + 100,0,108,0,125,4,124,4,106,1,124,1,116,2,124,3, + 106,3,131,1,124,4,106,4,100,2,141,3,83,0,41,3, + 78,114,73,0,0,0,41,1,114,83,0,0,0,41,5,114, + 60,1,0,0,90,5,109,97,116,99,104,114,85,0,0,0, + 114,117,0,0,0,90,10,73,71,78,79,82,69,67,65,83, + 69,41,5,114,193,0,0,0,114,63,1,0,0,218,4,114, + 111,111,116,114,41,1,0,0,114,60,1,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,218,10,95,112, + 114,101,100,105,99,97,116,101,119,5,0,0,115,4,0,0, + 0,0,2,8,1,122,21,80,97,116,104,70,105,110,100,101, + 114,46,95,112,114,101,100,105,99,97,116,101,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,3,0,0,0,115,64,0,0,0,136,2,160,0,161,0, + 115,12,100,1,83,0,124,2,160,1,100,2,100,3,161,2, + 125,3,136,0,106,2,106,3,124,3,100,4,141,1,137,1, + 135,0,135,1,135,2,102,3,100,5,100,6,132,8,136,2, + 160,4,161,0,68,0,131,1,83,0,41,7,78,114,3,0, + 0,0,250,1,45,114,45,0,0,0,41,1,114,63,1,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,6,0,0,0,51,0,0,0,115,32,0,0,0,124, + 0,93,24,125,1,136,0,160,0,136,1,136,2,124,1,161, + 3,114,26,124,1,86,0,1,0,113,2,100,0,83,0,114, + 110,0,0,0,41,1,114,74,1,0,0,41,2,114,32,0, + 0,0,114,41,1,0,0,169,3,114,193,0,0,0,90,7, + 109,97,116,99,104,101,114,114,73,1,0,0,114,3,0,0, + 0,114,6,0,0,0,114,19,1,0,0,130,5,0,0,115, + 6,0,0,0,4,0,2,1,14,255,122,42,80,97,116,104, + 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, + 97,116,104,46,60,108,111,99,97,108,115,62,46,60,103,101, + 110,101,120,112,114,62,41,5,90,6,105,115,95,100,105,114, + 114,67,0,0,0,218,15,115,101,97,114,99,104,95,116,101, + 109,112,108,97,116,101,114,62,0,0,0,90,7,105,116,101, + 114,100,105,114,41,4,114,193,0,0,0,114,73,1,0,0, + 114,63,1,0,0,90,10,110,111,114,109,97,108,105,122,101, + 100,114,3,0,0,0,114,76,1,0,0,114,6,0,0,0, + 114,65,1,0,0,124,5,0,0,115,10,0,0,0,0,2, + 8,1,4,1,12,1,14,1,122,23,80,97,116,104,70,105, + 110,100,101,114,46,95,115,101,97,114,99,104,95,112,97,116, + 104,41,1,78,41,2,78,78,41,1,78,41,2,78,78,41, + 19,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, 114,127,0,0,0,114,207,0,0,0,114,46,1,0,0,114, 52,1,0,0,114,54,1,0,0,114,55,1,0,0,114,58, - 1,0,0,114,203,0,0,0,114,206,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,45,1,0,0,205,4,0,0,115,30,0,0,0,8, - 2,4,2,2,1,10,9,2,1,10,12,2,1,10,21,2, - 1,10,14,2,1,12,31,2,1,12,23,2,1,114,45,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,64,0,0,0,115,90,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,101,6,90,7, - 100,6,100,7,132,0,90,8,100,8,100,9,132,0,90,9, - 100,19,100,11,100,12,132,1,90,10,100,13,100,14,132,0, - 90,11,101,12,100,15,100,16,132,0,131,1,90,13,100,17, - 100,18,132,0,90,14,100,10,83,0,41,20,218,10,70,105, - 108,101,70,105,110,100,101,114,122,172,70,105,108,101,45,98, - 97,115,101,100,32,102,105,110,100,101,114,46,10,10,32,32, - 32,32,73,110,116,101,114,97,99,116,105,111,110,115,32,119, - 105,116,104,32,116,104,101,32,102,105,108,101,32,115,121,115, - 116,101,109,32,97,114,101,32,99,97,99,104,101,100,32,102, - 111,114,32,112,101,114,102,111,114,109,97,110,99,101,44,32, - 98,101,105,110,103,10,32,32,32,32,114,101,102,114,101,115, - 104,101,100,32,119,104,101,110,32,116,104,101,32,100,105,114, - 101,99,116,111,114,121,32,116,104,101,32,102,105,110,100,101, - 114,32,105,115,32,104,97,110,100,108,105,110,103,32,104,97, - 115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,46, - 10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,115, - 84,0,0,0,103,0,125,3,124,2,68,0,93,32,92,2, - 137,0,125,4,124,3,160,0,135,0,102,1,100,1,100,2, - 132,8,124,4,68,0,131,1,161,1,1,0,113,8,124,3, - 124,0,95,1,124,1,112,54,100,3,124,0,95,2,100,4, - 124,0,95,3,116,4,131,0,124,0,95,5,116,4,131,0, - 124,0,95,6,100,5,83,0,41,6,122,154,73,110,105,116, - 105,97,108,105,122,101,32,119,105,116,104,32,116,104,101,32, - 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, - 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, - 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, - 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, - 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, - 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, - 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, - 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, - 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,51,0,0,0,115, - 22,0,0,0,124,0,93,14,125,1,124,1,136,0,102,2, - 86,0,1,0,113,2,100,0,83,0,114,110,0,0,0,114, - 3,0,0,0,114,16,1,0,0,169,1,114,140,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,98, - 5,0,0,115,4,0,0,0,4,0,2,0,122,38,70,105, - 108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,95, - 95,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, - 120,112,114,62,114,71,0,0,0,114,105,0,0,0,78,41, - 7,114,167,0,0,0,218,8,95,108,111,97,100,101,114,115, - 114,44,0,0,0,218,11,95,112,97,116,104,95,109,116,105, - 109,101,218,3,115,101,116,218,11,95,112,97,116,104,95,99, - 97,99,104,101,218,19,95,114,101,108,97,120,101,100,95,112, - 97,116,104,95,99,97,99,104,101,41,5,114,119,0,0,0, - 114,44,0,0,0,218,14,108,111,97,100,101,114,95,100,101, - 116,97,105,108,115,90,7,108,111,97,100,101,114,115,114,189, - 0,0,0,114,3,0,0,0,114,60,1,0,0,114,6,0, - 0,0,114,209,0,0,0,92,5,0,0,115,16,0,0,0, - 0,4,4,1,12,1,26,1,6,2,10,1,6,1,8,1, - 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,105, - 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,10, - 0,0,0,100,1,124,0,95,0,100,2,83,0,41,3,122, - 31,73,110,118,97,108,105,100,97,116,101,32,116,104,101,32, - 100,105,114,101,99,116,111,114,121,32,109,116,105,109,101,46, - 114,105,0,0,0,78,41,1,114,62,1,0,0,114,246,0, + 1,0,0,114,203,0,0,0,114,206,0,0,0,114,77,1, + 0,0,114,64,1,0,0,114,61,1,0,0,218,12,115,116, + 97,116,105,99,109,101,116,104,111,100,114,68,1,0,0,114, + 74,1,0,0,114,65,1,0,0,114,3,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,45,1, + 0,0,205,4,0,0,115,52,0,0,0,8,2,4,2,2, + 1,10,9,2,1,10,12,2,1,10,21,2,1,10,14,2, + 1,12,31,2,1,12,23,2,1,12,12,4,2,2,1,12, + 14,2,1,10,10,2,1,10,8,2,1,10,4,2,1,114, + 45,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,64,0,0,0,115,90,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,101,6, + 90,7,100,6,100,7,132,0,90,8,100,8,100,9,132,0, + 90,9,100,19,100,11,100,12,132,1,90,10,100,13,100,14, + 132,0,90,11,101,12,100,15,100,16,132,0,131,1,90,13, + 100,17,100,18,132,0,90,14,100,10,83,0,41,20,218,10, + 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, + 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, + 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, + 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, + 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, + 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, + 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, + 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, + 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, + 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, + 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,6,0,0,0,7,0,0, + 0,115,84,0,0,0,103,0,125,3,124,2,68,0,93,32, + 92,2,137,0,125,4,124,3,160,0,135,0,102,1,100,1, + 100,2,132,8,124,4,68,0,131,1,161,1,1,0,113,8, + 124,3,124,0,95,1,124,1,112,54,100,3,124,0,95,2, + 100,4,124,0,95,3,116,4,131,0,124,0,95,5,116,4, + 131,0,124,0,95,6,100,5,83,0,41,6,122,154,73,110, + 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, + 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, + 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, + 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, + 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, + 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, + 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, + 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, + 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, + 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,51,0,0, + 0,115,22,0,0,0,124,0,93,14,125,1,124,1,136,0, + 102,2,86,0,1,0,113,2,100,0,83,0,114,110,0,0, + 0,114,3,0,0,0,114,16,1,0,0,169,1,114,140,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,19,1,0, + 0,149,5,0,0,115,4,0,0,0,4,0,2,0,122,38, + 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, + 116,95,95,46,60,108,111,99,97,108,115,62,46,60,103,101, + 110,101,120,112,114,62,114,71,0,0,0,114,105,0,0,0, + 78,41,7,114,167,0,0,0,218,8,95,108,111,97,100,101, + 114,115,114,44,0,0,0,218,11,95,112,97,116,104,95,109, + 116,105,109,101,218,3,115,101,116,218,11,95,112,97,116,104, + 95,99,97,99,104,101,218,19,95,114,101,108,97,120,101,100, + 95,112,97,116,104,95,99,97,99,104,101,41,5,114,119,0, + 0,0,114,44,0,0,0,218,14,108,111,97,100,101,114,95, + 100,101,116,97,105,108,115,90,7,108,111,97,100,101,114,115, + 114,189,0,0,0,114,3,0,0,0,114,80,1,0,0,114, + 6,0,0,0,114,209,0,0,0,143,5,0,0,115,16,0, + 0,0,0,4,4,1,12,1,26,1,6,2,10,1,6,1, + 8,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, + 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, + 115,10,0,0,0,100,1,124,0,95,0,100,2,83,0,41, + 3,122,31,73,110,118,97,108,105,100,97,116,101,32,116,104, + 101,32,100,105,114,101,99,116,111,114,121,32,109,116,105,109, + 101,46,114,105,0,0,0,78,41,1,114,82,1,0,0,114, + 246,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,46,1,0,0,157,5,0,0,115,2,0,0, + 0,0,2,122,28,70,105,108,101,70,105,110,100,101,114,46, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,42,0,0,0,124, + 0,160,0,124,1,161,1,125,2,124,2,100,1,107,8,114, + 26,100,1,103,0,102,2,83,0,124,2,106,1,124,2,106, + 2,112,38,103,0,102,2,83,0,41,2,122,197,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, + 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, + 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, + 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, + 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, + 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, + 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,78,41,3,114,203,0,0,0,114,140,0,0,0,114, + 178,0,0,0,41,3,114,119,0,0,0,114,139,0,0,0, + 114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,137,0,0,0,163,5,0,0,115,8,0, + 0,0,0,7,10,1,8,1,8,1,122,22,70,105,108,101, + 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, + 101,114,99,6,0,0,0,0,0,0,0,0,0,0,0,7, + 0,0,0,6,0,0,0,67,0,0,0,115,26,0,0,0, + 124,1,124,2,124,3,131,2,125,6,116,0,124,2,124,3, + 124,6,124,4,100,1,141,4,83,0,41,2,78,114,177,0, + 0,0,41,1,114,190,0,0,0,41,7,114,119,0,0,0, + 114,188,0,0,0,114,139,0,0,0,114,44,0,0,0,90, + 4,115,109,115,108,114,202,0,0,0,114,140,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,58, + 1,0,0,175,5,0,0,115,8,0,0,0,0,1,10,1, + 8,1,2,255,122,20,70,105,108,101,70,105,110,100,101,114, + 46,95,103,101,116,95,115,112,101,99,78,99,3,0,0,0, + 0,0,0,0,0,0,0,0,14,0,0,0,8,0,0,0, + 67,0,0,0,115,102,1,0,0,100,1,125,3,124,1,160, + 0,100,2,161,1,100,3,25,0,125,4,122,24,116,1,124, + 0,106,2,112,34,116,3,160,4,161,0,131,1,106,5,125, + 5,87,0,110,24,4,0,116,6,107,10,114,66,1,0,1, + 0,1,0,100,4,125,5,89,0,110,2,88,0,124,5,124, + 0,106,7,107,3,114,92,124,0,160,8,161,0,1,0,124, + 5,124,0,95,7,116,9,131,0,114,114,124,0,106,10,125, + 6,124,4,160,11,161,0,125,7,110,10,124,0,106,12,125, + 6,124,4,125,7,124,7,124,6,107,6,114,218,116,13,124, + 0,106,2,124,4,131,2,125,8,124,0,106,14,68,0,93, + 58,92,2,125,9,125,10,100,5,124,9,23,0,125,11,116, + 13,124,8,124,11,131,2,125,12,116,15,124,12,131,1,114, + 208,124,0,160,16,124,10,124,1,124,12,124,8,103,1,124, + 2,161,5,2,0,1,0,83,0,113,150,116,17,124,8,131, + 1,125,3,124,0,106,14,68,0,93,86,92,2,125,9,125, + 10,116,13,124,0,106,2,124,4,124,9,23,0,131,2,125, + 12,116,18,106,19,100,6,124,12,100,3,100,7,141,3,1, + 0,124,7,124,9,23,0,124,6,107,6,144,1,114,54,116, + 15,124,12,131,1,144,1,114,54,124,0,160,16,124,10,124, + 1,124,12,100,8,124,2,161,5,2,0,1,0,83,0,113, + 224,124,3,144,1,114,98,116,18,160,19,100,9,124,8,161, + 2,1,0,116,18,160,20,124,1,100,8,161,2,125,13,124, + 8,103,1,124,13,95,21,124,13,83,0,100,8,83,0,41, + 10,122,111,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,115,112,101,99,32,102,111,114,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,117,108,101,46,10, + 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,115, + 32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,112, + 101,99,44,32,111,114,32,78,111,110,101,32,105,102,32,110, + 111,116,32,102,111,117,110,100,46,10,32,32,32,32,32,32, + 32,32,70,114,71,0,0,0,114,28,0,0,0,114,105,0, + 0,0,114,209,0,0,0,122,9,116,114,121,105,110,103,32, + 123,125,41,1,90,9,118,101,114,98,111,115,105,116,121,78, + 122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115, + 112,97,99,101,32,102,111,114,32,123,125,41,22,114,41,0, + 0,0,114,49,0,0,0,114,44,0,0,0,114,2,0,0, + 0,114,55,0,0,0,114,9,1,0,0,114,50,0,0,0, + 114,82,1,0,0,218,11,95,102,105,108,108,95,99,97,99, + 104,101,114,7,0,0,0,114,85,1,0,0,114,106,0,0, + 0,114,84,1,0,0,114,38,0,0,0,114,81,1,0,0, + 114,54,0,0,0,114,58,1,0,0,114,56,0,0,0,114, + 134,0,0,0,114,149,0,0,0,114,183,0,0,0,114,178, + 0,0,0,41,14,114,119,0,0,0,114,139,0,0,0,114, + 202,0,0,0,90,12,105,115,95,110,97,109,101,115,112,97, + 99,101,90,11,116,97,105,108,95,109,111,100,117,108,101,114, + 169,0,0,0,90,5,99,97,99,104,101,90,12,99,97,99, + 104,101,95,109,111,100,117,108,101,90,9,98,97,115,101,95, + 112,97,116,104,114,17,1,0,0,114,188,0,0,0,90,13, + 105,110,105,116,95,102,105,108,101,110,97,109,101,90,9,102, + 117,108,108,95,112,97,116,104,114,187,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,203,0,0, + 0,180,5,0,0,115,74,0,0,0,0,5,4,1,14,1, + 2,1,24,1,14,1,10,1,10,1,8,1,6,2,6,1, + 6,1,10,2,6,1,4,2,8,1,12,1,14,1,8,1, + 10,1,8,1,26,4,8,2,14,1,16,1,16,1,14,1, + 10,1,10,1,2,0,2,255,10,2,6,1,12,1,12,1, + 8,1,4,1,122,20,70,105,108,101,70,105,110,100,101,114, + 46,102,105,110,100,95,115,112,101,99,99,1,0,0,0,0, + 0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,67, + 0,0,0,115,190,0,0,0,124,0,106,0,125,1,122,22, + 116,1,160,2,124,1,112,22,116,1,160,3,161,0,161,1, + 125,2,87,0,110,30,4,0,116,4,116,5,116,6,102,3, + 107,10,114,58,1,0,1,0,1,0,103,0,125,2,89,0, + 110,2,88,0,116,7,106,8,160,9,100,1,161,1,115,84, + 116,10,124,2,131,1,124,0,95,11,110,74,116,10,131,0, + 125,3,124,2,68,0,93,56,125,4,124,4,160,12,100,2, + 161,1,92,3,125,5,125,6,125,7,124,6,114,136,100,3, + 160,13,124,5,124,7,160,14,161,0,161,2,125,8,110,4, + 124,5,125,8,124,3,160,15,124,8,161,1,1,0,113,94, + 124,3,124,0,95,11,116,7,106,8,160,9,116,16,161,1, + 114,186,100,4,100,5,132,0,124,2,68,0,131,1,124,0, + 95,17,100,6,83,0,41,7,122,68,70,105,108,108,32,116, + 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, + 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, + 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, + 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,0, + 0,0,0,114,71,0,0,0,114,61,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, + 0,0,83,0,0,0,115,20,0,0,0,104,0,124,0,93, + 12,125,1,124,1,160,0,161,0,146,2,113,4,83,0,114, + 3,0,0,0,41,1,114,106,0,0,0,41,2,114,32,0, + 0,0,90,2,102,110,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,9,60,115,101,116,99,111,109,112,62, + 1,6,0,0,115,4,0,0,0,6,0,2,0,122,41,70, + 105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,95, + 99,97,99,104,101,46,60,108,111,99,97,108,115,62,46,60, + 115,101,116,99,111,109,112,62,78,41,18,114,44,0,0,0, + 114,2,0,0,0,114,6,1,0,0,114,55,0,0,0,114, + 2,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,8,0,0,0,114,9, + 0,0,0,114,10,0,0,0,114,83,1,0,0,114,84,1, + 0,0,114,101,0,0,0,114,62,0,0,0,114,106,0,0, + 0,218,3,97,100,100,114,11,0,0,0,114,85,1,0,0, + 41,9,114,119,0,0,0,114,44,0,0,0,114,7,1,0, + 0,90,21,108,111,119,101,114,95,115,117,102,102,105,120,95, + 99,111,110,116,101,110,116,115,114,41,1,0,0,114,117,0, + 0,0,114,29,1,0,0,114,17,1,0,0,90,8,110,101, + 119,95,110,97,109,101,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,87,1,0,0,228,5,0,0,115,34, + 0,0,0,0,2,6,1,2,1,22,1,20,3,10,3,12, + 1,12,7,6,1,8,1,16,1,4,1,18,2,4,1,12, + 1,6,1,12,1,122,22,70,105,108,101,70,105,110,100,101, + 114,46,95,102,105,108,108,95,99,97,99,104,101,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,7,0,0,0,115,18,0,0,0,135,0,135,1,102, + 2,100,1,100,2,132,8,125,2,124,2,83,0,41,3,97, + 20,1,0,0,65,32,99,108,97,115,115,32,109,101,116,104, + 111,100,32,119,104,105,99,104,32,114,101,116,117,114,110,115, + 32,97,32,99,108,111,115,117,114,101,32,116,111,32,117,115, + 101,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,10,32,32,32,32,32,32,32,32,119,104,105,99,104, + 32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32, + 105,110,115,116,97,110,99,101,32,117,115,105,110,103,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,108,111,97, + 100,101,114,115,32,97,110,100,32,116,104,101,32,112,97,116, + 104,10,32,32,32,32,32,32,32,32,99,97,108,108,101,100, + 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, + 32,112,97,116,104,32,99,97,108,108,101,100,32,111,110,32, + 116,104,101,32,99,108,111,115,117,114,101,32,105,115,32,110, + 111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32, + 73,109,112,111,114,116,69,114,114,111,114,32,105,115,10,32, + 32,32,32,32,32,32,32,114,97,105,115,101,100,46,10,10, + 32,32,32,32,32,32,32,32,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,19,0,0, + 0,115,34,0,0,0,116,0,124,0,131,1,115,20,116,1, + 100,1,124,0,100,2,141,2,130,1,136,0,124,0,102,1, + 136,1,158,2,142,0,83,0,41,3,122,45,80,97,116,104, + 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, + 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, + 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, + 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, + 115,117,112,112,111,114,116,101,100,114,48,0,0,0,41,2, + 114,56,0,0,0,114,118,0,0,0,114,48,0,0,0,169, + 2,114,193,0,0,0,114,86,1,0,0,114,3,0,0,0, + 114,6,0,0,0,218,24,112,97,116,104,95,104,111,111,107, + 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,13, + 6,0,0,115,6,0,0,0,0,2,8,1,12,1,122,54, + 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, + 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,114,3,0,0,0,41,3,114,193,0, + 0,0,114,86,1,0,0,114,93,1,0,0,114,3,0,0, + 0,114,92,1,0,0,114,6,0,0,0,218,9,112,97,116, + 104,95,104,111,111,107,3,6,0,0,115,4,0,0,0,0, + 10,14,6,122,20,70,105,108,101,70,105,110,100,101,114,46, + 112,97,116,104,95,104,111,111,107,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, + 0,0,115,12,0,0,0,100,1,160,0,124,0,106,1,161, + 1,83,0,41,2,78,122,16,70,105,108,101,70,105,110,100, + 101,114,40,123,33,114,125,41,41,2,114,62,0,0,0,114, + 44,0,0,0,114,246,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,39,1,0,0,21,6,0, + 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,114,101,112,114,95,95,41,1,78, + 41,15,114,125,0,0,0,114,124,0,0,0,114,126,0,0, + 0,114,127,0,0,0,114,209,0,0,0,114,46,1,0,0, + 114,143,0,0,0,114,206,0,0,0,114,137,0,0,0,114, + 58,1,0,0,114,203,0,0,0,114,87,1,0,0,114,207, + 0,0,0,114,94,1,0,0,114,39,1,0,0,114,3,0, 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,46,1,0,0,106,5,0,0,115,2,0,0,0,0, - 2,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,67,0,0,0,115,42,0,0,0,124,0,160, - 0,124,1,161,1,125,2,124,2,100,1,107,8,114,26,100, - 1,103,0,102,2,83,0,124,2,106,1,124,2,106,2,112, - 38,103,0,102,2,83,0,41,2,122,197,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, - 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, - 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, - 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, - 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, - 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,41,3,114,203,0,0,0,114,140,0,0,0,114,178,0, - 0,0,41,3,114,119,0,0,0,114,139,0,0,0,114,187, - 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,137,0,0,0,112,5,0,0,115,8,0,0,0, - 0,7,10,1,8,1,8,1,122,22,70,105,108,101,70,105, - 110,100,101,114,46,102,105,110,100,95,108,111,97,100,101,114, - 99,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,6,0,0,0,67,0,0,0,115,26,0,0,0,124,1, - 124,2,124,3,131,2,125,6,116,0,124,2,124,3,124,6, - 124,4,100,1,141,4,83,0,41,2,78,114,177,0,0,0, - 41,1,114,190,0,0,0,41,7,114,119,0,0,0,114,188, - 0,0,0,114,139,0,0,0,114,44,0,0,0,90,4,115, - 109,115,108,114,202,0,0,0,114,140,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,58,1,0, - 0,124,5,0,0,115,8,0,0,0,0,1,10,1,8,1, - 2,255,122,20,70,105,108,101,70,105,110,100,101,114,46,95, - 103,101,116,95,115,112,101,99,78,99,3,0,0,0,0,0, - 0,0,0,0,0,0,14,0,0,0,8,0,0,0,67,0, - 0,0,115,102,1,0,0,100,1,125,3,124,1,160,0,100, - 2,161,1,100,3,25,0,125,4,122,24,116,1,124,0,106, - 2,112,34,116,3,160,4,161,0,131,1,106,5,125,5,87, - 0,110,24,4,0,116,6,107,10,114,66,1,0,1,0,1, - 0,100,4,125,5,89,0,110,2,88,0,124,5,124,0,106, - 7,107,3,114,92,124,0,160,8,161,0,1,0,124,5,124, - 0,95,7,116,9,131,0,114,114,124,0,106,10,125,6,124, - 4,160,11,161,0,125,7,110,10,124,0,106,12,125,6,124, - 4,125,7,124,7,124,6,107,6,114,218,116,13,124,0,106, - 2,124,4,131,2,125,8,124,0,106,14,68,0,93,58,92, - 2,125,9,125,10,100,5,124,9,23,0,125,11,116,13,124, - 8,124,11,131,2,125,12,116,15,124,12,131,1,114,208,124, - 0,160,16,124,10,124,1,124,12,124,8,103,1,124,2,161, - 5,2,0,1,0,83,0,113,150,116,17,124,8,131,1,125, - 3,124,0,106,14,68,0,93,86,92,2,125,9,125,10,116, - 13,124,0,106,2,124,4,124,9,23,0,131,2,125,12,116, - 18,106,19,100,6,124,12,100,3,100,7,141,3,1,0,124, - 7,124,9,23,0,124,6,107,6,144,1,114,54,116,15,124, - 12,131,1,144,1,114,54,124,0,160,16,124,10,124,1,124, - 12,100,8,124,2,161,5,2,0,1,0,83,0,113,224,124, - 3,144,1,114,98,116,18,160,19,100,9,124,8,161,2,1, - 0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,103, - 1,124,13,95,21,124,13,83,0,100,8,83,0,41,10,122, - 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, - 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116, - 104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99, - 44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116, - 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, - 70,114,71,0,0,0,114,28,0,0,0,114,105,0,0,0, - 114,209,0,0,0,122,9,116,114,121,105,110,103,32,123,125, - 41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,25, - 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, - 99,101,32,102,111,114,32,123,125,41,22,114,41,0,0,0, - 114,49,0,0,0,114,44,0,0,0,114,2,0,0,0,114, - 55,0,0,0,114,9,1,0,0,114,50,0,0,0,114,62, - 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, - 114,7,0,0,0,114,65,1,0,0,114,106,0,0,0,114, - 64,1,0,0,114,38,0,0,0,114,61,1,0,0,114,54, - 0,0,0,114,58,1,0,0,114,56,0,0,0,114,134,0, - 0,0,114,149,0,0,0,114,183,0,0,0,114,178,0,0, - 0,41,14,114,119,0,0,0,114,139,0,0,0,114,202,0, - 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, - 90,11,116,97,105,108,95,109,111,100,117,108,101,114,169,0, - 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, - 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, - 116,104,114,17,1,0,0,114,188,0,0,0,90,13,105,110, - 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, - 108,95,112,97,116,104,114,187,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,203,0,0,0,129, - 5,0,0,115,74,0,0,0,0,5,4,1,14,1,2,1, - 24,1,14,1,10,1,10,1,8,1,6,2,6,1,6,1, - 10,2,6,1,4,2,8,1,12,1,14,1,8,1,10,1, - 8,1,26,4,8,2,14,1,16,1,16,1,14,1,10,1, - 10,1,2,0,2,255,10,2,6,1,12,1,12,1,8,1, - 4,1,122,20,70,105,108,101,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,1,0,0,0,0,0,0, - 0,0,0,0,0,9,0,0,0,10,0,0,0,67,0,0, - 0,115,190,0,0,0,124,0,106,0,125,1,122,22,116,1, - 160,2,124,1,112,22,116,1,160,3,161,0,161,1,125,2, - 87,0,110,30,4,0,116,4,116,5,116,6,102,3,107,10, - 114,58,1,0,1,0,1,0,103,0,125,2,89,0,110,2, - 88,0,116,7,106,8,160,9,100,1,161,1,115,84,116,10, - 124,2,131,1,124,0,95,11,110,74,116,10,131,0,125,3, - 124,2,68,0,93,56,125,4,124,4,160,12,100,2,161,1, - 92,3,125,5,125,6,125,7,124,6,114,136,100,3,160,13, - 124,5,124,7,160,14,161,0,161,2,125,8,110,4,124,5, - 125,8,124,3,160,15,124,8,161,1,1,0,113,94,124,3, - 124,0,95,11,116,7,106,8,160,9,116,16,161,1,114,186, - 100,4,100,5,132,0,124,2,68,0,131,1,124,0,95,17, - 100,6,83,0,41,7,122,68,70,105,108,108,32,116,104,101, - 32,99,97,99,104,101,32,111,102,32,112,111,116,101,110,116, - 105,97,108,32,109,111,100,117,108,101,115,32,97,110,100,32, - 112,97,99,107,97,103,101,115,32,102,111,114,32,116,104,105, - 115,32,100,105,114,101,99,116,111,114,121,46,114,0,0,0, - 0,114,71,0,0,0,114,61,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, - 83,0,0,0,115,20,0,0,0,104,0,124,0,93,12,125, - 1,124,1,160,0,161,0,146,2,113,4,83,0,114,3,0, - 0,0,41,1,114,106,0,0,0,41,2,114,32,0,0,0, - 90,2,102,110,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,9,60,115,101,116,99,111,109,112,62,206,5, - 0,0,115,4,0,0,0,6,0,2,0,122,41,70,105,108, - 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, - 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, - 116,99,111,109,112,62,78,41,18,114,44,0,0,0,114,2, - 0,0,0,114,6,1,0,0,114,55,0,0,0,114,2,1, - 0,0,218,15,80,101,114,109,105,115,115,105,111,110,69,114, - 114,111,114,218,18,78,111,116,65,68,105,114,101,99,116,111, - 114,121,69,114,114,111,114,114,8,0,0,0,114,9,0,0, - 0,114,10,0,0,0,114,63,1,0,0,114,64,1,0,0, - 114,101,0,0,0,114,62,0,0,0,114,106,0,0,0,218, - 3,97,100,100,114,11,0,0,0,114,65,1,0,0,41,9, - 114,119,0,0,0,114,44,0,0,0,114,7,1,0,0,90, - 21,108,111,119,101,114,95,115,117,102,102,105,120,95,99,111, - 110,116,101,110,116,115,114,41,1,0,0,114,117,0,0,0, - 114,29,1,0,0,114,17,1,0,0,90,8,110,101,119,95, - 110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,67,1,0,0,177,5,0,0,115,34,0,0, - 0,0,2,6,1,2,1,22,1,20,3,10,3,12,1,12, - 7,6,1,8,1,16,1,4,1,18,2,4,1,12,1,6, - 1,12,1,122,22,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 7,0,0,0,115,18,0,0,0,135,0,135,1,102,2,100, - 1,100,2,132,8,125,2,124,2,83,0,41,3,97,20,1, - 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, - 32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119, - 105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110, - 115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101, - 114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10, - 32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10, - 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, - 97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104, - 101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116, - 32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32, - 32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115, - 34,0,0,0,116,0,124,0,131,1,115,20,116,1,100,1, - 124,0,100,2,141,2,130,1,136,0,124,0,102,1,136,1, - 158,2,142,0,83,0,41,3,122,45,80,97,116,104,32,104, - 111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,105, - 98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,101, - 70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,105, - 114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,117, - 112,112,111,114,116,101,100,114,48,0,0,0,41,2,114,56, - 0,0,0,114,118,0,0,0,114,48,0,0,0,169,2,114, - 193,0,0,0,114,66,1,0,0,114,3,0,0,0,114,6, - 0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,102, - 111,114,95,70,105,108,101,70,105,110,100,101,114,218,5,0, - 0,115,6,0,0,0,0,2,8,1,12,1,122,54,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,114,3,0,0,0,41,3,114,193,0,0,0, - 114,66,1,0,0,114,73,1,0,0,114,3,0,0,0,114, - 72,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, - 104,111,111,107,208,5,0,0,115,4,0,0,0,0,10,14, - 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, - 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,83, - 0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,114, - 40,123,33,114,125,41,41,2,114,62,0,0,0,114,44,0, - 0,0,114,246,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,39,1,0,0,226,5,0,0,115, - 2,0,0,0,0,1,122,19,70,105,108,101,70,105,110,100, - 101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,15, - 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, - 127,0,0,0,114,209,0,0,0,114,46,1,0,0,114,143, - 0,0,0,114,206,0,0,0,114,137,0,0,0,114,58,1, - 0,0,114,203,0,0,0,114,67,1,0,0,114,207,0,0, - 0,114,74,1,0,0,114,39,1,0,0,114,3,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 59,1,0,0,83,5,0,0,115,22,0,0,0,8,2,4, - 7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,2, - 1,10,17,114,59,1,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,0, - 0,115,146,0,0,0,124,0,160,0,100,1,161,1,125,4, - 124,0,160,0,100,2,161,1,125,5,124,4,115,66,124,5, - 114,36,124,5,106,1,125,4,110,30,124,2,124,3,107,2, - 114,56,116,2,124,1,124,2,131,2,125,4,110,10,116,3, - 124,1,124,2,131,2,125,4,124,5,115,84,116,4,124,1, - 124,2,124,4,100,3,141,3,125,5,122,36,124,5,124,0, - 100,2,60,0,124,4,124,0,100,1,60,0,124,2,124,0, - 100,4,60,0,124,3,124,0,100,5,60,0,87,0,110,20, - 4,0,116,5,107,10,114,140,1,0,1,0,1,0,89,0, - 110,2,88,0,100,0,83,0,41,6,78,218,10,95,95,108, - 111,97,100,101,114,95,95,218,8,95,95,115,112,101,99,95, - 95,114,60,1,0,0,90,8,95,95,102,105,108,101,95,95, - 90,10,95,95,99,97,99,104,101,100,95,95,41,6,218,3, - 103,101,116,114,140,0,0,0,114,14,1,0,0,114,8,1, - 0,0,114,190,0,0,0,218,9,69,120,99,101,112,116,105, - 111,110,41,6,90,2,110,115,114,117,0,0,0,90,8,112, - 97,116,104,110,97,109,101,90,9,99,112,97,116,104,110,97, - 109,101,114,140,0,0,0,114,187,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,14,95,102,105, - 120,95,117,112,95,109,111,100,117,108,101,232,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,79,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,38,0,0,0,116,0,116,1,160,2,161, - 0,102,2,125,0,116,3,116,4,102,2,125,1,116,5,116, - 6,102,2,125,2,124,0,124,1,124,2,103,3,83,0,41, - 1,122,95,82,101,116,117,114,110,115,32,97,32,108,105,115, - 116,32,111,102,32,102,105,108,101,45,98,97,115,101,100,32, - 109,111,100,117,108,101,32,108,111,97,100,101,114,115,46,10, - 10,32,32,32,32,69,97,99,104,32,105,116,101,109,32,105, - 115,32,97,32,116,117,112,108,101,32,40,108,111,97,100,101, - 114,44,32,115,117,102,102,105,120,101,115,41,46,10,32,32, - 32,32,41,7,114,15,1,0,0,114,163,0,0,0,218,18, - 101,120,116,101,110,115,105,111,110,95,115,117,102,102,105,120, - 101,115,114,8,1,0,0,114,102,0,0,0,114,14,1,0, - 0,114,89,0,0,0,41,3,90,10,101,120,116,101,110,115, - 105,111,110,115,90,6,115,111,117,114,99,101,90,8,98,121, - 116,101,99,111,100,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,184,0,0,0,255,5,0,0,115,8, - 0,0,0,0,5,12,1,8,1,8,1,114,184,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,12,0,0, - 0,9,0,0,0,67,0,0,0,115,178,1,0,0,124,0, - 97,0,116,0,106,1,97,1,116,0,106,2,97,2,116,1, - 106,3,116,4,25,0,125,1,100,1,68,0,93,48,125,2, - 124,2,116,1,106,3,107,7,114,56,116,0,160,5,124,2, - 161,1,125,3,110,10,116,1,106,3,124,2,25,0,125,3, - 116,6,124,1,124,2,124,3,131,3,1,0,113,30,100,2, - 100,3,103,1,102,2,100,4,100,5,100,3,103,2,102,2, - 102,2,125,4,124,4,68,0,93,110,92,2,125,5,125,6, - 116,7,100,6,100,7,132,0,124,6,68,0,131,1,131,1, - 115,136,116,8,130,1,124,6,100,8,25,0,125,7,124,5, - 116,1,106,3,107,6,114,170,116,1,106,3,124,5,25,0, - 125,8,1,0,113,226,113,106,122,20,116,0,160,5,124,5, - 161,1,125,8,87,0,1,0,113,226,87,0,113,106,4,0, - 116,9,107,10,114,214,1,0,1,0,1,0,89,0,113,106, - 89,0,113,106,88,0,113,106,116,9,100,9,131,1,130,1, - 116,6,124,1,100,10,124,8,131,3,1,0,116,6,124,1, - 100,11,124,7,131,3,1,0,116,6,124,1,100,12,100,13, - 160,10,124,6,161,1,131,3,1,0,116,6,124,1,100,14, - 100,15,100,16,132,0,124,6,68,0,131,1,131,3,1,0, - 116,0,160,5,100,17,161,1,125,9,116,6,124,1,100,17, - 124,9,131,3,1,0,116,0,160,5,100,18,161,1,125,10, - 116,6,124,1,100,18,124,10,131,3,1,0,124,5,100,4, - 107,2,144,1,114,110,116,0,160,5,100,19,161,1,125,11, - 116,6,124,1,100,20,124,11,131,3,1,0,116,6,124,1, - 100,21,116,11,131,0,131,3,1,0,116,12,160,13,116,2, - 160,14,161,0,161,1,1,0,124,5,100,4,107,2,144,1, - 114,174,116,15,160,16,100,22,161,1,1,0,100,23,116,12, - 107,6,144,1,114,174,100,24,116,17,95,18,100,25,83,0, - 41,26,122,205,83,101,116,117,112,32,116,104,101,32,112,97, - 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,101, - 114,115,32,102,111,114,32,105,109,112,111,114,116,108,105,98, - 32,98,121,32,105,109,112,111,114,116,105,110,103,32,110,101, - 101,100,101,100,10,32,32,32,32,98,117,105,108,116,45,105, - 110,32,109,111,100,117,108,101,115,32,97,110,100,32,105,110, - 106,101,99,116,105,110,103,32,116,104,101,109,32,105,110,116, - 111,32,116,104,101,32,103,108,111,98,97,108,32,110,97,109, - 101,115,112,97,99,101,46,10,10,32,32,32,32,79,116,104, - 101,114,32,99,111,109,112,111,110,101,110,116,115,32,97,114, - 101,32,101,120,116,114,97,99,116,101,100,32,102,114,111,109, - 32,116,104,101,32,99,111,114,101,32,98,111,111,116,115,116, - 114,97,112,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,41,4,114,64,0,0,0,114,75,0,0,0,218,8,98, - 117,105,108,116,105,110,115,114,160,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,0,0,0,0,2,0,0,0,3,0, - 0,0,115,0,0,0,115,26,0,0,0,124,0,93,18,125, - 1,116,0,124,1,131,1,100,0,107,2,86,0,1,0,113, - 2,100,1,83,0,41,2,114,39,0,0,0,78,41,1,114, - 22,0,0,0,41,2,114,32,0,0,0,114,95,0,0,0, + 0,114,79,1,0,0,134,5,0,0,115,22,0,0,0,8, + 2,4,7,8,14,8,4,4,2,8,12,8,5,10,48,8, + 31,2,1,10,17,114,79,1,0,0,99,4,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, + 0,0,0,115,146,0,0,0,124,0,160,0,100,1,161,1, + 125,4,124,0,160,0,100,2,161,1,125,5,124,4,115,66, + 124,5,114,36,124,5,106,1,125,4,110,30,124,2,124,3, + 107,2,114,56,116,2,124,1,124,2,131,2,125,4,110,10, + 116,3,124,1,124,2,131,2,125,4,124,5,115,84,116,4, + 124,1,124,2,124,4,100,3,141,3,125,5,122,36,124,5, + 124,0,100,2,60,0,124,4,124,0,100,1,60,0,124,2, + 124,0,100,4,60,0,124,3,124,0,100,5,60,0,87,0, + 110,20,4,0,116,5,107,10,114,140,1,0,1,0,1,0, + 89,0,110,2,88,0,100,0,83,0,41,6,78,218,10,95, + 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, + 99,95,95,114,80,1,0,0,90,8,95,95,102,105,108,101, + 95,95,90,10,95,95,99,97,99,104,101,100,95,95,41,6, + 218,3,103,101,116,114,140,0,0,0,114,14,1,0,0,114, + 8,1,0,0,114,190,0,0,0,114,72,1,0,0,41,6, + 90,2,110,115,114,117,0,0,0,90,8,112,97,116,104,110, + 97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,140, + 0,0,0,114,187,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,218,14,95,102,105,120,95,117,112, + 95,109,111,100,117,108,101,27,6,0,0,115,34,0,0,0, + 0,2,10,1,10,1,4,1,4,1,8,1,8,1,12,2, + 10,1,4,1,14,1,2,1,8,1,8,1,8,1,12,1, + 14,2,114,98,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,38,0,0,0,116,0,116,1,160,2,161,0,102,2,125, + 0,116,3,116,4,102,2,125,1,116,5,116,6,102,2,125, + 2,124,0,124,1,124,2,103,3,83,0,41,1,122,95,82, + 101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102, + 32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,117, + 108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,32, + 32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,32, + 116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,115, + 117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,7, + 114,15,1,0,0,114,163,0,0,0,218,18,101,120,116,101, + 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,8, + 1,0,0,114,102,0,0,0,114,14,1,0,0,114,89,0, + 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, + 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, + 100,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,114,184,0,0,0,50,6,0,0,115,8,0,0,0,0, + 5,12,1,8,1,8,1,114,184,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,12,0,0,0,9,0,0, + 0,67,0,0,0,115,178,1,0,0,124,0,97,0,116,0, + 106,1,97,1,116,0,106,2,97,2,116,1,106,3,116,4, + 25,0,125,1,100,1,68,0,93,48,125,2,124,2,116,1, + 106,3,107,7,114,56,116,0,160,5,124,2,161,1,125,3, + 110,10,116,1,106,3,124,2,25,0,125,3,116,6,124,1, + 124,2,124,3,131,3,1,0,113,30,100,2,100,3,103,1, + 102,2,100,4,100,5,100,3,103,2,102,2,102,2,125,4, + 124,4,68,0,93,110,92,2,125,5,125,6,116,7,100,6, + 100,7,132,0,124,6,68,0,131,1,131,1,115,136,116,8, + 130,1,124,6,100,8,25,0,125,7,124,5,116,1,106,3, + 107,6,114,170,116,1,106,3,124,5,25,0,125,8,1,0, + 113,226,113,106,122,20,116,0,160,5,124,5,161,1,125,8, + 87,0,1,0,113,226,87,0,113,106,4,0,116,9,107,10, + 114,214,1,0,1,0,1,0,89,0,113,106,89,0,113,106, + 88,0,113,106,116,9,100,9,131,1,130,1,116,6,124,1, + 100,10,124,8,131,3,1,0,116,6,124,1,100,11,124,7, + 131,3,1,0,116,6,124,1,100,12,100,13,160,10,124,6, + 161,1,131,3,1,0,116,6,124,1,100,14,100,15,100,16, + 132,0,124,6,68,0,131,1,131,3,1,0,116,0,160,5, + 100,17,161,1,125,9,116,6,124,1,100,17,124,9,131,3, + 1,0,116,0,160,5,100,18,161,1,125,10,116,6,124,1, + 100,18,124,10,131,3,1,0,124,5,100,4,107,2,144,1, + 114,110,116,0,160,5,100,19,161,1,125,11,116,6,124,1, + 100,20,124,11,131,3,1,0,116,6,124,1,100,21,116,11, + 131,0,131,3,1,0,116,12,160,13,116,2,160,14,161,0, + 161,1,1,0,124,5,100,4,107,2,144,1,114,174,116,15, + 160,16,100,22,161,1,1,0,100,23,116,12,107,6,144,1, + 114,174,100,24,116,17,95,18,100,25,83,0,41,26,122,205, + 83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,98, + 97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,32, + 105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,100, + 10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,116, + 105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,104, + 101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,97, + 99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,99, + 111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,120, + 116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,101, + 32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,41,4,114, + 64,0,0,0,114,75,0,0,0,218,8,98,117,105,108,116, + 105,110,115,114,160,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,0,0,0,0,2,0,0,0,3,0,0,0,115,0, + 0,0,115,26,0,0,0,124,0,93,18,125,1,116,0,124, + 1,131,1,100,0,107,2,86,0,1,0,113,2,100,1,83, + 0,41,2,114,39,0,0,0,78,41,1,114,22,0,0,0, + 41,2,114,32,0,0,0,114,95,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0, + 86,6,0,0,115,4,0,0,0,4,0,2,0,122,25,95, + 115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,114,73,0,0,0,122,30,105, + 109,112,111,114,116,108,105,98,32,114,101,113,117,105,114,101, + 115,32,112,111,115,105,120,32,111,114,32,110,116,114,2,0, + 0,0,114,35,0,0,0,114,31,0,0,0,114,40,0,0, + 0,114,58,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, + 22,0,0,0,104,0,124,0,93,14,125,1,100,0,124,1, + 155,0,157,2,146,2,113,4,83,0,41,1,114,74,0,0, + 0,114,3,0,0,0,41,2,114,32,0,0,0,218,1,115, 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 19,1,0,0,35,6,0,0,115,4,0,0,0,4,0,2, + 88,1,0,0,102,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,103,101,110,101,120,112,114,62,114,73,0,0, - 0,122,30,105,109,112,111,114,116,108,105,98,32,114,101,113, - 117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,110, - 116,114,2,0,0,0,114,35,0,0,0,114,31,0,0,0, - 114,40,0,0,0,114,58,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83, - 0,0,0,115,22,0,0,0,104,0,124,0,93,14,125,1, - 100,0,124,1,155,0,157,2,146,2,113,4,83,0,41,1, - 114,74,0,0,0,114,3,0,0,0,41,2,114,32,0,0, - 0,218,1,115,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,68,1,0,0,51,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,192,0,0,0, - 114,7,0,0,0,122,4,46,112,121,119,122,6,95,100,46, - 112,121,100,84,78,41,19,114,134,0,0,0,114,8,0,0, - 0,114,163,0,0,0,114,31,1,0,0,114,125,0,0,0, - 90,18,95,98,117,105,108,116,105,110,95,102,114,111,109,95, - 110,97,109,101,114,129,0,0,0,218,3,97,108,108,114,23, - 0,0,0,114,118,0,0,0,114,36,0,0,0,114,13,0, - 0,0,114,21,1,0,0,114,167,0,0,0,114,80,1,0, - 0,114,102,0,0,0,114,186,0,0,0,114,191,0,0,0, - 114,195,0,0,0,41,12,218,17,95,98,111,111,116,115,116, - 114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102, - 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, - 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, - 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, - 115,90,10,98,117,105,108,116,105,110,95,111,115,114,31,0, - 0,0,114,35,0,0,0,90,9,111,115,95,109,111,100,117, - 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, - 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, - 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, - 6,95,115,101,116,117,112,10,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,87, - 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0, - 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, - 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161, - 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100, - 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116, - 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, - 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46, - 78,41,10,114,87,1,0,0,114,184,0,0,0,114,8,0, - 0,0,114,51,1,0,0,114,167,0,0,0,114,59,1,0, - 0,114,74,1,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,186,0,0,0,114,45,1,0,0,41,2,114,86,1, - 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, - 97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,8,95,105,110,115,116,97,108,108,75,6, - 0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114, - 89,1,0,0,41,63,114,127,0,0,0,114,12,0,0,0, - 90,37,95,67,65,83,69,95,73,78,83,69,78,83,73,84, - 73,86,69,95,80,76,65,84,70,79,82,77,83,95,66,89, - 84,69,83,95,75,69,89,114,11,0,0,0,114,13,0,0, - 0,114,20,0,0,0,114,27,0,0,0,114,29,0,0,0, - 114,38,0,0,0,114,47,0,0,0,114,49,0,0,0,114, - 53,0,0,0,114,54,0,0,0,114,56,0,0,0,114,59, - 0,0,0,114,69,0,0,0,218,4,116,121,112,101,218,8, - 95,95,99,111,100,101,95,95,114,162,0,0,0,114,18,0, - 0,0,114,148,0,0,0,114,17,0,0,0,114,24,0,0, - 0,114,236,0,0,0,114,92,0,0,0,114,88,0,0,0, - 114,102,0,0,0,114,89,0,0,0,90,23,68,69,66,85, - 71,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, - 88,69,83,90,27,79,80,84,73,77,73,90,69,68,95,66, - 89,84,69,67,79,68,69,95,83,85,70,70,73,88,69,83, - 114,98,0,0,0,114,103,0,0,0,114,109,0,0,0,114, - 113,0,0,0,114,115,0,0,0,114,136,0,0,0,114,143, - 0,0,0,114,152,0,0,0,114,156,0,0,0,114,158,0, - 0,0,114,165,0,0,0,114,170,0,0,0,114,171,0,0, - 0,114,176,0,0,0,218,6,111,98,106,101,99,116,114,185, - 0,0,0,114,190,0,0,0,114,191,0,0,0,114,208,0, - 0,0,114,221,0,0,0,114,239,0,0,0,114,8,1,0, - 0,114,14,1,0,0,114,21,1,0,0,114,15,1,0,0, - 114,22,1,0,0,114,43,1,0,0,114,45,1,0,0,114, - 59,1,0,0,114,79,1,0,0,114,184,0,0,0,114,87, - 1,0,0,114,89,1,0,0,114,3,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,8,60,109, - 111,100,117,108,101,62,1,0,0,0,115,126,0,0,0,4, - 22,4,1,4,1,2,1,2,255,4,4,8,17,8,5,8, - 5,8,6,8,6,8,12,8,10,8,9,8,5,8,7,8, - 9,12,22,10,127,0,8,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,63,14,42,14, - 127,0,7,14,127,0,22,12,23,8,11,8,65, + 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,192,0,0,0,114,7,0,0, + 0,122,4,46,112,121,119,122,6,95,100,46,112,121,100,84, + 78,41,19,114,134,0,0,0,114,8,0,0,0,114,163,0, + 0,0,114,31,1,0,0,114,125,0,0,0,90,18,95,98, + 117,105,108,116,105,110,95,102,114,111,109,95,110,97,109,101, + 114,129,0,0,0,218,3,97,108,108,114,23,0,0,0,114, + 118,0,0,0,114,36,0,0,0,114,13,0,0,0,114,21, + 1,0,0,114,167,0,0,0,114,99,1,0,0,114,102,0, + 0,0,114,186,0,0,0,114,191,0,0,0,114,195,0,0, + 0,41,12,218,17,95,98,111,111,116,115,116,114,97,112,95, + 109,111,100,117,108,101,90,11,115,101,108,102,95,109,111,100, + 117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,109, + 101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,108, + 101,90,10,111,115,95,100,101,116,97,105,108,115,90,10,98, + 117,105,108,116,105,110,95,111,115,114,31,0,0,0,114,35, + 0,0,0,90,9,111,115,95,109,111,100,117,108,101,90,13, + 116,104,114,101,97,100,95,109,111,100,117,108,101,90,14,119, + 101,97,107,114,101,102,95,109,111,100,117,108,101,90,13,119, + 105,110,114,101,103,95,109,111,100,117,108,101,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,218,6,95,115,101, + 116,117,112,61,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,106,1,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,67,0,0,0,115,50,0,0,0,116,0,124, + 0,131,1,1,0,116,1,131,0,125,1,116,2,106,3,160, + 4,116,5,106,6,124,1,142,0,103,1,161,1,1,0,116, + 2,106,7,160,8,116,9,161,1,1,0,100,1,83,0,41, + 2,122,41,73,110,115,116,97,108,108,32,116,104,101,32,112, + 97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,116, + 32,99,111,109,112,111,110,101,110,116,115,46,78,41,10,114, + 106,1,0,0,114,184,0,0,0,114,8,0,0,0,114,51, + 1,0,0,114,167,0,0,0,114,79,1,0,0,114,94,1, + 0,0,218,9,109,101,116,97,95,112,97,116,104,114,186,0, + 0,0,114,45,1,0,0,41,2,114,105,1,0,0,90,17, + 115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114, + 115,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,8,95,105,110,115,116,97,108,108,126,6,0,0,115,8, + 0,0,0,0,2,8,1,6,1,20,1,114,108,1,0,0, + 41,63,114,127,0,0,0,114,12,0,0,0,90,37,95,67, + 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, + 80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95, + 75,69,89,114,11,0,0,0,114,13,0,0,0,114,20,0, + 0,0,114,27,0,0,0,114,29,0,0,0,114,38,0,0, + 0,114,47,0,0,0,114,49,0,0,0,114,53,0,0,0, + 114,54,0,0,0,114,56,0,0,0,114,59,0,0,0,114, + 69,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, + 100,101,95,95,114,162,0,0,0,114,18,0,0,0,114,148, + 0,0,0,114,17,0,0,0,114,24,0,0,0,114,236,0, + 0,0,114,92,0,0,0,114,88,0,0,0,114,102,0,0, + 0,114,89,0,0,0,90,23,68,69,66,85,71,95,66,89, + 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, + 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, + 79,68,69,95,83,85,70,70,73,88,69,83,114,98,0,0, + 0,114,103,0,0,0,114,109,0,0,0,114,113,0,0,0, + 114,115,0,0,0,114,136,0,0,0,114,143,0,0,0,114, + 152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165, + 0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0, + 0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114, + 190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221, + 0,0,0,114,239,0,0,0,114,8,1,0,0,114,14,1, + 0,0,114,21,1,0,0,114,15,1,0,0,114,22,1,0, + 0,114,43,1,0,0,114,45,1,0,0,114,79,1,0,0, + 114,98,1,0,0,114,184,0,0,0,114,106,1,0,0,114, + 108,1,0,0,114,3,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, + 101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4, + 1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8, + 6,8,12,8,10,8,9,8,5,8,7,8,9,12,22,10, + 127,0,8,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,63,14,42,14,127,0,58,14, + 127,0,22,12,23,8,11,8,65, }; From 6e5cc29acdf6a0b3f91a86df370be642fdc03d01 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 10 May 2019 22:24:47 -0400 Subject: [PATCH 12/23] Disable all the doctests --- Doc/library/importlib.metadata.rst | 50 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 8a5b66d04e1201..441850719c1a8b 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -41,8 +41,8 @@ You can get the version string for ``wheel`` by running the following:: .. highlight:: none (example) $ python - >>> from importlib.metadata import version - >>> version('wheel') + >>> from importlib.metadata import version # doctest: +SKIP + >>> version('wheel') # doctest: +SKIP '0.32.3' You can also get the set of entry points keyed by group, such as @@ -51,7 +51,7 @@ sequence of :ref:`EntryPoint ` objects. You can get the :ref:`metadata for a distribution `:: - >>> list(metadata('wheel')) + >>> list(metadata('wheel')) # doctest: +SKIP ['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Requires-Dist', 'Requires-Dist'] You can also get a :ref:`distribution's version number `, list its @@ -75,15 +75,15 @@ keyed by group. Entry points are represented by ``EntryPoint`` instances; each ``EntryPoint`` has a ``.name``, ``.group``, and ``.value`` attributes and a ``.load()`` method to resolve the value. - >>> eps = entry_points() - >>> list(eps) + >>> eps = entry_points() # doctest: +SKIP + >>> list(eps) # doctest: +SKIP ['console_scripts', 'distutils.commands', 'distutils.setup_keywords', 'egg_info.writers', 'setuptools.installation'] - >>> scripts = eps['console_scripts'] - >>> wheel = [ep for ep in scripts if ep.name == 'wheel'][0] - >>> wheel + >>> scripts = eps['console_scripts'] # doctest: +SKIP + >>> wheel = [ep for ep in scripts if ep.name == 'wheel'][0] # doctest: +SKIP + >>> wheel # doctest: +SKIP EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts') - >>> main = wheel.load() - >>> main + >>> main = wheel.load() # doctest: +SKIP + >>> main # doctest: +SKIP The ``group`` and ``name`` are arbitrary values defined by the package author @@ -101,12 +101,12 @@ Distribution metadata Every distribution includes some metadata, which you can extract using the ``metadata()`` function:: - >>> wheel_metadata = metadata('wheel') + >>> wheel_metadata = metadata('wheel') # doctest: +SKIP The keys of the returned data structure [#f1]_ name the metadata keywords, and their values are returned unparsed from the distribution metadata:: - >>> wheel_metadata['Requires-Python'] + >>> wheel_metadata['Requires-Python'] # doctest: +SKIP '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' @@ -118,7 +118,7 @@ Distribution versions The ``version()`` function is the quickest way to get a distribution's version number, as a string:: - >>> version('wheel') + >>> version('wheel') # doctest: +SKIP '0.32.3' @@ -133,19 +133,19 @@ files installed by this distribution. Each file object returned is a ``PackagePath``, a `pathlib.Path`_ derived object with additional ``dist``, ``size``, and ``hash`` properties as indicated by the metadata. For example:: - >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0] - >>> util + >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0] # doctest: +SKIP + >>> util # doctest: +SKIP PackagePath('wheel/util.py') - >>> util.size + >>> util.size # doctest: +SKIP 859 - >>> util.dist + >>> util.dist # doctest: +SKIP - >>> util.hash + >>> util.hash # doctest: +SKIP Once you have the file, you can also read its contents:: - >>> print(util.read_text()) + >>> print(util.read_text()) # doctest: +SKIP import base64 import sys ... @@ -163,7 +163,7 @@ Distribution requirements To get the full set of requirements for a distribution, use the ``requires()`` function. Note that this returns an iterator:: - >>> list(requires('wheel')) + >>> list(requires('wheel')) # doctest: +SKIP ["pytest (>=3.0.0) ; extra == 'test'"] @@ -175,21 +175,21 @@ of that information from the ``Distribution`` class. A ``Distribution`` is an abstract object that represents the metadata for a Python package. You can get the ``Distribution`` instance:: - >>> from importlib.metadata import distribution - >>> dist = distribution('wheel') + >>> from importlib.metadata import distribution # doctest: +SKIP + >>> dist = distribution('wheel') # doctest: +SKIP Thus, an alternative way to get the version number is through the ``Distribution`` instance:: - >>> dist.version + >>> dist.version # doctest: +SKIP '0.32.3' There are all kinds of additional metadata available on the ``Distribution`` instance:: - >>> d.metadata['Requires-Python'] + >>> d.metadata['Requires-Python'] # doctest: +SKIP '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' - >>> d.metadata['License'] + >>> d.metadata['License'] # doctest: +SKIP 'MIT' The full set of available metadata is not described here. See `PEP 566 From 8f04bf5414e9985bb137ae512e8ed0a5f476ec2d Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" Date: Sat, 11 May 2019 02:30:48 +0000 Subject: [PATCH 13/23] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20b?= =?UTF-8?q?lurb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst diff --git a/Misc/NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst b/Misc/NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst new file mode 100644 index 00000000000000..ab4433846d4f7f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst @@ -0,0 +1 @@ +Introduce the ``importlib.metadata`` module with (provisional) support for reading metadata from third-party packages. \ No newline at end of file From 7f9924a6d733fb37177656106eca1c7d5f113ac2 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 11 May 2019 09:19:30 -0400 Subject: [PATCH 14/23] make regen-all --- Python/importlib_external.h | 1041 ++++++++++++++++++----------------- 1 file changed, 521 insertions(+), 520 deletions(-) diff --git a/Python/importlib_external.h b/Python/importlib_external.h index c7df32d4ad04f8..3a5c83b98695d7 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2302,527 +2302,528 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,5,8,1,18,2,10,254,122,24,80,97,116,104, 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, 97,116,104,115,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,10,0,0,0,67,0,0,0,115,76,0, + 0,4,0,0,0,10,0,0,0,67,0,0,0,115,78,0, 0,0,100,1,100,2,108,0,109,1,125,1,1,0,100,1, - 100,0,108,2,125,2,100,1,100,0,108,3,125,3,124,1, - 116,4,131,1,143,24,1,0,124,2,160,5,124,0,161,1, - 87,0,2,0,53,0,81,0,82,0,163,0,83,0,81,0, - 82,0,88,0,124,3,160,5,124,0,161,1,83,0,41,3, - 78,114,73,0,0,0,41,1,218,8,115,117,112,112,114,101, - 115,115,41,6,90,10,99,111,110,116,101,120,116,108,105,98, - 114,69,1,0,0,218,7,122,105,112,102,105,108,101,218,7, - 112,97,116,104,108,105,98,218,9,69,120,99,101,112,116,105, - 111,110,90,4,80,97,116,104,41,4,114,44,0,0,0,114, - 69,1,0,0,114,70,1,0,0,114,71,1,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,68,1, - 0,0,110,5,0,0,115,12,0,0,0,0,2,12,1,8, - 1,8,1,10,1,28,1,122,23,80,97,116,104,70,105,110, - 100,101,114,46,95,115,119,105,116,99,104,95,112,97,116,104, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,5,0,0,0,67,0,0,0,115,32,0,0,0,100,1, - 100,0,108,0,125,4,124,4,106,1,124,1,116,2,124,3, - 106,3,131,1,124,4,106,4,100,2,141,3,83,0,41,3, - 78,114,73,0,0,0,41,1,114,83,0,0,0,41,5,114, - 60,1,0,0,90,5,109,97,116,99,104,114,85,0,0,0, - 114,117,0,0,0,90,10,73,71,78,79,82,69,67,65,83, - 69,41,5,114,193,0,0,0,114,63,1,0,0,218,4,114, - 111,111,116,114,41,1,0,0,114,60,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,10,95,112, - 114,101,100,105,99,97,116,101,119,5,0,0,115,4,0,0, - 0,0,2,8,1,122,21,80,97,116,104,70,105,110,100,101, - 114,46,95,112,114,101,100,105,99,97,116,101,99,3,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,3,0,0,0,115,64,0,0,0,136,2,160,0,161,0, - 115,12,100,1,83,0,124,2,160,1,100,2,100,3,161,2, - 125,3,136,0,106,2,106,3,124,3,100,4,141,1,137,1, - 135,0,135,1,135,2,102,3,100,5,100,6,132,8,136,2, - 160,4,161,0,68,0,131,1,83,0,41,7,78,114,3,0, - 0,0,250,1,45,114,45,0,0,0,41,1,114,63,1,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,6,0,0,0,51,0,0,0,115,32,0,0,0,124, - 0,93,24,125,1,136,0,160,0,136,1,136,2,124,1,161, - 3,114,26,124,1,86,0,1,0,113,2,100,0,83,0,114, - 110,0,0,0,41,1,114,74,1,0,0,41,2,114,32,0, - 0,0,114,41,1,0,0,169,3,114,193,0,0,0,90,7, - 109,97,116,99,104,101,114,114,73,1,0,0,114,3,0,0, - 0,114,6,0,0,0,114,19,1,0,0,130,5,0,0,115, - 6,0,0,0,4,0,2,1,14,255,122,42,80,97,116,104, - 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, - 97,116,104,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,41,5,90,6,105,115,95,100,105,114, - 114,67,0,0,0,218,15,115,101,97,114,99,104,95,116,101, - 109,112,108,97,116,101,114,62,0,0,0,90,7,105,116,101, - 114,100,105,114,41,4,114,193,0,0,0,114,73,1,0,0, - 114,63,1,0,0,90,10,110,111,114,109,97,108,105,122,101, - 100,114,3,0,0,0,114,76,1,0,0,114,6,0,0,0, - 114,65,1,0,0,124,5,0,0,115,10,0,0,0,0,2, - 8,1,4,1,12,1,14,1,122,23,80,97,116,104,70,105, - 110,100,101,114,46,95,115,101,97,114,99,104,95,112,97,116, - 104,41,1,78,41,2,78,78,41,1,78,41,2,78,78,41, - 19,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, - 114,127,0,0,0,114,207,0,0,0,114,46,1,0,0,114, - 52,1,0,0,114,54,1,0,0,114,55,1,0,0,114,58, - 1,0,0,114,203,0,0,0,114,206,0,0,0,114,77,1, - 0,0,114,64,1,0,0,114,61,1,0,0,218,12,115,116, - 97,116,105,99,109,101,116,104,111,100,114,68,1,0,0,114, - 74,1,0,0,114,65,1,0,0,114,3,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,45,1, - 0,0,205,4,0,0,115,52,0,0,0,8,2,4,2,2, - 1,10,9,2,1,10,12,2,1,10,21,2,1,10,14,2, - 1,12,31,2,1,12,23,2,1,12,12,4,2,2,1,12, - 14,2,1,10,10,2,1,10,8,2,1,10,4,2,1,114, - 45,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,90,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 100,3,132,0,90,4,100,4,100,5,132,0,90,5,101,6, - 90,7,100,6,100,7,132,0,90,8,100,8,100,9,132,0, - 90,9,100,19,100,11,100,12,132,1,90,10,100,13,100,14, - 132,0,90,11,101,12,100,15,100,16,132,0,131,1,90,13, - 100,17,100,18,132,0,90,14,100,10,83,0,41,20,218,10, - 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, - 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, - 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, - 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, - 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, - 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, - 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, - 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, - 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, - 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, - 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, - 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,6,0,0,0,7,0,0, - 0,115,84,0,0,0,103,0,125,3,124,2,68,0,93,32, - 92,2,137,0,125,4,124,3,160,0,135,0,102,1,100,1, - 100,2,132,8,124,4,68,0,131,1,161,1,1,0,113,8, - 124,3,124,0,95,1,124,1,112,54,100,3,124,0,95,2, - 100,4,124,0,95,3,116,4,131,0,124,0,95,5,116,4, - 131,0,124,0,95,6,100,5,83,0,41,6,122,154,73,110, - 105,116,105,97,108,105,122,101,32,119,105,116,104,32,116,104, - 101,32,112,97,116,104,32,116,111,32,115,101,97,114,99,104, - 32,111,110,32,97,110,100,32,97,32,118,97,114,105,97,98, - 108,101,32,110,117,109,98,101,114,32,111,102,10,32,32,32, - 32,32,32,32,32,50,45,116,117,112,108,101,115,32,99,111, - 110,116,97,105,110,105,110,103,32,116,104,101,32,108,111,97, - 100,101,114,32,97,110,100,32,116,104,101,32,102,105,108,101, - 32,115,117,102,102,105,120,101,115,32,116,104,101,32,108,111, - 97,100,101,114,10,32,32,32,32,32,32,32,32,114,101,99, - 111,103,110,105,122,101,115,46,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,51,0,0, - 0,115,22,0,0,0,124,0,93,14,125,1,124,1,136,0, - 102,2,86,0,1,0,113,2,100,0,83,0,114,110,0,0, - 0,114,3,0,0,0,114,16,1,0,0,169,1,114,140,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,19,1,0, - 0,149,5,0,0,115,4,0,0,0,4,0,2,0,122,38, - 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, - 116,95,95,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,114,71,0,0,0,114,105,0,0,0, - 78,41,7,114,167,0,0,0,218,8,95,108,111,97,100,101, - 114,115,114,44,0,0,0,218,11,95,112,97,116,104,95,109, - 116,105,109,101,218,3,115,101,116,218,11,95,112,97,116,104, - 95,99,97,99,104,101,218,19,95,114,101,108,97,120,101,100, - 95,112,97,116,104,95,99,97,99,104,101,41,5,114,119,0, - 0,0,114,44,0,0,0,218,14,108,111,97,100,101,114,95, - 100,101,116,97,105,108,115,90,7,108,111,97,100,101,114,115, - 114,189,0,0,0,114,3,0,0,0,114,80,1,0,0,114, - 6,0,0,0,114,209,0,0,0,143,5,0,0,115,16,0, - 0,0,0,4,4,1,12,1,26,1,6,2,10,1,6,1, - 8,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, - 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,10,0,0,0,100,1,124,0,95,0,100,2,83,0,41, - 3,122,31,73,110,118,97,108,105,100,97,116,101,32,116,104, - 101,32,100,105,114,101,99,116,111,114,121,32,109,116,105,109, - 101,46,114,105,0,0,0,78,41,1,114,82,1,0,0,114, - 246,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,46,1,0,0,157,5,0,0,115,2,0,0, - 0,0,2,122,28,70,105,108,101,70,105,110,100,101,114,46, - 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, - 115,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,3,0,0,0,67,0,0,0,115,42,0,0,0,124, - 0,160,0,124,1,161,1,125,2,124,2,100,1,107,8,114, - 26,100,1,103,0,102,2,83,0,124,2,106,1,124,2,106, - 2,112,38,103,0,102,2,83,0,41,2,122,197,84,114,121, - 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, - 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,117,108,101,44,32,111,114,32,116, - 104,101,32,110,97,109,101,115,112,97,99,101,10,32,32,32, - 32,32,32,32,32,112,97,99,107,97,103,101,32,112,111,114, - 116,105,111,110,115,46,32,82,101,116,117,114,110,115,32,40, - 108,111,97,100,101,114,44,32,108,105,115,116,45,111,102,45, - 112,111,114,116,105,111,110,115,41,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,32, - 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, - 32,32,78,41,3,114,203,0,0,0,114,140,0,0,0,114, - 178,0,0,0,41,3,114,119,0,0,0,114,139,0,0,0, - 114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,137,0,0,0,163,5,0,0,115,8,0, - 0,0,0,7,10,1,8,1,8,1,122,22,70,105,108,101, - 70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100, - 101,114,99,6,0,0,0,0,0,0,0,0,0,0,0,7, - 0,0,0,6,0,0,0,67,0,0,0,115,26,0,0,0, - 124,1,124,2,124,3,131,2,125,6,116,0,124,2,124,3, - 124,6,124,4,100,1,141,4,83,0,41,2,78,114,177,0, - 0,0,41,1,114,190,0,0,0,41,7,114,119,0,0,0, - 114,188,0,0,0,114,139,0,0,0,114,44,0,0,0,90, - 4,115,109,115,108,114,202,0,0,0,114,140,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,58, - 1,0,0,175,5,0,0,115,8,0,0,0,0,1,10,1, - 8,1,2,255,122,20,70,105,108,101,70,105,110,100,101,114, - 46,95,103,101,116,95,115,112,101,99,78,99,3,0,0,0, - 0,0,0,0,0,0,0,0,14,0,0,0,8,0,0,0, - 67,0,0,0,115,102,1,0,0,100,1,125,3,124,1,160, - 0,100,2,161,1,100,3,25,0,125,4,122,24,116,1,124, - 0,106,2,112,34,116,3,160,4,161,0,131,1,106,5,125, - 5,87,0,110,24,4,0,116,6,107,10,114,66,1,0,1, - 0,1,0,100,4,125,5,89,0,110,2,88,0,124,5,124, - 0,106,7,107,3,114,92,124,0,160,8,161,0,1,0,124, - 5,124,0,95,7,116,9,131,0,114,114,124,0,106,10,125, - 6,124,4,160,11,161,0,125,7,110,10,124,0,106,12,125, - 6,124,4,125,7,124,7,124,6,107,6,114,218,116,13,124, - 0,106,2,124,4,131,2,125,8,124,0,106,14,68,0,93, - 58,92,2,125,9,125,10,100,5,124,9,23,0,125,11,116, - 13,124,8,124,11,131,2,125,12,116,15,124,12,131,1,114, - 208,124,0,160,16,124,10,124,1,124,12,124,8,103,1,124, - 2,161,5,2,0,1,0,83,0,113,150,116,17,124,8,131, - 1,125,3,124,0,106,14,68,0,93,86,92,2,125,9,125, - 10,116,13,124,0,106,2,124,4,124,9,23,0,131,2,125, - 12,116,18,106,19,100,6,124,12,100,3,100,7,141,3,1, - 0,124,7,124,9,23,0,124,6,107,6,144,1,114,54,116, - 15,124,12,131,1,144,1,114,54,124,0,160,16,124,10,124, - 1,124,12,100,8,124,2,161,5,2,0,1,0,83,0,113, - 224,124,3,144,1,114,98,116,18,160,19,100,9,124,8,161, - 2,1,0,116,18,160,20,124,1,100,8,161,2,125,13,124, - 8,103,1,124,13,95,21,124,13,83,0,100,8,83,0,41, - 10,122,111,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,115,112,101,99,32,102,111,114,32,116,104,101,32,115,112, - 101,99,105,102,105,101,100,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,115, - 32,116,104,101,32,109,97,116,99,104,105,110,103,32,115,112, - 101,99,44,32,111,114,32,78,111,110,101,32,105,102,32,110, - 111,116,32,102,111,117,110,100,46,10,32,32,32,32,32,32, - 32,32,70,114,71,0,0,0,114,28,0,0,0,114,105,0, - 0,0,114,209,0,0,0,122,9,116,114,121,105,110,103,32, - 123,125,41,1,90,9,118,101,114,98,111,115,105,116,121,78, - 122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115, - 112,97,99,101,32,102,111,114,32,123,125,41,22,114,41,0, - 0,0,114,49,0,0,0,114,44,0,0,0,114,2,0,0, - 0,114,55,0,0,0,114,9,1,0,0,114,50,0,0,0, - 114,82,1,0,0,218,11,95,102,105,108,108,95,99,97,99, - 104,101,114,7,0,0,0,114,85,1,0,0,114,106,0,0, - 0,114,84,1,0,0,114,38,0,0,0,114,81,1,0,0, - 114,54,0,0,0,114,58,1,0,0,114,56,0,0,0,114, - 134,0,0,0,114,149,0,0,0,114,183,0,0,0,114,178, - 0,0,0,41,14,114,119,0,0,0,114,139,0,0,0,114, - 202,0,0,0,90,12,105,115,95,110,97,109,101,115,112,97, - 99,101,90,11,116,97,105,108,95,109,111,100,117,108,101,114, - 169,0,0,0,90,5,99,97,99,104,101,90,12,99,97,99, - 104,101,95,109,111,100,117,108,101,90,9,98,97,115,101,95, - 112,97,116,104,114,17,1,0,0,114,188,0,0,0,90,13, - 105,110,105,116,95,102,105,108,101,110,97,109,101,90,9,102, - 117,108,108,95,112,97,116,104,114,187,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,203,0,0, - 0,180,5,0,0,115,74,0,0,0,0,5,4,1,14,1, - 2,1,24,1,14,1,10,1,10,1,8,1,6,2,6,1, - 6,1,10,2,6,1,4,2,8,1,12,1,14,1,8,1, - 10,1,8,1,26,4,8,2,14,1,16,1,16,1,14,1, - 10,1,10,1,2,0,2,255,10,2,6,1,12,1,12,1, - 8,1,4,1,122,20,70,105,108,101,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,99,1,0,0,0,0, - 0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,67, - 0,0,0,115,190,0,0,0,124,0,106,0,125,1,122,22, - 116,1,160,2,124,1,112,22,116,1,160,3,161,0,161,1, - 125,2,87,0,110,30,4,0,116,4,116,5,116,6,102,3, - 107,10,114,58,1,0,1,0,1,0,103,0,125,2,89,0, - 110,2,88,0,116,7,106,8,160,9,100,1,161,1,115,84, - 116,10,124,2,131,1,124,0,95,11,110,74,116,10,131,0, - 125,3,124,2,68,0,93,56,125,4,124,4,160,12,100,2, - 161,1,92,3,125,5,125,6,125,7,124,6,114,136,100,3, - 160,13,124,5,124,7,160,14,161,0,161,2,125,8,110,4, - 124,5,125,8,124,3,160,15,124,8,161,1,1,0,113,94, - 124,3,124,0,95,11,116,7,106,8,160,9,116,16,161,1, - 114,186,100,4,100,5,132,0,124,2,68,0,131,1,124,0, - 95,17,100,6,83,0,41,7,122,68,70,105,108,108,32,116, - 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, - 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, - 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, - 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,0, - 0,0,0,114,71,0,0,0,114,61,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, - 0,0,83,0,0,0,115,20,0,0,0,104,0,124,0,93, - 12,125,1,124,1,160,0,161,0,146,2,113,4,83,0,114, - 3,0,0,0,41,1,114,106,0,0,0,41,2,114,32,0, - 0,0,90,2,102,110,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,9,60,115,101,116,99,111,109,112,62, - 1,6,0,0,115,4,0,0,0,6,0,2,0,122,41,70, - 105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,95, - 99,97,99,104,101,46,60,108,111,99,97,108,115,62,46,60, - 115,101,116,99,111,109,112,62,78,41,18,114,44,0,0,0, - 114,2,0,0,0,114,6,1,0,0,114,55,0,0,0,114, - 2,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, - 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, - 116,111,114,121,69,114,114,111,114,114,8,0,0,0,114,9, - 0,0,0,114,10,0,0,0,114,83,1,0,0,114,84,1, - 0,0,114,101,0,0,0,114,62,0,0,0,114,106,0,0, - 0,218,3,97,100,100,114,11,0,0,0,114,85,1,0,0, - 41,9,114,119,0,0,0,114,44,0,0,0,114,7,1,0, - 0,90,21,108,111,119,101,114,95,115,117,102,102,105,120,95, - 99,111,110,116,101,110,116,115,114,41,1,0,0,114,117,0, - 0,0,114,29,1,0,0,114,17,1,0,0,90,8,110,101, - 119,95,110,97,109,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,87,1,0,0,228,5,0,0,115,34, - 0,0,0,0,2,6,1,2,1,22,1,20,3,10,3,12, - 1,12,7,6,1,8,1,16,1,4,1,18,2,4,1,12, - 1,6,1,12,1,122,22,70,105,108,101,70,105,110,100,101, - 114,46,95,102,105,108,108,95,99,97,99,104,101,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,7,0,0,0,115,18,0,0,0,135,0,135,1,102, - 2,100,1,100,2,132,8,125,2,124,2,83,0,41,3,97, - 20,1,0,0,65,32,99,108,97,115,115,32,109,101,116,104, - 111,100,32,119,104,105,99,104,32,114,101,116,117,114,110,115, - 32,97,32,99,108,111,115,117,114,101,32,116,111,32,117,115, - 101,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,10,32,32,32,32,32,32,32,32,119,104,105,99,104, - 32,119,105,108,108,32,114,101,116,117,114,110,32,97,110,32, - 105,110,115,116,97,110,99,101,32,117,115,105,110,103,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,108,111,97, - 100,101,114,115,32,97,110,100,32,116,104,101,32,112,97,116, - 104,10,32,32,32,32,32,32,32,32,99,97,108,108,101,100, - 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,46, - 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, - 32,112,97,116,104,32,99,97,108,108,101,100,32,111,110,32, - 116,104,101,32,99,108,111,115,117,114,101,32,105,115,32,110, - 111,116,32,97,32,100,105,114,101,99,116,111,114,121,44,32, - 73,109,112,111,114,116,69,114,114,111,114,32,105,115,10,32, - 32,32,32,32,32,32,32,114,97,105,115,101,100,46,10,10, - 32,32,32,32,32,32,32,32,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,19,0,0, - 0,115,34,0,0,0,116,0,124,0,131,1,115,20,116,1, - 100,1,124,0,100,2,141,2,130,1,136,0,124,0,102,1, - 136,1,158,2,142,0,83,0,41,3,122,45,80,97,116,104, - 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, - 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, - 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, - 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, - 115,117,112,112,111,114,116,101,100,114,48,0,0,0,41,2, - 114,56,0,0,0,114,118,0,0,0,114,48,0,0,0,169, - 2,114,193,0,0,0,114,86,1,0,0,114,3,0,0,0, - 114,6,0,0,0,218,24,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,13, - 6,0,0,115,6,0,0,0,0,2,8,1,12,1,122,54, - 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, - 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, - 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,114,3,0,0,0,41,3,114,193,0, - 0,0,114,86,1,0,0,114,93,1,0,0,114,3,0,0, - 0,114,92,1,0,0,114,6,0,0,0,218,9,112,97,116, - 104,95,104,111,111,107,3,6,0,0,115,4,0,0,0,0, - 10,14,6,122,20,70,105,108,101,70,105,110,100,101,114,46, - 112,97,116,104,95,104,111,111,107,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, - 0,0,115,12,0,0,0,100,1,160,0,124,0,106,1,161, - 1,83,0,41,2,78,122,16,70,105,108,101,70,105,110,100, - 101,114,40,123,33,114,125,41,41,2,114,62,0,0,0,114, - 44,0,0,0,114,246,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,39,1,0,0,21,6,0, - 0,115,2,0,0,0,0,1,122,19,70,105,108,101,70,105, - 110,100,101,114,46,95,95,114,101,112,114,95,95,41,1,78, - 41,15,114,125,0,0,0,114,124,0,0,0,114,126,0,0, - 0,114,127,0,0,0,114,209,0,0,0,114,46,1,0,0, - 114,143,0,0,0,114,206,0,0,0,114,137,0,0,0,114, - 58,1,0,0,114,203,0,0,0,114,87,1,0,0,114,207, - 0,0,0,114,94,1,0,0,114,39,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,79,1,0,0,134,5,0,0,115,22,0,0,0,8, - 2,4,7,8,14,8,4,4,2,8,12,8,5,10,48,8, - 31,2,1,10,17,114,79,1,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,8,0,0,0,67, - 0,0,0,115,146,0,0,0,124,0,160,0,100,1,161,1, - 125,4,124,0,160,0,100,2,161,1,125,5,124,4,115,66, - 124,5,114,36,124,5,106,1,125,4,110,30,124,2,124,3, - 107,2,114,56,116,2,124,1,124,2,131,2,125,4,110,10, - 116,3,124,1,124,2,131,2,125,4,124,5,115,84,116,4, - 124,1,124,2,124,4,100,3,141,3,125,5,122,36,124,5, - 124,0,100,2,60,0,124,4,124,0,100,1,60,0,124,2, - 124,0,100,4,60,0,124,3,124,0,100,5,60,0,87,0, - 110,20,4,0,116,5,107,10,114,140,1,0,1,0,1,0, - 89,0,110,2,88,0,100,0,83,0,41,6,78,218,10,95, - 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, - 99,95,95,114,80,1,0,0,90,8,95,95,102,105,108,101, - 95,95,90,10,95,95,99,97,99,104,101,100,95,95,41,6, - 218,3,103,101,116,114,140,0,0,0,114,14,1,0,0,114, - 8,1,0,0,114,190,0,0,0,114,72,1,0,0,41,6, - 90,2,110,115,114,117,0,0,0,90,8,112,97,116,104,110, - 97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,140, - 0,0,0,114,187,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,14,95,102,105,120,95,117,112, - 95,109,111,100,117,108,101,27,6,0,0,115,34,0,0,0, - 0,2,10,1,10,1,4,1,4,1,8,1,8,1,12,2, - 10,1,4,1,14,1,2,1,8,1,8,1,8,1,12,1, - 14,2,114,98,1,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, - 115,38,0,0,0,116,0,116,1,160,2,161,0,102,2,125, - 0,116,3,116,4,102,2,125,1,116,5,116,6,102,2,125, - 2,124,0,124,1,124,2,103,3,83,0,41,1,122,95,82, - 101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102, - 32,102,105,108,101,45,98,97,115,101,100,32,109,111,100,117, - 108,101,32,108,111,97,100,101,114,115,46,10,10,32,32,32, - 32,69,97,99,104,32,105,116,101,109,32,105,115,32,97,32, - 116,117,112,108,101,32,40,108,111,97,100,101,114,44,32,115, - 117,102,102,105,120,101,115,41,46,10,32,32,32,32,41,7, - 114,15,1,0,0,114,163,0,0,0,218,18,101,120,116,101, - 110,115,105,111,110,95,115,117,102,102,105,120,101,115,114,8, - 1,0,0,114,102,0,0,0,114,14,1,0,0,114,89,0, - 0,0,41,3,90,10,101,120,116,101,110,115,105,111,110,115, - 90,6,115,111,117,114,99,101,90,8,98,121,116,101,99,111, - 100,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,184,0,0,0,50,6,0,0,115,8,0,0,0,0, - 5,12,1,8,1,8,1,114,184,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,12,0,0,0,9,0,0, - 0,67,0,0,0,115,178,1,0,0,124,0,97,0,116,0, - 106,1,97,1,116,0,106,2,97,2,116,1,106,3,116,4, - 25,0,125,1,100,1,68,0,93,48,125,2,124,2,116,1, - 106,3,107,7,114,56,116,0,160,5,124,2,161,1,125,3, - 110,10,116,1,106,3,124,2,25,0,125,3,116,6,124,1, - 124,2,124,3,131,3,1,0,113,30,100,2,100,3,103,1, - 102,2,100,4,100,5,100,3,103,2,102,2,102,2,125,4, - 124,4,68,0,93,110,92,2,125,5,125,6,116,7,100,6, - 100,7,132,0,124,6,68,0,131,1,131,1,115,136,116,8, - 130,1,124,6,100,8,25,0,125,7,124,5,116,1,106,3, - 107,6,114,170,116,1,106,3,124,5,25,0,125,8,1,0, - 113,226,113,106,122,20,116,0,160,5,124,5,161,1,125,8, - 87,0,1,0,113,226,87,0,113,106,4,0,116,9,107,10, - 114,214,1,0,1,0,1,0,89,0,113,106,89,0,113,106, - 88,0,113,106,116,9,100,9,131,1,130,1,116,6,124,1, - 100,10,124,8,131,3,1,0,116,6,124,1,100,11,124,7, - 131,3,1,0,116,6,124,1,100,12,100,13,160,10,124,6, - 161,1,131,3,1,0,116,6,124,1,100,14,100,15,100,16, - 132,0,124,6,68,0,131,1,131,3,1,0,116,0,160,5, - 100,17,161,1,125,9,116,6,124,1,100,17,124,9,131,3, - 1,0,116,0,160,5,100,18,161,1,125,10,116,6,124,1, - 100,18,124,10,131,3,1,0,124,5,100,4,107,2,144,1, - 114,110,116,0,160,5,100,19,161,1,125,11,116,6,124,1, - 100,20,124,11,131,3,1,0,116,6,124,1,100,21,116,11, - 131,0,131,3,1,0,116,12,160,13,116,2,160,14,161,0, - 161,1,1,0,124,5,100,4,107,2,144,1,114,174,116,15, - 160,16,100,22,161,1,1,0,100,23,116,12,107,6,144,1, - 114,174,100,24,116,17,95,18,100,25,83,0,41,26,122,205, - 83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,98, - 97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,102, - 111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,32, - 105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,100, - 10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,111, - 100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,116, - 105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,104, - 101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,97, - 99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,99, - 111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,120, - 116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,101, - 32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,41,4,114, - 64,0,0,0,114,75,0,0,0,218,8,98,117,105,108,116, - 105,110,115,114,160,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,0,0,0,0,2,0,0,0,3,0,0,0,115,0, - 0,0,115,26,0,0,0,124,0,93,18,125,1,116,0,124, - 1,131,1,100,0,107,2,86,0,1,0,113,2,100,1,83, - 0,41,2,114,39,0,0,0,78,41,1,114,22,0,0,0, - 41,2,114,32,0,0,0,114,95,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0, - 86,6,0,0,115,4,0,0,0,4,0,2,0,122,25,95, - 115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,60, - 103,101,110,101,120,112,114,62,114,73,0,0,0,122,30,105, - 109,112,111,114,116,108,105,98,32,114,101,113,117,105,114,101, - 115,32,112,111,115,105,120,32,111,114,32,110,116,114,2,0, - 0,0,114,35,0,0,0,114,31,0,0,0,114,40,0,0, - 0,114,58,0,0,0,99,1,0,0,0,0,0,0,0,0, + 100,0,108,2,125,2,100,1,100,3,108,3,109,4,125,3, + 1,0,124,1,116,5,131,1,143,24,1,0,124,2,160,4, + 124,0,161,1,87,0,2,0,53,0,81,0,82,0,163,0, + 83,0,81,0,82,0,88,0,124,3,124,0,131,1,83,0, + 41,4,78,114,73,0,0,0,41,1,218,8,115,117,112,112, + 114,101,115,115,41,1,218,4,80,97,116,104,41,6,90,10, + 99,111,110,116,101,120,116,108,105,98,114,69,1,0,0,218, + 7,122,105,112,102,105,108,101,90,7,112,97,116,104,108,105, + 98,114,70,1,0,0,218,9,69,120,99,101,112,116,105,111, + 110,41,4,114,44,0,0,0,114,69,1,0,0,114,71,1, + 0,0,114,70,1,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,68,1,0,0,110,5,0,0,115, + 12,0,0,0,0,2,12,1,8,1,12,1,10,1,28,1, + 122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,119, + 105,116,99,104,95,112,97,116,104,99,4,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, + 0,0,115,32,0,0,0,100,1,100,0,108,0,125,4,124, + 4,106,1,124,1,116,2,124,3,106,3,131,1,124,4,106, + 4,100,2,141,3,83,0,41,3,78,114,73,0,0,0,41, + 1,114,83,0,0,0,41,5,114,60,1,0,0,90,5,109, + 97,116,99,104,114,85,0,0,0,114,117,0,0,0,90,10, + 73,71,78,79,82,69,67,65,83,69,41,5,114,193,0,0, + 0,114,63,1,0,0,218,4,114,111,111,116,114,41,1,0, + 0,114,60,1,0,0,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,10,95,112,114,101,100,105,99,97,116, + 101,119,5,0,0,115,4,0,0,0,0,2,8,1,122,21, + 80,97,116,104,70,105,110,100,101,114,46,95,112,114,101,100, + 105,99,97,116,101,99,3,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,4,0,0,0,3,0,0,0,115,64, + 0,0,0,136,2,160,0,161,0,115,12,100,1,83,0,124, + 2,160,1,100,2,100,3,161,2,125,3,136,0,106,2,106, + 3,124,3,100,4,141,1,137,1,135,0,135,1,135,2,102, + 3,100,5,100,6,132,8,136,2,160,4,161,0,68,0,131, + 1,83,0,41,7,78,114,3,0,0,0,250,1,45,114,45, + 0,0,0,41,1,114,63,1,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,51, + 0,0,0,115,32,0,0,0,124,0,93,24,125,1,136,0, + 160,0,136,1,136,2,124,1,161,3,114,26,124,1,86,0, + 1,0,113,2,100,0,83,0,114,110,0,0,0,41,1,114, + 74,1,0,0,41,2,114,32,0,0,0,114,41,1,0,0, + 169,3,114,193,0,0,0,90,7,109,97,116,99,104,101,114, + 114,73,1,0,0,114,3,0,0,0,114,6,0,0,0,114, + 19,1,0,0,130,5,0,0,115,6,0,0,0,4,0,2, + 1,14,255,122,42,80,97,116,104,70,105,110,100,101,114,46, + 95,115,101,97,114,99,104,95,112,97,116,104,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41, + 5,90,6,105,115,95,100,105,114,114,67,0,0,0,218,15, + 115,101,97,114,99,104,95,116,101,109,112,108,97,116,101,114, + 62,0,0,0,90,7,105,116,101,114,100,105,114,41,4,114, + 193,0,0,0,114,73,1,0,0,114,63,1,0,0,90,10, + 110,111,114,109,97,108,105,122,101,100,114,3,0,0,0,114, + 76,1,0,0,114,6,0,0,0,114,65,1,0,0,124,5, + 0,0,115,10,0,0,0,0,2,8,1,4,1,12,1,14, + 1,122,23,80,97,116,104,70,105,110,100,101,114,46,95,115, + 101,97,114,99,104,95,112,97,116,104,41,1,78,41,2,78, + 78,41,1,78,41,2,78,78,41,19,114,125,0,0,0,114, + 124,0,0,0,114,126,0,0,0,114,127,0,0,0,114,207, + 0,0,0,114,46,1,0,0,114,52,1,0,0,114,54,1, + 0,0,114,55,1,0,0,114,58,1,0,0,114,203,0,0, + 0,114,206,0,0,0,114,77,1,0,0,114,64,1,0,0, + 114,61,1,0,0,218,12,115,116,97,116,105,99,109,101,116, + 104,111,100,114,68,1,0,0,114,74,1,0,0,114,65,1, + 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,45,1,0,0,205,4,0,0,115, + 52,0,0,0,8,2,4,2,2,1,10,9,2,1,10,12, + 2,1,10,21,2,1,10,14,2,1,12,31,2,1,12,23, + 2,1,12,12,4,2,2,1,12,14,2,1,10,10,2,1, + 10,8,2,1,10,4,2,1,114,45,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,64,0,0,0,115,90,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,101,6,90,7,100,6,100,7,132, + 0,90,8,100,8,100,9,132,0,90,9,100,19,100,11,100, + 12,132,1,90,10,100,13,100,14,132,0,90,11,101,12,100, + 15,100,16,132,0,131,1,90,13,100,17,100,18,132,0,90, + 14,100,10,83,0,41,20,218,10,70,105,108,101,70,105,110, + 100,101,114,122,172,70,105,108,101,45,98,97,115,101,100,32, + 102,105,110,100,101,114,46,10,10,32,32,32,32,73,110,116, + 101,114,97,99,116,105,111,110,115,32,119,105,116,104,32,116, + 104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,97, + 114,101,32,99,97,99,104,101,100,32,102,111,114,32,112,101, + 114,102,111,114,109,97,110,99,101,44,32,98,101,105,110,103, + 10,32,32,32,32,114,101,102,114,101,115,104,101,100,32,119, + 104,101,110,32,116,104,101,32,100,105,114,101,99,116,111,114, + 121,32,116,104,101,32,102,105,110,100,101,114,32,105,115,32, + 104,97,110,100,108,105,110,103,32,104,97,115,32,98,101,101, + 110,32,109,111,100,105,102,105,101,100,46,10,10,32,32,32, + 32,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,6,0,0,0,7,0,0,0,115,84,0,0,0,103, + 0,125,3,124,2,68,0,93,32,92,2,137,0,125,4,124, + 3,160,0,135,0,102,1,100,1,100,2,132,8,124,4,68, + 0,131,1,161,1,1,0,113,8,124,3,124,0,95,1,124, + 1,112,54,100,3,124,0,95,2,100,4,124,0,95,3,116, + 4,131,0,124,0,95,5,116,4,131,0,124,0,95,6,100, + 5,83,0,41,6,122,154,73,110,105,116,105,97,108,105,122, + 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, + 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, + 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, + 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, + 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, + 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, + 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, + 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, + 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, + 46,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,51,0,0,0,115,22,0,0,0,124, + 0,93,14,125,1,124,1,136,0,102,2,86,0,1,0,113, + 2,100,0,83,0,114,110,0,0,0,114,3,0,0,0,114, + 16,1,0,0,169,1,114,140,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,19,1,0,0,149,5,0,0,115,4, + 0,0,0,4,0,2,0,122,38,70,105,108,101,70,105,110, + 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, + 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, + 71,0,0,0,114,105,0,0,0,78,41,7,114,167,0,0, + 0,218,8,95,108,111,97,100,101,114,115,114,44,0,0,0, + 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, + 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, + 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, + 97,99,104,101,41,5,114,119,0,0,0,114,44,0,0,0, + 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, + 90,7,108,111,97,100,101,114,115,114,189,0,0,0,114,3, + 0,0,0,114,80,1,0,0,114,6,0,0,0,114,209,0, + 0,0,143,5,0,0,115,16,0,0,0,0,4,4,1,12, + 1,26,1,6,2,10,1,6,1,8,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,67,0,0,0,115,10,0,0,0,100,1, + 124,0,95,0,100,2,83,0,41,3,122,31,73,110,118,97, + 108,105,100,97,116,101,32,116,104,101,32,100,105,114,101,99, + 116,111,114,121,32,109,116,105,109,101,46,114,105,0,0,0, + 78,41,1,114,82,1,0,0,114,246,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,46,1,0, + 0,157,5,0,0,115,2,0,0,0,0,2,122,28,70,105, + 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, + 0,0,0,115,42,0,0,0,124,0,160,0,124,1,161,1, + 125,2,124,2,100,1,107,8,114,26,100,1,103,0,102,2, + 83,0,124,2,106,1,124,2,106,2,112,38,103,0,102,2, + 83,0,41,2,122,197,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, + 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, + 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, + 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, + 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, + 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, + 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, + 46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,203, + 0,0,0,114,140,0,0,0,114,178,0,0,0,41,3,114, + 119,0,0,0,114,139,0,0,0,114,187,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,137,0, + 0,0,163,5,0,0,115,8,0,0,0,0,7,10,1,8, + 1,8,1,122,22,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,108,111,97,100,101,114,99,6,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0, + 67,0,0,0,115,26,0,0,0,124,1,124,2,124,3,131, + 2,125,6,116,0,124,2,124,3,124,6,124,4,100,1,141, + 4,83,0,41,2,78,114,177,0,0,0,41,1,114,190,0, + 0,0,41,7,114,119,0,0,0,114,188,0,0,0,114,139, + 0,0,0,114,44,0,0,0,90,4,115,109,115,108,114,202, + 0,0,0,114,140,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,58,1,0,0,175,5,0,0, + 115,8,0,0,0,0,1,10,1,8,1,2,255,122,20,70, + 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, + 112,101,99,78,99,3,0,0,0,0,0,0,0,0,0,0, + 0,14,0,0,0,8,0,0,0,67,0,0,0,115,102,1, + 0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,3, + 25,0,125,4,122,24,116,1,124,0,106,2,112,34,116,3, + 160,4,161,0,131,1,106,5,125,5,87,0,110,24,4,0, + 116,6,107,10,114,66,1,0,1,0,1,0,100,4,125,5, + 89,0,110,2,88,0,124,5,124,0,106,7,107,3,114,92, + 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, + 131,0,114,114,124,0,106,10,125,6,124,4,160,11,161,0, + 125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7, + 124,6,107,6,114,218,116,13,124,0,106,2,124,4,131,2, + 125,8,124,0,106,14,68,0,93,58,92,2,125,9,125,10, + 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, + 125,12,116,15,124,12,131,1,114,208,124,0,160,16,124,10, + 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, + 83,0,113,150,116,17,124,8,131,1,125,3,124,0,106,14, + 68,0,93,86,92,2,125,9,125,10,116,13,124,0,106,2, + 124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6, + 124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0, + 124,6,107,6,144,1,114,54,116,15,124,12,131,1,144,1, + 114,54,124,0,160,16,124,10,124,1,124,12,100,8,124,2, + 161,5,2,0,1,0,83,0,113,224,124,3,144,1,114,98, + 116,18,160,19,100,9,124,8,161,2,1,0,116,18,160,20, + 124,1,100,8,161,2,125,13,124,8,103,1,124,13,95,21, + 124,13,83,0,100,8,83,0,41,10,122,111,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, + 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, + 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, + 100,46,10,32,32,32,32,32,32,32,32,70,114,71,0,0, + 0,114,28,0,0,0,114,105,0,0,0,114,209,0,0,0, + 122,9,116,114,121,105,110,103,32,123,125,41,1,90,9,118, + 101,114,98,111,115,105,116,121,78,122,25,112,111,115,115,105, + 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, + 114,32,123,125,41,22,114,41,0,0,0,114,49,0,0,0, + 114,44,0,0,0,114,2,0,0,0,114,55,0,0,0,114, + 9,1,0,0,114,50,0,0,0,114,82,1,0,0,218,11, + 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, + 114,85,1,0,0,114,106,0,0,0,114,84,1,0,0,114, + 38,0,0,0,114,81,1,0,0,114,54,0,0,0,114,58, + 1,0,0,114,56,0,0,0,114,134,0,0,0,114,149,0, + 0,0,114,183,0,0,0,114,178,0,0,0,41,14,114,119, + 0,0,0,114,139,0,0,0,114,202,0,0,0,90,12,105, + 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, + 108,95,109,111,100,117,108,101,114,169,0,0,0,90,5,99, + 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, + 108,101,90,9,98,97,115,101,95,112,97,116,104,114,17,1, + 0,0,114,188,0,0,0,90,13,105,110,105,116,95,102,105, + 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, + 104,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,203,0,0,0,180,5,0,0,115,74, + 0,0,0,0,5,4,1,14,1,2,1,24,1,14,1,10, + 1,10,1,8,1,6,2,6,1,6,1,10,2,6,1,4, + 2,8,1,12,1,14,1,8,1,10,1,8,1,26,4,8, + 2,14,1,16,1,16,1,14,1,10,1,10,1,2,0,2, + 255,10,2,6,1,12,1,12,1,8,1,4,1,122,20,70, + 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, + 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, + 9,0,0,0,10,0,0,0,67,0,0,0,115,190,0,0, + 0,124,0,106,0,125,1,122,22,116,1,160,2,124,1,112, + 22,116,1,160,3,161,0,161,1,125,2,87,0,110,30,4, + 0,116,4,116,5,116,6,102,3,107,10,114,58,1,0,1, + 0,1,0,103,0,125,2,89,0,110,2,88,0,116,7,106, + 8,160,9,100,1,161,1,115,84,116,10,124,2,131,1,124, + 0,95,11,110,74,116,10,131,0,125,3,124,2,68,0,93, + 56,125,4,124,4,160,12,100,2,161,1,92,3,125,5,125, + 6,125,7,124,6,114,136,100,3,160,13,124,5,124,7,160, + 14,161,0,161,2,125,8,110,4,124,5,125,8,124,3,160, + 15,124,8,161,1,1,0,113,94,124,3,124,0,95,11,116, + 7,106,8,160,9,116,16,161,1,114,186,100,4,100,5,132, + 0,124,2,68,0,131,1,124,0,95,17,100,6,83,0,41, + 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, + 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, + 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, + 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, + 101,99,116,111,114,121,46,114,0,0,0,0,114,71,0,0, + 0,114,61,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, - 22,0,0,0,104,0,124,0,93,14,125,1,100,0,124,1, - 155,0,157,2,146,2,113,4,83,0,41,1,114,74,0,0, - 0,114,3,0,0,0,41,2,114,32,0,0,0,218,1,115, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 88,1,0,0,102,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,192,0,0,0,114,7,0,0, - 0,122,4,46,112,121,119,122,6,95,100,46,112,121,100,84, - 78,41,19,114,134,0,0,0,114,8,0,0,0,114,163,0, - 0,0,114,31,1,0,0,114,125,0,0,0,90,18,95,98, - 117,105,108,116,105,110,95,102,114,111,109,95,110,97,109,101, - 114,129,0,0,0,218,3,97,108,108,114,23,0,0,0,114, - 118,0,0,0,114,36,0,0,0,114,13,0,0,0,114,21, - 1,0,0,114,167,0,0,0,114,99,1,0,0,114,102,0, - 0,0,114,186,0,0,0,114,191,0,0,0,114,195,0,0, - 0,41,12,218,17,95,98,111,111,116,115,116,114,97,112,95, - 109,111,100,117,108,101,90,11,115,101,108,102,95,109,111,100, - 117,108,101,90,12,98,117,105,108,116,105,110,95,110,97,109, - 101,90,14,98,117,105,108,116,105,110,95,109,111,100,117,108, - 101,90,10,111,115,95,100,101,116,97,105,108,115,90,10,98, - 117,105,108,116,105,110,95,111,115,114,31,0,0,0,114,35, - 0,0,0,90,9,111,115,95,109,111,100,117,108,101,90,13, - 116,104,114,101,97,100,95,109,111,100,117,108,101,90,14,119, - 101,97,107,114,101,102,95,109,111,100,117,108,101,90,13,119, - 105,110,114,101,103,95,109,111,100,117,108,101,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,6,95,115,101, - 116,117,112,61,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,106,1,0,0,99, + 20,0,0,0,104,0,124,0,93,12,125,1,124,1,160,0, + 161,0,146,2,113,4,83,0,114,3,0,0,0,41,1,114, + 106,0,0,0,41,2,114,32,0,0,0,90,2,102,110,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,9, + 60,115,101,116,99,111,109,112,62,1,6,0,0,115,4,0, + 0,0,6,0,2,0,122,41,70,105,108,101,70,105,110,100, + 101,114,46,95,102,105,108,108,95,99,97,99,104,101,46,60, + 108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,112, + 62,78,41,18,114,44,0,0,0,114,2,0,0,0,114,6, + 1,0,0,114,55,0,0,0,114,2,1,0,0,218,15,80, + 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, + 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, + 111,114,114,8,0,0,0,114,9,0,0,0,114,10,0,0, + 0,114,83,1,0,0,114,84,1,0,0,114,101,0,0,0, + 114,62,0,0,0,114,106,0,0,0,218,3,97,100,100,114, + 11,0,0,0,114,85,1,0,0,41,9,114,119,0,0,0, + 114,44,0,0,0,114,7,1,0,0,90,21,108,111,119,101, + 114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,116, + 115,114,41,1,0,0,114,117,0,0,0,114,29,1,0,0, + 114,17,1,0,0,90,8,110,101,119,95,110,97,109,101,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,87, + 1,0,0,228,5,0,0,115,34,0,0,0,0,2,6,1, + 2,1,22,1,20,3,10,3,12,1,12,7,6,1,8,1, + 16,1,4,1,18,2,4,1,12,1,6,1,12,1,122,22, + 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, + 95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, + 18,0,0,0,135,0,135,1,102,2,100,1,100,2,132,8, + 125,2,124,2,83,0,41,3,97,20,1,0,0,65,32,99, + 108,97,115,115,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,114,101,116,117,114,110,115,32,97,32,99,108,111,115, + 117,114,101,32,116,111,32,117,115,101,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,10,32,32,32,32, + 32,32,32,32,119,104,105,99,104,32,119,105,108,108,32,114, + 101,116,117,114,110,32,97,110,32,105,110,115,116,97,110,99, + 101,32,117,115,105,110,103,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,108,111,97,100,101,114,115,32,97,110, + 100,32,116,104,101,32,112,97,116,104,10,32,32,32,32,32, + 32,32,32,99,97,108,108,101,100,32,111,110,32,116,104,101, + 32,99,108,111,115,117,114,101,46,10,10,32,32,32,32,32, + 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,99, + 97,108,108,101,100,32,111,110,32,116,104,101,32,99,108,111, + 115,117,114,101,32,105,115,32,110,111,116,32,97,32,100,105, + 114,101,99,116,111,114,121,44,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,115,10,32,32,32,32,32,32,32,32, + 114,97,105,115,101,100,46,10,10,32,32,32,32,32,32,32, + 32,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,4,0,0,0,19,0,0,0,115,34,0,0,0,116, + 0,124,0,131,1,115,20,116,1,100,1,124,0,100,2,141, + 2,130,1,136,0,124,0,102,1,136,1,158,2,142,0,83, + 0,41,3,122,45,80,97,116,104,32,104,111,111,107,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, + 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, + 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, + 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, + 101,100,114,48,0,0,0,41,2,114,56,0,0,0,114,118, + 0,0,0,114,48,0,0,0,169,2,114,193,0,0,0,114, + 86,1,0,0,114,3,0,0,0,114,6,0,0,0,218,24, + 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, + 108,101,70,105,110,100,101,114,13,6,0,0,115,6,0,0, + 0,0,2,8,1,12,1,122,54,70,105,108,101,70,105,110, + 100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,108, + 111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,107, + 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,114, + 3,0,0,0,41,3,114,193,0,0,0,114,86,1,0,0, + 114,93,1,0,0,114,3,0,0,0,114,92,1,0,0,114, + 6,0,0,0,218,9,112,97,116,104,95,104,111,111,107,3, + 6,0,0,115,4,0,0,0,0,10,14,6,122,20,70,105, + 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, + 111,107,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, + 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, + 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, + 41,41,2,114,62,0,0,0,114,44,0,0,0,114,246,0, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,114,39,1,0,0,21,6,0,0,115,2,0,0,0,0, + 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, + 114,101,112,114,95,95,41,1,78,41,15,114,125,0,0,0, + 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, + 209,0,0,0,114,46,1,0,0,114,143,0,0,0,114,206, + 0,0,0,114,137,0,0,0,114,58,1,0,0,114,203,0, + 0,0,114,87,1,0,0,114,207,0,0,0,114,94,1,0, + 0,114,39,1,0,0,114,3,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,79,1,0,0,134, + 5,0,0,115,22,0,0,0,8,2,4,7,8,14,8,4, + 4,2,8,12,8,5,10,48,8,31,2,1,10,17,114,79, + 1,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,8,0,0,0,67,0,0,0,115,146,0,0, + 0,124,0,160,0,100,1,161,1,125,4,124,0,160,0,100, + 2,161,1,125,5,124,4,115,66,124,5,114,36,124,5,106, + 1,125,4,110,30,124,2,124,3,107,2,114,56,116,2,124, + 1,124,2,131,2,125,4,110,10,116,3,124,1,124,2,131, + 2,125,4,124,5,115,84,116,4,124,1,124,2,124,4,100, + 3,141,3,125,5,122,36,124,5,124,0,100,2,60,0,124, + 4,124,0,100,1,60,0,124,2,124,0,100,4,60,0,124, + 3,124,0,100,5,60,0,87,0,110,20,4,0,116,5,107, + 10,114,140,1,0,1,0,1,0,89,0,110,2,88,0,100, + 0,83,0,41,6,78,218,10,95,95,108,111,97,100,101,114, + 95,95,218,8,95,95,115,112,101,99,95,95,114,80,1,0, + 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, + 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,140, + 0,0,0,114,14,1,0,0,114,8,1,0,0,114,190,0, + 0,0,114,72,1,0,0,41,6,90,2,110,115,114,117,0, + 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, + 97,116,104,110,97,109,101,114,140,0,0,0,114,187,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 27,6,0,0,115,34,0,0,0,0,2,10,1,10,1,4, + 1,4,1,8,1,8,1,12,2,10,1,4,1,14,1,2, + 1,8,1,8,1,8,1,12,1,14,2,114,98,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0, + 116,1,160,2,161,0,102,2,125,0,116,3,116,4,102,2, + 125,1,116,5,116,6,102,2,125,2,124,0,124,1,124,2, + 103,3,83,0,41,1,122,95,82,101,116,117,114,110,115,32, + 97,32,108,105,115,116,32,111,102,32,102,105,108,101,45,98, + 97,115,101,100,32,109,111,100,117,108,101,32,108,111,97,100, + 101,114,115,46,10,10,32,32,32,32,69,97,99,104,32,105, + 116,101,109,32,105,115,32,97,32,116,117,112,108,101,32,40, + 108,111,97,100,101,114,44,32,115,117,102,102,105,120,101,115, + 41,46,10,32,32,32,32,41,7,114,15,1,0,0,114,163, + 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, + 117,102,102,105,120,101,115,114,8,1,0,0,114,102,0,0, + 0,114,14,1,0,0,114,89,0,0,0,41,3,90,10,101, + 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99, + 101,90,8,98,121,116,101,99,111,100,101,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,184,0,0,0,50, + 6,0,0,115,8,0,0,0,0,5,12,1,8,1,8,1, + 114,184,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,12,0,0,0,9,0,0,0,67,0,0,0,115,178, + 1,0,0,124,0,97,0,116,0,106,1,97,1,116,0,106, + 2,97,2,116,1,106,3,116,4,25,0,125,1,100,1,68, + 0,93,48,125,2,124,2,116,1,106,3,107,7,114,56,116, + 0,160,5,124,2,161,1,125,3,110,10,116,1,106,3,124, + 2,25,0,125,3,116,6,124,1,124,2,124,3,131,3,1, + 0,113,30,100,2,100,3,103,1,102,2,100,4,100,5,100, + 3,103,2,102,2,102,2,125,4,124,4,68,0,93,110,92, + 2,125,5,125,6,116,7,100,6,100,7,132,0,124,6,68, + 0,131,1,131,1,115,136,116,8,130,1,124,6,100,8,25, + 0,125,7,124,5,116,1,106,3,107,6,114,170,116,1,106, + 3,124,5,25,0,125,8,1,0,113,226,113,106,122,20,116, + 0,160,5,124,5,161,1,125,8,87,0,1,0,113,226,87, + 0,113,106,4,0,116,9,107,10,114,214,1,0,1,0,1, + 0,89,0,113,106,89,0,113,106,88,0,113,106,116,9,100, + 9,131,1,130,1,116,6,124,1,100,10,124,8,131,3,1, + 0,116,6,124,1,100,11,124,7,131,3,1,0,116,6,124, + 1,100,12,100,13,160,10,124,6,161,1,131,3,1,0,116, + 6,124,1,100,14,100,15,100,16,132,0,124,6,68,0,131, + 1,131,3,1,0,116,0,160,5,100,17,161,1,125,9,116, + 6,124,1,100,17,124,9,131,3,1,0,116,0,160,5,100, + 18,161,1,125,10,116,6,124,1,100,18,124,10,131,3,1, + 0,124,5,100,4,107,2,144,1,114,110,116,0,160,5,100, + 19,161,1,125,11,116,6,124,1,100,20,124,11,131,3,1, + 0,116,6,124,1,100,21,116,11,131,0,131,3,1,0,116, + 12,160,13,116,2,160,14,161,0,161,1,1,0,124,5,100, + 4,107,2,144,1,114,174,116,15,160,16,100,22,161,1,1, + 0,100,23,116,12,107,6,144,1,114,174,100,24,116,17,95, + 18,100,25,83,0,41,26,122,205,83,101,116,117,112,32,116, + 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, + 112,111,114,116,101,114,115,32,102,111,114,32,105,109,112,111, + 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105, + 110,103,32,110,101,101,100,101,100,10,32,32,32,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, + 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, + 109,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97, + 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32, + 32,32,79,116,104,101,114,32,99,111,109,112,111,110,101,110, + 116,115,32,97,114,101,32,101,120,116,114,97,99,116,101,100, + 32,102,114,111,109,32,116,104,101,32,99,111,114,101,32,98, + 111,111,116,115,116,114,97,112,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,41,4,114,64,0,0,0,114,75,0, + 0,0,218,8,98,117,105,108,116,105,110,115,114,160,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,0,0,0,0,2, + 0,0,0,3,0,0,0,115,0,0,0,115,26,0,0,0, + 124,0,93,18,125,1,116,0,124,1,131,1,100,0,107,2, + 86,0,1,0,113,2,100,1,83,0,41,2,114,39,0,0, + 0,78,41,1,114,22,0,0,0,41,2,114,32,0,0,0, + 114,95,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,19,1,0,0,86,6,0,0,115,4,0, + 0,0,4,0,2,0,122,25,95,115,101,116,117,112,46,60, + 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, + 62,114,73,0,0,0,122,30,105,109,112,111,114,116,108,105, + 98,32,114,101,113,117,105,114,101,115,32,112,111,115,105,120, + 32,111,114,32,110,116,114,2,0,0,0,114,35,0,0,0, + 114,31,0,0,0,114,40,0,0,0,114,58,0,0,0,99, 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,67,0,0,0,115,50,0,0,0,116,0,124, - 0,131,1,1,0,116,1,131,0,125,1,116,2,106,3,160, - 4,116,5,106,6,124,1,142,0,103,1,161,1,1,0,116, - 2,106,7,160,8,116,9,161,1,1,0,100,1,83,0,41, - 2,122,41,73,110,115,116,97,108,108,32,116,104,101,32,112, - 97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,116, - 32,99,111,109,112,111,110,101,110,116,115,46,78,41,10,114, - 106,1,0,0,114,184,0,0,0,114,8,0,0,0,114,51, - 1,0,0,114,167,0,0,0,114,79,1,0,0,114,94,1, - 0,0,218,9,109,101,116,97,95,112,97,116,104,114,186,0, - 0,0,114,45,1,0,0,41,2,114,105,1,0,0,90,17, - 115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114, - 115,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,8,95,105,110,115,116,97,108,108,126,6,0,0,115,8, - 0,0,0,0,2,8,1,6,1,20,1,114,108,1,0,0, - 41,63,114,127,0,0,0,114,12,0,0,0,90,37,95,67, - 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, - 80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95, - 75,69,89,114,11,0,0,0,114,13,0,0,0,114,20,0, - 0,0,114,27,0,0,0,114,29,0,0,0,114,38,0,0, - 0,114,47,0,0,0,114,49,0,0,0,114,53,0,0,0, - 114,54,0,0,0,114,56,0,0,0,114,59,0,0,0,114, - 69,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111, - 100,101,95,95,114,162,0,0,0,114,18,0,0,0,114,148, - 0,0,0,114,17,0,0,0,114,24,0,0,0,114,236,0, - 0,0,114,92,0,0,0,114,88,0,0,0,114,102,0,0, - 0,114,89,0,0,0,90,23,68,69,66,85,71,95,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90, - 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67, - 79,68,69,95,83,85,70,70,73,88,69,83,114,98,0,0, - 0,114,103,0,0,0,114,109,0,0,0,114,113,0,0,0, - 114,115,0,0,0,114,136,0,0,0,114,143,0,0,0,114, - 152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165, - 0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0, - 0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114, - 190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221, - 0,0,0,114,239,0,0,0,114,8,1,0,0,114,14,1, - 0,0,114,21,1,0,0,114,15,1,0,0,114,22,1,0, - 0,114,43,1,0,0,114,45,1,0,0,114,79,1,0,0, - 114,98,1,0,0,114,184,0,0,0,114,106,1,0,0,114, - 108,1,0,0,114,3,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108, - 101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4, - 1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8, - 6,8,12,8,10,8,9,8,5,8,7,8,9,12,22,10, - 127,0,8,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,63,14,42,14,127,0,58,14, - 127,0,22,12,23,8,11,8,65, + 4,0,0,0,83,0,0,0,115,22,0,0,0,104,0,124, + 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113, + 4,83,0,41,1,114,74,0,0,0,114,3,0,0,0,41, + 2,114,32,0,0,0,218,1,115,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,88,1,0,0,102,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,192,0,0,0,114,7,0,0,0,122,4,46,112,121,119, + 122,6,95,100,46,112,121,100,84,78,41,19,114,134,0,0, + 0,114,8,0,0,0,114,163,0,0,0,114,31,1,0,0, + 114,125,0,0,0,90,18,95,98,117,105,108,116,105,110,95, + 102,114,111,109,95,110,97,109,101,114,129,0,0,0,218,3, + 97,108,108,114,23,0,0,0,114,118,0,0,0,114,36,0, + 0,0,114,13,0,0,0,114,21,1,0,0,114,167,0,0, + 0,114,99,1,0,0,114,102,0,0,0,114,186,0,0,0, + 114,191,0,0,0,114,195,0,0,0,41,12,218,17,95,98, + 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,90, + 11,115,101,108,102,95,109,111,100,117,108,101,90,12,98,117, + 105,108,116,105,110,95,110,97,109,101,90,14,98,117,105,108, + 116,105,110,95,109,111,100,117,108,101,90,10,111,115,95,100, + 101,116,97,105,108,115,90,10,98,117,105,108,116,105,110,95, + 111,115,114,31,0,0,0,114,35,0,0,0,90,9,111,115, + 95,109,111,100,117,108,101,90,13,116,104,114,101,97,100,95, + 109,111,100,117,108,101,90,14,119,101,97,107,114,101,102,95, + 109,111,100,117,108,101,90,13,119,105,110,114,101,103,95,109, + 111,100,117,108,101,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,218,6,95,115,101,116,117,112,61,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,106,1,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, + 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, + 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, + 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, + 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, + 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, + 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, + 101,110,116,115,46,78,41,10,114,106,1,0,0,114,184,0, + 0,0,114,8,0,0,0,114,51,1,0,0,114,167,0,0, + 0,114,79,1,0,0,114,94,1,0,0,218,9,109,101,116, + 97,95,112,97,116,104,114,186,0,0,0,114,45,1,0,0, + 41,2,114,105,1,0,0,90,17,115,117,112,112,111,114,116, + 101,100,95,108,111,97,100,101,114,115,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,218,8,95,105,110,115,116, + 97,108,108,126,6,0,0,115,8,0,0,0,0,2,8,1, + 6,1,20,1,114,108,1,0,0,41,63,114,127,0,0,0, + 114,12,0,0,0,90,37,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,95,66,89,84,69,83,95,75,69,89,114,11,0,0, + 0,114,13,0,0,0,114,20,0,0,0,114,27,0,0,0, + 114,29,0,0,0,114,38,0,0,0,114,47,0,0,0,114, + 49,0,0,0,114,53,0,0,0,114,54,0,0,0,114,56, + 0,0,0,114,59,0,0,0,114,69,0,0,0,218,4,116, + 121,112,101,218,8,95,95,99,111,100,101,95,95,114,162,0, + 0,0,114,18,0,0,0,114,148,0,0,0,114,17,0,0, + 0,114,24,0,0,0,114,236,0,0,0,114,92,0,0,0, + 114,88,0,0,0,114,102,0,0,0,114,89,0,0,0,90, + 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, + 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, + 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,114,98,0,0,0,114,103,0,0,0,114, + 109,0,0,0,114,113,0,0,0,114,115,0,0,0,114,136, + 0,0,0,114,143,0,0,0,114,152,0,0,0,114,156,0, + 0,0,114,158,0,0,0,114,165,0,0,0,114,170,0,0, + 0,114,171,0,0,0,114,176,0,0,0,218,6,111,98,106, + 101,99,116,114,185,0,0,0,114,190,0,0,0,114,191,0, + 0,0,114,208,0,0,0,114,221,0,0,0,114,239,0,0, + 0,114,8,1,0,0,114,14,1,0,0,114,21,1,0,0, + 114,15,1,0,0,114,22,1,0,0,114,43,1,0,0,114, + 45,1,0,0,114,79,1,0,0,114,98,1,0,0,114,184, + 0,0,0,114,106,1,0,0,114,108,1,0,0,114,3,0, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,8,60,109,111,100,117,108,101,62,1,0,0,0,115, + 126,0,0,0,4,22,4,1,4,1,2,1,2,255,4,4, + 8,17,8,5,8,5,8,6,8,6,8,12,8,10,8,9, + 8,5,8,7,8,9,12,22,10,127,0,8,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,63,14,42,14,127,0,58,14,127,0,22,12,23,8,11, + 8,65, }; From 34142cd8880a06151ee331ce5ed05f60eb650e95 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 10:02:00 -0400 Subject: [PATCH 15/23] Apply changes from importlib_metadata 0.12. --- Lib/importlib/_bootstrap_external.py | 2 +- Lib/test/test_importlib/test_zip.py | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index b111ea3163f3a1..45fd087c5fe4dd 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1359,7 +1359,7 @@ def find_module(cls, fullname, path=None): return None return spec.loader - search_template = r'{pattern}(-.*)?\.(dist|egg)-info' + search_template = r'(?:{pattern}(-.*)?\.(dist|egg)-info|EGG-INFO)' @classmethod def find_distributions(cls, name=None, path=None): diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index c7c8c0b1843b20..9b6bce0d4c2faa 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -6,13 +6,9 @@ from importlib.resources import path -class BespokeLoader: - archive = 'bespoke' - - class TestZip(unittest.TestCase): def setUp(self): - # Find the path to the example.*.whl so we can add it to the front of + # Find the path to the example-*.whl so we can add it to the front of # sys.path, where we'll then try to find the metadata thereof. self.resources = ExitStack() self.addCleanup(self.resources.close) @@ -40,3 +36,21 @@ def test_files(self): for file in files('example'): path = str(file.dist.locate_file(file)) assert '.whl/' in path, path + + +class TestEgg(TestZip): + def setUp(self): + # Find the path to the example-*.egg so we can add it to the front of + # sys.path, where we'll then try to find the metadata thereof. + self.resources = ExitStack() + self.addCleanup(self.resources.close) + egg = self.resources.enter_context( + path('importlib_metadata.tests.data', + 'example-21.12-py3.6.egg')) + sys.path.insert(0, str(egg)) + self.resources.callback(sys.path.pop, 0) + + def test_files(self): + for file in files('example'): + path = str(file.dist.locate_file(file)) + assert '.egg/' in path, path From 569e1ac1cefd9c1de3d46e978d14580076336db4 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 10:07:52 -0400 Subject: [PATCH 16/23] Make regen-all --- Python/importlib_external.h | 1184 +++++++++++++++++------------------ 1 file changed, 592 insertions(+), 592 deletions(-) diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 3a5c83b98695d7..e0bbb8588fb261 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2232,598 +2232,598 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 3,0,0,0,114,6,0,0,0,114,206,0,0,0,69,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,122,32,123,112,97,116,116,101,114, - 110,125,40,45,46,42,41,63,92,46,40,100,105,115,116,124, - 101,103,103,41,45,105,110,102,111,99,3,0,0,0,0,0, - 0,0,0,0,0,0,7,0,0,0,4,0,0,0,67,0, - 0,0,115,78,0,0,0,100,1,100,2,108,0,125,3,100, - 1,100,3,108,1,109,2,125,4,1,0,124,2,100,2,107, - 8,114,34,116,3,106,4,125,2,124,1,100,2,107,8,114, - 46,100,4,110,8,124,3,160,5,124,1,161,1,125,5,124, - 0,160,6,124,5,124,2,161,2,125,6,116,7,124,4,124, - 6,131,2,83,0,41,5,122,251,82,101,116,117,114,110,32, - 97,110,32,105,116,101,114,97,98,108,101,32,111,102,32,97, - 108,108,32,68,105,115,116,114,105,98,117,116,105,111,110,32, - 105,110,115,116,97,110,99,101,115,32,99,97,112,97,98,108, - 101,32,111,102,10,32,32,32,32,32,32,32,32,108,111,97, - 100,105,110,103,32,116,104,101,32,109,101,116,97,100,97,116, - 97,32,102,111,114,32,112,97,99,107,97,103,101,115,32,109, - 97,116,99,104,105,110,103,32,116,104,101,32,110,97,109,101, - 10,32,32,32,32,32,32,32,32,40,111,114,32,97,108,108, - 32,110,97,109,101,115,32,105,102,32,110,111,116,32,115,117, - 112,112,108,105,101,100,41,32,97,108,111,110,103,32,116,104, - 101,32,112,97,116,104,115,32,105,110,32,116,104,101,32,108, - 105,115,116,10,32,32,32,32,32,32,32,32,111,102,32,100, - 105,114,101,99,116,111,114,105,101,115,32,96,96,112,97,116, - 104,96,96,32,40,100,101,102,97,117,108,116,115,32,116,111, - 32,115,121,115,46,112,97,116,104,41,46,10,32,32,32,32, - 32,32,32,32,114,73,0,0,0,78,41,1,218,16,80,97, - 116,104,68,105,115,116,114,105,98,117,116,105,111,110,122,2, - 46,42,41,8,218,2,114,101,90,25,105,109,112,111,114,116, - 108,105,98,46,109,101,116,97,100,97,116,97,46,95,104,111, - 111,107,115,114,59,1,0,0,114,8,0,0,0,114,44,0, - 0,0,90,6,101,115,99,97,112,101,218,13,95,115,101,97, - 114,99,104,95,112,97,116,104,115,218,3,109,97,112,41,7, - 114,193,0,0,0,114,117,0,0,0,114,44,0,0,0,114, - 60,1,0,0,114,59,1,0,0,218,7,112,97,116,116,101, - 114,110,90,5,102,111,117,110,100,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,18,102,105,110,100,95,100, - 105,115,116,114,105,98,117,116,105,111,110,115,84,5,0,0, - 115,14,0,0,0,0,7,8,1,12,1,8,1,6,1,22, - 1,12,1,122,29,80,97,116,104,70,105,110,100,101,114,46, - 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, - 110,115,99,3,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,6,0,0,0,3,0,0,0,115,44,0,0,0, - 100,1,100,2,108,0,125,3,124,3,106,1,160,2,135,0, - 135,1,102,2,100,3,100,4,132,8,116,3,136,0,106,4, - 124,2,131,2,68,0,131,1,161,1,83,0,41,5,122,67, - 10,32,32,32,32,32,32,32,32,70,105,110,100,32,109,101, - 116,97,100,97,116,97,32,100,105,114,101,99,116,111,114,105, - 101,115,32,105,110,32,112,97,116,104,115,32,104,101,117,114, - 105,115,116,105,99,97,108,108,121,46,10,32,32,32,32,32, - 32,32,32,114,73,0,0,0,78,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,5,0,0,0,51,0, - 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,160, - 0,124,1,136,1,161,2,86,0,1,0,113,2,100,0,83, - 0,114,110,0,0,0,41,1,218,12,95,115,101,97,114,99, - 104,95,112,97,116,104,41,2,114,32,0,0,0,114,44,0, - 0,0,169,2,114,193,0,0,0,114,63,1,0,0,114,3, - 0,0,0,114,6,0,0,0,114,19,1,0,0,105,5,0, - 0,115,4,0,0,0,4,2,2,255,122,43,80,97,116,104, - 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, - 97,116,104,115,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,41,5,218,9,105,116,101,114,116, - 111,111,108,115,90,5,99,104,97,105,110,90,13,102,114,111, - 109,95,105,116,101,114,97,98,108,101,114,62,1,0,0,218, - 12,95,115,119,105,116,99,104,95,112,97,116,104,41,4,114, - 193,0,0,0,114,63,1,0,0,90,5,112,97,116,104,115, - 114,67,1,0,0,114,3,0,0,0,114,66,1,0,0,114, - 6,0,0,0,114,61,1,0,0,99,5,0,0,115,8,0, - 0,0,0,5,8,1,18,2,10,254,122,24,80,97,116,104, - 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112, - 97,116,104,115,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,10,0,0,0,67,0,0,0,115,78,0, - 0,0,100,1,100,2,108,0,109,1,125,1,1,0,100,1, - 100,0,108,2,125,2,100,1,100,3,108,3,109,4,125,3, - 1,0,124,1,116,5,131,1,143,24,1,0,124,2,160,4, - 124,0,161,1,87,0,2,0,53,0,81,0,82,0,163,0, - 83,0,81,0,82,0,88,0,124,3,124,0,131,1,83,0, - 41,4,78,114,73,0,0,0,41,1,218,8,115,117,112,112, - 114,101,115,115,41,1,218,4,80,97,116,104,41,6,90,10, - 99,111,110,116,101,120,116,108,105,98,114,69,1,0,0,218, - 7,122,105,112,102,105,108,101,90,7,112,97,116,104,108,105, - 98,114,70,1,0,0,218,9,69,120,99,101,112,116,105,111, - 110,41,4,114,44,0,0,0,114,69,1,0,0,114,71,1, - 0,0,114,70,1,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,68,1,0,0,110,5,0,0,115, - 12,0,0,0,0,2,12,1,8,1,12,1,10,1,28,1, - 122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,119, - 105,116,99,104,95,112,97,116,104,99,4,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, - 0,0,115,32,0,0,0,100,1,100,0,108,0,125,4,124, - 4,106,1,124,1,116,2,124,3,106,3,131,1,124,4,106, - 4,100,2,141,3,83,0,41,3,78,114,73,0,0,0,41, - 1,114,83,0,0,0,41,5,114,60,1,0,0,90,5,109, - 97,116,99,104,114,85,0,0,0,114,117,0,0,0,90,10, - 73,71,78,79,82,69,67,65,83,69,41,5,114,193,0,0, - 0,114,63,1,0,0,218,4,114,111,111,116,114,41,1,0, - 0,114,60,1,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,10,95,112,114,101,100,105,99,97,116, - 101,119,5,0,0,115,4,0,0,0,0,2,8,1,122,21, - 80,97,116,104,70,105,110,100,101,114,46,95,112,114,101,100, - 105,99,97,116,101,99,3,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,3,0,0,0,115,64, - 0,0,0,136,2,160,0,161,0,115,12,100,1,83,0,124, - 2,160,1,100,2,100,3,161,2,125,3,136,0,106,2,106, - 3,124,3,100,4,141,1,137,1,135,0,135,1,135,2,102, - 3,100,5,100,6,132,8,136,2,160,4,161,0,68,0,131, - 1,83,0,41,7,78,114,3,0,0,0,250,1,45,114,45, - 0,0,0,41,1,114,63,1,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,51, - 0,0,0,115,32,0,0,0,124,0,93,24,125,1,136,0, - 160,0,136,1,136,2,124,1,161,3,114,26,124,1,86,0, - 1,0,113,2,100,0,83,0,114,110,0,0,0,41,1,114, - 74,1,0,0,41,2,114,32,0,0,0,114,41,1,0,0, - 169,3,114,193,0,0,0,90,7,109,97,116,99,104,101,114, - 114,73,1,0,0,114,3,0,0,0,114,6,0,0,0,114, - 19,1,0,0,130,5,0,0,115,6,0,0,0,4,0,2, - 1,14,255,122,42,80,97,116,104,70,105,110,100,101,114,46, - 95,115,101,97,114,99,104,95,112,97,116,104,46,60,108,111, - 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41, - 5,90,6,105,115,95,100,105,114,114,67,0,0,0,218,15, - 115,101,97,114,99,104,95,116,101,109,112,108,97,116,101,114, - 62,0,0,0,90,7,105,116,101,114,100,105,114,41,4,114, - 193,0,0,0,114,73,1,0,0,114,63,1,0,0,90,10, - 110,111,114,109,97,108,105,122,101,100,114,3,0,0,0,114, - 76,1,0,0,114,6,0,0,0,114,65,1,0,0,124,5, - 0,0,115,10,0,0,0,0,2,8,1,4,1,12,1,14, - 1,122,23,80,97,116,104,70,105,110,100,101,114,46,95,115, - 101,97,114,99,104,95,112,97,116,104,41,1,78,41,2,78, - 78,41,1,78,41,2,78,78,41,19,114,125,0,0,0,114, - 124,0,0,0,114,126,0,0,0,114,127,0,0,0,114,207, - 0,0,0,114,46,1,0,0,114,52,1,0,0,114,54,1, - 0,0,114,55,1,0,0,114,58,1,0,0,114,203,0,0, - 0,114,206,0,0,0,114,77,1,0,0,114,64,1,0,0, - 114,61,1,0,0,218,12,115,116,97,116,105,99,109,101,116, - 104,111,100,114,68,1,0,0,114,74,1,0,0,114,65,1, - 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,45,1,0,0,205,4,0,0,115, - 52,0,0,0,8,2,4,2,2,1,10,9,2,1,10,12, - 2,1,10,21,2,1,10,14,2,1,12,31,2,1,12,23, - 2,1,12,12,4,2,2,1,12,14,2,1,10,10,2,1, - 10,8,2,1,10,4,2,1,114,45,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,64,0,0,0,115,90,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,101,6,90,7,100,6,100,7,132, - 0,90,8,100,8,100,9,132,0,90,9,100,19,100,11,100, - 12,132,1,90,10,100,13,100,14,132,0,90,11,101,12,100, - 15,100,16,132,0,131,1,90,13,100,17,100,18,132,0,90, - 14,100,10,83,0,41,20,218,10,70,105,108,101,70,105,110, - 100,101,114,122,172,70,105,108,101,45,98,97,115,101,100,32, - 102,105,110,100,101,114,46,10,10,32,32,32,32,73,110,116, - 101,114,97,99,116,105,111,110,115,32,119,105,116,104,32,116, - 104,101,32,102,105,108,101,32,115,121,115,116,101,109,32,97, - 114,101,32,99,97,99,104,101,100,32,102,111,114,32,112,101, - 114,102,111,114,109,97,110,99,101,44,32,98,101,105,110,103, - 10,32,32,32,32,114,101,102,114,101,115,104,101,100,32,119, - 104,101,110,32,116,104,101,32,100,105,114,101,99,116,111,114, - 121,32,116,104,101,32,102,105,110,100,101,114,32,105,115,32, - 104,97,110,100,108,105,110,103,32,104,97,115,32,98,101,101, - 110,32,109,111,100,105,102,105,101,100,46,10,10,32,32,32, - 32,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,6,0,0,0,7,0,0,0,115,84,0,0,0,103, - 0,125,3,124,2,68,0,93,32,92,2,137,0,125,4,124, - 3,160,0,135,0,102,1,100,1,100,2,132,8,124,4,68, - 0,131,1,161,1,1,0,113,8,124,3,124,0,95,1,124, - 1,112,54,100,3,124,0,95,2,100,4,124,0,95,3,116, - 4,131,0,124,0,95,5,116,4,131,0,124,0,95,6,100, - 5,83,0,41,6,122,154,73,110,105,116,105,97,108,105,122, - 101,32,119,105,116,104,32,116,104,101,32,112,97,116,104,32, - 116,111,32,115,101,97,114,99,104,32,111,110,32,97,110,100, - 32,97,32,118,97,114,105,97,98,108,101,32,110,117,109,98, - 101,114,32,111,102,10,32,32,32,32,32,32,32,32,50,45, - 116,117,112,108,101,115,32,99,111,110,116,97,105,110,105,110, - 103,32,116,104,101,32,108,111,97,100,101,114,32,97,110,100, - 32,116,104,101,32,102,105,108,101,32,115,117,102,102,105,120, - 101,115,32,116,104,101,32,108,111,97,100,101,114,10,32,32, - 32,32,32,32,32,32,114,101,99,111,103,110,105,122,101,115, - 46,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,51,0,0,0,115,22,0,0,0,124, - 0,93,14,125,1,124,1,136,0,102,2,86,0,1,0,113, - 2,100,0,83,0,114,110,0,0,0,114,3,0,0,0,114, - 16,1,0,0,169,1,114,140,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,19,1,0,0,149,5,0,0,115,4, - 0,0,0,4,0,2,0,122,38,70,105,108,101,70,105,110, - 100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,111, - 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,114, - 71,0,0,0,114,105,0,0,0,78,41,7,114,167,0,0, - 0,218,8,95,108,111,97,100,101,114,115,114,44,0,0,0, - 218,11,95,112,97,116,104,95,109,116,105,109,101,218,3,115, - 101,116,218,11,95,112,97,116,104,95,99,97,99,104,101,218, - 19,95,114,101,108,97,120,101,100,95,112,97,116,104,95,99, - 97,99,104,101,41,5,114,119,0,0,0,114,44,0,0,0, - 218,14,108,111,97,100,101,114,95,100,101,116,97,105,108,115, - 90,7,108,111,97,100,101,114,115,114,189,0,0,0,114,3, - 0,0,0,114,80,1,0,0,114,6,0,0,0,114,209,0, - 0,0,143,5,0,0,115,16,0,0,0,0,4,4,1,12, - 1,26,1,6,2,10,1,6,1,8,1,122,19,70,105,108, - 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,2,0,0,0,67,0,0,0,115,10,0,0,0,100,1, - 124,0,95,0,100,2,83,0,41,3,122,31,73,110,118,97, - 108,105,100,97,116,101,32,116,104,101,32,100,105,114,101,99, - 116,111,114,121,32,109,116,105,109,101,46,114,105,0,0,0, - 78,41,1,114,82,1,0,0,114,246,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,46,1,0, - 0,157,5,0,0,115,2,0,0,0,0,2,122,28,70,105, - 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,42,0,0,0,124,0,160,0,124,1,161,1, - 125,2,124,2,100,1,107,8,114,26,100,1,103,0,102,2, - 83,0,124,2,106,1,124,2,106,2,112,38,103,0,102,2, - 83,0,41,2,122,197,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, - 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, - 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, - 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, - 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, - 115,41,46,10,10,32,32,32,32,32,32,32,32,84,104,105, - 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,110, - 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,78,41,3,114,203, - 0,0,0,114,140,0,0,0,114,178,0,0,0,41,3,114, - 119,0,0,0,114,139,0,0,0,114,187,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,137,0, - 0,0,163,5,0,0,115,8,0,0,0,0,7,10,1,8, - 1,8,1,122,22,70,105,108,101,70,105,110,100,101,114,46, - 102,105,110,100,95,108,111,97,100,101,114,99,6,0,0,0, - 0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0, - 67,0,0,0,115,26,0,0,0,124,1,124,2,124,3,131, - 2,125,6,116,0,124,2,124,3,124,6,124,4,100,1,141, - 4,83,0,41,2,78,114,177,0,0,0,41,1,114,190,0, - 0,0,41,7,114,119,0,0,0,114,188,0,0,0,114,139, - 0,0,0,114,44,0,0,0,90,4,115,109,115,108,114,202, - 0,0,0,114,140,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,58,1,0,0,175,5,0,0, - 115,8,0,0,0,0,1,10,1,8,1,2,255,122,20,70, - 105,108,101,70,105,110,100,101,114,46,95,103,101,116,95,115, - 112,101,99,78,99,3,0,0,0,0,0,0,0,0,0,0, - 0,14,0,0,0,8,0,0,0,67,0,0,0,115,102,1, - 0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,3, - 25,0,125,4,122,24,116,1,124,0,106,2,112,34,116,3, - 160,4,161,0,131,1,106,5,125,5,87,0,110,24,4,0, - 116,6,107,10,114,66,1,0,1,0,1,0,100,4,125,5, - 89,0,110,2,88,0,124,5,124,0,106,7,107,3,114,92, - 124,0,160,8,161,0,1,0,124,5,124,0,95,7,116,9, - 131,0,114,114,124,0,106,10,125,6,124,4,160,11,161,0, - 125,7,110,10,124,0,106,12,125,6,124,4,125,7,124,7, - 124,6,107,6,114,218,116,13,124,0,106,2,124,4,131,2, - 125,8,124,0,106,14,68,0,93,58,92,2,125,9,125,10, - 100,5,124,9,23,0,125,11,116,13,124,8,124,11,131,2, - 125,12,116,15,124,12,131,1,114,208,124,0,160,16,124,10, - 124,1,124,12,124,8,103,1,124,2,161,5,2,0,1,0, - 83,0,113,150,116,17,124,8,131,1,125,3,124,0,106,14, - 68,0,93,86,92,2,125,9,125,10,116,13,124,0,106,2, - 124,4,124,9,23,0,131,2,125,12,116,18,106,19,100,6, - 124,12,100,3,100,7,141,3,1,0,124,7,124,9,23,0, - 124,6,107,6,144,1,114,54,116,15,124,12,131,1,144,1, - 114,54,124,0,160,16,124,10,124,1,124,12,100,8,124,2, - 161,5,2,0,1,0,83,0,113,224,124,3,144,1,114,98, - 116,18,160,19,100,9,124,8,161,2,1,0,116,18,160,20, - 124,1,100,8,161,2,125,13,124,8,103,1,124,13,95,21, - 124,13,83,0,100,8,83,0,41,10,122,111,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, - 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, - 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, - 100,46,10,32,32,32,32,32,32,32,32,70,114,71,0,0, - 0,114,28,0,0,0,114,105,0,0,0,114,209,0,0,0, - 122,9,116,114,121,105,110,103,32,123,125,41,1,90,9,118, - 101,114,98,111,115,105,116,121,78,122,25,112,111,115,115,105, - 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, - 114,32,123,125,41,22,114,41,0,0,0,114,49,0,0,0, - 114,44,0,0,0,114,2,0,0,0,114,55,0,0,0,114, - 9,1,0,0,114,50,0,0,0,114,82,1,0,0,218,11, - 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, - 114,85,1,0,0,114,106,0,0,0,114,84,1,0,0,114, - 38,0,0,0,114,81,1,0,0,114,54,0,0,0,114,58, - 1,0,0,114,56,0,0,0,114,134,0,0,0,114,149,0, - 0,0,114,183,0,0,0,114,178,0,0,0,41,14,114,119, - 0,0,0,114,139,0,0,0,114,202,0,0,0,90,12,105, - 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, - 108,95,109,111,100,117,108,101,114,169,0,0,0,90,5,99, - 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, - 108,101,90,9,98,97,115,101,95,112,97,116,104,114,17,1, - 0,0,114,188,0,0,0,90,13,105,110,105,116,95,102,105, - 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, - 104,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,203,0,0,0,180,5,0,0,115,74, - 0,0,0,0,5,4,1,14,1,2,1,24,1,14,1,10, - 1,10,1,8,1,6,2,6,1,6,1,10,2,6,1,4, - 2,8,1,12,1,14,1,8,1,10,1,8,1,26,4,8, - 2,14,1,16,1,16,1,14,1,10,1,10,1,2,0,2, - 255,10,2,6,1,12,1,12,1,8,1,4,1,122,20,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,10,0,0,0,67,0,0,0,115,190,0,0, - 0,124,0,106,0,125,1,122,22,116,1,160,2,124,1,112, - 22,116,1,160,3,161,0,161,1,125,2,87,0,110,30,4, - 0,116,4,116,5,116,6,102,3,107,10,114,58,1,0,1, - 0,1,0,103,0,125,2,89,0,110,2,88,0,116,7,106, - 8,160,9,100,1,161,1,115,84,116,10,124,2,131,1,124, - 0,95,11,110,74,116,10,131,0,125,3,124,2,68,0,93, - 56,125,4,124,4,160,12,100,2,161,1,92,3,125,5,125, - 6,125,7,124,6,114,136,100,3,160,13,124,5,124,7,160, - 14,161,0,161,2,125,8,110,4,124,5,125,8,124,3,160, - 15,124,8,161,1,1,0,113,94,124,3,124,0,95,11,116, - 7,106,8,160,9,116,16,161,1,114,186,100,4,100,5,132, - 0,124,2,68,0,131,1,124,0,95,17,100,6,83,0,41, - 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, - 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, - 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, - 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,0,0,0,0,114,71,0,0, - 0,114,61,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, - 20,0,0,0,104,0,124,0,93,12,125,1,124,1,160,0, - 161,0,146,2,113,4,83,0,114,3,0,0,0,41,1,114, - 106,0,0,0,41,2,114,32,0,0,0,90,2,102,110,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,9, - 60,115,101,116,99,111,109,112,62,1,6,0,0,115,4,0, - 0,0,6,0,2,0,122,41,70,105,108,101,70,105,110,100, - 101,114,46,95,102,105,108,108,95,99,97,99,104,101,46,60, - 108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,112, - 62,78,41,18,114,44,0,0,0,114,2,0,0,0,114,6, - 1,0,0,114,55,0,0,0,114,2,1,0,0,218,15,80, - 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, - 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, - 111,114,114,8,0,0,0,114,9,0,0,0,114,10,0,0, - 0,114,83,1,0,0,114,84,1,0,0,114,101,0,0,0, - 114,62,0,0,0,114,106,0,0,0,218,3,97,100,100,114, - 11,0,0,0,114,85,1,0,0,41,9,114,119,0,0,0, - 114,44,0,0,0,114,7,1,0,0,90,21,108,111,119,101, - 114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,116, - 115,114,41,1,0,0,114,117,0,0,0,114,29,1,0,0, - 114,17,1,0,0,90,8,110,101,119,95,110,97,109,101,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,87, - 1,0,0,228,5,0,0,115,34,0,0,0,0,2,6,1, - 2,1,22,1,20,3,10,3,12,1,12,7,6,1,8,1, - 16,1,4,1,18,2,4,1,12,1,6,1,12,1,122,22, - 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, - 95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, - 18,0,0,0,135,0,135,1,102,2,100,1,100,2,132,8, - 125,2,124,2,83,0,41,3,97,20,1,0,0,65,32,99, - 108,97,115,115,32,109,101,116,104,111,100,32,119,104,105,99, - 104,32,114,101,116,117,114,110,115,32,97,32,99,108,111,115, - 117,114,101,32,116,111,32,117,115,101,32,111,110,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,10,32,32,32,32, - 32,32,32,32,119,104,105,99,104,32,119,105,108,108,32,114, - 101,116,117,114,110,32,97,110,32,105,110,115,116,97,110,99, - 101,32,117,115,105,110,103,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,108,111,97,100,101,114,115,32,97,110, - 100,32,116,104,101,32,112,97,116,104,10,32,32,32,32,32, - 32,32,32,99,97,108,108,101,100,32,111,110,32,116,104,101, - 32,99,108,111,115,117,114,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,99, - 97,108,108,101,100,32,111,110,32,116,104,101,32,99,108,111, - 115,117,114,101,32,105,115,32,110,111,116,32,97,32,100,105, - 114,101,99,116,111,114,121,44,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,115,10,32,32,32,32,32,32,32,32, - 114,97,105,115,101,100,46,10,10,32,32,32,32,32,32,32, - 32,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,19,0,0,0,115,34,0,0,0,116, - 0,124,0,131,1,115,20,116,1,100,1,124,0,100,2,141, - 2,130,1,136,0,124,0,102,1,136,1,158,2,142,0,83, - 0,41,3,122,45,80,97,116,104,32,104,111,111,107,32,102, - 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, - 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, - 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, - 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,48,0,0,0,41,2,114,56,0,0,0,114,118, - 0,0,0,114,48,0,0,0,169,2,114,193,0,0,0,114, - 86,1,0,0,114,3,0,0,0,114,6,0,0,0,218,24, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,13,6,0,0,115,6,0,0, - 0,0,2,8,1,12,1,122,54,70,105,108,101,70,105,110, - 100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,108, - 111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,114, - 3,0,0,0,41,3,114,193,0,0,0,114,86,1,0,0, - 114,93,1,0,0,114,3,0,0,0,114,92,1,0,0,114, - 6,0,0,0,218,9,112,97,116,104,95,104,111,111,107,3, - 6,0,0,115,4,0,0,0,0,10,14,6,122,20,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, - 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, - 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, - 41,41,2,114,62,0,0,0,114,44,0,0,0,114,246,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,39,1,0,0,21,6,0,0,115,2,0,0,0,0, - 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 114,101,112,114,95,95,41,1,78,41,15,114,125,0,0,0, - 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, - 209,0,0,0,114,46,1,0,0,114,143,0,0,0,114,206, - 0,0,0,114,137,0,0,0,114,58,1,0,0,114,203,0, - 0,0,114,87,1,0,0,114,207,0,0,0,114,94,1,0, - 0,114,39,1,0,0,114,3,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,79,1,0,0,134, - 5,0,0,115,22,0,0,0,8,2,4,7,8,14,8,4, - 4,2,8,12,8,5,10,48,8,31,2,1,10,17,114,79, - 1,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,8,0,0,0,67,0,0,0,115,146,0,0, - 0,124,0,160,0,100,1,161,1,125,4,124,0,160,0,100, - 2,161,1,125,5,124,4,115,66,124,5,114,36,124,5,106, - 1,125,4,110,30,124,2,124,3,107,2,114,56,116,2,124, - 1,124,2,131,2,125,4,110,10,116,3,124,1,124,2,131, - 2,125,4,124,5,115,84,116,4,124,1,124,2,124,4,100, - 3,141,3,125,5,122,36,124,5,124,0,100,2,60,0,124, - 4,124,0,100,1,60,0,124,2,124,0,100,4,60,0,124, - 3,124,0,100,5,60,0,87,0,110,20,4,0,116,5,107, - 10,114,140,1,0,1,0,1,0,89,0,110,2,88,0,100, - 0,83,0,41,6,78,218,10,95,95,108,111,97,100,101,114, - 95,95,218,8,95,95,115,112,101,99,95,95,114,80,1,0, - 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, - 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,140, - 0,0,0,114,14,1,0,0,114,8,1,0,0,114,190,0, - 0,0,114,72,1,0,0,41,6,90,2,110,115,114,117,0, - 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, - 97,116,104,110,97,109,101,114,140,0,0,0,114,187,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, - 27,6,0,0,115,34,0,0,0,0,2,10,1,10,1,4, - 1,4,1,8,1,8,1,12,2,10,1,4,1,14,1,2, - 1,8,1,8,1,8,1,12,1,14,2,114,98,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0, - 116,1,160,2,161,0,102,2,125,0,116,3,116,4,102,2, - 125,1,116,5,116,6,102,2,125,2,124,0,124,1,124,2, - 103,3,83,0,41,1,122,95,82,101,116,117,114,110,115,32, - 97,32,108,105,115,116,32,111,102,32,102,105,108,101,45,98, - 97,115,101,100,32,109,111,100,117,108,101,32,108,111,97,100, - 101,114,115,46,10,10,32,32,32,32,69,97,99,104,32,105, - 116,101,109,32,105,115,32,97,32,116,117,112,108,101,32,40, - 108,111,97,100,101,114,44,32,115,117,102,102,105,120,101,115, - 41,46,10,32,32,32,32,41,7,114,15,1,0,0,114,163, - 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, - 117,102,102,105,120,101,115,114,8,1,0,0,114,102,0,0, - 0,114,14,1,0,0,114,89,0,0,0,41,3,90,10,101, - 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99, - 101,90,8,98,121,116,101,99,111,100,101,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,184,0,0,0,50, - 6,0,0,115,8,0,0,0,0,5,12,1,8,1,8,1, - 114,184,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,12,0,0,0,9,0,0,0,67,0,0,0,115,178, - 1,0,0,124,0,97,0,116,0,106,1,97,1,116,0,106, - 2,97,2,116,1,106,3,116,4,25,0,125,1,100,1,68, - 0,93,48,125,2,124,2,116,1,106,3,107,7,114,56,116, - 0,160,5,124,2,161,1,125,3,110,10,116,1,106,3,124, - 2,25,0,125,3,116,6,124,1,124,2,124,3,131,3,1, - 0,113,30,100,2,100,3,103,1,102,2,100,4,100,5,100, - 3,103,2,102,2,102,2,125,4,124,4,68,0,93,110,92, - 2,125,5,125,6,116,7,100,6,100,7,132,0,124,6,68, - 0,131,1,131,1,115,136,116,8,130,1,124,6,100,8,25, - 0,125,7,124,5,116,1,106,3,107,6,114,170,116,1,106, - 3,124,5,25,0,125,8,1,0,113,226,113,106,122,20,116, - 0,160,5,124,5,161,1,125,8,87,0,1,0,113,226,87, - 0,113,106,4,0,116,9,107,10,114,214,1,0,1,0,1, - 0,89,0,113,106,89,0,113,106,88,0,113,106,116,9,100, - 9,131,1,130,1,116,6,124,1,100,10,124,8,131,3,1, - 0,116,6,124,1,100,11,124,7,131,3,1,0,116,6,124, - 1,100,12,100,13,160,10,124,6,161,1,131,3,1,0,116, - 6,124,1,100,14,100,15,100,16,132,0,124,6,68,0,131, - 1,131,3,1,0,116,0,160,5,100,17,161,1,125,9,116, - 6,124,1,100,17,124,9,131,3,1,0,116,0,160,5,100, - 18,161,1,125,10,116,6,124,1,100,18,124,10,131,3,1, - 0,124,5,100,4,107,2,144,1,114,110,116,0,160,5,100, - 19,161,1,125,11,116,6,124,1,100,20,124,11,131,3,1, - 0,116,6,124,1,100,21,116,11,131,0,131,3,1,0,116, - 12,160,13,116,2,160,14,161,0,161,1,1,0,124,5,100, - 4,107,2,144,1,114,174,116,15,160,16,100,22,161,1,1, - 0,100,23,116,12,107,6,144,1,114,174,100,24,116,17,95, - 18,100,25,83,0,41,26,122,205,83,101,116,117,112,32,116, - 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, - 112,111,114,116,101,114,115,32,102,111,114,32,105,109,112,111, - 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105, - 110,103,32,110,101,101,100,101,100,10,32,32,32,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, - 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101, - 109,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97, - 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32, - 32,32,79,116,104,101,114,32,99,111,109,112,111,110,101,110, - 116,115,32,97,114,101,32,101,120,116,114,97,99,116,101,100, - 32,102,114,111,109,32,116,104,101,32,99,111,114,101,32,98, - 111,111,116,115,116,114,97,112,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,41,4,114,64,0,0,0,114,75,0, - 0,0,218,8,98,117,105,108,116,105,110,115,114,160,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,0,0,0,0,2, - 0,0,0,3,0,0,0,115,0,0,0,115,26,0,0,0, - 124,0,93,18,125,1,116,0,124,1,131,1,100,0,107,2, - 86,0,1,0,113,2,100,1,83,0,41,2,114,39,0,0, - 0,78,41,1,114,22,0,0,0,41,2,114,32,0,0,0, - 114,95,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,19,1,0,0,86,6,0,0,115,4,0, - 0,0,4,0,2,0,122,25,95,115,101,116,117,112,46,60, - 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, - 62,114,73,0,0,0,122,30,105,109,112,111,114,116,108,105, - 98,32,114,101,113,117,105,114,101,115,32,112,111,115,105,120, - 32,111,114,32,110,116,114,2,0,0,0,114,35,0,0,0, - 114,31,0,0,0,114,40,0,0,0,114,58,0,0,0,99, + 95,109,111,100,117,108,101,122,45,40,63,58,123,112,97,116, + 116,101,114,110,125,40,45,46,42,41,63,92,46,40,100,105, + 115,116,124,101,103,103,41,45,105,110,102,111,124,69,71,71, + 45,73,78,70,79,41,99,3,0,0,0,0,0,0,0,0, + 0,0,0,7,0,0,0,4,0,0,0,67,0,0,0,115, + 78,0,0,0,100,1,100,2,108,0,125,3,100,1,100,3, + 108,1,109,2,125,4,1,0,124,2,100,2,107,8,114,34, + 116,3,106,4,125,2,124,1,100,2,107,8,114,46,100,4, + 110,8,124,3,160,5,124,1,161,1,125,5,124,0,160,6, + 124,5,124,2,161,2,125,6,116,7,124,4,124,6,131,2, + 83,0,41,5,122,251,82,101,116,117,114,110,32,97,110,32, + 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, + 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, + 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, + 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, + 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, + 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, + 104,105,110,103,32,116,104,101,32,110,97,109,101,10,32,32, + 32,32,32,32,32,32,40,111,114,32,97,108,108,32,110,97, + 109,101,115,32,105,102,32,110,111,116,32,115,117,112,112,108, + 105,101,100,41,32,97,108,111,110,103,32,116,104,101,32,112, + 97,116,104,115,32,105,110,32,116,104,101,32,108,105,115,116, + 10,32,32,32,32,32,32,32,32,111,102,32,100,105,114,101, + 99,116,111,114,105,101,115,32,96,96,112,97,116,104,96,96, + 32,40,100,101,102,97,117,108,116,115,32,116,111,32,115,121, + 115,46,112,97,116,104,41,46,10,32,32,32,32,32,32,32, + 32,114,73,0,0,0,78,41,1,218,16,80,97,116,104,68, + 105,115,116,114,105,98,117,116,105,111,110,122,2,46,42,41, + 8,218,2,114,101,90,25,105,109,112,111,114,116,108,105,98, + 46,109,101,116,97,100,97,116,97,46,95,104,111,111,107,115, + 114,59,1,0,0,114,8,0,0,0,114,44,0,0,0,90, + 6,101,115,99,97,112,101,218,13,95,115,101,97,114,99,104, + 95,112,97,116,104,115,218,3,109,97,112,41,7,114,193,0, + 0,0,114,117,0,0,0,114,44,0,0,0,114,60,1,0, + 0,114,59,1,0,0,218,7,112,97,116,116,101,114,110,90, + 5,102,111,117,110,100,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,18,102,105,110,100,95,100,105,115,116, + 114,105,98,117,116,105,111,110,115,84,5,0,0,115,14,0, + 0,0,0,7,8,1,12,1,8,1,6,1,22,1,12,1, + 122,29,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,99, + 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 6,0,0,0,3,0,0,0,115,44,0,0,0,100,1,100, + 2,108,0,125,3,124,3,106,1,160,2,135,0,135,1,102, + 2,100,3,100,4,132,8,116,3,136,0,106,4,124,2,131, + 2,68,0,131,1,161,1,83,0,41,5,122,67,10,32,32, + 32,32,32,32,32,32,70,105,110,100,32,109,101,116,97,100, + 97,116,97,32,100,105,114,101,99,116,111,114,105,101,115,32, + 105,110,32,112,97,116,104,115,32,104,101,117,114,105,115,116, + 105,99,97,108,108,121,46,10,32,32,32,32,32,32,32,32, + 114,73,0,0,0,78,99,1,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,5,0,0,0,51,0,0,0,115, + 26,0,0,0,124,0,93,18,125,1,136,0,160,0,124,1, + 136,1,161,2,86,0,1,0,113,2,100,0,83,0,114,110, + 0,0,0,41,1,218,12,95,115,101,97,114,99,104,95,112, + 97,116,104,41,2,114,32,0,0,0,114,44,0,0,0,169, + 2,114,193,0,0,0,114,63,1,0,0,114,3,0,0,0, + 114,6,0,0,0,114,19,1,0,0,105,5,0,0,115,4, + 0,0,0,4,2,2,255,122,43,80,97,116,104,70,105,110, + 100,101,114,46,95,115,101,97,114,99,104,95,112,97,116,104, + 115,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,41,5,218,9,105,116,101,114,116,111,111,108, + 115,90,5,99,104,97,105,110,90,13,102,114,111,109,95,105, + 116,101,114,97,98,108,101,114,62,1,0,0,218,12,95,115, + 119,105,116,99,104,95,112,97,116,104,41,4,114,193,0,0, + 0,114,63,1,0,0,90,5,112,97,116,104,115,114,67,1, + 0,0,114,3,0,0,0,114,66,1,0,0,114,6,0,0, + 0,114,61,1,0,0,99,5,0,0,115,8,0,0,0,0, + 5,8,1,18,2,10,254,122,24,80,97,116,104,70,105,110, + 100,101,114,46,95,115,101,97,114,99,104,95,112,97,116,104, + 115,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,10,0,0,0,67,0,0,0,115,78,0,0,0,100, + 1,100,2,108,0,109,1,125,1,1,0,100,1,100,0,108, + 2,125,2,100,1,100,3,108,3,109,4,125,3,1,0,124, + 1,116,5,131,1,143,24,1,0,124,2,160,4,124,0,161, + 1,87,0,2,0,53,0,81,0,82,0,163,0,83,0,81, + 0,82,0,88,0,124,3,124,0,131,1,83,0,41,4,78, + 114,73,0,0,0,41,1,218,8,115,117,112,112,114,101,115, + 115,41,1,218,4,80,97,116,104,41,6,90,10,99,111,110, + 116,101,120,116,108,105,98,114,69,1,0,0,218,7,122,105, + 112,102,105,108,101,90,7,112,97,116,104,108,105,98,114,70, + 1,0,0,218,9,69,120,99,101,112,116,105,111,110,41,4, + 114,44,0,0,0,114,69,1,0,0,114,71,1,0,0,114, + 70,1,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,68,1,0,0,110,5,0,0,115,12,0,0, + 0,0,2,12,1,8,1,12,1,10,1,28,1,122,23,80, + 97,116,104,70,105,110,100,101,114,46,95,115,119,105,116,99, + 104,95,112,97,116,104,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, + 32,0,0,0,100,1,100,0,108,0,125,4,124,4,106,1, + 124,1,116,2,124,3,106,3,131,1,124,4,106,4,100,2, + 141,3,83,0,41,3,78,114,73,0,0,0,41,1,114,83, + 0,0,0,41,5,114,60,1,0,0,90,5,109,97,116,99, + 104,114,85,0,0,0,114,117,0,0,0,90,10,73,71,78, + 79,82,69,67,65,83,69,41,5,114,193,0,0,0,114,63, + 1,0,0,218,4,114,111,111,116,114,41,1,0,0,114,60, + 1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,218,10,95,112,114,101,100,105,99,97,116,101,119,5, + 0,0,115,4,0,0,0,0,2,8,1,122,21,80,97,116, + 104,70,105,110,100,101,114,46,95,112,114,101,100,105,99,97, + 116,101,99,3,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,4,0,0,0,3,0,0,0,115,64,0,0,0, + 136,2,160,0,161,0,115,12,100,1,83,0,124,2,160,1, + 100,2,100,3,161,2,125,3,136,0,106,2,106,3,124,3, + 100,4,141,1,137,1,135,0,135,1,135,2,102,3,100,5, + 100,6,132,8,136,2,160,4,161,0,68,0,131,1,83,0, + 41,7,78,114,3,0,0,0,250,1,45,114,45,0,0,0, + 41,1,114,63,1,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,6,0,0,0,51,0,0,0, + 115,32,0,0,0,124,0,93,24,125,1,136,0,160,0,136, + 1,136,2,124,1,161,3,114,26,124,1,86,0,1,0,113, + 2,100,0,83,0,114,110,0,0,0,41,1,114,74,1,0, + 0,41,2,114,32,0,0,0,114,41,1,0,0,169,3,114, + 193,0,0,0,90,7,109,97,116,99,104,101,114,114,73,1, + 0,0,114,3,0,0,0,114,6,0,0,0,114,19,1,0, + 0,130,5,0,0,115,6,0,0,0,4,0,2,1,14,255, + 122,42,80,97,116,104,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,112,97,116,104,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,41,5,90,6, + 105,115,95,100,105,114,114,67,0,0,0,218,15,115,101,97, + 114,99,104,95,116,101,109,112,108,97,116,101,114,62,0,0, + 0,90,7,105,116,101,114,100,105,114,41,4,114,193,0,0, + 0,114,73,1,0,0,114,63,1,0,0,90,10,110,111,114, + 109,97,108,105,122,101,100,114,3,0,0,0,114,76,1,0, + 0,114,6,0,0,0,114,65,1,0,0,124,5,0,0,115, + 10,0,0,0,0,2,8,1,4,1,12,1,14,1,122,23, + 80,97,116,104,70,105,110,100,101,114,46,95,115,101,97,114, + 99,104,95,112,97,116,104,41,1,78,41,2,78,78,41,1, + 78,41,2,78,78,41,19,114,125,0,0,0,114,124,0,0, + 0,114,126,0,0,0,114,127,0,0,0,114,207,0,0,0, + 114,46,1,0,0,114,52,1,0,0,114,54,1,0,0,114, + 55,1,0,0,114,58,1,0,0,114,203,0,0,0,114,206, + 0,0,0,114,77,1,0,0,114,64,1,0,0,114,61,1, + 0,0,218,12,115,116,97,116,105,99,109,101,116,104,111,100, + 114,68,1,0,0,114,74,1,0,0,114,65,1,0,0,114, + 3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,45,1,0,0,205,4,0,0,115,52,0,0, + 0,8,2,4,2,2,1,10,9,2,1,10,12,2,1,10, + 21,2,1,10,14,2,1,12,31,2,1,12,23,2,1,12, + 12,4,2,2,1,12,14,2,1,10,10,2,1,10,8,2, + 1,10,4,2,1,114,45,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, + 0,0,0,115,90,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, + 132,0,90,5,101,6,90,7,100,6,100,7,132,0,90,8, + 100,8,100,9,132,0,90,9,100,19,100,11,100,12,132,1, + 90,10,100,13,100,14,132,0,90,11,101,12,100,15,100,16, + 132,0,131,1,90,13,100,17,100,18,132,0,90,14,100,10, + 83,0,41,20,218,10,70,105,108,101,70,105,110,100,101,114, + 122,172,70,105,108,101,45,98,97,115,101,100,32,102,105,110, + 100,101,114,46,10,10,32,32,32,32,73,110,116,101,114,97, + 99,116,105,111,110,115,32,119,105,116,104,32,116,104,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,97,114,101,32, + 99,97,99,104,101,100,32,102,111,114,32,112,101,114,102,111, + 114,109,97,110,99,101,44,32,98,101,105,110,103,10,32,32, + 32,32,114,101,102,114,101,115,104,101,100,32,119,104,101,110, + 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,116, + 104,101,32,102,105,110,100,101,114,32,105,115,32,104,97,110, + 100,108,105,110,103,32,104,97,115,32,98,101,101,110,32,109, + 111,100,105,102,105,101,100,46,10,10,32,32,32,32,99,2, + 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, + 0,0,0,7,0,0,0,115,84,0,0,0,103,0,125,3, + 124,2,68,0,93,32,92,2,137,0,125,4,124,3,160,0, + 135,0,102,1,100,1,100,2,132,8,124,4,68,0,131,1, + 161,1,1,0,113,8,124,3,124,0,95,1,124,1,112,54, + 100,3,124,0,95,2,100,4,124,0,95,3,116,4,131,0, + 124,0,95,5,116,4,131,0,124,0,95,6,100,5,83,0, + 41,6,122,154,73,110,105,116,105,97,108,105,122,101,32,119, + 105,116,104,32,116,104,101,32,112,97,116,104,32,116,111,32, + 115,101,97,114,99,104,32,111,110,32,97,110,100,32,97,32, + 118,97,114,105,97,98,108,101,32,110,117,109,98,101,114,32, + 111,102,10,32,32,32,32,32,32,32,32,50,45,116,117,112, + 108,101,115,32,99,111,110,116,97,105,110,105,110,103,32,116, + 104,101,32,108,111,97,100,101,114,32,97,110,100,32,116,104, + 101,32,102,105,108,101,32,115,117,102,102,105,120,101,115,32, + 116,104,101,32,108,111,97,100,101,114,10,32,32,32,32,32, + 32,32,32,114,101,99,111,103,110,105,122,101,115,46,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,51,0,0,0,115,22,0,0,0,124,0,93,14, + 125,1,124,1,136,0,102,2,86,0,1,0,113,2,100,0, + 83,0,114,110,0,0,0,114,3,0,0,0,114,16,1,0, + 0,169,1,114,140,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,19,1,0,0,149,5,0,0,115,4,0,0,0, + 4,0,2,0,122,38,70,105,108,101,70,105,110,100,101,114, + 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,114,71,0,0, + 0,114,105,0,0,0,78,41,7,114,167,0,0,0,218,8, + 95,108,111,97,100,101,114,115,114,44,0,0,0,218,11,95, + 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, + 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, + 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, + 101,41,5,114,119,0,0,0,114,44,0,0,0,218,14,108, + 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, + 111,97,100,101,114,115,114,189,0,0,0,114,3,0,0,0, + 114,80,1,0,0,114,6,0,0,0,114,209,0,0,0,143, + 5,0,0,115,16,0,0,0,0,4,4,1,12,1,26,1, + 6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0, + 0,0,67,0,0,0,115,10,0,0,0,100,1,124,0,95, + 0,100,2,83,0,41,3,122,31,73,110,118,97,108,105,100, + 97,116,101,32,116,104,101,32,100,105,114,101,99,116,111,114, + 121,32,109,116,105,109,101,46,114,105,0,0,0,78,41,1, + 114,82,1,0,0,114,246,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,46,1,0,0,157,5, + 0,0,115,2,0,0,0,0,2,122,28,70,105,108,101,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, + 115,42,0,0,0,124,0,160,0,124,1,161,1,125,2,124, + 2,100,1,107,8,114,26,100,1,103,0,102,2,83,0,124, + 2,106,1,124,2,106,2,112,38,103,0,102,2,83,0,41, + 2,122,197,84,114,121,32,116,111,32,102,105,110,100,32,97, + 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 44,32,111,114,32,116,104,101,32,110,97,109,101,115,112,97, + 99,101,10,32,32,32,32,32,32,32,32,112,97,99,107,97, + 103,101,32,112,111,114,116,105,111,110,115,46,32,82,101,116, + 117,114,110,115,32,40,108,111,97,100,101,114,44,32,108,105, + 115,116,45,111,102,45,112,111,114,116,105,111,110,115,41,46, + 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, + 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,78,41,3,114,203,0,0,0, + 114,140,0,0,0,114,178,0,0,0,41,3,114,119,0,0, + 0,114,139,0,0,0,114,187,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,137,0,0,0,163, + 5,0,0,115,8,0,0,0,0,7,10,1,8,1,8,1, + 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, + 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, + 0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,0, + 0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,6, + 116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,0, + 41,2,78,114,177,0,0,0,41,1,114,190,0,0,0,41, + 7,114,119,0,0,0,114,188,0,0,0,114,139,0,0,0, + 114,44,0,0,0,90,4,115,109,115,108,114,202,0,0,0, + 114,140,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,58,1,0,0,175,5,0,0,115,8,0, + 0,0,0,1,10,1,8,1,2,255,122,20,70,105,108,101, + 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, + 78,99,3,0,0,0,0,0,0,0,0,0,0,0,14,0, + 0,0,8,0,0,0,67,0,0,0,115,102,1,0,0,100, + 1,125,3,124,1,160,0,100,2,161,1,100,3,25,0,125, + 4,122,24,116,1,124,0,106,2,112,34,116,3,160,4,161, + 0,131,1,106,5,125,5,87,0,110,24,4,0,116,6,107, + 10,114,66,1,0,1,0,1,0,100,4,125,5,89,0,110, + 2,88,0,124,5,124,0,106,7,107,3,114,92,124,0,160, + 8,161,0,1,0,124,5,124,0,95,7,116,9,131,0,114, + 114,124,0,106,10,125,6,124,4,160,11,161,0,125,7,110, + 10,124,0,106,12,125,6,124,4,125,7,124,7,124,6,107, + 6,114,218,116,13,124,0,106,2,124,4,131,2,125,8,124, + 0,106,14,68,0,93,58,92,2,125,9,125,10,100,5,124, + 9,23,0,125,11,116,13,124,8,124,11,131,2,125,12,116, + 15,124,12,131,1,114,208,124,0,160,16,124,10,124,1,124, + 12,124,8,103,1,124,2,161,5,2,0,1,0,83,0,113, + 150,116,17,124,8,131,1,125,3,124,0,106,14,68,0,93, + 86,92,2,125,9,125,10,116,13,124,0,106,2,124,4,124, + 9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,100, + 3,100,7,141,3,1,0,124,7,124,9,23,0,124,6,107, + 6,144,1,114,54,116,15,124,12,131,1,144,1,114,54,124, + 0,160,16,124,10,124,1,124,12,100,8,124,2,161,5,2, + 0,1,0,83,0,113,224,124,3,144,1,114,98,116,18,160, + 19,100,9,124,8,161,2,1,0,116,18,160,20,124,1,100, + 8,161,2,125,13,124,8,103,1,124,13,95,21,124,13,83, + 0,100,8,83,0,41,10,122,111,84,114,121,32,116,111,32, + 102,105,110,100,32,97,32,115,112,101,99,32,102,111,114,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,82, + 101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104, + 105,110,103,32,115,112,101,99,44,32,111,114,32,78,111,110, + 101,32,105,102,32,110,111,116,32,102,111,117,110,100,46,10, + 32,32,32,32,32,32,32,32,70,114,71,0,0,0,114,28, + 0,0,0,114,105,0,0,0,114,209,0,0,0,122,9,116, + 114,121,105,110,103,32,123,125,41,1,90,9,118,101,114,98, + 111,115,105,116,121,78,122,25,112,111,115,115,105,98,108,101, + 32,110,97,109,101,115,112,97,99,101,32,102,111,114,32,123, + 125,41,22,114,41,0,0,0,114,49,0,0,0,114,44,0, + 0,0,114,2,0,0,0,114,55,0,0,0,114,9,1,0, + 0,114,50,0,0,0,114,82,1,0,0,218,11,95,102,105, + 108,108,95,99,97,99,104,101,114,7,0,0,0,114,85,1, + 0,0,114,106,0,0,0,114,84,1,0,0,114,38,0,0, + 0,114,81,1,0,0,114,54,0,0,0,114,58,1,0,0, + 114,56,0,0,0,114,134,0,0,0,114,149,0,0,0,114, + 183,0,0,0,114,178,0,0,0,41,14,114,119,0,0,0, + 114,139,0,0,0,114,202,0,0,0,90,12,105,115,95,110, + 97,109,101,115,112,97,99,101,90,11,116,97,105,108,95,109, + 111,100,117,108,101,114,169,0,0,0,90,5,99,97,99,104, + 101,90,12,99,97,99,104,101,95,109,111,100,117,108,101,90, + 9,98,97,115,101,95,112,97,116,104,114,17,1,0,0,114, + 188,0,0,0,90,13,105,110,105,116,95,102,105,108,101,110, + 97,109,101,90,9,102,117,108,108,95,112,97,116,104,114,187, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,203,0,0,0,180,5,0,0,115,74,0,0,0, + 0,5,4,1,14,1,2,1,24,1,14,1,10,1,10,1, + 8,1,6,2,6,1,6,1,10,2,6,1,4,2,8,1, + 12,1,14,1,8,1,10,1,8,1,26,4,8,2,14,1, + 16,1,16,1,14,1,10,1,10,1,2,0,2,255,10,2, + 6,1,12,1,12,1,8,1,4,1,122,20,70,105,108,101, + 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, + 99,1,0,0,0,0,0,0,0,0,0,0,0,9,0,0, + 0,10,0,0,0,67,0,0,0,115,190,0,0,0,124,0, + 106,0,125,1,122,22,116,1,160,2,124,1,112,22,116,1, + 160,3,161,0,161,1,125,2,87,0,110,30,4,0,116,4, + 116,5,116,6,102,3,107,10,114,58,1,0,1,0,1,0, + 103,0,125,2,89,0,110,2,88,0,116,7,106,8,160,9, + 100,1,161,1,115,84,116,10,124,2,131,1,124,0,95,11, + 110,74,116,10,131,0,125,3,124,2,68,0,93,56,125,4, + 124,4,160,12,100,2,161,1,92,3,125,5,125,6,125,7, + 124,6,114,136,100,3,160,13,124,5,124,7,160,14,161,0, + 161,2,125,8,110,4,124,5,125,8,124,3,160,15,124,8, + 161,1,1,0,113,94,124,3,124,0,95,11,116,7,106,8, + 160,9,116,16,161,1,114,186,100,4,100,5,132,0,124,2, + 68,0,131,1,124,0,95,17,100,6,83,0,41,7,122,68, + 70,105,108,108,32,116,104,101,32,99,97,99,104,101,32,111, + 102,32,112,111,116,101,110,116,105,97,108,32,109,111,100,117, + 108,101,115,32,97,110,100,32,112,97,99,107,97,103,101,115, + 32,102,111,114,32,116,104,105,115,32,100,105,114,101,99,116, + 111,114,121,46,114,0,0,0,0,114,71,0,0,0,114,61, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,83,0,0,0,115,20,0,0, + 0,104,0,124,0,93,12,125,1,124,1,160,0,161,0,146, + 2,113,4,83,0,114,3,0,0,0,41,1,114,106,0,0, + 0,41,2,114,32,0,0,0,90,2,102,110,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,218,9,60,115,101, + 116,99,111,109,112,62,1,6,0,0,115,4,0,0,0,6, + 0,2,0,122,41,70,105,108,101,70,105,110,100,101,114,46, + 95,102,105,108,108,95,99,97,99,104,101,46,60,108,111,99, + 97,108,115,62,46,60,115,101,116,99,111,109,112,62,78,41, + 18,114,44,0,0,0,114,2,0,0,0,114,6,1,0,0, + 114,55,0,0,0,114,2,1,0,0,218,15,80,101,114,109, + 105,115,115,105,111,110,69,114,114,111,114,218,18,78,111,116, + 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, + 8,0,0,0,114,9,0,0,0,114,10,0,0,0,114,83, + 1,0,0,114,84,1,0,0,114,101,0,0,0,114,62,0, + 0,0,114,106,0,0,0,218,3,97,100,100,114,11,0,0, + 0,114,85,1,0,0,41,9,114,119,0,0,0,114,44,0, + 0,0,114,7,1,0,0,90,21,108,111,119,101,114,95,115, + 117,102,102,105,120,95,99,111,110,116,101,110,116,115,114,41, + 1,0,0,114,117,0,0,0,114,29,1,0,0,114,17,1, + 0,0,90,8,110,101,119,95,110,97,109,101,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,87,1,0,0, + 228,5,0,0,115,34,0,0,0,0,2,6,1,2,1,22, + 1,20,3,10,3,12,1,12,7,6,1,8,1,16,1,4, + 1,18,2,4,1,12,1,6,1,12,1,122,22,70,105,108, + 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, + 99,104,101,99,1,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,3,0,0,0,7,0,0,0,115,18,0,0, + 0,135,0,135,1,102,2,100,1,100,2,132,8,125,2,124, + 2,83,0,41,3,97,20,1,0,0,65,32,99,108,97,115, + 115,32,109,101,116,104,111,100,32,119,104,105,99,104,32,114, + 101,116,117,114,110,115,32,97,32,99,108,111,115,117,114,101, + 32,116,111,32,117,115,101,32,111,110,32,115,121,115,46,112, + 97,116,104,95,104,111,111,107,10,32,32,32,32,32,32,32, + 32,119,104,105,99,104,32,119,105,108,108,32,114,101,116,117, + 114,110,32,97,110,32,105,110,115,116,97,110,99,101,32,117, + 115,105,110,103,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,108,111,97,100,101,114,115,32,97,110,100,32,116, + 104,101,32,112,97,116,104,10,32,32,32,32,32,32,32,32, + 99,97,108,108,101,100,32,111,110,32,116,104,101,32,99,108, + 111,115,117,114,101,46,10,10,32,32,32,32,32,32,32,32, + 73,102,32,116,104,101,32,112,97,116,104,32,99,97,108,108, + 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, + 101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99, + 116,111,114,121,44,32,73,109,112,111,114,116,69,114,114,111, + 114,32,105,115,10,32,32,32,32,32,32,32,32,114,97,105, + 115,101,100,46,10,10,32,32,32,32,32,32,32,32,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, + 0,0,0,19,0,0,0,115,34,0,0,0,116,0,124,0, + 131,1,115,20,116,1,100,1,124,0,100,2,141,2,130,1, + 136,0,124,0,102,1,136,1,158,2,142,0,83,0,41,3, + 122,45,80,97,116,104,32,104,111,111,107,32,102,111,114,32, + 105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110, + 101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,122, + 30,111,110,108,121,32,100,105,114,101,99,116,111,114,105,101, + 115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,114, + 48,0,0,0,41,2,114,56,0,0,0,114,118,0,0,0, + 114,48,0,0,0,169,2,114,193,0,0,0,114,86,1,0, + 0,114,3,0,0,0,114,6,0,0,0,218,24,112,97,116, + 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, + 105,110,100,101,114,13,6,0,0,115,6,0,0,0,0,2, + 8,1,12,1,122,54,70,105,108,101,70,105,110,100,101,114, + 46,112,97,116,104,95,104,111,111,107,46,60,108,111,99,97, + 108,115,62,46,112,97,116,104,95,104,111,111,107,95,102,111, + 114,95,70,105,108,101,70,105,110,100,101,114,114,3,0,0, + 0,41,3,114,193,0,0,0,114,86,1,0,0,114,93,1, + 0,0,114,3,0,0,0,114,92,1,0,0,114,6,0,0, + 0,218,9,112,97,116,104,95,104,111,111,107,3,6,0,0, + 115,4,0,0,0,0,10,14,6,122,20,70,105,108,101,70, + 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,99, + 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,100,1,160, + 0,124,0,106,1,161,1,83,0,41,2,78,122,16,70,105, + 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, + 114,62,0,0,0,114,44,0,0,0,114,246,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,39, + 1,0,0,21,6,0,0,115,2,0,0,0,0,1,122,19, + 70,105,108,101,70,105,110,100,101,114,46,95,95,114,101,112, + 114,95,95,41,1,78,41,15,114,125,0,0,0,114,124,0, + 0,0,114,126,0,0,0,114,127,0,0,0,114,209,0,0, + 0,114,46,1,0,0,114,143,0,0,0,114,206,0,0,0, + 114,137,0,0,0,114,58,1,0,0,114,203,0,0,0,114, + 87,1,0,0,114,207,0,0,0,114,94,1,0,0,114,39, + 1,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,79,1,0,0,134,5,0,0, + 115,22,0,0,0,8,2,4,7,8,14,8,4,4,2,8, + 12,8,5,10,48,8,31,2,1,10,17,114,79,1,0,0, + 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,8,0,0,0,67,0,0,0,115,146,0,0,0,124,0, + 160,0,100,1,161,1,125,4,124,0,160,0,100,2,161,1, + 125,5,124,4,115,66,124,5,114,36,124,5,106,1,125,4, + 110,30,124,2,124,3,107,2,114,56,116,2,124,1,124,2, + 131,2,125,4,110,10,116,3,124,1,124,2,131,2,125,4, + 124,5,115,84,116,4,124,1,124,2,124,4,100,3,141,3, + 125,5,122,36,124,5,124,0,100,2,60,0,124,4,124,0, + 100,1,60,0,124,2,124,0,100,4,60,0,124,3,124,0, + 100,5,60,0,87,0,110,20,4,0,116,5,107,10,114,140, + 1,0,1,0,1,0,89,0,110,2,88,0,100,0,83,0, + 41,6,78,218,10,95,95,108,111,97,100,101,114,95,95,218, + 8,95,95,115,112,101,99,95,95,114,80,1,0,0,90,8, + 95,95,102,105,108,101,95,95,90,10,95,95,99,97,99,104, + 101,100,95,95,41,6,218,3,103,101,116,114,140,0,0,0, + 114,14,1,0,0,114,8,1,0,0,114,190,0,0,0,114, + 72,1,0,0,41,6,90,2,110,115,114,117,0,0,0,90, + 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, + 110,97,109,101,114,140,0,0,0,114,187,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,14,95, + 102,105,120,95,117,112,95,109,111,100,117,108,101,27,6,0, + 0,115,34,0,0,0,0,2,10,1,10,1,4,1,4,1, + 8,1,8,1,12,2,10,1,4,1,14,1,2,1,8,1, + 8,1,8,1,12,1,14,2,114,98,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,38,0,0,0,116,0,116,1,160, + 2,161,0,102,2,125,0,116,3,116,4,102,2,125,1,116, + 5,116,6,102,2,125,2,124,0,124,1,124,2,103,3,83, + 0,41,1,122,95,82,101,116,117,114,110,115,32,97,32,108, + 105,115,116,32,111,102,32,102,105,108,101,45,98,97,115,101, + 100,32,109,111,100,117,108,101,32,108,111,97,100,101,114,115, + 46,10,10,32,32,32,32,69,97,99,104,32,105,116,101,109, + 32,105,115,32,97,32,116,117,112,108,101,32,40,108,111,97, + 100,101,114,44,32,115,117,102,102,105,120,101,115,41,46,10, + 32,32,32,32,41,7,114,15,1,0,0,114,163,0,0,0, + 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, + 105,120,101,115,114,8,1,0,0,114,102,0,0,0,114,14, + 1,0,0,114,89,0,0,0,41,3,90,10,101,120,116,101, + 110,115,105,111,110,115,90,6,115,111,117,114,99,101,90,8, + 98,121,116,101,99,111,100,101,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,184,0,0,0,50,6,0,0, + 115,8,0,0,0,0,5,12,1,8,1,8,1,114,184,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,12, + 0,0,0,9,0,0,0,67,0,0,0,115,178,1,0,0, + 124,0,97,0,116,0,106,1,97,1,116,0,106,2,97,2, + 116,1,106,3,116,4,25,0,125,1,100,1,68,0,93,48, + 125,2,124,2,116,1,106,3,107,7,114,56,116,0,160,5, + 124,2,161,1,125,3,110,10,116,1,106,3,124,2,25,0, + 125,3,116,6,124,1,124,2,124,3,131,3,1,0,113,30, + 100,2,100,3,103,1,102,2,100,4,100,5,100,3,103,2, + 102,2,102,2,125,4,124,4,68,0,93,110,92,2,125,5, + 125,6,116,7,100,6,100,7,132,0,124,6,68,0,131,1, + 131,1,115,136,116,8,130,1,124,6,100,8,25,0,125,7, + 124,5,116,1,106,3,107,6,114,170,116,1,106,3,124,5, + 25,0,125,8,1,0,113,226,113,106,122,20,116,0,160,5, + 124,5,161,1,125,8,87,0,1,0,113,226,87,0,113,106, + 4,0,116,9,107,10,114,214,1,0,1,0,1,0,89,0, + 113,106,89,0,113,106,88,0,113,106,116,9,100,9,131,1, + 130,1,116,6,124,1,100,10,124,8,131,3,1,0,116,6, + 124,1,100,11,124,7,131,3,1,0,116,6,124,1,100,12, + 100,13,160,10,124,6,161,1,131,3,1,0,116,6,124,1, + 100,14,100,15,100,16,132,0,124,6,68,0,131,1,131,3, + 1,0,116,0,160,5,100,17,161,1,125,9,116,6,124,1, + 100,17,124,9,131,3,1,0,116,0,160,5,100,18,161,1, + 125,10,116,6,124,1,100,18,124,10,131,3,1,0,124,5, + 100,4,107,2,144,1,114,110,116,0,160,5,100,19,161,1, + 125,11,116,6,124,1,100,20,124,11,131,3,1,0,116,6, + 124,1,100,21,116,11,131,0,131,3,1,0,116,12,160,13, + 116,2,160,14,161,0,161,1,1,0,124,5,100,4,107,2, + 144,1,114,174,116,15,160,16,100,22,161,1,1,0,100,23, + 116,12,107,6,144,1,114,174,100,24,116,17,95,18,100,25, + 83,0,41,26,122,205,83,101,116,117,112,32,116,104,101,32, + 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, + 116,101,114,115,32,102,111,114,32,105,109,112,111,114,116,108, + 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32, + 110,101,101,100,101,100,10,32,32,32,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32, + 105,110,106,101,99,116,105,110,103,32,116,104,101,109,32,105, + 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110, + 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,79, + 116,104,101,114,32,99,111,109,112,111,110,101,110,116,115,32, + 97,114,101,32,101,120,116,114,97,99,116,101,100,32,102,114, + 111,109,32,116,104,101,32,99,111,114,101,32,98,111,111,116, + 115,116,114,97,112,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,41,4,114,64,0,0,0,114,75,0,0,0,218, + 8,98,117,105,108,116,105,110,115,114,160,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,0,0,0,0,2,0,0,0, - 4,0,0,0,83,0,0,0,115,22,0,0,0,104,0,124, - 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113, - 4,83,0,41,1,114,74,0,0,0,114,3,0,0,0,41, - 2,114,32,0,0,0,218,1,115,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,88,1,0,0,102,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,192,0,0,0,114,7,0,0,0,122,4,46,112,121,119, - 122,6,95,100,46,112,121,100,84,78,41,19,114,134,0,0, - 0,114,8,0,0,0,114,163,0,0,0,114,31,1,0,0, - 114,125,0,0,0,90,18,95,98,117,105,108,116,105,110,95, - 102,114,111,109,95,110,97,109,101,114,129,0,0,0,218,3, - 97,108,108,114,23,0,0,0,114,118,0,0,0,114,36,0, - 0,0,114,13,0,0,0,114,21,1,0,0,114,167,0,0, - 0,114,99,1,0,0,114,102,0,0,0,114,186,0,0,0, - 114,191,0,0,0,114,195,0,0,0,41,12,218,17,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,90, - 11,115,101,108,102,95,109,111,100,117,108,101,90,12,98,117, - 105,108,116,105,110,95,110,97,109,101,90,14,98,117,105,108, - 116,105,110,95,109,111,100,117,108,101,90,10,111,115,95,100, - 101,116,97,105,108,115,90,10,98,117,105,108,116,105,110,95, - 111,115,114,31,0,0,0,114,35,0,0,0,90,9,111,115, - 95,109,111,100,117,108,101,90,13,116,104,114,101,97,100,95, - 109,111,100,117,108,101,90,14,119,101,97,107,114,101,102,95, - 109,111,100,117,108,101,90,13,119,105,110,114,101,103,95,109, - 111,100,117,108,101,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,6,95,115,101,116,117,112,61,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,106,1,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, - 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, - 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, - 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, - 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, - 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, - 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, - 101,110,116,115,46,78,41,10,114,106,1,0,0,114,184,0, - 0,0,114,8,0,0,0,114,51,1,0,0,114,167,0,0, - 0,114,79,1,0,0,114,94,1,0,0,218,9,109,101,116, - 97,95,112,97,116,104,114,186,0,0,0,114,45,1,0,0, - 41,2,114,105,1,0,0,90,17,115,117,112,112,111,114,116, - 101,100,95,108,111,97,100,101,114,115,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,8,95,105,110,115,116, - 97,108,108,126,6,0,0,115,8,0,0,0,0,2,8,1, - 6,1,20,1,114,108,1,0,0,41,63,114,127,0,0,0, - 114,12,0,0,0,90,37,95,67,65,83,69,95,73,78,83, - 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, - 77,83,95,66,89,84,69,83,95,75,69,89,114,11,0,0, - 0,114,13,0,0,0,114,20,0,0,0,114,27,0,0,0, - 114,29,0,0,0,114,38,0,0,0,114,47,0,0,0,114, - 49,0,0,0,114,53,0,0,0,114,54,0,0,0,114,56, - 0,0,0,114,59,0,0,0,114,69,0,0,0,218,4,116, - 121,112,101,218,8,95,95,99,111,100,101,95,95,114,162,0, - 0,0,114,18,0,0,0,114,148,0,0,0,114,17,0,0, - 0,114,24,0,0,0,114,236,0,0,0,114,92,0,0,0, - 114,88,0,0,0,114,102,0,0,0,114,89,0,0,0,90, - 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, - 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,114,98,0,0,0,114,103,0,0,0,114, - 109,0,0,0,114,113,0,0,0,114,115,0,0,0,114,136, - 0,0,0,114,143,0,0,0,114,152,0,0,0,114,156,0, - 0,0,114,158,0,0,0,114,165,0,0,0,114,170,0,0, - 0,114,171,0,0,0,114,176,0,0,0,218,6,111,98,106, - 101,99,116,114,185,0,0,0,114,190,0,0,0,114,191,0, - 0,0,114,208,0,0,0,114,221,0,0,0,114,239,0,0, - 0,114,8,1,0,0,114,14,1,0,0,114,21,1,0,0, - 114,15,1,0,0,114,22,1,0,0,114,43,1,0,0,114, - 45,1,0,0,114,79,1,0,0,114,98,1,0,0,114,184, - 0,0,0,114,106,1,0,0,114,108,1,0,0,114,3,0, + 3,0,0,0,115,0,0,0,115,26,0,0,0,124,0,93, + 18,125,1,116,0,124,1,131,1,100,0,107,2,86,0,1, + 0,113,2,100,1,83,0,41,2,114,39,0,0,0,78,41, + 1,114,22,0,0,0,41,2,114,32,0,0,0,114,95,0, 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,8,60,109,111,100,117,108,101,62,1,0,0,0,115, - 126,0,0,0,4,22,4,1,4,1,2,1,2,255,4,4, - 8,17,8,5,8,5,8,6,8,6,8,12,8,10,8,9, - 8,5,8,7,8,9,12,22,10,127,0,8,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,63,14,42,14,127,0,58,14,127,0,22,12,23,8,11, - 8,65, + 0,114,19,1,0,0,86,6,0,0,115,4,0,0,0,4, + 0,2,0,122,25,95,115,101,116,117,112,46,60,108,111,99, + 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,73, + 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, + 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, + 32,110,116,114,2,0,0,0,114,35,0,0,0,114,31,0, + 0,0,114,40,0,0,0,114,58,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,83,0,0,0,115,22,0,0,0,104,0,124,0,93,14, + 125,1,100,0,124,1,155,0,157,2,146,2,113,4,83,0, + 41,1,114,74,0,0,0,114,3,0,0,0,41,2,114,32, + 0,0,0,218,1,115,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,88,1,0,0,102,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,192,0, + 0,0,114,7,0,0,0,122,4,46,112,121,119,122,6,95, + 100,46,112,121,100,84,78,41,19,114,134,0,0,0,114,8, + 0,0,0,114,163,0,0,0,114,31,1,0,0,114,125,0, + 0,0,90,18,95,98,117,105,108,116,105,110,95,102,114,111, + 109,95,110,97,109,101,114,129,0,0,0,218,3,97,108,108, + 114,23,0,0,0,114,118,0,0,0,114,36,0,0,0,114, + 13,0,0,0,114,21,1,0,0,114,167,0,0,0,114,99, + 1,0,0,114,102,0,0,0,114,186,0,0,0,114,191,0, + 0,0,114,195,0,0,0,41,12,218,17,95,98,111,111,116, + 115,116,114,97,112,95,109,111,100,117,108,101,90,11,115,101, + 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, + 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, + 95,109,111,100,117,108,101,90,10,111,115,95,100,101,116,97, + 105,108,115,90,10,98,117,105,108,116,105,110,95,111,115,114, + 31,0,0,0,114,35,0,0,0,90,9,111,115,95,109,111, + 100,117,108,101,90,13,116,104,114,101,97,100,95,109,111,100, + 117,108,101,90,14,119,101,97,107,114,101,102,95,109,111,100, + 117,108,101,90,13,119,105,110,114,101,103,95,109,111,100,117, + 108,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,6,95,115,101,116,117,112,61,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,106,1,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,50, + 0,0,0,116,0,124,0,131,1,1,0,116,1,131,0,125, + 1,116,2,106,3,160,4,116,5,106,6,124,1,142,0,103, + 1,161,1,1,0,116,2,106,7,160,8,116,9,161,1,1, + 0,100,1,83,0,41,2,122,41,73,110,115,116,97,108,108, + 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, + 105,109,112,111,114,116,32,99,111,109,112,111,110,101,110,116, + 115,46,78,41,10,114,106,1,0,0,114,184,0,0,0,114, + 8,0,0,0,114,51,1,0,0,114,167,0,0,0,114,79, + 1,0,0,114,94,1,0,0,218,9,109,101,116,97,95,112, + 97,116,104,114,186,0,0,0,114,45,1,0,0,41,2,114, + 105,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, + 108,111,97,100,101,114,115,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,218,8,95,105,110,115,116,97,108,108, + 126,6,0,0,115,8,0,0,0,0,2,8,1,6,1,20, + 1,114,108,1,0,0,41,63,114,127,0,0,0,114,12,0, + 0,0,90,37,95,67,65,83,69,95,73,78,83,69,78,83, + 73,84,73,86,69,95,80,76,65,84,70,79,82,77,83,95, + 66,89,84,69,83,95,75,69,89,114,11,0,0,0,114,13, + 0,0,0,114,20,0,0,0,114,27,0,0,0,114,29,0, + 0,0,114,38,0,0,0,114,47,0,0,0,114,49,0,0, + 0,114,53,0,0,0,114,54,0,0,0,114,56,0,0,0, + 114,59,0,0,0,114,69,0,0,0,218,4,116,121,112,101, + 218,8,95,95,99,111,100,101,95,95,114,162,0,0,0,114, + 18,0,0,0,114,148,0,0,0,114,17,0,0,0,114,24, + 0,0,0,114,236,0,0,0,114,92,0,0,0,114,88,0, + 0,0,114,102,0,0,0,114,89,0,0,0,90,23,68,69, + 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, + 70,73,88,69,83,90,27,79,80,84,73,77,73,90,69,68, + 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,114,98,0,0,0,114,103,0,0,0,114,109,0,0, + 0,114,113,0,0,0,114,115,0,0,0,114,136,0,0,0, + 114,143,0,0,0,114,152,0,0,0,114,156,0,0,0,114, + 158,0,0,0,114,165,0,0,0,114,170,0,0,0,114,171, + 0,0,0,114,176,0,0,0,218,6,111,98,106,101,99,116, + 114,185,0,0,0,114,190,0,0,0,114,191,0,0,0,114, + 208,0,0,0,114,221,0,0,0,114,239,0,0,0,114,8, + 1,0,0,114,14,1,0,0,114,21,1,0,0,114,15,1, + 0,0,114,22,1,0,0,114,43,1,0,0,114,45,1,0, + 0,114,79,1,0,0,114,98,1,0,0,114,184,0,0,0, + 114,106,1,0,0,114,108,1,0,0,114,3,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,8, + 60,109,111,100,117,108,101,62,1,0,0,0,115,126,0,0, + 0,4,22,4,1,4,1,2,1,2,255,4,4,8,17,8, + 5,8,5,8,6,8,6,8,12,8,10,8,9,8,5,8, + 7,8,9,12,22,10,127,0,8,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,63,14, + 42,14,127,0,58,14,127,0,22,12,23,8,11,8,65, }; From 2a6b36161319b1c502183fc778d055fdd27c62d8 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 10:36:55 -0400 Subject: [PATCH 17/23] Add provisional disclaimer --- Doc/library/importlib.metadata.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 441850719c1a8b..416d8b6f707fc3 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -4,6 +4,10 @@ Using importlib.metadata ========================== +.. note:: + This functionality is provisional and may deviate from the usual + version semantics of the standard library. + ``importlib.metadata`` is a library that provides for access to installed package metadata. Built in part on Python's import system, this library intends to replace similar functionality in the `entry point From b462010cd75751aee6ae7b98842a9191a5ac6c84 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 10:40:35 -0400 Subject: [PATCH 18/23] Refresh from importlib_metadata@cpython --- Lib/importlib/metadata/_hooks.py | 19 ------------------- Lib/test/test_importlib/test_zip.py | 2 +- 2 files changed, 1 insertion(+), 20 deletions(-) diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py index 11b94772a5352b..4c57f4d48ee223 100644 --- a/Lib/importlib/metadata/_hooks.py +++ b/Lib/importlib/metadata/_hooks.py @@ -1,26 +1,7 @@ -import sys - from .api import Distribution -from .abc import DistributionFinder from contextlib import suppress -def install(cls): - """Class decorator for installation on sys.meta_path.""" - sys.meta_path.append(cls()) - return cls - - -class NullFinder(DistributionFinder): - """ - A "Finder" (aka "MetaClassFinder") that never finds any modules, - but may find distributions. - """ - @staticmethod - def find_spec(*args, **kwargs): - return None - - class PathDistribution(Distribution): def __init__(self, path): """Construct a distribution from a path to the metadata directory.""" diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index 9b6bce0d4c2faa..e92028cf599a22 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -45,7 +45,7 @@ def setUp(self): self.resources = ExitStack() self.addCleanup(self.resources.close) egg = self.resources.enter_context( - path('importlib_metadata.tests.data', + path('test.test_importlib.data', 'example-21.12-py3.6.egg')) sys.path.insert(0, str(egg)) self.resources.callback(sys.path.pop, 0) From c2bf9a52d4db74a53cb7b53113ccd05e19087473 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 10:46:54 -0400 Subject: [PATCH 19/23] Refresh from importlib_metadata@cpython --- Lib/test/test_importlib/test_zip.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index e92028cf599a22..db39e190ea7ac9 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -7,14 +7,15 @@ class TestZip(unittest.TestCase): + root = 'test.test_importlib.data' + def setUp(self): # Find the path to the example-*.whl so we can add it to the front of # sys.path, where we'll then try to find the metadata thereof. self.resources = ExitStack() self.addCleanup(self.resources.close) wheel = self.resources.enter_context( - path('test.test_importlib.data', - 'example-21.12-py3-none-any.whl')) + path(self.root, 'example-21.12-py3-none-any.whl')) sys.path.insert(0, str(wheel)) self.resources.callback(sys.path.pop, 0) @@ -45,8 +46,7 @@ def setUp(self): self.resources = ExitStack() self.addCleanup(self.resources.close) egg = self.resources.enter_context( - path('test.test_importlib.data', - 'example-21.12-py3.6.egg')) + path(self.root, 'example-21.12-py3.6.egg')) sys.path.insert(0, str(egg)) self.resources.callback(sys.path.pop, 0) From dcb580fbd11014315dfaee305656ea9aab4f66d8 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Tue, 14 May 2019 13:21:36 -0400 Subject: [PATCH 20/23] Add missing file --- .../test_importlib/data/example-21.12-py3.6.egg | Bin 0 -> 1492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Lib/test/test_importlib/data/example-21.12-py3.6.egg diff --git a/Lib/test/test_importlib/data/example-21.12-py3.6.egg b/Lib/test/test_importlib/data/example-21.12-py3.6.egg new file mode 100644 index 0000000000000000000000000000000000000000..1d3f998f41b89700512b9bd20681e55e81963028 GIT binary patch literal 1492 zcmWIWW@Zs#U|`^2xR$fp@3nF0krp8DC=d$*v8%hguBV@yzkYx>gb~~8$aTm-!1cSO ztKNj9U1!!ka0&=sxZ<^c4f@#kCS*N+n7GL42YfZ! zEk5xYo$43J*3tWYGog!X+Wp$0%DLy;7$(q4-Im54c05E zC@DSV$kpt?s$Pc9T!_{7cXah`>i&=P4|_F+Kpf9t5RHa za$M}sCdvd)D?c%>-)L{RYwfgc?`B2cv%3AJhgrnPA#S40>GXa36wF*N9Z0I@t{X7}-NOjPvdHdANi9gtOG(X3u8hyg%*!qYIq)$P1FG)-aaS&@0d;8s zu_UtY)Vz|S%J_o(%)An?&ThYR=e5tB_w3d8(>tZ3q1pG;Ypur_-4mXn8$ug4ttk>V z{=8!cn&Ed-ID@!=hH?P07_#9d`33Pgsb#4-AUAnK%z29LG-QvVq>-x30^Q=ov{V$& z{LEhMC#89?LJ?>W2nz#oYDHphK~AcEe0*kJW=VX!UO}a|r*H5H-!o?}U)b^}h@olG zl}VQt*|2`S(skrc)0~h}Jv1NOWa-&67iiKmAl61Pv7jt+c^o&BMdrcl^@ zSk2sisfqekzBSxSIDx)oWD;SVM6j1EI}h{$CjQE+QWd_v7~Nf13<+rdh$gWumZ&Zf{8i6o0ScunF9z7fLi-N HB@P1s(BI54 literal 0 HcmV?d00001 From 1b52d5b729ab3ef44cb92ec01ebf1c0f69b5dac6 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 18 May 2019 11:43:08 -0400 Subject: [PATCH 21/23] Apply changes from importlib_metadata --- Lib/importlib/_bootstrap_external.py | 2 +- Lib/importlib/metadata/__init__.py | 395 +++++- Lib/importlib/metadata/_hooks.py | 16 - Lib/importlib/metadata/abc.py | 18 - Lib/importlib/metadata/api.py | 358 ------ Lib/test/test_importlib/test_main.py | 16 +- Lib/test/test_importlib/test_metadata_api.py | 3 +- Lib/test/test_importlib/test_zip.py | 1 + Python/importlib_external.h | 1124 +++++++++--------- 9 files changed, 964 insertions(+), 969 deletions(-) delete mode 100644 Lib/importlib/metadata/_hooks.py delete mode 100644 Lib/importlib/metadata/abc.py delete mode 100644 Lib/importlib/metadata/api.py diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 45fd087c5fe4dd..dc5842374d3d73 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1369,7 +1369,7 @@ def find_distributions(cls, name=None, path=None): of directories ``path`` (defaults to sys.path). """ import re - from importlib.metadata._hooks import PathDistribution + from importlib.metadata import PathDistribution if path is None: path = sys.path pattern = '.*' if name is None else re.escape(name) diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index 8d4b0a344cd054..9a4ba6171cc879 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -1,9 +1,20 @@ -from .api import ( - Distribution, PackageNotFoundError, distribution, distributions, - entry_points, files, metadata, requires, version) +import io +import re +import abc +import csv +import sys +import email +import pathlib +import operator +import functools +import itertools +import collections -# Import for installation side-effects. -from . import _hooks # noqa: F401 +from configparser import ConfigParser +from contextlib import suppress +from importlib import import_module +from importlib.abc import MetaPathFinder +from itertools import starmap __all__ = [ @@ -17,3 +28,377 @@ 'requires', 'version', ] + + +class PackageNotFoundError(ModuleNotFoundError): + """The package was not found.""" + + +class EntryPoint(collections.namedtuple('EntryPointBase', 'name value group')): + """An entry point as defined by Python packaging conventions.""" + + pattern = re.compile( + r'(?P[\w.]+)\s*' + r'(:\s*(?P[\w.]+))?\s*' + r'(?P\[.*\])?\s*$' + ) + """ + A regular expression describing the syntax for an entry point, + which might look like: + + - module + - package.module + - package.module:attribute + - package.module:object.attribute + - package.module:attr [extra1, extra2] + + Other combinations are possible as well. + + The expression is lenient about whitespace around the ':', + following the attr, and following any extras. + """ + + def load(self): + """Load the entry point from its definition. If only a module + is indicated by the value, return that module. Otherwise, + return the named object. + """ + match = self.pattern.match(self.value) + module = import_module(match.group('module')) + attrs = filter(None, (match.group('attr') or '').split('.')) + return functools.reduce(getattr, attrs, module) + + @property + def extras(self): + match = self.pattern.match(self.value) + return list(re.finditer(r'\w+', match.group('extras') or '')) + + @classmethod + def _from_config(cls, config): + return [ + cls(name, value, group) + for group in config.sections() + for name, value in config.items(group) + ] + + @classmethod + def _from_text(cls, text): + config = ConfigParser() + try: + config.read_string(text) + except AttributeError: # pragma: nocover + # Python 2 has no read_string + config.readfp(io.StringIO(text)) + return EntryPoint._from_config(config) + + def __iter__(self): + """ + Supply iter so one may construct dicts of EntryPoints easily. + """ + return iter((self.name, self)) + + +class PackagePath(pathlib.PurePosixPath): + """A reference to a path in a package""" + + def read_text(self, encoding='utf-8'): + with self.locate().open(encoding=encoding) as stream: + return stream.read() + + def read_binary(self): + with self.locate().open('rb') as stream: + return stream.read() + + def locate(self): + """Return a path-like object for this path""" + return self.dist.locate_file(self) + + +class FileHash: + def __init__(self, spec): + self.mode, _, self.value = spec.partition('=') + + def __repr__(self): + return ''.format(self.mode, self.value) + + +class Distribution: + """A Python distribution package.""" + + @abc.abstractmethod + def read_text(self, filename): + """Attempt to load metadata file given by the name. + + :param filename: The name of the file in the distribution info. + :return: The text if found, otherwise None. + """ + + @abc.abstractmethod + def locate_file(self, path): + """ + Given a path to a file in this distribution, return a path + to it. + """ + + @classmethod + def from_name(cls, name): + """Return the Distribution for the given package name. + + :param name: The name of the distribution package to search for. + :return: The Distribution instance (or subclass thereof) for the named + package, if found. + :raises PackageNotFoundError: When the named package's distribution + metadata cannot be found. + """ + for resolver in cls._discover_resolvers(): + dists = resolver(name) + dist = next(dists, None) + if dist is not None: + return dist + else: + raise PackageNotFoundError(name) + + @classmethod + def discover(cls): + """Return an iterable of Distribution objects for all packages. + + :return: Iterable of Distribution objects for all packages. + """ + return itertools.chain.from_iterable( + resolver() + for resolver in cls._discover_resolvers() + ) + + @staticmethod + def _discover_resolvers(): + """Search the meta_path for resolvers.""" + declared = ( + getattr(finder, 'find_distributions', None) + for finder in sys.meta_path + ) + return filter(None, declared) + + @classmethod + def find_local(cls): + dists = itertools.chain.from_iterable( + resolver(path=['.']) + for resolver in cls._discover_resolvers() + ) + dist, = dists + return dist + + @property + def metadata(self): + """Return the parsed metadata for this Distribution. + + The returned object will have keys that name the various bits of + metadata. See PEP 566 for details. + """ + text = ( + self.read_text('METADATA') + or self.read_text('PKG-INFO') + # This last clause is here to support old egg-info files. Its + # effect is to just end up using the PathDistribution's self._path + # (which points to the egg-info file) attribute unchanged. + or self.read_text('') + ) + return email.message_from_string(text) + + @property + def version(self): + """Return the 'Version' metadata for the distribution package.""" + return self.metadata['Version'] + + @property + def entry_points(self): + return EntryPoint._from_text(self.read_text('entry_points.txt')) + + @property + def files(self): + file_lines = self._read_files_distinfo() or self._read_files_egginfo() + + def make_file(name, hash=None, size_str=None): + result = PackagePath(name) + result.hash = FileHash(hash) if hash else None + result.size = int(size_str) if size_str else None + result.dist = self + return result + + return file_lines and starmap(make_file, csv.reader(file_lines)) + + def _read_files_distinfo(self): + """ + Read the lines of RECORD + """ + text = self.read_text('RECORD') + return text and text.splitlines() + + def _read_files_egginfo(self): + """ + SOURCES.txt might contain literal commas, so wrap each line + in quotes. + """ + text = self.read_text('SOURCES.txt') + return text and map('"{}"'.format, text.splitlines()) + + @property + def requires(self): + """Generated requirements specified for this Distribution""" + return self._read_dist_info_reqs() or self._read_egg_info_reqs() + + def _read_dist_info_reqs(self): + spec = self.metadata['Requires-Dist'] + return spec and filter(None, spec.splitlines()) + + def _read_egg_info_reqs(self): + source = self.read_text('requires.txt') + return source and self._deps_from_requires_text(source) + + @classmethod + def _deps_from_requires_text(cls, source): + section_pairs = cls._read_sections(source.splitlines()) + sections = { + section: list(map(operator.itemgetter('line'), results)) + for section, results in + itertools.groupby(section_pairs, operator.itemgetter('section')) + } + return cls._convert_egg_info_reqs_to_simple_reqs(sections) + + @staticmethod + def _read_sections(lines): + section = None + for line in filter(None, lines): + section_match = re.match(r'\[(.*)\]$', line) + if section_match: + section = section_match.group(1) + continue + yield locals() + + @staticmethod + def _convert_egg_info_reqs_to_simple_reqs(sections): + """ + Historically, setuptools would solicit and store 'extra' + requirements, including those with environment markers, + in separate sections. More modern tools expect each + dependency to be defined separately, with any relevant + extras and environment markers attached directly to that + requirement. This method converts the former to the + latter. See _test_deps_from_requires_text for an example. + """ + def make_condition(name): + return name and 'extra == "{name}"'.format(name=name) + + def parse_condition(section): + section = section or '' + extra, sep, markers = section.partition(':') + if extra and markers: + markers = '({markers})'.format(markers=markers) + conditions = list(filter(None, [markers, make_condition(extra)])) + return '; ' + ' and '.join(conditions) if conditions else '' + + for section, deps in sections.items(): + for dep in deps: + yield dep + parse_condition(section) + + +class DistributionFinder(MetaPathFinder): + """ + A MetaPathFinder capable of discovering installed distributions. + """ + + @abc.abstractmethod + def find_distributions(self, name=None, path=None): + """ + Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the name + (or all names if not supplied) along the paths in the list + of directories ``path`` (defaults to sys.path). + """ + + +class PathDistribution(Distribution): + def __init__(self, path): + """Construct a distribution from a path to the metadata directory.""" + self._path = path + + def read_text(self, filename): + with suppress(FileNotFoundError, NotADirectoryError, KeyError): + return self._path.joinpath(filename).read_text(encoding='utf-8') + read_text.__doc__ = Distribution.read_text.__doc__ + + def locate_file(self, path): + return self._path.parent / path + + +def distribution(package): + """Get the ``Distribution`` instance for the given package. + + :param package: The name of the package as a string. + :return: A ``Distribution`` instance (or subclass thereof). + """ + return Distribution.from_name(package) + + +def distributions(): + """Get all ``Distribution`` instances in the current environment. + + :return: An iterable of ``Distribution`` instances. + """ + return Distribution.discover() + + +def local_distribution(): + """Get the ``Distribution`` instance for the package in CWD. + + :return: A ``Distribution`` instance (or subclass thereof). + """ + return Distribution.find_local() + + +def metadata(package): + """Get the metadata for the package. + + :param package: The name of the distribution package to query. + :return: An email.Message containing the parsed metadata. + """ + return Distribution.from_name(package).metadata + + +def version(package): + """Get the version string for the named package. + + :param package: The name of the distribution package to query. + :return: The version string for the package as defined in the package's + "Version" metadata key. + """ + return distribution(package).version + + +def entry_points(): + """Return EntryPoint objects for all installed packages. + + :return: EntryPoint objects for all installed packages. + """ + eps = itertools.chain.from_iterable( + dist.entry_points for dist in distributions()) + by_group = operator.attrgetter('group') + ordered = sorted(eps, key=by_group) + grouped = itertools.groupby(ordered, by_group) + return { + group: tuple(eps) + for group, eps in grouped + } + + +def files(package): + return distribution(package).files + + +def requires(package): + """ + Return a list of requirements for the indicated distribution. + + :return: An iterator of requirements, suitable for + packaging.requirement.Requirement. + """ + return distribution(package).requires diff --git a/Lib/importlib/metadata/_hooks.py b/Lib/importlib/metadata/_hooks.py deleted file mode 100644 index 4c57f4d48ee223..00000000000000 --- a/Lib/importlib/metadata/_hooks.py +++ /dev/null @@ -1,16 +0,0 @@ -from .api import Distribution -from contextlib import suppress - - -class PathDistribution(Distribution): - def __init__(self, path): - """Construct a distribution from a path to the metadata directory.""" - self._path = path - - def read_text(self, filename): - with suppress(FileNotFoundError, NotADirectoryError, KeyError): - return self._path.joinpath(filename).read_text(encoding='utf-8') - read_text.__doc__ = Distribution.read_text.__doc__ - - def locate_file(self, path): - return self._path.parent / path diff --git a/Lib/importlib/metadata/abc.py b/Lib/importlib/metadata/abc.py deleted file mode 100644 index 845e41afff7a33..00000000000000 --- a/Lib/importlib/metadata/abc.py +++ /dev/null @@ -1,18 +0,0 @@ -import abc - -from importlib.abc import MetaPathFinder - - -class DistributionFinder(MetaPathFinder): - """ - A MetaPathFinder capable of discovering installed distributions. - """ - - @abc.abstractmethod - def find_distributions(self, name=None, path=None): - """ - Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the name - (or all names if not supplied) along the paths in the list - of directories ``path`` (defaults to sys.path). - """ diff --git a/Lib/importlib/metadata/api.py b/Lib/importlib/metadata/api.py deleted file mode 100644 index ba5c17120b96a4..00000000000000 --- a/Lib/importlib/metadata/api.py +++ /dev/null @@ -1,358 +0,0 @@ -import re -import abc -import csv -import sys -import email -import operator -import functools -import itertools -import collections - -from importlib import import_module -from itertools import starmap - -import pathlib -from configparser import ConfigParser - -__metaclass__ = type - - -class PackageNotFoundError(ModuleNotFoundError): - """The package was not found.""" - - -class EntryPoint(collections.namedtuple('EntryPointBase', 'name value group')): - """An entry point as defined by Python packaging conventions.""" - - pattern = re.compile( - r'(?P[\w.]+)\s*' - r'(:\s*(?P[\w.]+))?\s*' - r'(?P\[.*\])?\s*$' - ) - """ - A regular expression describing the syntax for an entry point, - which might look like: - - - module - - package.module - - package.module:attribute - - package.module:object.attribute - - package.module:attr [extra1, extra2] - - Other combinations are possible as well. - - The expression is lenient about whitespace around the ':', - following the attr, and following any extras. - """ - - def load(self): - """Load the entry point from its definition. If only a module - is indicated by the value, return that module. Otherwise, - return the named object. - """ - match = self.pattern.match(self.value) - module = import_module(match.group('module')) - attrs = filter(None, (match.group('attr') or '').split('.')) - return functools.reduce(getattr, attrs, module) - - @property - def extras(self): - match = self.pattern.match(self.value) - return list(re.finditer(r'\w+', match.group('extras') or '')) - - @classmethod - def _from_config(cls, config): - return [ - cls(name, value, group) - for group in config.sections() - for name, value in config.items(group) - ] - - @classmethod - def _from_text(cls, text): - config = ConfigParser() - config.read_string(text) - return EntryPoint._from_config(config) - - def __iter__(self): - """ - Supply iter so one may construct dicts of EntryPoints easily. - """ - return iter((self.name, self)) - - -class PackagePath(pathlib.PurePosixPath): - """A reference to a path in a package""" - - def read_text(self, encoding='utf-8'): - with self.locate().open(encoding=encoding) as stream: - return stream.read() - - def read_binary(self): - with self.locate().open('rb') as stream: - return stream.read() - - def locate(self): - """Return a path-like object for this path""" - return self.dist.locate_file(self) - - -class FileHash: - def __init__(self, spec): - self.mode, _, self.value = spec.partition('=') - - def __repr__(self): - return ''.format(self.mode, self.value) - - -class Distribution: - """A Python distribution package.""" - - @abc.abstractmethod - def read_text(self, filename): - """Attempt to load metadata file given by the name. - - :param filename: The name of the file in the distribution info. - :return: The text if found, otherwise None. - """ - - @abc.abstractmethod - def locate_file(self, path): - """ - Given a path to a file in this distribution, return a path - to it. - """ - - @classmethod - def from_name(cls, name): - """Return the Distribution for the given package name. - - :param name: The name of the distribution package to search for. - :return: The Distribution instance (or subclass thereof) for the named - package, if found. - :raises PackageNotFoundError: When the named package's distribution - metadata cannot be found. - """ - for resolver in cls._discover_resolvers(): - dists = resolver(name) - dist = next(dists, None) - if dist is not None: - return dist - else: - raise PackageNotFoundError(name) - - @classmethod - def discover(cls): - """Return an iterable of Distribution objects for all packages. - - :return: Iterable of Distribution objects for all packages. - """ - return itertools.chain.from_iterable( - resolver() - for resolver in cls._discover_resolvers() - ) - - @staticmethod - def _discover_resolvers(): - """Search the meta_path for resolvers.""" - declared = ( - getattr(finder, 'find_distributions', None) - for finder in sys.meta_path - ) - return filter(None, declared) - - @classmethod - def find_local(cls): - dists = itertools.chain.from_iterable( - resolver(path=['.']) - for resolver in cls._discover_resolvers() - ) - dist, = dists - return dist - - @property - def metadata(self): - """Return the parsed metadata for this Distribution. - - The returned object will have keys that name the various bits of - metadata. See PEP 566 for details. - """ - text = ( - self.read_text('METADATA') - or self.read_text('PKG-INFO') - # This last clause is here to support old egg-info files. Its - # effect is to just end up using the PathDistribution's self._path - # (which points to the egg-info file) attribute unchanged. - or self.read_text('') - ) - return email.message_from_string(text) - - @property - def version(self): - """Return the 'Version' metadata for the distribution package.""" - return self.metadata['Version'] - - @property - def entry_points(self): - return EntryPoint._from_text(self.read_text('entry_points.txt')) - - @property - def files(self): - file_lines = self._read_files_distinfo() or self._read_files_egginfo() - - def make_file(name, hash=None, size_str=None): - result = PackagePath(name) - result.hash = FileHash(hash) if hash else None - result.size = int(size_str) if size_str else None - result.dist = self - return result - - return file_lines and starmap(make_file, csv.reader(file_lines)) - - def _read_files_distinfo(self): - """ - Read the lines of RECORD - """ - text = self.read_text('RECORD') - return text and text.splitlines() - - def _read_files_egginfo(self): - """ - SOURCES.txt might contain literal commas, so wrap each line - in quotes. - """ - text = self.read_text('SOURCES.txt') - return text and map('"{}"'.format, text.splitlines()) - - @property - def requires(self): - """Generated requirements specified for this Distribution""" - return self._read_dist_info_reqs() or self._read_egg_info_reqs() - - def _read_dist_info_reqs(self): - spec = self.metadata['Requires-Dist'] - return spec and filter(None, spec.splitlines()) - - def _read_egg_info_reqs(self): - source = self.read_text('requires.txt') - return source and self._deps_from_requires_text(source) - - @classmethod - def _deps_from_requires_text(cls, source): - section_pairs = cls._read_sections(source.splitlines()) - sections = { - section: list(map(operator.itemgetter('line'), results)) - for section, results in - itertools.groupby(section_pairs, operator.itemgetter('section')) - } - return cls._convert_egg_info_reqs_to_simple_reqs(sections) - - @staticmethod - def _read_sections(lines): - section = None - for line in filter(None, lines): - section_match = re.match(r'\[(.*)\]$', line) - if section_match: - section = section_match.group(1) - continue - yield locals() - - @staticmethod - def _convert_egg_info_reqs_to_simple_reqs(sections): - """ - Historically, setuptools would solicit and store 'extra' - requirements, including those with environment markers, - in separate sections. More modern tools expect each - dependency to be defined separately, with any relevant - extras and environment markers attached directly to that - requirement. This method converts the former to the - latter. See _test_deps_from_requires_text for an example. - """ - def make_condition(name): - return name and 'extra == "{name}"'.format(name=name) - - def parse_condition(section): - section = section or '' - extra, sep, markers = section.partition(':') - if extra and markers: - markers = '({markers})'.format(markers=markers) - conditions = list(filter(None, [markers, make_condition(extra)])) - return '; ' + ' and '.join(conditions) if conditions else '' - - for section, deps in sections.items(): - for dep in deps: - yield dep + parse_condition(section) - - -def distribution(package): - """Get the ``Distribution`` instance for the given package. - - :param package: The name of the package as a string. - :return: A ``Distribution`` instance (or subclass thereof). - """ - return Distribution.from_name(package) - - -def distributions(): - """Get all ``Distribution`` instances in the current environment. - - :return: An iterable of ``Distribution`` instances. - """ - return Distribution.discover() - - -def local_distribution(): - """Get the ``Distribution`` instance for the package in CWD. - - :return: A ``Distribution`` instance (or subclass thereof). - """ - return Distribution.find_local() - - -def metadata(package): - """Get the metadata for the package. - - :param package: The name of the distribution package to query. - :return: An email.Message containing the parsed metadata. - """ - return Distribution.from_name(package).metadata - - -def version(package): - """Get the version string for the named package. - - :param package: The name of the distribution package to query. - :return: The version string for the package as defined in the package's - "Version" metadata key. - """ - return distribution(package).version - - -def entry_points(): - """Return EntryPoint objects for all installed packages. - - :return: EntryPoint objects for all installed packages. - """ - eps = itertools.chain.from_iterable( - dist.entry_points for dist in distributions()) - by_group = operator.attrgetter('group') - ordered = sorted(eps, key=by_group) - grouped = itertools.groupby(ordered, by_group) - return { - group: tuple(eps) - for group, eps in grouped - } - - -def files(package): - return distribution(package).files - - -def requires(package): - """ - Return a list of requirements for the indicated distribution. - - :return: An iterator of requirements, suitable for - packaging.requirement.Requirement. - """ - return distribution(package).requires diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index 22529b1cc88e2a..bb5c6760f55574 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -3,12 +3,14 @@ import re import textwrap import unittest -import importlib +import importlib.metadata from . import fixtures from importlib.metadata import ( - Distribution, PackageNotFoundError, api, distributions, - entry_points, metadata, version) + Distribution, EntryPoint, + PackageNotFoundError, distributions, + entry_points, metadata, version, + ) class BasicTests(fixtures.DistInfoPkg, unittest.TestCase): @@ -40,12 +42,12 @@ def test_resolve(self): self.assertEqual(ep.load().__name__, "main") def test_resolve_without_attr(self): - ep = api.EntryPoint( + ep = EntryPoint( name='ep', - value='importlib.metadata.api', + value='importlib.metadata', group='grp', ) - assert ep.load() is api + assert ep.load() is importlib.metadata class NameNormalizationTests(fixtures.SiteDir, unittest.TestCase): @@ -144,7 +146,7 @@ def test_package_discovery(self): assert all( isinstance(dist, Distribution) for dist in dists - ) + ), dists assert any( dist.metadata['Name'] == 'egginfo-pkg' for dist in dists diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index f837a6343eb842..36c812da752dd0 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -7,9 +7,8 @@ from . import fixtures from importlib.metadata import ( Distribution, PackageNotFoundError, distribution, - entry_points, files, metadata, requires, version, + entry_points, files, local_distribution, metadata, requires, version, ) -from importlib.metadata.api import local_distribution class APITests( diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index db39e190ea7ac9..22da01630810c8 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -48,6 +48,7 @@ def setUp(self): egg = self.resources.enter_context( path(self.root, 'example-21.12-py3.6.egg')) sys.path.insert(0, str(egg)) + print('***', sys.path) self.resources.callback(sys.path.pop, 0) def test_files(self): diff --git a/Python/importlib_external.h b/Python/importlib_external.h index e0bbb8588fb261..19c96a3cbc0fc3 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2260,570 +2260,570 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,46,112,97,116,104,41,46,10,32,32,32,32,32,32,32, 32,114,73,0,0,0,78,41,1,218,16,80,97,116,104,68, 105,115,116,114,105,98,117,116,105,111,110,122,2,46,42,41, - 8,218,2,114,101,90,25,105,109,112,111,114,116,108,105,98, - 46,109,101,116,97,100,97,116,97,46,95,104,111,111,107,115, - 114,59,1,0,0,114,8,0,0,0,114,44,0,0,0,90, - 6,101,115,99,97,112,101,218,13,95,115,101,97,114,99,104, - 95,112,97,116,104,115,218,3,109,97,112,41,7,114,193,0, - 0,0,114,117,0,0,0,114,44,0,0,0,114,60,1,0, - 0,114,59,1,0,0,218,7,112,97,116,116,101,114,110,90, - 5,102,111,117,110,100,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,18,102,105,110,100,95,100,105,115,116, - 114,105,98,117,116,105,111,110,115,84,5,0,0,115,14,0, - 0,0,0,7,8,1,12,1,8,1,6,1,22,1,12,1, - 122,29,80,97,116,104,70,105,110,100,101,114,46,102,105,110, - 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,99, - 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 6,0,0,0,3,0,0,0,115,44,0,0,0,100,1,100, - 2,108,0,125,3,124,3,106,1,160,2,135,0,135,1,102, - 2,100,3,100,4,132,8,116,3,136,0,106,4,124,2,131, - 2,68,0,131,1,161,1,83,0,41,5,122,67,10,32,32, - 32,32,32,32,32,32,70,105,110,100,32,109,101,116,97,100, - 97,116,97,32,100,105,114,101,99,116,111,114,105,101,115,32, - 105,110,32,112,97,116,104,115,32,104,101,117,114,105,115,116, - 105,99,97,108,108,121,46,10,32,32,32,32,32,32,32,32, - 114,73,0,0,0,78,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,5,0,0,0,51,0,0,0,115, - 26,0,0,0,124,0,93,18,125,1,136,0,160,0,124,1, - 136,1,161,2,86,0,1,0,113,2,100,0,83,0,114,110, - 0,0,0,41,1,218,12,95,115,101,97,114,99,104,95,112, - 97,116,104,41,2,114,32,0,0,0,114,44,0,0,0,169, - 2,114,193,0,0,0,114,63,1,0,0,114,3,0,0,0, - 114,6,0,0,0,114,19,1,0,0,105,5,0,0,115,4, - 0,0,0,4,2,2,255,122,43,80,97,116,104,70,105,110, - 100,101,114,46,95,115,101,97,114,99,104,95,112,97,116,104, - 115,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, - 120,112,114,62,41,5,218,9,105,116,101,114,116,111,111,108, - 115,90,5,99,104,97,105,110,90,13,102,114,111,109,95,105, - 116,101,114,97,98,108,101,114,62,1,0,0,218,12,95,115, - 119,105,116,99,104,95,112,97,116,104,41,4,114,193,0,0, - 0,114,63,1,0,0,90,5,112,97,116,104,115,114,67,1, - 0,0,114,3,0,0,0,114,66,1,0,0,114,6,0,0, - 0,114,61,1,0,0,99,5,0,0,115,8,0,0,0,0, - 5,8,1,18,2,10,254,122,24,80,97,116,104,70,105,110, + 8,218,2,114,101,90,18,105,109,112,111,114,116,108,105,98, + 46,109,101,116,97,100,97,116,97,114,59,1,0,0,114,8, + 0,0,0,114,44,0,0,0,90,6,101,115,99,97,112,101, + 218,13,95,115,101,97,114,99,104,95,112,97,116,104,115,218, + 3,109,97,112,41,7,114,193,0,0,0,114,117,0,0,0, + 114,44,0,0,0,114,60,1,0,0,114,59,1,0,0,218, + 7,112,97,116,116,101,114,110,90,5,102,111,117,110,100,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,18, + 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, + 110,115,84,5,0,0,115,14,0,0,0,0,7,8,1,12, + 1,8,1,6,1,22,1,12,1,122,29,80,97,116,104,70, + 105,110,100,101,114,46,102,105,110,100,95,100,105,115,116,114, + 105,98,117,116,105,111,110,115,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,6,0,0,0,3,0,0, + 0,115,44,0,0,0,100,1,100,2,108,0,125,3,124,3, + 106,1,160,2,135,0,135,1,102,2,100,3,100,4,132,8, + 116,3,136,0,106,4,124,2,131,2,68,0,131,1,161,1, + 83,0,41,5,122,67,10,32,32,32,32,32,32,32,32,70, + 105,110,100,32,109,101,116,97,100,97,116,97,32,100,105,114, + 101,99,116,111,114,105,101,115,32,105,110,32,112,97,116,104, + 115,32,104,101,117,114,105,115,116,105,99,97,108,108,121,46, + 10,32,32,32,32,32,32,32,32,114,73,0,0,0,78,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 5,0,0,0,51,0,0,0,115,26,0,0,0,124,0,93, + 18,125,1,136,0,160,0,124,1,136,1,161,2,86,0,1, + 0,113,2,100,0,83,0,114,110,0,0,0,41,1,218,12, + 95,115,101,97,114,99,104,95,112,97,116,104,41,2,114,32, + 0,0,0,114,44,0,0,0,169,2,114,193,0,0,0,114, + 63,1,0,0,114,3,0,0,0,114,6,0,0,0,114,19, + 1,0,0,105,5,0,0,115,4,0,0,0,4,2,2,255, + 122,43,80,97,116,104,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,112,97,116,104,115,46,60,108,111,99,97, + 108,115,62,46,60,103,101,110,101,120,112,114,62,41,5,218, + 9,105,116,101,114,116,111,111,108,115,90,5,99,104,97,105, + 110,90,13,102,114,111,109,95,105,116,101,114,97,98,108,101, + 114,62,1,0,0,218,12,95,115,119,105,116,99,104,95,112, + 97,116,104,41,4,114,193,0,0,0,114,63,1,0,0,90, + 5,112,97,116,104,115,114,67,1,0,0,114,3,0,0,0, + 114,66,1,0,0,114,6,0,0,0,114,61,1,0,0,99, + 5,0,0,115,8,0,0,0,0,5,8,1,18,2,10,254, + 122,24,80,97,116,104,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,112,97,116,104,115,99,1,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,10,0,0,0,67, + 0,0,0,115,78,0,0,0,100,1,100,2,108,0,109,1, + 125,1,1,0,100,1,100,0,108,2,125,2,100,1,100,3, + 108,3,109,4,125,3,1,0,124,1,116,5,131,1,143,24, + 1,0,124,2,160,4,124,0,161,1,87,0,2,0,53,0, + 81,0,82,0,163,0,83,0,81,0,82,0,88,0,124,3, + 124,0,131,1,83,0,41,4,78,114,73,0,0,0,41,1, + 218,8,115,117,112,112,114,101,115,115,41,1,218,4,80,97, + 116,104,41,6,90,10,99,111,110,116,101,120,116,108,105,98, + 114,69,1,0,0,218,7,122,105,112,102,105,108,101,90,7, + 112,97,116,104,108,105,98,114,70,1,0,0,218,9,69,120, + 99,101,112,116,105,111,110,41,4,114,44,0,0,0,114,69, + 1,0,0,114,71,1,0,0,114,70,1,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,68,1,0, + 0,110,5,0,0,115,12,0,0,0,0,2,12,1,8,1, + 12,1,10,1,28,1,122,23,80,97,116,104,70,105,110,100, + 101,114,46,95,115,119,105,116,99,104,95,112,97,116,104,99, + 4,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 5,0,0,0,67,0,0,0,115,32,0,0,0,100,1,100, + 0,108,0,125,4,124,4,106,1,124,1,116,2,124,3,106, + 3,131,1,124,4,106,4,100,2,141,3,83,0,41,3,78, + 114,73,0,0,0,41,1,114,83,0,0,0,41,5,114,60, + 1,0,0,90,5,109,97,116,99,104,114,85,0,0,0,114, + 117,0,0,0,90,10,73,71,78,79,82,69,67,65,83,69, + 41,5,114,193,0,0,0,114,63,1,0,0,218,4,114,111, + 111,116,114,41,1,0,0,114,60,1,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,114, + 101,100,105,99,97,116,101,119,5,0,0,115,4,0,0,0, + 0,2,8,1,122,21,80,97,116,104,70,105,110,100,101,114, + 46,95,112,114,101,100,105,99,97,116,101,99,3,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 3,0,0,0,115,64,0,0,0,136,2,160,0,161,0,115, + 12,100,1,83,0,124,2,160,1,100,2,100,3,161,2,125, + 3,136,0,106,2,106,3,124,3,100,4,141,1,137,1,135, + 0,135,1,135,2,102,3,100,5,100,6,132,8,136,2,160, + 4,161,0,68,0,131,1,83,0,41,7,78,114,3,0,0, + 0,250,1,45,114,45,0,0,0,41,1,114,63,1,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,6,0,0,0,51,0,0,0,115,32,0,0,0,124,0, + 93,24,125,1,136,0,160,0,136,1,136,2,124,1,161,3, + 114,26,124,1,86,0,1,0,113,2,100,0,83,0,114,110, + 0,0,0,41,1,114,74,1,0,0,41,2,114,32,0,0, + 0,114,41,1,0,0,169,3,114,193,0,0,0,90,7,109, + 97,116,99,104,101,114,114,73,1,0,0,114,3,0,0,0, + 114,6,0,0,0,114,19,1,0,0,130,5,0,0,115,6, + 0,0,0,4,0,2,1,14,255,122,42,80,97,116,104,70, + 105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,97, + 116,104,46,60,108,111,99,97,108,115,62,46,60,103,101,110, + 101,120,112,114,62,41,5,90,6,105,115,95,100,105,114,114, + 67,0,0,0,218,15,115,101,97,114,99,104,95,116,101,109, + 112,108,97,116,101,114,62,0,0,0,90,7,105,116,101,114, + 100,105,114,41,4,114,193,0,0,0,114,73,1,0,0,114, + 63,1,0,0,90,10,110,111,114,109,97,108,105,122,101,100, + 114,3,0,0,0,114,76,1,0,0,114,6,0,0,0,114, + 65,1,0,0,124,5,0,0,115,10,0,0,0,0,2,8, + 1,4,1,12,1,14,1,122,23,80,97,116,104,70,105,110, 100,101,114,46,95,115,101,97,114,99,104,95,112,97,116,104, - 115,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,10,0,0,0,67,0,0,0,115,78,0,0,0,100, - 1,100,2,108,0,109,1,125,1,1,0,100,1,100,0,108, - 2,125,2,100,1,100,3,108,3,109,4,125,3,1,0,124, - 1,116,5,131,1,143,24,1,0,124,2,160,4,124,0,161, - 1,87,0,2,0,53,0,81,0,82,0,163,0,83,0,81, - 0,82,0,88,0,124,3,124,0,131,1,83,0,41,4,78, - 114,73,0,0,0,41,1,218,8,115,117,112,112,114,101,115, - 115,41,1,218,4,80,97,116,104,41,6,90,10,99,111,110, - 116,101,120,116,108,105,98,114,69,1,0,0,218,7,122,105, - 112,102,105,108,101,90,7,112,97,116,104,108,105,98,114,70, - 1,0,0,218,9,69,120,99,101,112,116,105,111,110,41,4, - 114,44,0,0,0,114,69,1,0,0,114,71,1,0,0,114, - 70,1,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,68,1,0,0,110,5,0,0,115,12,0,0, - 0,0,2,12,1,8,1,12,1,10,1,28,1,122,23,80, - 97,116,104,70,105,110,100,101,114,46,95,115,119,105,116,99, - 104,95,112,97,116,104,99,4,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 32,0,0,0,100,1,100,0,108,0,125,4,124,4,106,1, - 124,1,116,2,124,3,106,3,131,1,124,4,106,4,100,2, - 141,3,83,0,41,3,78,114,73,0,0,0,41,1,114,83, - 0,0,0,41,5,114,60,1,0,0,90,5,109,97,116,99, - 104,114,85,0,0,0,114,117,0,0,0,90,10,73,71,78, - 79,82,69,67,65,83,69,41,5,114,193,0,0,0,114,63, - 1,0,0,218,4,114,111,111,116,114,41,1,0,0,114,60, - 1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,218,10,95,112,114,101,100,105,99,97,116,101,119,5, - 0,0,115,4,0,0,0,0,2,8,1,122,21,80,97,116, - 104,70,105,110,100,101,114,46,95,112,114,101,100,105,99,97, - 116,101,99,3,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,3,0,0,0,115,64,0,0,0, - 136,2,160,0,161,0,115,12,100,1,83,0,124,2,160,1, - 100,2,100,3,161,2,125,3,136,0,106,2,106,3,124,3, - 100,4,141,1,137,1,135,0,135,1,135,2,102,3,100,5, - 100,6,132,8,136,2,160,4,161,0,68,0,131,1,83,0, - 41,7,78,114,3,0,0,0,250,1,45,114,45,0,0,0, - 41,1,114,63,1,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,6,0,0,0,51,0,0,0, - 115,32,0,0,0,124,0,93,24,125,1,136,0,160,0,136, - 1,136,2,124,1,161,3,114,26,124,1,86,0,1,0,113, - 2,100,0,83,0,114,110,0,0,0,41,1,114,74,1,0, - 0,41,2,114,32,0,0,0,114,41,1,0,0,169,3,114, - 193,0,0,0,90,7,109,97,116,99,104,101,114,114,73,1, - 0,0,114,3,0,0,0,114,6,0,0,0,114,19,1,0, - 0,130,5,0,0,115,6,0,0,0,4,0,2,1,14,255, - 122,42,80,97,116,104,70,105,110,100,101,114,46,95,115,101, - 97,114,99,104,95,112,97,116,104,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,41,5,90,6, - 105,115,95,100,105,114,114,67,0,0,0,218,15,115,101,97, - 114,99,104,95,116,101,109,112,108,97,116,101,114,62,0,0, - 0,90,7,105,116,101,114,100,105,114,41,4,114,193,0,0, - 0,114,73,1,0,0,114,63,1,0,0,90,10,110,111,114, - 109,97,108,105,122,101,100,114,3,0,0,0,114,76,1,0, - 0,114,6,0,0,0,114,65,1,0,0,124,5,0,0,115, - 10,0,0,0,0,2,8,1,4,1,12,1,14,1,122,23, - 80,97,116,104,70,105,110,100,101,114,46,95,115,101,97,114, - 99,104,95,112,97,116,104,41,1,78,41,2,78,78,41,1, - 78,41,2,78,78,41,19,114,125,0,0,0,114,124,0,0, - 0,114,126,0,0,0,114,127,0,0,0,114,207,0,0,0, - 114,46,1,0,0,114,52,1,0,0,114,54,1,0,0,114, - 55,1,0,0,114,58,1,0,0,114,203,0,0,0,114,206, - 0,0,0,114,77,1,0,0,114,64,1,0,0,114,61,1, - 0,0,218,12,115,116,97,116,105,99,109,101,116,104,111,100, - 114,68,1,0,0,114,74,1,0,0,114,65,1,0,0,114, - 3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,45,1,0,0,205,4,0,0,115,52,0,0, - 0,8,2,4,2,2,1,10,9,2,1,10,12,2,1,10, - 21,2,1,10,14,2,1,12,31,2,1,12,23,2,1,12, - 12,4,2,2,1,12,14,2,1,10,10,2,1,10,8,2, - 1,10,4,2,1,114,45,1,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, - 0,0,0,115,90,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, - 132,0,90,5,101,6,90,7,100,6,100,7,132,0,90,8, - 100,8,100,9,132,0,90,9,100,19,100,11,100,12,132,1, - 90,10,100,13,100,14,132,0,90,11,101,12,100,15,100,16, - 132,0,131,1,90,13,100,17,100,18,132,0,90,14,100,10, - 83,0,41,20,218,10,70,105,108,101,70,105,110,100,101,114, - 122,172,70,105,108,101,45,98,97,115,101,100,32,102,105,110, - 100,101,114,46,10,10,32,32,32,32,73,110,116,101,114,97, - 99,116,105,111,110,115,32,119,105,116,104,32,116,104,101,32, - 102,105,108,101,32,115,121,115,116,101,109,32,97,114,101,32, - 99,97,99,104,101,100,32,102,111,114,32,112,101,114,102,111, - 114,109,97,110,99,101,44,32,98,101,105,110,103,10,32,32, - 32,32,114,101,102,114,101,115,104,101,100,32,119,104,101,110, - 32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,116, - 104,101,32,102,105,110,100,101,114,32,105,115,32,104,97,110, - 100,108,105,110,103,32,104,97,115,32,98,101,101,110,32,109, - 111,100,105,102,105,101,100,46,10,10,32,32,32,32,99,2, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,6, - 0,0,0,7,0,0,0,115,84,0,0,0,103,0,125,3, - 124,2,68,0,93,32,92,2,137,0,125,4,124,3,160,0, - 135,0,102,1,100,1,100,2,132,8,124,4,68,0,131,1, - 161,1,1,0,113,8,124,3,124,0,95,1,124,1,112,54, - 100,3,124,0,95,2,100,4,124,0,95,3,116,4,131,0, - 124,0,95,5,116,4,131,0,124,0,95,6,100,5,83,0, - 41,6,122,154,73,110,105,116,105,97,108,105,122,101,32,119, - 105,116,104,32,116,104,101,32,112,97,116,104,32,116,111,32, - 115,101,97,114,99,104,32,111,110,32,97,110,100,32,97,32, - 118,97,114,105,97,98,108,101,32,110,117,109,98,101,114,32, - 111,102,10,32,32,32,32,32,32,32,32,50,45,116,117,112, - 108,101,115,32,99,111,110,116,97,105,110,105,110,103,32,116, - 104,101,32,108,111,97,100,101,114,32,97,110,100,32,116,104, - 101,32,102,105,108,101,32,115,117,102,102,105,120,101,115,32, - 116,104,101,32,108,111,97,100,101,114,10,32,32,32,32,32, - 32,32,32,114,101,99,111,103,110,105,122,101,115,46,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3, - 0,0,0,51,0,0,0,115,22,0,0,0,124,0,93,14, - 125,1,124,1,136,0,102,2,86,0,1,0,113,2,100,0, - 83,0,114,110,0,0,0,114,3,0,0,0,114,16,1,0, - 0,169,1,114,140,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,19,1,0,0,149,5,0,0,115,4,0,0,0, - 4,0,2,0,122,38,70,105,108,101,70,105,110,100,101,114, - 46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,114,71,0,0, - 0,114,105,0,0,0,78,41,7,114,167,0,0,0,218,8, - 95,108,111,97,100,101,114,115,114,44,0,0,0,218,11,95, - 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, - 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,41,5,114,119,0,0,0,114,44,0,0,0,218,14,108, - 111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,108, - 111,97,100,101,114,115,114,189,0,0,0,114,3,0,0,0, - 114,80,1,0,0,114,6,0,0,0,114,209,0,0,0,143, - 5,0,0,115,16,0,0,0,0,4,4,1,12,1,26,1, - 6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,105, - 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,10,0,0,0,100,1,124,0,95, - 0,100,2,83,0,41,3,122,31,73,110,118,97,108,105,100, - 97,116,101,32,116,104,101,32,100,105,114,101,99,116,111,114, - 121,32,109,116,105,109,101,46,114,105,0,0,0,78,41,1, - 114,82,1,0,0,114,246,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,114,46,1,0,0,157,5, - 0,0,115,2,0,0,0,0,2,122,28,70,105,108,101,70, - 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, - 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, - 115,42,0,0,0,124,0,160,0,124,1,161,1,125,2,124, - 2,100,1,107,8,114,26,100,1,103,0,102,2,83,0,124, - 2,106,1,124,2,106,2,112,38,103,0,102,2,83,0,41, - 2,122,197,84,114,121,32,116,111,32,102,105,110,100,32,97, - 32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,32, - 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, - 44,32,111,114,32,116,104,101,32,110,97,109,101,115,112,97, - 99,101,10,32,32,32,32,32,32,32,32,112,97,99,107,97, - 103,101,32,112,111,114,116,105,111,110,115,46,32,82,101,116, - 117,114,110,115,32,40,108,111,97,100,101,114,44,32,108,105, - 115,116,45,111,102,45,112,111,114,116,105,111,110,115,41,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115, - 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,78,41,3,114,203,0,0,0, - 114,140,0,0,0,114,178,0,0,0,41,3,114,119,0,0, - 0,114,139,0,0,0,114,187,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,137,0,0,0,163, - 5,0,0,115,8,0,0,0,0,7,10,1,8,1,8,1, - 122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,110, - 100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,0, - 0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,6, - 116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,0, - 41,2,78,114,177,0,0,0,41,1,114,190,0,0,0,41, - 7,114,119,0,0,0,114,188,0,0,0,114,139,0,0,0, - 114,44,0,0,0,90,4,115,109,115,108,114,202,0,0,0, - 114,140,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,58,1,0,0,175,5,0,0,115,8,0, - 0,0,0,1,10,1,8,1,2,255,122,20,70,105,108,101, - 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, - 78,99,3,0,0,0,0,0,0,0,0,0,0,0,14,0, - 0,0,8,0,0,0,67,0,0,0,115,102,1,0,0,100, - 1,125,3,124,1,160,0,100,2,161,1,100,3,25,0,125, - 4,122,24,116,1,124,0,106,2,112,34,116,3,160,4,161, - 0,131,1,106,5,125,5,87,0,110,24,4,0,116,6,107, - 10,114,66,1,0,1,0,1,0,100,4,125,5,89,0,110, - 2,88,0,124,5,124,0,106,7,107,3,114,92,124,0,160, - 8,161,0,1,0,124,5,124,0,95,7,116,9,131,0,114, - 114,124,0,106,10,125,6,124,4,160,11,161,0,125,7,110, - 10,124,0,106,12,125,6,124,4,125,7,124,7,124,6,107, - 6,114,218,116,13,124,0,106,2,124,4,131,2,125,8,124, - 0,106,14,68,0,93,58,92,2,125,9,125,10,100,5,124, - 9,23,0,125,11,116,13,124,8,124,11,131,2,125,12,116, - 15,124,12,131,1,114,208,124,0,160,16,124,10,124,1,124, - 12,124,8,103,1,124,2,161,5,2,0,1,0,83,0,113, - 150,116,17,124,8,131,1,125,3,124,0,106,14,68,0,93, - 86,92,2,125,9,125,10,116,13,124,0,106,2,124,4,124, - 9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,100, - 3,100,7,141,3,1,0,124,7,124,9,23,0,124,6,107, - 6,144,1,114,54,116,15,124,12,131,1,144,1,114,54,124, - 0,160,16,124,10,124,1,124,12,100,8,124,2,161,5,2, - 0,1,0,83,0,113,224,124,3,144,1,114,98,116,18,160, - 19,100,9,124,8,161,2,1,0,116,18,160,20,124,1,100, - 8,161,2,125,13,124,8,103,1,124,13,95,21,124,13,83, - 0,100,8,83,0,41,10,122,111,84,114,121,32,116,111,32, - 102,105,110,100,32,97,32,115,112,101,99,32,102,111,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,82, - 101,116,117,114,110,115,32,116,104,101,32,109,97,116,99,104, - 105,110,103,32,115,112,101,99,44,32,111,114,32,78,111,110, - 101,32,105,102,32,110,111,116,32,102,111,117,110,100,46,10, - 32,32,32,32,32,32,32,32,70,114,71,0,0,0,114,28, - 0,0,0,114,105,0,0,0,114,209,0,0,0,122,9,116, - 114,121,105,110,103,32,123,125,41,1,90,9,118,101,114,98, - 111,115,105,116,121,78,122,25,112,111,115,115,105,98,108,101, - 32,110,97,109,101,115,112,97,99,101,32,102,111,114,32,123, - 125,41,22,114,41,0,0,0,114,49,0,0,0,114,44,0, - 0,0,114,2,0,0,0,114,55,0,0,0,114,9,1,0, - 0,114,50,0,0,0,114,82,1,0,0,218,11,95,102,105, - 108,108,95,99,97,99,104,101,114,7,0,0,0,114,85,1, - 0,0,114,106,0,0,0,114,84,1,0,0,114,38,0,0, - 0,114,81,1,0,0,114,54,0,0,0,114,58,1,0,0, - 114,56,0,0,0,114,134,0,0,0,114,149,0,0,0,114, - 183,0,0,0,114,178,0,0,0,41,14,114,119,0,0,0, - 114,139,0,0,0,114,202,0,0,0,90,12,105,115,95,110, - 97,109,101,115,112,97,99,101,90,11,116,97,105,108,95,109, - 111,100,117,108,101,114,169,0,0,0,90,5,99,97,99,104, - 101,90,12,99,97,99,104,101,95,109,111,100,117,108,101,90, - 9,98,97,115,101,95,112,97,116,104,114,17,1,0,0,114, - 188,0,0,0,90,13,105,110,105,116,95,102,105,108,101,110, - 97,109,101,90,9,102,117,108,108,95,112,97,116,104,114,187, + 41,1,78,41,2,78,78,41,1,78,41,2,78,78,41,19, + 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, + 127,0,0,0,114,207,0,0,0,114,46,1,0,0,114,52, + 1,0,0,114,54,1,0,0,114,55,1,0,0,114,58,1, + 0,0,114,203,0,0,0,114,206,0,0,0,114,77,1,0, + 0,114,64,1,0,0,114,61,1,0,0,218,12,115,116,97, + 116,105,99,109,101,116,104,111,100,114,68,1,0,0,114,74, + 1,0,0,114,65,1,0,0,114,3,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,45,1,0, + 0,205,4,0,0,115,52,0,0,0,8,2,4,2,2,1, + 10,9,2,1,10,12,2,1,10,21,2,1,10,14,2,1, + 12,31,2,1,12,23,2,1,12,12,4,2,2,1,12,14, + 2,1,10,10,2,1,10,8,2,1,10,4,2,1,114,45, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90, + 7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90, + 9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132, + 0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100, + 17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70, + 105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45, + 98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32, + 32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32, + 119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121, + 115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32, + 102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44, + 32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101, + 115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100, + 101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104, + 97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100, + 46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0, + 115,84,0,0,0,103,0,125,3,124,2,68,0,93,32,92, + 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100, + 2,132,8,124,4,68,0,131,1,161,1,1,0,113,8,124, + 3,124,0,95,1,124,1,112,54,100,3,124,0,95,2,100, + 4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131, + 0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105, + 116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101, + 32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32, + 111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108, + 101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32, + 32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110, + 116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100, + 101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32, + 115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97, + 100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111, + 103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, + 115,22,0,0,0,124,0,93,14,125,1,124,1,136,0,102, + 2,86,0,1,0,113,2,100,0,83,0,114,110,0,0,0, + 114,3,0,0,0,114,16,1,0,0,169,1,114,140,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0, + 149,5,0,0,115,4,0,0,0,4,0,2,0,122,38,70, + 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, + 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, + 101,120,112,114,62,114,71,0,0,0,114,105,0,0,0,78, + 41,7,114,167,0,0,0,218,8,95,108,111,97,100,101,114, + 115,114,44,0,0,0,218,11,95,112,97,116,104,95,109,116, + 105,109,101,218,3,115,101,116,218,11,95,112,97,116,104,95, + 99,97,99,104,101,218,19,95,114,101,108,97,120,101,100,95, + 112,97,116,104,95,99,97,99,104,101,41,5,114,119,0,0, + 0,114,44,0,0,0,218,14,108,111,97,100,101,114,95,100, + 101,116,97,105,108,115,90,7,108,111,97,100,101,114,115,114, + 189,0,0,0,114,3,0,0,0,114,80,1,0,0,114,6, + 0,0,0,114,209,0,0,0,143,5,0,0,115,16,0,0, + 0,0,4,4,1,12,1,26,1,6,2,10,1,6,1,8, + 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 10,0,0,0,100,1,124,0,95,0,100,2,83,0,41,3, + 122,31,73,110,118,97,108,105,100,97,116,101,32,116,104,101, + 32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,101, + 46,114,105,0,0,0,78,41,1,114,82,1,0,0,114,246, 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,203,0,0,0,180,5,0,0,115,74,0,0,0, - 0,5,4,1,14,1,2,1,24,1,14,1,10,1,10,1, - 8,1,6,2,6,1,6,1,10,2,6,1,4,2,8,1, - 12,1,14,1,8,1,10,1,8,1,26,4,8,2,14,1, - 16,1,16,1,14,1,10,1,10,1,2,0,2,255,10,2, - 6,1,12,1,12,1,8,1,4,1,122,20,70,105,108,101, - 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, - 99,1,0,0,0,0,0,0,0,0,0,0,0,9,0,0, - 0,10,0,0,0,67,0,0,0,115,190,0,0,0,124,0, - 106,0,125,1,122,22,116,1,160,2,124,1,112,22,116,1, - 160,3,161,0,161,1,125,2,87,0,110,30,4,0,116,4, - 116,5,116,6,102,3,107,10,114,58,1,0,1,0,1,0, - 103,0,125,2,89,0,110,2,88,0,116,7,106,8,160,9, - 100,1,161,1,115,84,116,10,124,2,131,1,124,0,95,11, - 110,74,116,10,131,0,125,3,124,2,68,0,93,56,125,4, - 124,4,160,12,100,2,161,1,92,3,125,5,125,6,125,7, - 124,6,114,136,100,3,160,13,124,5,124,7,160,14,161,0, - 161,2,125,8,110,4,124,5,125,8,124,3,160,15,124,8, - 161,1,1,0,113,94,124,3,124,0,95,11,116,7,106,8, - 160,9,116,16,161,1,114,186,100,4,100,5,132,0,124,2, - 68,0,131,1,124,0,95,17,100,6,83,0,41,7,122,68, - 70,105,108,108,32,116,104,101,32,99,97,99,104,101,32,111, - 102,32,112,111,116,101,110,116,105,97,108,32,109,111,100,117, - 108,101,115,32,97,110,100,32,112,97,99,107,97,103,101,115, - 32,102,111,114,32,116,104,105,115,32,100,105,114,101,99,116, - 111,114,121,46,114,0,0,0,0,114,71,0,0,0,114,61, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,83,0,0,0,115,20,0,0, - 0,104,0,124,0,93,12,125,1,124,1,160,0,161,0,146, - 2,113,4,83,0,114,3,0,0,0,41,1,114,106,0,0, - 0,41,2,114,32,0,0,0,90,2,102,110,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,9,60,115,101, - 116,99,111,109,112,62,1,6,0,0,115,4,0,0,0,6, - 0,2,0,122,41,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,46,60,108,111,99, - 97,108,115,62,46,60,115,101,116,99,111,109,112,62,78,41, - 18,114,44,0,0,0,114,2,0,0,0,114,6,1,0,0, - 114,55,0,0,0,114,2,1,0,0,218,15,80,101,114,109, - 105,115,115,105,111,110,69,114,114,111,114,218,18,78,111,116, - 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, - 8,0,0,0,114,9,0,0,0,114,10,0,0,0,114,83, - 1,0,0,114,84,1,0,0,114,101,0,0,0,114,62,0, - 0,0,114,106,0,0,0,218,3,97,100,100,114,11,0,0, - 0,114,85,1,0,0,41,9,114,119,0,0,0,114,44,0, - 0,0,114,7,1,0,0,90,21,108,111,119,101,114,95,115, - 117,102,102,105,120,95,99,111,110,116,101,110,116,115,114,41, - 1,0,0,114,117,0,0,0,114,29,1,0,0,114,17,1, - 0,0,90,8,110,101,119,95,110,97,109,101,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,87,1,0,0, - 228,5,0,0,115,34,0,0,0,0,2,6,1,2,1,22, - 1,20,3,10,3,12,1,12,7,6,1,8,1,16,1,4, - 1,18,2,4,1,12,1,6,1,12,1,122,22,70,105,108, - 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, - 99,104,101,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,7,0,0,0,115,18,0,0, - 0,135,0,135,1,102,2,100,1,100,2,132,8,125,2,124, - 2,83,0,41,3,97,20,1,0,0,65,32,99,108,97,115, - 115,32,109,101,116,104,111,100,32,119,104,105,99,104,32,114, - 101,116,117,114,110,115,32,97,32,99,108,111,115,117,114,101, - 32,116,111,32,117,115,101,32,111,110,32,115,121,115,46,112, - 97,116,104,95,104,111,111,107,10,32,32,32,32,32,32,32, - 32,119,104,105,99,104,32,119,105,108,108,32,114,101,116,117, - 114,110,32,97,110,32,105,110,115,116,97,110,99,101,32,117, - 115,105,110,103,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,32,108,111,97,100,101,114,115,32,97,110,100,32,116, - 104,101,32,112,97,116,104,10,32,32,32,32,32,32,32,32, - 99,97,108,108,101,100,32,111,110,32,116,104,101,32,99,108, - 111,115,117,114,101,46,10,10,32,32,32,32,32,32,32,32, - 73,102,32,116,104,101,32,112,97,116,104,32,99,97,108,108, - 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, - 101,32,105,115,32,110,111,116,32,97,32,100,105,114,101,99, - 116,111,114,121,44,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,115,10,32,32,32,32,32,32,32,32,114,97,105, - 115,101,100,46,10,10,32,32,32,32,32,32,32,32,99,1, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, - 0,0,0,19,0,0,0,115,34,0,0,0,116,0,124,0, - 131,1,115,20,116,1,100,1,124,0,100,2,141,2,130,1, - 136,0,124,0,102,1,136,1,158,2,142,0,83,0,41,3, - 122,45,80,97,116,104,32,104,111,111,107,32,102,111,114,32, - 105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110, - 101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,122, - 30,111,110,108,121,32,100,105,114,101,99,116,111,114,105,101, - 115,32,97,114,101,32,115,117,112,112,111,114,116,101,100,114, - 48,0,0,0,41,2,114,56,0,0,0,114,118,0,0,0, - 114,48,0,0,0,169,2,114,193,0,0,0,114,86,1,0, - 0,114,3,0,0,0,114,6,0,0,0,218,24,112,97,116, + 0,0,114,46,1,0,0,157,5,0,0,115,2,0,0,0, + 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, + 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, + 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,42,0,0,0,124,0, + 160,0,124,1,161,1,125,2,124,2,100,1,107,8,114,26, + 100,1,103,0,102,2,83,0,124,2,106,1,124,2,106,2, + 112,38,103,0,102,2,83,0,41,2,122,197,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, + 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, + 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, + 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, + 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, + 111,114,116,105,111,110,115,41,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,3,114,203,0,0,0,114,140,0,0,0,114,178, + 0,0,0,41,3,114,119,0,0,0,114,139,0,0,0,114, + 187,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,137,0,0,0,163,5,0,0,115,8,0,0, + 0,0,7,10,1,8,1,8,1,122,22,70,105,108,101,70, + 105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,101, + 114,99,6,0,0,0,0,0,0,0,0,0,0,0,7,0, + 0,0,6,0,0,0,67,0,0,0,115,26,0,0,0,124, + 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,124, + 6,124,4,100,1,141,4,83,0,41,2,78,114,177,0,0, + 0,41,1,114,190,0,0,0,41,7,114,119,0,0,0,114, + 188,0,0,0,114,139,0,0,0,114,44,0,0,0,90,4, + 115,109,115,108,114,202,0,0,0,114,140,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,58,1, + 0,0,175,5,0,0,115,8,0,0,0,0,1,10,1,8, + 1,2,255,122,20,70,105,108,101,70,105,110,100,101,114,46, + 95,103,101,116,95,115,112,101,99,78,99,3,0,0,0,0, + 0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67, + 0,0,0,115,102,1,0,0,100,1,125,3,124,1,160,0, + 100,2,161,1,100,3,25,0,125,4,122,24,116,1,124,0, + 106,2,112,34,116,3,160,4,161,0,131,1,106,5,125,5, + 87,0,110,24,4,0,116,6,107,10,114,66,1,0,1,0, + 1,0,100,4,125,5,89,0,110,2,88,0,124,5,124,0, + 106,7,107,3,114,92,124,0,160,8,161,0,1,0,124,5, + 124,0,95,7,116,9,131,0,114,114,124,0,106,10,125,6, + 124,4,160,11,161,0,125,7,110,10,124,0,106,12,125,6, + 124,4,125,7,124,7,124,6,107,6,114,218,116,13,124,0, + 106,2,124,4,131,2,125,8,124,0,106,14,68,0,93,58, + 92,2,125,9,125,10,100,5,124,9,23,0,125,11,116,13, + 124,8,124,11,131,2,125,12,116,15,124,12,131,1,114,208, + 124,0,160,16,124,10,124,1,124,12,124,8,103,1,124,2, + 161,5,2,0,1,0,83,0,113,150,116,17,124,8,131,1, + 125,3,124,0,106,14,68,0,93,86,92,2,125,9,125,10, + 116,13,124,0,106,2,124,4,124,9,23,0,131,2,125,12, + 116,18,106,19,100,6,124,12,100,3,100,7,141,3,1,0, + 124,7,124,9,23,0,124,6,107,6,144,1,114,54,116,15, + 124,12,131,1,144,1,114,54,124,0,160,16,124,10,124,1, + 124,12,100,8,124,2,161,5,2,0,1,0,83,0,113,224, + 124,3,144,1,114,98,116,18,160,19,100,9,124,8,161,2, + 1,0,116,18,160,20,124,1,100,8,161,2,125,13,124,8, + 103,1,124,13,95,21,124,13,83,0,100,8,83,0,41,10, + 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, + 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, + 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, + 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, + 32,70,114,71,0,0,0,114,28,0,0,0,114,105,0,0, + 0,114,209,0,0,0,122,9,116,114,121,105,110,103,32,123, + 125,41,1,90,9,118,101,114,98,111,115,105,116,121,78,122, + 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, + 97,99,101,32,102,111,114,32,123,125,41,22,114,41,0,0, + 0,114,49,0,0,0,114,44,0,0,0,114,2,0,0,0, + 114,55,0,0,0,114,9,1,0,0,114,50,0,0,0,114, + 82,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, + 101,114,7,0,0,0,114,85,1,0,0,114,106,0,0,0, + 114,84,1,0,0,114,38,0,0,0,114,81,1,0,0,114, + 54,0,0,0,114,58,1,0,0,114,56,0,0,0,114,134, + 0,0,0,114,149,0,0,0,114,183,0,0,0,114,178,0, + 0,0,41,14,114,119,0,0,0,114,139,0,0,0,114,202, + 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, + 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,169, + 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, + 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, + 97,116,104,114,17,1,0,0,114,188,0,0,0,90,13,105, + 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, + 108,108,95,112,97,116,104,114,187,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,203,0,0,0, + 180,5,0,0,115,74,0,0,0,0,5,4,1,14,1,2, + 1,24,1,14,1,10,1,10,1,8,1,6,2,6,1,6, + 1,10,2,6,1,4,2,8,1,12,1,14,1,8,1,10, + 1,8,1,26,4,8,2,14,1,16,1,16,1,14,1,10, + 1,10,1,2,0,2,255,10,2,6,1,12,1,12,1,8, + 1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, + 0,0,0,0,0,0,9,0,0,0,10,0,0,0,67,0, + 0,0,115,190,0,0,0,124,0,106,0,125,1,122,22,116, + 1,160,2,124,1,112,22,116,1,160,3,161,0,161,1,125, + 2,87,0,110,30,4,0,116,4,116,5,116,6,102,3,107, + 10,114,58,1,0,1,0,1,0,103,0,125,2,89,0,110, + 2,88,0,116,7,106,8,160,9,100,1,161,1,115,84,116, + 10,124,2,131,1,124,0,95,11,110,74,116,10,131,0,125, + 3,124,2,68,0,93,56,125,4,124,4,160,12,100,2,161, + 1,92,3,125,5,125,6,125,7,124,6,114,136,100,3,160, + 13,124,5,124,7,160,14,161,0,161,2,125,8,110,4,124, + 5,125,8,124,3,160,15,124,8,161,1,1,0,113,94,124, + 3,124,0,95,11,116,7,106,8,160,9,116,16,161,1,114, + 186,100,4,100,5,132,0,124,2,68,0,131,1,124,0,95, + 17,100,6,83,0,41,7,122,68,70,105,108,108,32,116,104, + 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, + 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, + 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, + 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, + 0,0,114,71,0,0,0,114,61,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,83,0,0,0,115,20,0,0,0,104,0,124,0,93,12, + 125,1,124,1,160,0,161,0,146,2,113,4,83,0,114,3, + 0,0,0,41,1,114,106,0,0,0,41,2,114,32,0,0, + 0,90,2,102,110,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,218,9,60,115,101,116,99,111,109,112,62,1, + 6,0,0,115,4,0,0,0,6,0,2,0,122,41,70,105, + 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, + 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, + 101,116,99,111,109,112,62,78,41,18,114,44,0,0,0,114, + 2,0,0,0,114,6,1,0,0,114,55,0,0,0,114,2, + 1,0,0,218,15,80,101,114,109,105,115,115,105,111,110,69, + 114,114,111,114,218,18,78,111,116,65,68,105,114,101,99,116, + 111,114,121,69,114,114,111,114,114,8,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,83,1,0,0,114,84,1,0, + 0,114,101,0,0,0,114,62,0,0,0,114,106,0,0,0, + 218,3,97,100,100,114,11,0,0,0,114,85,1,0,0,41, + 9,114,119,0,0,0,114,44,0,0,0,114,7,1,0,0, + 90,21,108,111,119,101,114,95,115,117,102,102,105,120,95,99, + 111,110,116,101,110,116,115,114,41,1,0,0,114,117,0,0, + 0,114,29,1,0,0,114,17,1,0,0,90,8,110,101,119, + 95,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,87,1,0,0,228,5,0,0,115,34,0, + 0,0,0,2,6,1,2,1,22,1,20,3,10,3,12,1, + 12,7,6,1,8,1,16,1,4,1,18,2,4,1,12,1, + 6,1,12,1,122,22,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,7,0,0,0,115,18,0,0,0,135,0,135,1,102,2, + 100,1,100,2,132,8,125,2,124,2,83,0,41,3,97,20, + 1,0,0,65,32,99,108,97,115,115,32,109,101,116,104,111, + 100,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, + 97,32,99,108,111,115,117,114,101,32,116,111,32,117,115,101, + 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, + 107,10,32,32,32,32,32,32,32,32,119,104,105,99,104,32, + 119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,105, + 110,115,116,97,110,99,101,32,117,115,105,110,103,32,116,104, + 101,32,115,112,101,99,105,102,105,101,100,32,108,111,97,100, + 101,114,115,32,97,110,100,32,116,104,101,32,112,97,116,104, + 10,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32, + 111,110,32,116,104,101,32,99,108,111,115,117,114,101,46,10, + 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, + 112,97,116,104,32,99,97,108,108,101,100,32,111,110,32,116, + 104,101,32,99,108,111,115,117,114,101,32,105,115,32,110,111, + 116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,10,32,32, + 32,32,32,32,32,32,114,97,105,115,101,100,46,10,10,32, + 32,32,32,32,32,32,32,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,19,0,0,0, + 115,34,0,0,0,116,0,124,0,131,1,115,20,116,1,100, + 1,124,0,100,2,141,2,130,1,136,0,124,0,102,1,136, + 1,158,2,142,0,83,0,41,3,122,45,80,97,116,104,32, + 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, + 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, + 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, + 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, + 117,112,112,111,114,116,101,100,114,48,0,0,0,41,2,114, + 56,0,0,0,114,118,0,0,0,114,48,0,0,0,169,2, + 114,193,0,0,0,114,86,1,0,0,114,3,0,0,0,114, + 6,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, + 102,111,114,95,70,105,108,101,70,105,110,100,101,114,13,6, + 0,0,115,6,0,0,0,0,2,8,1,12,1,122,54,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116, 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, - 105,110,100,101,114,13,6,0,0,115,6,0,0,0,0,2, - 8,1,12,1,122,54,70,105,108,101,70,105,110,100,101,114, - 46,112,97,116,104,95,104,111,111,107,46,60,108,111,99,97, - 108,115,62,46,112,97,116,104,95,104,111,111,107,95,102,111, - 114,95,70,105,108,101,70,105,110,100,101,114,114,3,0,0, - 0,41,3,114,193,0,0,0,114,86,1,0,0,114,93,1, - 0,0,114,3,0,0,0,114,92,1,0,0,114,6,0,0, - 0,218,9,112,97,116,104,95,104,111,111,107,3,6,0,0, - 115,4,0,0,0,0,10,14,6,122,20,70,105,108,101,70, - 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,99, - 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,12,0,0,0,100,1,160, - 0,124,0,106,1,161,1,83,0,41,2,78,122,16,70,105, - 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, - 114,62,0,0,0,114,44,0,0,0,114,246,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,39, - 1,0,0,21,6,0,0,115,2,0,0,0,0,1,122,19, - 70,105,108,101,70,105,110,100,101,114,46,95,95,114,101,112, - 114,95,95,41,1,78,41,15,114,125,0,0,0,114,124,0, - 0,0,114,126,0,0,0,114,127,0,0,0,114,209,0,0, - 0,114,46,1,0,0,114,143,0,0,0,114,206,0,0,0, - 114,137,0,0,0,114,58,1,0,0,114,203,0,0,0,114, - 87,1,0,0,114,207,0,0,0,114,94,1,0,0,114,39, + 105,110,100,101,114,114,3,0,0,0,41,3,114,193,0,0, + 0,114,86,1,0,0,114,93,1,0,0,114,3,0,0,0, + 114,92,1,0,0,114,6,0,0,0,218,9,112,97,116,104, + 95,104,111,111,107,3,6,0,0,115,4,0,0,0,0,10, + 14,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112, + 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1, + 83,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101, + 114,40,123,33,114,125,41,41,2,114,62,0,0,0,114,44, + 0,0,0,114,246,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,39,1,0,0,21,6,0,0, + 115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,110, + 100,101,114,46,95,95,114,101,112,114,95,95,41,1,78,41, + 15,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, + 114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114, + 143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58, + 1,0,0,114,203,0,0,0,114,87,1,0,0,114,207,0, + 0,0,114,94,1,0,0,114,39,1,0,0,114,3,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 114,79,1,0,0,134,5,0,0,115,22,0,0,0,8,2, + 4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31, + 2,1,10,17,114,79,1,0,0,99,4,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0, + 0,0,115,146,0,0,0,124,0,160,0,100,1,161,1,125, + 4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124, + 5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107, + 2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116, + 3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124, + 1,124,2,124,4,100,3,141,3,125,5,122,36,124,5,124, + 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, + 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110, + 20,4,0,116,5,107,10,114,140,1,0,1,0,1,0,89, + 0,110,2,88,0,100,0,83,0,41,6,78,218,10,95,95, + 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, + 95,95,114,80,1,0,0,90,8,95,95,102,105,108,101,95, + 95,90,10,95,95,99,97,99,104,101,100,95,95,41,6,218, + 3,103,101,116,114,140,0,0,0,114,14,1,0,0,114,8, + 1,0,0,114,190,0,0,0,114,72,1,0,0,41,6,90, + 2,110,115,114,117,0,0,0,90,8,112,97,116,104,110,97, + 109,101,90,9,99,112,97,116,104,110,97,109,101,114,140,0, + 0,0,114,187,0,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,218,14,95,102,105,120,95,117,112,95, + 109,111,100,117,108,101,27,6,0,0,115,34,0,0,0,0, + 2,10,1,10,1,4,1,4,1,8,1,8,1,12,2,10, + 1,4,1,14,1,2,1,8,1,8,1,8,1,12,1,14, + 2,114,98,1,0,0,99,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,0, + 116,3,116,4,102,2,125,1,116,5,116,6,102,2,125,2, + 124,0,124,1,124,2,103,3,83,0,41,1,122,95,82,101, + 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, + 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, + 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, + 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, + 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, + 102,102,105,120,101,115,41,46,10,32,32,32,32,41,7,114, + 15,1,0,0,114,163,0,0,0,218,18,101,120,116,101,110, + 115,105,111,110,95,115,117,102,102,105,120,101,115,114,8,1, + 0,0,114,102,0,0,0,114,14,1,0,0,114,89,0,0, + 0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90, + 6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100, + 101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 114,184,0,0,0,50,6,0,0,115,8,0,0,0,0,5, + 12,1,8,1,8,1,114,184,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,12,0,0,0,9,0,0,0, + 67,0,0,0,115,178,1,0,0,124,0,97,0,116,0,106, + 1,97,1,116,0,106,2,97,2,116,1,106,3,116,4,25, + 0,125,1,100,1,68,0,93,48,125,2,124,2,116,1,106, + 3,107,7,114,56,116,0,160,5,124,2,161,1,125,3,110, + 10,116,1,106,3,124,2,25,0,125,3,116,6,124,1,124, + 2,124,3,131,3,1,0,113,30,100,2,100,3,103,1,102, + 2,100,4,100,5,100,3,103,2,102,2,102,2,125,4,124, + 4,68,0,93,110,92,2,125,5,125,6,116,7,100,6,100, + 7,132,0,124,6,68,0,131,1,131,1,115,136,116,8,130, + 1,124,6,100,8,25,0,125,7,124,5,116,1,106,3,107, + 6,114,170,116,1,106,3,124,5,25,0,125,8,1,0,113, + 226,113,106,122,20,116,0,160,5,124,5,161,1,125,8,87, + 0,1,0,113,226,87,0,113,106,4,0,116,9,107,10,114, + 214,1,0,1,0,1,0,89,0,113,106,89,0,113,106,88, + 0,113,106,116,9,100,9,131,1,130,1,116,6,124,1,100, + 10,124,8,131,3,1,0,116,6,124,1,100,11,124,7,131, + 3,1,0,116,6,124,1,100,12,100,13,160,10,124,6,161, + 1,131,3,1,0,116,6,124,1,100,14,100,15,100,16,132, + 0,124,6,68,0,131,1,131,3,1,0,116,0,160,5,100, + 17,161,1,125,9,116,6,124,1,100,17,124,9,131,3,1, + 0,116,0,160,5,100,18,161,1,125,10,116,6,124,1,100, + 18,124,10,131,3,1,0,124,5,100,4,107,2,144,1,114, + 110,116,0,160,5,100,19,161,1,125,11,116,6,124,1,100, + 20,124,11,131,3,1,0,116,6,124,1,100,21,116,11,131, + 0,131,3,1,0,116,12,160,13,116,2,160,14,161,0,161, + 1,1,0,124,5,100,4,107,2,144,1,114,174,116,15,160, + 16,100,22,161,1,1,0,100,23,116,12,107,6,144,1,114, + 174,100,24,116,17,95,18,100,25,83,0,41,26,122,205,83, + 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, + 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, + 114,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, + 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,10, + 32,32,32,32,98,117,105,108,116,45,105,110,32,109,111,100, + 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, + 110,103,32,116,104,101,109,32,105,110,116,111,32,116,104,101, + 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, + 101,46,10,10,32,32,32,32,79,116,104,101,114,32,99,111, + 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, + 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, + 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,41,4,114,64, + 0,0,0,114,75,0,0,0,218,8,98,117,105,108,116,105, + 110,115,114,160,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,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, + 0,115,26,0,0,0,124,0,93,18,125,1,116,0,124,1, + 131,1,100,0,107,2,86,0,1,0,113,2,100,1,83,0, + 41,2,114,39,0,0,0,78,41,1,114,22,0,0,0,41, + 2,114,32,0,0,0,114,95,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,86, + 6,0,0,115,4,0,0,0,4,0,2,0,122,25,95,115, + 101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,114,73,0,0,0,122,30,105,109, + 112,111,114,116,108,105,98,32,114,101,113,117,105,114,101,115, + 32,112,111,115,105,120,32,111,114,32,110,116,114,2,0,0, + 0,114,35,0,0,0,114,31,0,0,0,114,40,0,0,0, + 114,58,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,83,0,0,0,115,22, + 0,0,0,104,0,124,0,93,14,125,1,100,0,124,1,155, + 0,157,2,146,2,113,4,83,0,41,1,114,74,0,0,0, + 114,3,0,0,0,41,2,114,32,0,0,0,218,1,115,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,88, + 1,0,0,102,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,192,0,0,0,114,7,0,0,0, + 122,4,46,112,121,119,122,6,95,100,46,112,121,100,84,78, + 41,19,114,134,0,0,0,114,8,0,0,0,114,163,0,0, + 0,114,31,1,0,0,114,125,0,0,0,90,18,95,98,117, + 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, + 129,0,0,0,218,3,97,108,108,114,23,0,0,0,114,118, + 0,0,0,114,36,0,0,0,114,13,0,0,0,114,21,1, + 0,0,114,167,0,0,0,114,99,1,0,0,114,102,0,0, + 0,114,186,0,0,0,114,191,0,0,0,114,195,0,0,0, + 41,12,218,17,95,98,111,111,116,115,116,114,97,112,95,109, + 111,100,117,108,101,90,11,115,101,108,102,95,109,111,100,117, + 108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, + 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, + 90,10,111,115,95,100,101,116,97,105,108,115,90,10,98,117, + 105,108,116,105,110,95,111,115,114,31,0,0,0,114,35,0, + 0,0,90,9,111,115,95,109,111,100,117,108,101,90,13,116, + 104,114,101,97,100,95,109,111,100,117,108,101,90,14,119,101, + 97,107,114,101,102,95,109,111,100,117,108,101,90,13,119,105, + 110,114,101,103,95,109,111,100,117,108,101,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,218,6,95,115,101,116, + 117,112,61,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,106,1,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, + 0,0,0,67,0,0,0,115,50,0,0,0,116,0,124,0, + 131,1,1,0,116,1,131,0,125,1,116,2,106,3,160,4, + 116,5,106,6,124,1,142,0,103,1,161,1,1,0,116,2, + 106,7,160,8,116,9,161,1,1,0,100,1,83,0,41,2, + 122,41,73,110,115,116,97,108,108,32,116,104,101,32,112,97, + 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,32, + 99,111,109,112,111,110,101,110,116,115,46,78,41,10,114,106, + 1,0,0,114,184,0,0,0,114,8,0,0,0,114,51,1, + 0,0,114,167,0,0,0,114,79,1,0,0,114,94,1,0, + 0,218,9,109,101,116,97,95,112,97,116,104,114,186,0,0, + 0,114,45,1,0,0,41,2,114,105,1,0,0,90,17,115, + 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 8,95,105,110,115,116,97,108,108,126,6,0,0,115,8,0, + 0,0,0,2,8,1,6,1,20,1,114,108,1,0,0,41, + 63,114,127,0,0,0,114,12,0,0,0,90,37,95,67,65, + 83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80, + 76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,75, + 69,89,114,11,0,0,0,114,13,0,0,0,114,20,0,0, + 0,114,27,0,0,0,114,29,0,0,0,114,38,0,0,0, + 114,47,0,0,0,114,49,0,0,0,114,53,0,0,0,114, + 54,0,0,0,114,56,0,0,0,114,59,0,0,0,114,69, + 0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,100, + 101,95,95,114,162,0,0,0,114,18,0,0,0,114,148,0, + 0,0,114,17,0,0,0,114,24,0,0,0,114,236,0,0, + 0,114,92,0,0,0,114,88,0,0,0,114,102,0,0,0, + 114,89,0,0,0,90,23,68,69,66,85,71,95,66,89,84, + 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,27, + 79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,114,98,0,0,0, + 114,103,0,0,0,114,109,0,0,0,114,113,0,0,0,114, + 115,0,0,0,114,136,0,0,0,114,143,0,0,0,114,152, + 0,0,0,114,156,0,0,0,114,158,0,0,0,114,165,0, + 0,0,114,170,0,0,0,114,171,0,0,0,114,176,0,0, + 0,218,6,111,98,106,101,99,116,114,185,0,0,0,114,190, + 0,0,0,114,191,0,0,0,114,208,0,0,0,114,221,0, + 0,0,114,239,0,0,0,114,8,1,0,0,114,14,1,0, + 0,114,21,1,0,0,114,15,1,0,0,114,22,1,0,0, + 114,43,1,0,0,114,45,1,0,0,114,79,1,0,0,114, + 98,1,0,0,114,184,0,0,0,114,106,1,0,0,114,108, 1,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,79,1,0,0,134,5,0,0, - 115,22,0,0,0,8,2,4,7,8,14,8,4,4,2,8, - 12,8,5,10,48,8,31,2,1,10,17,114,79,1,0,0, - 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,8,0,0,0,67,0,0,0,115,146,0,0,0,124,0, - 160,0,100,1,161,1,125,4,124,0,160,0,100,2,161,1, - 125,5,124,4,115,66,124,5,114,36,124,5,106,1,125,4, - 110,30,124,2,124,3,107,2,114,56,116,2,124,1,124,2, - 131,2,125,4,110,10,116,3,124,1,124,2,131,2,125,4, - 124,5,115,84,116,4,124,1,124,2,124,4,100,3,141,3, - 125,5,122,36,124,5,124,0,100,2,60,0,124,4,124,0, - 100,1,60,0,124,2,124,0,100,4,60,0,124,3,124,0, - 100,5,60,0,87,0,110,20,4,0,116,5,107,10,114,140, - 1,0,1,0,1,0,89,0,110,2,88,0,100,0,83,0, - 41,6,78,218,10,95,95,108,111,97,100,101,114,95,95,218, - 8,95,95,115,112,101,99,95,95,114,80,1,0,0,90,8, - 95,95,102,105,108,101,95,95,90,10,95,95,99,97,99,104, - 101,100,95,95,41,6,218,3,103,101,116,114,140,0,0,0, - 114,14,1,0,0,114,8,1,0,0,114,190,0,0,0,114, - 72,1,0,0,41,6,90,2,110,115,114,117,0,0,0,90, - 8,112,97,116,104,110,97,109,101,90,9,99,112,97,116,104, - 110,97,109,101,114,140,0,0,0,114,187,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,218,14,95, - 102,105,120,95,117,112,95,109,111,100,117,108,101,27,6,0, - 0,115,34,0,0,0,0,2,10,1,10,1,4,1,4,1, - 8,1,8,1,12,2,10,1,4,1,14,1,2,1,8,1, - 8,1,8,1,12,1,14,2,114,98,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,38,0,0,0,116,0,116,1,160, - 2,161,0,102,2,125,0,116,3,116,4,102,2,125,1,116, - 5,116,6,102,2,125,2,124,0,124,1,124,2,103,3,83, - 0,41,1,122,95,82,101,116,117,114,110,115,32,97,32,108, - 105,115,116,32,111,102,32,102,105,108,101,45,98,97,115,101, - 100,32,109,111,100,117,108,101,32,108,111,97,100,101,114,115, - 46,10,10,32,32,32,32,69,97,99,104,32,105,116,101,109, - 32,105,115,32,97,32,116,117,112,108,101,32,40,108,111,97, - 100,101,114,44,32,115,117,102,102,105,120,101,115,41,46,10, - 32,32,32,32,41,7,114,15,1,0,0,114,163,0,0,0, - 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, - 105,120,101,115,114,8,1,0,0,114,102,0,0,0,114,14, - 1,0,0,114,89,0,0,0,41,3,90,10,101,120,116,101, - 110,115,105,111,110,115,90,6,115,111,117,114,99,101,90,8, - 98,121,116,101,99,111,100,101,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,184,0,0,0,50,6,0,0, - 115,8,0,0,0,0,5,12,1,8,1,8,1,114,184,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,12, - 0,0,0,9,0,0,0,67,0,0,0,115,178,1,0,0, - 124,0,97,0,116,0,106,1,97,1,116,0,106,2,97,2, - 116,1,106,3,116,4,25,0,125,1,100,1,68,0,93,48, - 125,2,124,2,116,1,106,3,107,7,114,56,116,0,160,5, - 124,2,161,1,125,3,110,10,116,1,106,3,124,2,25,0, - 125,3,116,6,124,1,124,2,124,3,131,3,1,0,113,30, - 100,2,100,3,103,1,102,2,100,4,100,5,100,3,103,2, - 102,2,102,2,125,4,124,4,68,0,93,110,92,2,125,5, - 125,6,116,7,100,6,100,7,132,0,124,6,68,0,131,1, - 131,1,115,136,116,8,130,1,124,6,100,8,25,0,125,7, - 124,5,116,1,106,3,107,6,114,170,116,1,106,3,124,5, - 25,0,125,8,1,0,113,226,113,106,122,20,116,0,160,5, - 124,5,161,1,125,8,87,0,1,0,113,226,87,0,113,106, - 4,0,116,9,107,10,114,214,1,0,1,0,1,0,89,0, - 113,106,89,0,113,106,88,0,113,106,116,9,100,9,131,1, - 130,1,116,6,124,1,100,10,124,8,131,3,1,0,116,6, - 124,1,100,11,124,7,131,3,1,0,116,6,124,1,100,12, - 100,13,160,10,124,6,161,1,131,3,1,0,116,6,124,1, - 100,14,100,15,100,16,132,0,124,6,68,0,131,1,131,3, - 1,0,116,0,160,5,100,17,161,1,125,9,116,6,124,1, - 100,17,124,9,131,3,1,0,116,0,160,5,100,18,161,1, - 125,10,116,6,124,1,100,18,124,10,131,3,1,0,124,5, - 100,4,107,2,144,1,114,110,116,0,160,5,100,19,161,1, - 125,11,116,6,124,1,100,20,124,11,131,3,1,0,116,6, - 124,1,100,21,116,11,131,0,131,3,1,0,116,12,160,13, - 116,2,160,14,161,0,161,1,1,0,124,5,100,4,107,2, - 144,1,114,174,116,15,160,16,100,22,161,1,1,0,100,23, - 116,12,107,6,144,1,114,174,100,24,116,17,95,18,100,25, - 83,0,41,26,122,205,83,101,116,117,112,32,116,104,101,32, - 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, - 116,101,114,115,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32, - 110,101,101,100,101,100,10,32,32,32,32,98,117,105,108,116, - 45,105,110,32,109,111,100,117,108,101,115,32,97,110,100,32, - 105,110,106,101,99,116,105,110,103,32,116,104,101,109,32,105, - 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110, - 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,79, - 116,104,101,114,32,99,111,109,112,111,110,101,110,116,115,32, - 97,114,101,32,101,120,116,114,97,99,116,101,100,32,102,114, - 111,109,32,116,104,101,32,99,111,114,101,32,98,111,111,116, - 115,116,114,97,112,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,41,4,114,64,0,0,0,114,75,0,0,0,218, - 8,98,117,105,108,116,105,110,115,114,160,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,0,0,0,0,2,0,0,0, - 3,0,0,0,115,0,0,0,115,26,0,0,0,124,0,93, - 18,125,1,116,0,124,1,131,1,100,0,107,2,86,0,1, - 0,113,2,100,1,83,0,41,2,114,39,0,0,0,78,41, - 1,114,22,0,0,0,41,2,114,32,0,0,0,114,95,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,19,1,0,0,86,6,0,0,115,4,0,0,0,4, - 0,2,0,122,25,95,115,101,116,117,112,46,60,108,111,99, - 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,73, - 0,0,0,122,30,105,109,112,111,114,116,108,105,98,32,114, - 101,113,117,105,114,101,115,32,112,111,115,105,120,32,111,114, - 32,110,116,114,2,0,0,0,114,35,0,0,0,114,31,0, - 0,0,114,40,0,0,0,114,58,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,83,0,0,0,115,22,0,0,0,104,0,124,0,93,14, - 125,1,100,0,124,1,155,0,157,2,146,2,113,4,83,0, - 41,1,114,74,0,0,0,114,3,0,0,0,41,2,114,32, - 0,0,0,218,1,115,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,88,1,0,0,102,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,192,0, - 0,0,114,7,0,0,0,122,4,46,112,121,119,122,6,95, - 100,46,112,121,100,84,78,41,19,114,134,0,0,0,114,8, - 0,0,0,114,163,0,0,0,114,31,1,0,0,114,125,0, - 0,0,90,18,95,98,117,105,108,116,105,110,95,102,114,111, - 109,95,110,97,109,101,114,129,0,0,0,218,3,97,108,108, - 114,23,0,0,0,114,118,0,0,0,114,36,0,0,0,114, - 13,0,0,0,114,21,1,0,0,114,167,0,0,0,114,99, - 1,0,0,114,102,0,0,0,114,186,0,0,0,114,191,0, - 0,0,114,195,0,0,0,41,12,218,17,95,98,111,111,116, - 115,116,114,97,112,95,109,111,100,117,108,101,90,11,115,101, - 108,102,95,109,111,100,117,108,101,90,12,98,117,105,108,116, - 105,110,95,110,97,109,101,90,14,98,117,105,108,116,105,110, - 95,109,111,100,117,108,101,90,10,111,115,95,100,101,116,97, - 105,108,115,90,10,98,117,105,108,116,105,110,95,111,115,114, - 31,0,0,0,114,35,0,0,0,90,9,111,115,95,109,111, - 100,117,108,101,90,13,116,104,114,101,97,100,95,109,111,100, - 117,108,101,90,14,119,101,97,107,114,101,102,95,109,111,100, - 117,108,101,90,13,119,105,110,114,101,103,95,109,111,100,117, - 108,101,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,6,95,115,101,116,117,112,61,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,106,1,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,50, - 0,0,0,116,0,124,0,131,1,1,0,116,1,131,0,125, - 1,116,2,106,3,160,4,116,5,106,6,124,1,142,0,103, - 1,161,1,1,0,116,2,106,7,160,8,116,9,161,1,1, - 0,100,1,83,0,41,2,122,41,73,110,115,116,97,108,108, - 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, - 105,109,112,111,114,116,32,99,111,109,112,111,110,101,110,116, - 115,46,78,41,10,114,106,1,0,0,114,184,0,0,0,114, - 8,0,0,0,114,51,1,0,0,114,167,0,0,0,114,79, - 1,0,0,114,94,1,0,0,218,9,109,101,116,97,95,112, - 97,116,104,114,186,0,0,0,114,45,1,0,0,41,2,114, - 105,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, - 108,111,97,100,101,114,115,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,8,95,105,110,115,116,97,108,108, - 126,6,0,0,115,8,0,0,0,0,2,8,1,6,1,20, - 1,114,108,1,0,0,41,63,114,127,0,0,0,114,12,0, - 0,0,90,37,95,67,65,83,69,95,73,78,83,69,78,83, - 73,84,73,86,69,95,80,76,65,84,70,79,82,77,83,95, - 66,89,84,69,83,95,75,69,89,114,11,0,0,0,114,13, - 0,0,0,114,20,0,0,0,114,27,0,0,0,114,29,0, - 0,0,114,38,0,0,0,114,47,0,0,0,114,49,0,0, - 0,114,53,0,0,0,114,54,0,0,0,114,56,0,0,0, - 114,59,0,0,0,114,69,0,0,0,218,4,116,121,112,101, - 218,8,95,95,99,111,100,101,95,95,114,162,0,0,0,114, - 18,0,0,0,114,148,0,0,0,114,17,0,0,0,114,24, - 0,0,0,114,236,0,0,0,114,92,0,0,0,114,88,0, - 0,0,114,102,0,0,0,114,89,0,0,0,90,23,68,69, - 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,90,27,79,80,84,73,77,73,90,69,68, - 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, - 69,83,114,98,0,0,0,114,103,0,0,0,114,109,0,0, - 0,114,113,0,0,0,114,115,0,0,0,114,136,0,0,0, - 114,143,0,0,0,114,152,0,0,0,114,156,0,0,0,114, - 158,0,0,0,114,165,0,0,0,114,170,0,0,0,114,171, - 0,0,0,114,176,0,0,0,218,6,111,98,106,101,99,116, - 114,185,0,0,0,114,190,0,0,0,114,191,0,0,0,114, - 208,0,0,0,114,221,0,0,0,114,239,0,0,0,114,8, - 1,0,0,114,14,1,0,0,114,21,1,0,0,114,15,1, - 0,0,114,22,1,0,0,114,43,1,0,0,114,45,1,0, - 0,114,79,1,0,0,114,98,1,0,0,114,184,0,0,0, - 114,106,1,0,0,114,108,1,0,0,114,3,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,8, - 60,109,111,100,117,108,101,62,1,0,0,0,115,126,0,0, - 0,4,22,4,1,4,1,2,1,2,255,4,4,8,17,8, - 5,8,5,8,6,8,6,8,12,8,10,8,9,8,5,8, - 7,8,9,12,22,10,127,0,8,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,63,14, - 42,14,127,0,58,14,127,0,22,12,23,8,11,8,65, + 0,0,114,6,0,0,0,218,8,60,109,111,100,117,108,101, + 62,1,0,0,0,115,126,0,0,0,4,22,4,1,4,1, + 2,1,2,255,4,4,8,17,8,5,8,5,8,6,8,6, + 8,12,8,10,8,9,8,5,8,7,8,9,12,22,10,127, + 0,8,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,63,14,42,14,127,0,58,14,127, + 0,22,12,23,8,11,8,65, }; From de0f89dcaf956a7198a138dbbff758a5cd3ee27a Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sat, 18 May 2019 13:50:07 -0400 Subject: [PATCH 22/23] Apply changes from importlib_metadata refresh. --- Lib/importlib/_bootstrap_external.py | 11 +- Python/importlib_external.h | 1166 +++++++++++++------------- 2 files changed, 590 insertions(+), 587 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index dc5842374d3d73..25d05144c14fa1 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1363,8 +1363,11 @@ def find_module(cls, fullname, path=None): @classmethod def find_distributions(cls, name=None, path=None): - """Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the name + """ + Find distributions. + + Return an iterable of all Distribution instances capable of + loading the metadata for packages matching the ``name`` (or all names if not supplied) along the paths in the list of directories ``path`` (defaults to sys.path). """ @@ -1378,9 +1381,7 @@ def find_distributions(cls, name=None, path=None): @classmethod def _search_paths(cls, pattern, paths): - """ - Find metadata directories in paths heuristically. - """ + """Find metadata directories in paths heuristically.""" import itertools return itertools.chain.from_iterable( cls._search_path(path, pattern) diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 19c96a3cbc0fc3..fdab9c97b582fd 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2242,588 +2242,590 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 116,3,106,4,125,2,124,1,100,2,107,8,114,46,100,4, 110,8,124,3,160,5,124,1,161,1,125,5,124,0,160,6, 124,5,124,2,161,2,125,6,116,7,124,4,124,6,131,2, - 83,0,41,5,122,251,82,101,116,117,114,110,32,97,110,32, - 105,116,101,114,97,98,108,101,32,111,102,32,97,108,108,32, - 68,105,115,116,114,105,98,117,116,105,111,110,32,105,110,115, - 116,97,110,99,101,115,32,99,97,112,97,98,108,101,32,111, - 102,10,32,32,32,32,32,32,32,32,108,111,97,100,105,110, - 103,32,116,104,101,32,109,101,116,97,100,97,116,97,32,102, - 111,114,32,112,97,99,107,97,103,101,115,32,109,97,116,99, - 104,105,110,103,32,116,104,101,32,110,97,109,101,10,32,32, - 32,32,32,32,32,32,40,111,114,32,97,108,108,32,110,97, - 109,101,115,32,105,102,32,110,111,116,32,115,117,112,112,108, - 105,101,100,41,32,97,108,111,110,103,32,116,104,101,32,112, - 97,116,104,115,32,105,110,32,116,104,101,32,108,105,115,116, - 10,32,32,32,32,32,32,32,32,111,102,32,100,105,114,101, - 99,116,111,114,105,101,115,32,96,96,112,97,116,104,96,96, - 32,40,100,101,102,97,117,108,116,115,32,116,111,32,115,121, - 115,46,112,97,116,104,41,46,10,32,32,32,32,32,32,32, - 32,114,73,0,0,0,78,41,1,218,16,80,97,116,104,68, - 105,115,116,114,105,98,117,116,105,111,110,122,2,46,42,41, - 8,218,2,114,101,90,18,105,109,112,111,114,116,108,105,98, - 46,109,101,116,97,100,97,116,97,114,59,1,0,0,114,8, - 0,0,0,114,44,0,0,0,90,6,101,115,99,97,112,101, - 218,13,95,115,101,97,114,99,104,95,112,97,116,104,115,218, - 3,109,97,112,41,7,114,193,0,0,0,114,117,0,0,0, - 114,44,0,0,0,114,60,1,0,0,114,59,1,0,0,218, - 7,112,97,116,116,101,114,110,90,5,102,111,117,110,100,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,18, - 102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,111, - 110,115,84,5,0,0,115,14,0,0,0,0,7,8,1,12, - 1,8,1,6,1,22,1,12,1,122,29,80,97,116,104,70, - 105,110,100,101,114,46,102,105,110,100,95,100,105,115,116,114, - 105,98,117,116,105,111,110,115,99,3,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,6,0,0,0,3,0,0, - 0,115,44,0,0,0,100,1,100,2,108,0,125,3,124,3, - 106,1,160,2,135,0,135,1,102,2,100,3,100,4,132,8, - 116,3,136,0,106,4,124,2,131,2,68,0,131,1,161,1, - 83,0,41,5,122,67,10,32,32,32,32,32,32,32,32,70, - 105,110,100,32,109,101,116,97,100,97,116,97,32,100,105,114, - 101,99,116,111,114,105,101,115,32,105,110,32,112,97,116,104, - 115,32,104,101,117,114,105,115,116,105,99,97,108,108,121,46, - 10,32,32,32,32,32,32,32,32,114,73,0,0,0,78,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 5,0,0,0,51,0,0,0,115,26,0,0,0,124,0,93, - 18,125,1,136,0,160,0,124,1,136,1,161,2,86,0,1, - 0,113,2,100,0,83,0,114,110,0,0,0,41,1,218,12, - 95,115,101,97,114,99,104,95,112,97,116,104,41,2,114,32, - 0,0,0,114,44,0,0,0,169,2,114,193,0,0,0,114, - 63,1,0,0,114,3,0,0,0,114,6,0,0,0,114,19, - 1,0,0,105,5,0,0,115,4,0,0,0,4,2,2,255, - 122,43,80,97,116,104,70,105,110,100,101,114,46,95,115,101, - 97,114,99,104,95,112,97,116,104,115,46,60,108,111,99,97, - 108,115,62,46,60,103,101,110,101,120,112,114,62,41,5,218, - 9,105,116,101,114,116,111,111,108,115,90,5,99,104,97,105, - 110,90,13,102,114,111,109,95,105,116,101,114,97,98,108,101, - 114,62,1,0,0,218,12,95,115,119,105,116,99,104,95,112, - 97,116,104,41,4,114,193,0,0,0,114,63,1,0,0,90, - 5,112,97,116,104,115,114,67,1,0,0,114,3,0,0,0, - 114,66,1,0,0,114,6,0,0,0,114,61,1,0,0,99, - 5,0,0,115,8,0,0,0,0,5,8,1,18,2,10,254, - 122,24,80,97,116,104,70,105,110,100,101,114,46,95,115,101, - 97,114,99,104,95,112,97,116,104,115,99,1,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,10,0,0,0,67, - 0,0,0,115,78,0,0,0,100,1,100,2,108,0,109,1, - 125,1,1,0,100,1,100,0,108,2,125,2,100,1,100,3, - 108,3,109,4,125,3,1,0,124,1,116,5,131,1,143,24, - 1,0,124,2,160,4,124,0,161,1,87,0,2,0,53,0, - 81,0,82,0,163,0,83,0,81,0,82,0,88,0,124,3, - 124,0,131,1,83,0,41,4,78,114,73,0,0,0,41,1, - 218,8,115,117,112,112,114,101,115,115,41,1,218,4,80,97, - 116,104,41,6,90,10,99,111,110,116,101,120,116,108,105,98, - 114,69,1,0,0,218,7,122,105,112,102,105,108,101,90,7, - 112,97,116,104,108,105,98,114,70,1,0,0,218,9,69,120, - 99,101,112,116,105,111,110,41,4,114,44,0,0,0,114,69, - 1,0,0,114,71,1,0,0,114,70,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,68,1,0, - 0,110,5,0,0,115,12,0,0,0,0,2,12,1,8,1, - 12,1,10,1,28,1,122,23,80,97,116,104,70,105,110,100, - 101,114,46,95,115,119,105,116,99,104,95,112,97,116,104,99, - 4,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 5,0,0,0,67,0,0,0,115,32,0,0,0,100,1,100, - 0,108,0,125,4,124,4,106,1,124,1,116,2,124,3,106, - 3,131,1,124,4,106,4,100,2,141,3,83,0,41,3,78, - 114,73,0,0,0,41,1,114,83,0,0,0,41,5,114,60, - 1,0,0,90,5,109,97,116,99,104,114,85,0,0,0,114, - 117,0,0,0,90,10,73,71,78,79,82,69,67,65,83,69, - 41,5,114,193,0,0,0,114,63,1,0,0,218,4,114,111, - 111,116,114,41,1,0,0,114,60,1,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,114, - 101,100,105,99,97,116,101,119,5,0,0,115,4,0,0,0, - 0,2,8,1,122,21,80,97,116,104,70,105,110,100,101,114, - 46,95,112,114,101,100,105,99,97,116,101,99,3,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, - 3,0,0,0,115,64,0,0,0,136,2,160,0,161,0,115, - 12,100,1,83,0,124,2,160,1,100,2,100,3,161,2,125, - 3,136,0,106,2,106,3,124,3,100,4,141,1,137,1,135, - 0,135,1,135,2,102,3,100,5,100,6,132,8,136,2,160, - 4,161,0,68,0,131,1,83,0,41,7,78,114,3,0,0, - 0,250,1,45,114,45,0,0,0,41,1,114,63,1,0,0, + 83,0,41,5,97,37,1,0,0,10,32,32,32,32,32,32, + 32,32,70,105,110,100,32,100,105,115,116,114,105,98,117,116, + 105,111,110,115,46,10,10,32,32,32,32,32,32,32,32,82, + 101,116,117,114,110,32,97,110,32,105,116,101,114,97,98,108, + 101,32,111,102,32,97,108,108,32,68,105,115,116,114,105,98, + 117,116,105,111,110,32,105,110,115,116,97,110,99,101,115,32, + 99,97,112,97,98,108,101,32,111,102,10,32,32,32,32,32, + 32,32,32,108,111,97,100,105,110,103,32,116,104,101,32,109, + 101,116,97,100,97,116,97,32,102,111,114,32,112,97,99,107, + 97,103,101,115,32,109,97,116,99,104,105,110,103,32,116,104, + 101,32,96,96,110,97,109,101,96,96,10,32,32,32,32,32, + 32,32,32,40,111,114,32,97,108,108,32,110,97,109,101,115, + 32,105,102,32,110,111,116,32,115,117,112,112,108,105,101,100, + 41,32,97,108,111,110,103,32,116,104,101,32,112,97,116,104, + 115,32,105,110,32,116,104,101,32,108,105,115,116,10,32,32, + 32,32,32,32,32,32,111,102,32,100,105,114,101,99,116,111, + 114,105,101,115,32,96,96,112,97,116,104,96,96,32,40,100, + 101,102,97,117,108,116,115,32,116,111,32,115,121,115,46,112, + 97,116,104,41,46,10,32,32,32,32,32,32,32,32,114,73, + 0,0,0,78,41,1,218,16,80,97,116,104,68,105,115,116, + 114,105,98,117,116,105,111,110,122,2,46,42,41,8,218,2, + 114,101,90,18,105,109,112,111,114,116,108,105,98,46,109,101, + 116,97,100,97,116,97,114,59,1,0,0,114,8,0,0,0, + 114,44,0,0,0,90,6,101,115,99,97,112,101,218,13,95, + 115,101,97,114,99,104,95,112,97,116,104,115,218,3,109,97, + 112,41,7,114,193,0,0,0,114,117,0,0,0,114,44,0, + 0,0,114,60,1,0,0,114,59,1,0,0,218,7,112,97, + 116,116,101,114,110,90,5,102,111,117,110,100,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,218,18,102,105,110, + 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,84, + 5,0,0,115,14,0,0,0,0,10,8,1,12,1,8,1, + 6,1,22,1,12,1,122,29,80,97,116,104,70,105,110,100, + 101,114,46,102,105,110,100,95,100,105,115,116,114,105,98,117, + 116,105,111,110,115,99,3,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,6,0,0,0,3,0,0,0,115,44, + 0,0,0,100,1,100,2,108,0,125,3,124,3,106,1,160, + 2,135,0,135,1,102,2,100,3,100,4,132,8,116,3,136, + 0,106,4,124,2,131,2,68,0,131,1,161,1,83,0,41, + 5,122,49,70,105,110,100,32,109,101,116,97,100,97,116,97, + 32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32, + 112,97,116,104,115,32,104,101,117,114,105,115,116,105,99,97, + 108,108,121,46,114,73,0,0,0,78,99,1,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,5,0,0,0,51, + 0,0,0,115,26,0,0,0,124,0,93,18,125,1,136,0, + 160,0,124,1,136,1,161,2,86,0,1,0,113,2,100,0, + 83,0,114,110,0,0,0,41,1,218,12,95,115,101,97,114, + 99,104,95,112,97,116,104,41,2,114,32,0,0,0,114,44, + 0,0,0,169,2,114,193,0,0,0,114,63,1,0,0,114, + 3,0,0,0,114,6,0,0,0,114,19,1,0,0,106,5, + 0,0,115,4,0,0,0,4,2,2,255,122,43,80,97,116, + 104,70,105,110,100,101,114,46,95,115,101,97,114,99,104,95, + 112,97,116,104,115,46,60,108,111,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,41,5,218,9,105,116,101,114, + 116,111,111,108,115,90,5,99,104,97,105,110,90,13,102,114, + 111,109,95,105,116,101,114,97,98,108,101,114,62,1,0,0, + 218,12,95,115,119,105,116,99,104,95,112,97,116,104,41,4, + 114,193,0,0,0,114,63,1,0,0,90,5,112,97,116,104, + 115,114,67,1,0,0,114,3,0,0,0,114,66,1,0,0, + 114,6,0,0,0,114,61,1,0,0,102,5,0,0,115,8, + 0,0,0,0,3,8,1,18,2,10,254,122,24,80,97,116, + 104,70,105,110,100,101,114,46,95,115,101,97,114,99,104,95, + 112,97,116,104,115,99,1,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,10,0,0,0,67,0,0,0,115,78, + 0,0,0,100,1,100,2,108,0,109,1,125,1,1,0,100, + 1,100,0,108,2,125,2,100,1,100,3,108,3,109,4,125, + 3,1,0,124,1,116,5,131,1,143,24,1,0,124,2,160, + 4,124,0,161,1,87,0,2,0,53,0,81,0,82,0,163, + 0,83,0,81,0,82,0,88,0,124,3,124,0,131,1,83, + 0,41,4,78,114,73,0,0,0,41,1,218,8,115,117,112, + 112,114,101,115,115,41,1,218,4,80,97,116,104,41,6,90, + 10,99,111,110,116,101,120,116,108,105,98,114,69,1,0,0, + 218,7,122,105,112,102,105,108,101,90,7,112,97,116,104,108, + 105,98,114,70,1,0,0,218,9,69,120,99,101,112,116,105, + 111,110,41,4,114,44,0,0,0,114,69,1,0,0,114,71, + 1,0,0,114,70,1,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,68,1,0,0,111,5,0,0, + 115,12,0,0,0,0,2,12,1,8,1,12,1,10,1,28, + 1,122,23,80,97,116,104,70,105,110,100,101,114,46,95,115, + 119,105,116,99,104,95,112,97,116,104,99,4,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,32,0,0,0,100,1,100,0,108,0,125,4, + 124,4,106,1,124,1,116,2,124,3,106,3,131,1,124,4, + 106,4,100,2,141,3,83,0,41,3,78,114,73,0,0,0, + 41,1,114,83,0,0,0,41,5,114,60,1,0,0,90,5, + 109,97,116,99,104,114,85,0,0,0,114,117,0,0,0,90, + 10,73,71,78,79,82,69,67,65,83,69,41,5,114,193,0, + 0,0,114,63,1,0,0,218,4,114,111,111,116,114,41,1, + 0,0,114,60,1,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,218,10,95,112,114,101,100,105,99,97, + 116,101,120,5,0,0,115,4,0,0,0,0,2,8,1,122, + 21,80,97,116,104,70,105,110,100,101,114,46,95,112,114,101, + 100,105,99,97,116,101,99,3,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,3,0,0,0,115, + 64,0,0,0,136,2,160,0,161,0,115,12,100,1,83,0, + 124,2,160,1,100,2,100,3,161,2,125,3,136,0,106,2, + 106,3,124,3,100,4,141,1,137,1,135,0,135,1,135,2, + 102,3,100,5,100,6,132,8,136,2,160,4,161,0,68,0, + 131,1,83,0,41,7,78,114,3,0,0,0,250,1,45,114, + 45,0,0,0,41,1,114,63,1,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0, + 51,0,0,0,115,32,0,0,0,124,0,93,24,125,1,136, + 0,160,0,136,1,136,2,124,1,161,3,114,26,124,1,86, + 0,1,0,113,2,100,0,83,0,114,110,0,0,0,41,1, + 114,74,1,0,0,41,2,114,32,0,0,0,114,41,1,0, + 0,169,3,114,193,0,0,0,90,7,109,97,116,99,104,101, + 114,114,73,1,0,0,114,3,0,0,0,114,6,0,0,0, + 114,19,1,0,0,131,5,0,0,115,6,0,0,0,4,0, + 2,1,14,255,122,42,80,97,116,104,70,105,110,100,101,114, + 46,95,115,101,97,114,99,104,95,112,97,116,104,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 41,5,90,6,105,115,95,100,105,114,114,67,0,0,0,218, + 15,115,101,97,114,99,104,95,116,101,109,112,108,97,116,101, + 114,62,0,0,0,90,7,105,116,101,114,100,105,114,41,4, + 114,193,0,0,0,114,73,1,0,0,114,63,1,0,0,90, + 10,110,111,114,109,97,108,105,122,101,100,114,3,0,0,0, + 114,76,1,0,0,114,6,0,0,0,114,65,1,0,0,125, + 5,0,0,115,10,0,0,0,0,2,8,1,4,1,12,1, + 14,1,122,23,80,97,116,104,70,105,110,100,101,114,46,95, + 115,101,97,114,99,104,95,112,97,116,104,41,1,78,41,2, + 78,78,41,1,78,41,2,78,78,41,19,114,125,0,0,0, + 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, + 207,0,0,0,114,46,1,0,0,114,52,1,0,0,114,54, + 1,0,0,114,55,1,0,0,114,58,1,0,0,114,203,0, + 0,0,114,206,0,0,0,114,77,1,0,0,114,64,1,0, + 0,114,61,1,0,0,218,12,115,116,97,116,105,99,109,101, + 116,104,111,100,114,68,1,0,0,114,74,1,0,0,114,65, + 1,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,45,1,0,0,205,4,0,0, + 115,52,0,0,0,8,2,4,2,2,1,10,9,2,1,10, + 12,2,1,10,21,2,1,10,14,2,1,12,31,2,1,12, + 23,2,1,12,12,4,2,2,1,12,17,2,1,10,8,2, + 1,10,8,2,1,10,4,2,1,114,45,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,64,0,0,0,115,90,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,101,6,90,7,100,6,100,7, + 132,0,90,8,100,8,100,9,132,0,90,9,100,19,100,11, + 100,12,132,1,90,10,100,13,100,14,132,0,90,11,101,12, + 100,15,100,16,132,0,131,1,90,13,100,17,100,18,132,0, + 90,14,100,10,83,0,41,20,218,10,70,105,108,101,70,105, + 110,100,101,114,122,172,70,105,108,101,45,98,97,115,101,100, + 32,102,105,110,100,101,114,46,10,10,32,32,32,32,73,110, + 116,101,114,97,99,116,105,111,110,115,32,119,105,116,104,32, + 116,104,101,32,102,105,108,101,32,115,121,115,116,101,109,32, + 97,114,101,32,99,97,99,104,101,100,32,102,111,114,32,112, + 101,114,102,111,114,109,97,110,99,101,44,32,98,101,105,110, + 103,10,32,32,32,32,114,101,102,114,101,115,104,101,100,32, + 119,104,101,110,32,116,104,101,32,100,105,114,101,99,116,111, + 114,121,32,116,104,101,32,102,105,110,100,101,114,32,105,115, + 32,104,97,110,100,108,105,110,103,32,104,97,115,32,98,101, + 101,110,32,109,111,100,105,102,105,101,100,46,10,10,32,32, + 32,32,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,6,0,0,0,7,0,0,0,115,84,0,0,0, + 103,0,125,3,124,2,68,0,93,32,92,2,137,0,125,4, + 124,3,160,0,135,0,102,1,100,1,100,2,132,8,124,4, + 68,0,131,1,161,1,1,0,113,8,124,3,124,0,95,1, + 124,1,112,54,100,3,124,0,95,2,100,4,124,0,95,3, + 116,4,131,0,124,0,95,5,116,4,131,0,124,0,95,6, + 100,5,83,0,41,6,122,154,73,110,105,116,105,97,108,105, + 122,101,32,119,105,116,104,32,116,104,101,32,112,97,116,104, + 32,116,111,32,115,101,97,114,99,104,32,111,110,32,97,110, + 100,32,97,32,118,97,114,105,97,98,108,101,32,110,117,109, + 98,101,114,32,111,102,10,32,32,32,32,32,32,32,32,50, + 45,116,117,112,108,101,115,32,99,111,110,116,97,105,110,105, + 110,103,32,116,104,101,32,108,111,97,100,101,114,32,97,110, + 100,32,116,104,101,32,102,105,108,101,32,115,117,102,102,105, + 120,101,115,32,116,104,101,32,108,111,97,100,101,114,10,32, + 32,32,32,32,32,32,32,114,101,99,111,103,110,105,122,101, + 115,46,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,51,0,0,0,115,22,0,0,0, + 124,0,93,14,125,1,124,1,136,0,102,2,86,0,1,0, + 113,2,100,0,83,0,114,110,0,0,0,114,3,0,0,0, + 114,16,1,0,0,169,1,114,140,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,19,1,0,0,150,5,0,0,115, + 4,0,0,0,4,0,2,0,122,38,70,105,108,101,70,105, + 110,100,101,114,46,95,95,105,110,105,116,95,95,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 114,71,0,0,0,114,105,0,0,0,78,41,7,114,167,0, + 0,0,218,8,95,108,111,97,100,101,114,115,114,44,0,0, + 0,218,11,95,112,97,116,104,95,109,116,105,109,101,218,3, + 115,101,116,218,11,95,112,97,116,104,95,99,97,99,104,101, + 218,19,95,114,101,108,97,120,101,100,95,112,97,116,104,95, + 99,97,99,104,101,41,5,114,119,0,0,0,114,44,0,0, + 0,218,14,108,111,97,100,101,114,95,100,101,116,97,105,108, + 115,90,7,108,111,97,100,101,114,115,114,189,0,0,0,114, + 3,0,0,0,114,80,1,0,0,114,6,0,0,0,114,209, + 0,0,0,144,5,0,0,115,16,0,0,0,0,4,4,1, + 12,1,26,1,6,2,10,1,6,1,8,1,122,19,70,105, + 108,101,70,105,110,100,101,114,46,95,95,105,110,105,116,95, + 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,100, + 1,124,0,95,0,100,2,83,0,41,3,122,31,73,110,118, + 97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,101, + 99,116,111,114,121,32,109,116,105,109,101,46,114,105,0,0, + 0,78,41,1,114,82,1,0,0,114,246,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,46,1, + 0,0,158,5,0,0,115,2,0,0,0,0,2,122,28,70, + 105,108,101,70,105,110,100,101,114,46,105,110,118,97,108,105, + 100,97,116,101,95,99,97,99,104,101,115,99,2,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,42,0,0,0,124,0,160,0,124,1,161, + 1,125,2,124,2,100,1,107,8,114,26,100,1,103,0,102, + 2,83,0,124,2,106,1,124,2,106,2,112,38,103,0,102, + 2,83,0,41,2,122,197,84,114,121,32,116,111,32,102,105, + 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,117,108,101,44,32,111,114,32,116,104,101,32,110,97,109, + 101,115,112,97,99,101,10,32,32,32,32,32,32,32,32,112, + 97,99,107,97,103,101,32,112,111,114,116,105,111,110,115,46, + 32,82,101,116,117,114,110,115,32,40,108,111,97,100,101,114, + 44,32,108,105,115,116,45,111,102,45,112,111,114,116,105,111, + 110,115,41,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,78,41,3,114, + 203,0,0,0,114,140,0,0,0,114,178,0,0,0,41,3, + 114,119,0,0,0,114,139,0,0,0,114,187,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,137, + 0,0,0,164,5,0,0,115,8,0,0,0,0,7,10,1, + 8,1,8,1,122,22,70,105,108,101,70,105,110,100,101,114, + 46,102,105,110,100,95,108,111,97,100,101,114,99,6,0,0, + 0,0,0,0,0,0,0,0,0,7,0,0,0,6,0,0, + 0,67,0,0,0,115,26,0,0,0,124,1,124,2,124,3, + 131,2,125,6,116,0,124,2,124,3,124,6,124,4,100,1, + 141,4,83,0,41,2,78,114,177,0,0,0,41,1,114,190, + 0,0,0,41,7,114,119,0,0,0,114,188,0,0,0,114, + 139,0,0,0,114,44,0,0,0,90,4,115,109,115,108,114, + 202,0,0,0,114,140,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,58,1,0,0,176,5,0, + 0,115,8,0,0,0,0,1,10,1,8,1,2,255,122,20, + 70,105,108,101,70,105,110,100,101,114,46,95,103,101,116,95, + 115,112,101,99,78,99,3,0,0,0,0,0,0,0,0,0, + 0,0,14,0,0,0,8,0,0,0,67,0,0,0,115,102, + 1,0,0,100,1,125,3,124,1,160,0,100,2,161,1,100, + 3,25,0,125,4,122,24,116,1,124,0,106,2,112,34,116, + 3,160,4,161,0,131,1,106,5,125,5,87,0,110,24,4, + 0,116,6,107,10,114,66,1,0,1,0,1,0,100,4,125, + 5,89,0,110,2,88,0,124,5,124,0,106,7,107,3,114, + 92,124,0,160,8,161,0,1,0,124,5,124,0,95,7,116, + 9,131,0,114,114,124,0,106,10,125,6,124,4,160,11,161, + 0,125,7,110,10,124,0,106,12,125,6,124,4,125,7,124, + 7,124,6,107,6,114,218,116,13,124,0,106,2,124,4,131, + 2,125,8,124,0,106,14,68,0,93,58,92,2,125,9,125, + 10,100,5,124,9,23,0,125,11,116,13,124,8,124,11,131, + 2,125,12,116,15,124,12,131,1,114,208,124,0,160,16,124, + 10,124,1,124,12,124,8,103,1,124,2,161,5,2,0,1, + 0,83,0,113,150,116,17,124,8,131,1,125,3,124,0,106, + 14,68,0,93,86,92,2,125,9,125,10,116,13,124,0,106, + 2,124,4,124,9,23,0,131,2,125,12,116,18,106,19,100, + 6,124,12,100,3,100,7,141,3,1,0,124,7,124,9,23, + 0,124,6,107,6,144,1,114,54,116,15,124,12,131,1,144, + 1,114,54,124,0,160,16,124,10,124,1,124,12,100,8,124, + 2,161,5,2,0,1,0,83,0,113,224,124,3,144,1,114, + 98,116,18,160,19,100,9,124,8,161,2,1,0,116,18,160, + 20,124,1,100,8,161,2,125,13,124,8,103,1,124,13,95, + 21,124,13,83,0,100,8,83,0,41,10,122,111,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,116,117,114,110,115,32,116,104,101,32,109, + 97,116,99,104,105,110,103,32,115,112,101,99,44,32,111,114, + 32,78,111,110,101,32,105,102,32,110,111,116,32,102,111,117, + 110,100,46,10,32,32,32,32,32,32,32,32,70,114,71,0, + 0,0,114,28,0,0,0,114,105,0,0,0,114,209,0,0, + 0,122,9,116,114,121,105,110,103,32,123,125,41,1,90,9, + 118,101,114,98,111,115,105,116,121,78,122,25,112,111,115,115, + 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, + 111,114,32,123,125,41,22,114,41,0,0,0,114,49,0,0, + 0,114,44,0,0,0,114,2,0,0,0,114,55,0,0,0, + 114,9,1,0,0,114,50,0,0,0,114,82,1,0,0,218, + 11,95,102,105,108,108,95,99,97,99,104,101,114,7,0,0, + 0,114,85,1,0,0,114,106,0,0,0,114,84,1,0,0, + 114,38,0,0,0,114,81,1,0,0,114,54,0,0,0,114, + 58,1,0,0,114,56,0,0,0,114,134,0,0,0,114,149, + 0,0,0,114,183,0,0,0,114,178,0,0,0,41,14,114, + 119,0,0,0,114,139,0,0,0,114,202,0,0,0,90,12, + 105,115,95,110,97,109,101,115,112,97,99,101,90,11,116,97, + 105,108,95,109,111,100,117,108,101,114,169,0,0,0,90,5, + 99,97,99,104,101,90,12,99,97,99,104,101,95,109,111,100, + 117,108,101,90,9,98,97,115,101,95,112,97,116,104,114,17, + 1,0,0,114,188,0,0,0,90,13,105,110,105,116,95,102, + 105,108,101,110,97,109,101,90,9,102,117,108,108,95,112,97, + 116,104,114,187,0,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,203,0,0,0,181,5,0,0,115, + 74,0,0,0,0,5,4,1,14,1,2,1,24,1,14,1, + 10,1,10,1,8,1,6,2,6,1,6,1,10,2,6,1, + 4,2,8,1,12,1,14,1,8,1,10,1,8,1,26,4, + 8,2,14,1,16,1,16,1,14,1,10,1,10,1,2,0, + 2,255,10,2,6,1,12,1,12,1,8,1,4,1,122,20, + 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,1,0,0,0,0,0,0,0,0,0,0, + 0,9,0,0,0,10,0,0,0,67,0,0,0,115,190,0, + 0,0,124,0,106,0,125,1,122,22,116,1,160,2,124,1, + 112,22,116,1,160,3,161,0,161,1,125,2,87,0,110,30, + 4,0,116,4,116,5,116,6,102,3,107,10,114,58,1,0, + 1,0,1,0,103,0,125,2,89,0,110,2,88,0,116,7, + 106,8,160,9,100,1,161,1,115,84,116,10,124,2,131,1, + 124,0,95,11,110,74,116,10,131,0,125,3,124,2,68,0, + 93,56,125,4,124,4,160,12,100,2,161,1,92,3,125,5, + 125,6,125,7,124,6,114,136,100,3,160,13,124,5,124,7, + 160,14,161,0,161,2,125,8,110,4,124,5,125,8,124,3, + 160,15,124,8,161,1,1,0,113,94,124,3,124,0,95,11, + 116,7,106,8,160,9,116,16,161,1,114,186,100,4,100,5, + 132,0,124,2,68,0,131,1,124,0,95,17,100,6,83,0, + 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, + 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, + 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, + 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, + 114,101,99,116,111,114,121,46,114,0,0,0,0,114,71,0, + 0,0,114,61,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,4,0,0,0,83,0,0,0, + 115,20,0,0,0,104,0,124,0,93,12,125,1,124,1,160, + 0,161,0,146,2,113,4,83,0,114,3,0,0,0,41,1, + 114,106,0,0,0,41,2,114,32,0,0,0,90,2,102,110, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 9,60,115,101,116,99,111,109,112,62,2,6,0,0,115,4, + 0,0,0,6,0,2,0,122,41,70,105,108,101,70,105,110, + 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,46, + 60,108,111,99,97,108,115,62,46,60,115,101,116,99,111,109, + 112,62,78,41,18,114,44,0,0,0,114,2,0,0,0,114, + 6,1,0,0,114,55,0,0,0,114,2,1,0,0,218,15, + 80,101,114,109,105,115,115,105,111,110,69,114,114,111,114,218, + 18,78,111,116,65,68,105,114,101,99,116,111,114,121,69,114, + 114,111,114,114,8,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,83,1,0,0,114,84,1,0,0,114,101,0,0, + 0,114,62,0,0,0,114,106,0,0,0,218,3,97,100,100, + 114,11,0,0,0,114,85,1,0,0,41,9,114,119,0,0, + 0,114,44,0,0,0,114,7,1,0,0,90,21,108,111,119, + 101,114,95,115,117,102,102,105,120,95,99,111,110,116,101,110, + 116,115,114,41,1,0,0,114,117,0,0,0,114,29,1,0, + 0,114,17,1,0,0,90,8,110,101,119,95,110,97,109,101, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, + 87,1,0,0,229,5,0,0,115,34,0,0,0,0,2,6, + 1,2,1,22,1,20,3,10,3,12,1,12,7,6,1,8, + 1,16,1,4,1,18,2,4,1,12,1,6,1,12,1,122, + 22,70,105,108,101,70,105,110,100,101,114,46,95,102,105,108, + 108,95,99,97,99,104,101,99,1,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,7,0,0,0, + 115,18,0,0,0,135,0,135,1,102,2,100,1,100,2,132, + 8,125,2,124,2,83,0,41,3,97,20,1,0,0,65,32, + 99,108,97,115,115,32,109,101,116,104,111,100,32,119,104,105, + 99,104,32,114,101,116,117,114,110,115,32,97,32,99,108,111, + 115,117,114,101,32,116,111,32,117,115,101,32,111,110,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,10,32,32,32, + 32,32,32,32,32,119,104,105,99,104,32,119,105,108,108,32, + 114,101,116,117,114,110,32,97,110,32,105,110,115,116,97,110, + 99,101,32,117,115,105,110,103,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,108,111,97,100,101,114,115,32,97, + 110,100,32,116,104,101,32,112,97,116,104,10,32,32,32,32, + 32,32,32,32,99,97,108,108,101,100,32,111,110,32,116,104, + 101,32,99,108,111,115,117,114,101,46,10,10,32,32,32,32, + 32,32,32,32,73,102,32,116,104,101,32,112,97,116,104,32, + 99,97,108,108,101,100,32,111,110,32,116,104,101,32,99,108, + 111,115,117,114,101,32,105,115,32,110,111,116,32,97,32,100, + 105,114,101,99,116,111,114,121,44,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,115,10,32,32,32,32,32,32,32, + 32,114,97,105,115,101,100,46,10,10,32,32,32,32,32,32, + 32,32,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,4,0,0,0,19,0,0,0,115,34,0,0,0, + 116,0,124,0,131,1,115,20,116,1,100,1,124,0,100,2, + 141,2,130,1,136,0,124,0,102,1,136,1,158,2,142,0, + 83,0,41,3,122,45,80,97,116,104,32,104,111,111,107,32, + 102,111,114,32,105,109,112,111,114,116,108,105,98,46,109,97, + 99,104,105,110,101,114,121,46,70,105,108,101,70,105,110,100, + 101,114,46,122,30,111,110,108,121,32,100,105,114,101,99,116, + 111,114,105,101,115,32,97,114,101,32,115,117,112,112,111,114, + 116,101,100,114,48,0,0,0,41,2,114,56,0,0,0,114, + 118,0,0,0,114,48,0,0,0,169,2,114,193,0,0,0, + 114,86,1,0,0,114,3,0,0,0,114,6,0,0,0,218, + 24,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,14,6,0,0,115,6,0, + 0,0,0,2,8,1,12,1,122,54,70,105,108,101,70,105, + 110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,60, + 108,111,99,97,108,115,62,46,112,97,116,104,95,104,111,111, + 107,95,102,111,114,95,70,105,108,101,70,105,110,100,101,114, + 114,3,0,0,0,41,3,114,193,0,0,0,114,86,1,0, + 0,114,93,1,0,0,114,3,0,0,0,114,92,1,0,0, + 114,6,0,0,0,218,9,112,97,116,104,95,104,111,111,107, + 4,6,0,0,115,4,0,0,0,0,10,14,6,122,20,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, + 122,16,70,105,108,101,70,105,110,100,101,114,40,123,33,114, + 125,41,41,2,114,62,0,0,0,114,44,0,0,0,114,246, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,39,1,0,0,22,6,0,0,115,2,0,0,0, + 0,1,122,19,70,105,108,101,70,105,110,100,101,114,46,95, + 95,114,101,112,114,95,95,41,1,78,41,15,114,125,0,0, + 0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0, + 114,209,0,0,0,114,46,1,0,0,114,143,0,0,0,114, + 206,0,0,0,114,137,0,0,0,114,58,1,0,0,114,203, + 0,0,0,114,87,1,0,0,114,207,0,0,0,114,94,1, + 0,0,114,39,1,0,0,114,3,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,79,1,0,0, + 135,5,0,0,115,22,0,0,0,8,2,4,7,8,14,8, + 4,4,2,8,12,8,5,10,48,8,31,2,1,10,17,114, + 79,1,0,0,99,4,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,8,0,0,0,67,0,0,0,115,146,0, + 0,0,124,0,160,0,100,1,161,1,125,4,124,0,160,0, + 100,2,161,1,125,5,124,4,115,66,124,5,114,36,124,5, + 106,1,125,4,110,30,124,2,124,3,107,2,114,56,116,2, + 124,1,124,2,131,2,125,4,110,10,116,3,124,1,124,2, + 131,2,125,4,124,5,115,84,116,4,124,1,124,2,124,4, + 100,3,141,3,125,5,122,36,124,5,124,0,100,2,60,0, + 124,4,124,0,100,1,60,0,124,2,124,0,100,4,60,0, + 124,3,124,0,100,5,60,0,87,0,110,20,4,0,116,5, + 107,10,114,140,1,0,1,0,1,0,89,0,110,2,88,0, + 100,0,83,0,41,6,78,218,10,95,95,108,111,97,100,101, + 114,95,95,218,8,95,95,115,112,101,99,95,95,114,80,1, + 0,0,90,8,95,95,102,105,108,101,95,95,90,10,95,95, + 99,97,99,104,101,100,95,95,41,6,218,3,103,101,116,114, + 140,0,0,0,114,14,1,0,0,114,8,1,0,0,114,190, + 0,0,0,114,72,1,0,0,41,6,90,2,110,115,114,117, + 0,0,0,90,8,112,97,116,104,110,97,109,101,90,9,99, + 112,97,116,104,110,97,109,101,114,140,0,0,0,114,187,0, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,14,95,102,105,120,95,117,112,95,109,111,100,117,108, + 101,28,6,0,0,115,34,0,0,0,0,2,10,1,10,1, + 4,1,4,1,8,1,8,1,12,2,10,1,4,1,14,1, + 2,1,8,1,8,1,8,1,12,1,14,2,114,98,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,116, + 0,116,1,160,2,161,0,102,2,125,0,116,3,116,4,102, + 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, + 2,103,3,83,0,41,1,122,95,82,101,116,117,114,110,115, + 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, + 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, + 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, + 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, + 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, + 115,41,46,10,32,32,32,32,41,7,114,15,1,0,0,114, + 163,0,0,0,218,18,101,120,116,101,110,115,105,111,110,95, + 115,117,102,102,105,120,101,115,114,8,1,0,0,114,102,0, + 0,0,114,14,1,0,0,114,89,0,0,0,41,3,90,10, + 101,120,116,101,110,115,105,111,110,115,90,6,115,111,117,114, + 99,101,90,8,98,121,116,101,99,111,100,101,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,184,0,0,0, + 51,6,0,0,115,8,0,0,0,0,5,12,1,8,1,8, + 1,114,184,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,12,0,0,0,9,0,0,0,67,0,0,0,115, + 178,1,0,0,124,0,97,0,116,0,106,1,97,1,116,0, + 106,2,97,2,116,1,106,3,116,4,25,0,125,1,100,1, + 68,0,93,48,125,2,124,2,116,1,106,3,107,7,114,56, + 116,0,160,5,124,2,161,1,125,3,110,10,116,1,106,3, + 124,2,25,0,125,3,116,6,124,1,124,2,124,3,131,3, + 1,0,113,30,100,2,100,3,103,1,102,2,100,4,100,5, + 100,3,103,2,102,2,102,2,125,4,124,4,68,0,93,110, + 92,2,125,5,125,6,116,7,100,6,100,7,132,0,124,6, + 68,0,131,1,131,1,115,136,116,8,130,1,124,6,100,8, + 25,0,125,7,124,5,116,1,106,3,107,6,114,170,116,1, + 106,3,124,5,25,0,125,8,1,0,113,226,113,106,122,20, + 116,0,160,5,124,5,161,1,125,8,87,0,1,0,113,226, + 87,0,113,106,4,0,116,9,107,10,114,214,1,0,1,0, + 1,0,89,0,113,106,89,0,113,106,88,0,113,106,116,9, + 100,9,131,1,130,1,116,6,124,1,100,10,124,8,131,3, + 1,0,116,6,124,1,100,11,124,7,131,3,1,0,116,6, + 124,1,100,12,100,13,160,10,124,6,161,1,131,3,1,0, + 116,6,124,1,100,14,100,15,100,16,132,0,124,6,68,0, + 131,1,131,3,1,0,116,0,160,5,100,17,161,1,125,9, + 116,6,124,1,100,17,124,9,131,3,1,0,116,0,160,5, + 100,18,161,1,125,10,116,6,124,1,100,18,124,10,131,3, + 1,0,124,5,100,4,107,2,144,1,114,110,116,0,160,5, + 100,19,161,1,125,11,116,6,124,1,100,20,124,11,131,3, + 1,0,116,6,124,1,100,21,116,11,131,0,131,3,1,0, + 116,12,160,13,116,2,160,14,161,0,161,1,1,0,124,5, + 100,4,107,2,144,1,114,174,116,15,160,16,100,22,161,1, + 1,0,100,23,116,12,107,6,144,1,114,174,100,24,116,17, + 95,18,100,25,83,0,41,26,122,205,83,101,116,117,112,32, + 116,104,101,32,112,97,116,104,45,98,97,115,101,100,32,105, + 109,112,111,114,116,101,114,115,32,102,111,114,32,105,109,112, + 111,114,116,108,105,98,32,98,121,32,105,109,112,111,114,116, + 105,110,103,32,110,101,101,100,101,100,10,32,32,32,32,98, + 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, + 97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,104, + 101,109,32,105,110,116,111,32,116,104,101,32,103,108,111,98, + 97,108,32,110,97,109,101,115,112,97,99,101,46,10,10,32, + 32,32,32,79,116,104,101,114,32,99,111,109,112,111,110,101, + 110,116,115,32,97,114,101,32,101,120,116,114,97,99,116,101, + 100,32,102,114,111,109,32,116,104,101,32,99,111,114,101,32, + 98,111,111,116,115,116,114,97,112,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,41,4,114,64,0,0,0,114,75, + 0,0,0,218,8,98,117,105,108,116,105,110,115,114,160,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,0,0,0,0, + 2,0,0,0,3,0,0,0,115,0,0,0,115,26,0,0, + 0,124,0,93,18,125,1,116,0,124,1,131,1,100,0,107, + 2,86,0,1,0,113,2,100,1,83,0,41,2,114,39,0, + 0,0,78,41,1,114,22,0,0,0,41,2,114,32,0,0, + 0,114,95,0,0,0,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,19,1,0,0,87,6,0,0,115,4, + 0,0,0,4,0,2,0,122,25,95,115,101,116,117,112,46, + 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112, + 114,62,114,73,0,0,0,122,30,105,109,112,111,114,116,108, + 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, + 120,32,111,114,32,110,116,114,2,0,0,0,114,35,0,0, + 0,114,31,0,0,0,114,40,0,0,0,114,58,0,0,0, 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,6,0,0,0,51,0,0,0,115,32,0,0,0,124,0, - 93,24,125,1,136,0,160,0,136,1,136,2,124,1,161,3, - 114,26,124,1,86,0,1,0,113,2,100,0,83,0,114,110, - 0,0,0,41,1,114,74,1,0,0,41,2,114,32,0,0, - 0,114,41,1,0,0,169,3,114,193,0,0,0,90,7,109, - 97,116,99,104,101,114,114,73,1,0,0,114,3,0,0,0, - 114,6,0,0,0,114,19,1,0,0,130,5,0,0,115,6, - 0,0,0,4,0,2,1,14,255,122,42,80,97,116,104,70, - 105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,97, - 116,104,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,41,5,90,6,105,115,95,100,105,114,114, - 67,0,0,0,218,15,115,101,97,114,99,104,95,116,101,109, - 112,108,97,116,101,114,62,0,0,0,90,7,105,116,101,114, - 100,105,114,41,4,114,193,0,0,0,114,73,1,0,0,114, - 63,1,0,0,90,10,110,111,114,109,97,108,105,122,101,100, - 114,3,0,0,0,114,76,1,0,0,114,6,0,0,0,114, - 65,1,0,0,124,5,0,0,115,10,0,0,0,0,2,8, - 1,4,1,12,1,14,1,122,23,80,97,116,104,70,105,110, - 100,101,114,46,95,115,101,97,114,99,104,95,112,97,116,104, - 41,1,78,41,2,78,78,41,1,78,41,2,78,78,41,19, - 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, - 127,0,0,0,114,207,0,0,0,114,46,1,0,0,114,52, - 1,0,0,114,54,1,0,0,114,55,1,0,0,114,58,1, - 0,0,114,203,0,0,0,114,206,0,0,0,114,77,1,0, - 0,114,64,1,0,0,114,61,1,0,0,218,12,115,116,97, - 116,105,99,109,101,116,104,111,100,114,68,1,0,0,114,74, - 1,0,0,114,65,1,0,0,114,3,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,45,1,0, - 0,205,4,0,0,115,52,0,0,0,8,2,4,2,2,1, - 10,9,2,1,10,12,2,1,10,21,2,1,10,14,2,1, - 12,31,2,1,12,23,2,1,12,12,4,2,2,1,12,14, - 2,1,10,10,2,1,10,8,2,1,10,4,2,1,114,45, - 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,64,0,0,0,115,90,0,0, - 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, - 3,132,0,90,4,100,4,100,5,132,0,90,5,101,6,90, - 7,100,6,100,7,132,0,90,8,100,8,100,9,132,0,90, - 9,100,19,100,11,100,12,132,1,90,10,100,13,100,14,132, - 0,90,11,101,12,100,15,100,16,132,0,131,1,90,13,100, - 17,100,18,132,0,90,14,100,10,83,0,41,20,218,10,70, - 105,108,101,70,105,110,100,101,114,122,172,70,105,108,101,45, - 98,97,115,101,100,32,102,105,110,100,101,114,46,10,10,32, - 32,32,32,73,110,116,101,114,97,99,116,105,111,110,115,32, - 119,105,116,104,32,116,104,101,32,102,105,108,101,32,115,121, - 115,116,101,109,32,97,114,101,32,99,97,99,104,101,100,32, - 102,111,114,32,112,101,114,102,111,114,109,97,110,99,101,44, - 32,98,101,105,110,103,10,32,32,32,32,114,101,102,114,101, - 115,104,101,100,32,119,104,101,110,32,116,104,101,32,100,105, - 114,101,99,116,111,114,121,32,116,104,101,32,102,105,110,100, - 101,114,32,105,115,32,104,97,110,100,108,105,110,103,32,104, - 97,115,32,98,101,101,110,32,109,111,100,105,102,105,101,100, - 46,10,10,32,32,32,32,99,2,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0, - 115,84,0,0,0,103,0,125,3,124,2,68,0,93,32,92, - 2,137,0,125,4,124,3,160,0,135,0,102,1,100,1,100, - 2,132,8,124,4,68,0,131,1,161,1,1,0,113,8,124, - 3,124,0,95,1,124,1,112,54,100,3,124,0,95,2,100, - 4,124,0,95,3,116,4,131,0,124,0,95,5,116,4,131, - 0,124,0,95,6,100,5,83,0,41,6,122,154,73,110,105, - 116,105,97,108,105,122,101,32,119,105,116,104,32,116,104,101, - 32,112,97,116,104,32,116,111,32,115,101,97,114,99,104,32, - 111,110,32,97,110,100,32,97,32,118,97,114,105,97,98,108, - 101,32,110,117,109,98,101,114,32,111,102,10,32,32,32,32, - 32,32,32,32,50,45,116,117,112,108,101,115,32,99,111,110, - 116,97,105,110,105,110,103,32,116,104,101,32,108,111,97,100, - 101,114,32,97,110,100,32,116,104,101,32,102,105,108,101,32, - 115,117,102,102,105,120,101,115,32,116,104,101,32,108,111,97, - 100,101,114,10,32,32,32,32,32,32,32,32,114,101,99,111, - 103,110,105,122,101,115,46,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,51,0,0,0, - 115,22,0,0,0,124,0,93,14,125,1,124,1,136,0,102, - 2,86,0,1,0,113,2,100,0,83,0,114,110,0,0,0, - 114,3,0,0,0,114,16,1,0,0,169,1,114,140,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0, - 149,5,0,0,115,4,0,0,0,4,0,2,0,122,38,70, - 105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,116, - 95,95,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,114,71,0,0,0,114,105,0,0,0,78, - 41,7,114,167,0,0,0,218,8,95,108,111,97,100,101,114, - 115,114,44,0,0,0,218,11,95,112,97,116,104,95,109,116, - 105,109,101,218,3,115,101,116,218,11,95,112,97,116,104,95, - 99,97,99,104,101,218,19,95,114,101,108,97,120,101,100,95, - 112,97,116,104,95,99,97,99,104,101,41,5,114,119,0,0, - 0,114,44,0,0,0,218,14,108,111,97,100,101,114,95,100, - 101,116,97,105,108,115,90,7,108,111,97,100,101,114,115,114, - 189,0,0,0,114,3,0,0,0,114,80,1,0,0,114,6, - 0,0,0,114,209,0,0,0,143,5,0,0,115,16,0,0, - 0,0,4,4,1,12,1,26,1,6,2,10,1,6,1,8, - 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, - 10,0,0,0,100,1,124,0,95,0,100,2,83,0,41,3, - 122,31,73,110,118,97,108,105,100,97,116,101,32,116,104,101, - 32,100,105,114,101,99,116,111,114,121,32,109,116,105,109,101, - 46,114,105,0,0,0,78,41,1,114,82,1,0,0,114,246, + 0,4,0,0,0,83,0,0,0,115,22,0,0,0,104,0, + 124,0,93,14,125,1,100,0,124,1,155,0,157,2,146,2, + 113,4,83,0,41,1,114,74,0,0,0,114,3,0,0,0, + 41,2,114,32,0,0,0,218,1,115,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,88,1,0,0,103,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,192,0,0,0,114,7,0,0,0,122,4,46,112,121, + 119,122,6,95,100,46,112,121,100,84,78,41,19,114,134,0, + 0,0,114,8,0,0,0,114,163,0,0,0,114,31,1,0, + 0,114,125,0,0,0,90,18,95,98,117,105,108,116,105,110, + 95,102,114,111,109,95,110,97,109,101,114,129,0,0,0,218, + 3,97,108,108,114,23,0,0,0,114,118,0,0,0,114,36, + 0,0,0,114,13,0,0,0,114,21,1,0,0,114,167,0, + 0,0,114,99,1,0,0,114,102,0,0,0,114,186,0,0, + 0,114,191,0,0,0,114,195,0,0,0,41,12,218,17,95, + 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, + 90,11,115,101,108,102,95,109,111,100,117,108,101,90,12,98, + 117,105,108,116,105,110,95,110,97,109,101,90,14,98,117,105, + 108,116,105,110,95,109,111,100,117,108,101,90,10,111,115,95, + 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, + 95,111,115,114,31,0,0,0,114,35,0,0,0,90,9,111, + 115,95,109,111,100,117,108,101,90,13,116,104,114,101,97,100, + 95,109,111,100,117,108,101,90,14,119,101,97,107,114,101,102, + 95,109,111,100,117,108,101,90,13,119,105,110,114,101,103,95, + 109,111,100,117,108,101,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,6,95,115,101,116,117,112,62,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,106,1,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, + 0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,116, + 1,131,0,125,1,116,2,106,3,160,4,116,5,106,6,124, + 1,142,0,103,1,161,1,1,0,116,2,106,7,160,8,116, + 9,161,1,1,0,100,1,83,0,41,2,122,41,73,110,115, + 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, + 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, + 110,101,110,116,115,46,78,41,10,114,106,1,0,0,114,184, + 0,0,0,114,8,0,0,0,114,51,1,0,0,114,167,0, + 0,0,114,79,1,0,0,114,94,1,0,0,218,9,109,101, + 116,97,95,112,97,116,104,114,186,0,0,0,114,45,1,0, + 0,41,2,114,105,1,0,0,90,17,115,117,112,112,111,114, + 116,101,100,95,108,111,97,100,101,114,115,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,218,8,95,105,110,115, + 116,97,108,108,127,6,0,0,115,8,0,0,0,0,2,8, + 1,6,1,20,1,114,108,1,0,0,41,63,114,127,0,0, + 0,114,12,0,0,0,90,37,95,67,65,83,69,95,73,78, + 83,69,78,83,73,84,73,86,69,95,80,76,65,84,70,79, + 82,77,83,95,66,89,84,69,83,95,75,69,89,114,11,0, + 0,0,114,13,0,0,0,114,20,0,0,0,114,27,0,0, + 0,114,29,0,0,0,114,38,0,0,0,114,47,0,0,0, + 114,49,0,0,0,114,53,0,0,0,114,54,0,0,0,114, + 56,0,0,0,114,59,0,0,0,114,69,0,0,0,218,4, + 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,162, + 0,0,0,114,18,0,0,0,114,148,0,0,0,114,17,0, + 0,0,114,24,0,0,0,114,236,0,0,0,114,92,0,0, + 0,114,88,0,0,0,114,102,0,0,0,114,89,0,0,0, + 90,23,68,69,66,85,71,95,66,89,84,69,67,79,68,69, + 95,83,85,70,70,73,88,69,83,90,27,79,80,84,73,77, + 73,90,69,68,95,66,89,84,69,67,79,68,69,95,83,85, + 70,70,73,88,69,83,114,98,0,0,0,114,103,0,0,0, + 114,109,0,0,0,114,113,0,0,0,114,115,0,0,0,114, + 136,0,0,0,114,143,0,0,0,114,152,0,0,0,114,156, + 0,0,0,114,158,0,0,0,114,165,0,0,0,114,170,0, + 0,0,114,171,0,0,0,114,176,0,0,0,218,6,111,98, + 106,101,99,116,114,185,0,0,0,114,190,0,0,0,114,191, + 0,0,0,114,208,0,0,0,114,221,0,0,0,114,239,0, + 0,0,114,8,1,0,0,114,14,1,0,0,114,21,1,0, + 0,114,15,1,0,0,114,22,1,0,0,114,43,1,0,0, + 114,45,1,0,0,114,79,1,0,0,114,98,1,0,0,114, + 184,0,0,0,114,106,1,0,0,114,108,1,0,0,114,3, 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,46,1,0,0,157,5,0,0,115,2,0,0,0, - 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,42,0,0,0,124,0, - 160,0,124,1,161,1,125,2,124,2,100,1,107,8,114,26, - 100,1,103,0,102,2,83,0,124,2,106,1,124,2,106,2, - 112,38,103,0,102,2,83,0,41,2,122,197,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, - 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, - 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, - 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, - 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, - 111,114,116,105,111,110,115,41,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,41,3,114,203,0,0,0,114,140,0,0,0,114,178, - 0,0,0,41,3,114,119,0,0,0,114,139,0,0,0,114, - 187,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,137,0,0,0,163,5,0,0,115,8,0,0, - 0,0,7,10,1,8,1,8,1,122,22,70,105,108,101,70, - 105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,101, - 114,99,6,0,0,0,0,0,0,0,0,0,0,0,7,0, - 0,0,6,0,0,0,67,0,0,0,115,26,0,0,0,124, - 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,124, - 6,124,4,100,1,141,4,83,0,41,2,78,114,177,0,0, - 0,41,1,114,190,0,0,0,41,7,114,119,0,0,0,114, - 188,0,0,0,114,139,0,0,0,114,44,0,0,0,90,4, - 115,109,115,108,114,202,0,0,0,114,140,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,58,1, - 0,0,175,5,0,0,115,8,0,0,0,0,1,10,1,8, - 1,2,255,122,20,70,105,108,101,70,105,110,100,101,114,46, - 95,103,101,116,95,115,112,101,99,78,99,3,0,0,0,0, - 0,0,0,0,0,0,0,14,0,0,0,8,0,0,0,67, - 0,0,0,115,102,1,0,0,100,1,125,3,124,1,160,0, - 100,2,161,1,100,3,25,0,125,4,122,24,116,1,124,0, - 106,2,112,34,116,3,160,4,161,0,131,1,106,5,125,5, - 87,0,110,24,4,0,116,6,107,10,114,66,1,0,1,0, - 1,0,100,4,125,5,89,0,110,2,88,0,124,5,124,0, - 106,7,107,3,114,92,124,0,160,8,161,0,1,0,124,5, - 124,0,95,7,116,9,131,0,114,114,124,0,106,10,125,6, - 124,4,160,11,161,0,125,7,110,10,124,0,106,12,125,6, - 124,4,125,7,124,7,124,6,107,6,114,218,116,13,124,0, - 106,2,124,4,131,2,125,8,124,0,106,14,68,0,93,58, - 92,2,125,9,125,10,100,5,124,9,23,0,125,11,116,13, - 124,8,124,11,131,2,125,12,116,15,124,12,131,1,114,208, - 124,0,160,16,124,10,124,1,124,12,124,8,103,1,124,2, - 161,5,2,0,1,0,83,0,113,150,116,17,124,8,131,1, - 125,3,124,0,106,14,68,0,93,86,92,2,125,9,125,10, - 116,13,124,0,106,2,124,4,124,9,23,0,131,2,125,12, - 116,18,106,19,100,6,124,12,100,3,100,7,141,3,1,0, - 124,7,124,9,23,0,124,6,107,6,144,1,114,54,116,15, - 124,12,131,1,144,1,114,54,124,0,160,16,124,10,124,1, - 124,12,100,8,124,2,161,5,2,0,1,0,83,0,113,224, - 124,3,144,1,114,98,116,18,160,19,100,9,124,8,161,2, - 1,0,116,18,160,20,124,1,100,8,161,2,125,13,124,8, - 103,1,124,13,95,21,124,13,83,0,100,8,83,0,41,10, - 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, - 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, - 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, - 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, - 32,70,114,71,0,0,0,114,28,0,0,0,114,105,0,0, - 0,114,209,0,0,0,122,9,116,114,121,105,110,103,32,123, - 125,41,1,90,9,118,101,114,98,111,115,105,116,121,78,122, - 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, - 97,99,101,32,102,111,114,32,123,125,41,22,114,41,0,0, - 0,114,49,0,0,0,114,44,0,0,0,114,2,0,0,0, - 114,55,0,0,0,114,9,1,0,0,114,50,0,0,0,114, - 82,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104, - 101,114,7,0,0,0,114,85,1,0,0,114,106,0,0,0, - 114,84,1,0,0,114,38,0,0,0,114,81,1,0,0,114, - 54,0,0,0,114,58,1,0,0,114,56,0,0,0,114,134, - 0,0,0,114,149,0,0,0,114,183,0,0,0,114,178,0, - 0,0,41,14,114,119,0,0,0,114,139,0,0,0,114,202, - 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, - 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,169, - 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, - 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, - 97,116,104,114,17,1,0,0,114,188,0,0,0,90,13,105, - 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, - 108,108,95,112,97,116,104,114,187,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,203,0,0,0, - 180,5,0,0,115,74,0,0,0,0,5,4,1,14,1,2, - 1,24,1,14,1,10,1,10,1,8,1,6,2,6,1,6, - 1,10,2,6,1,4,2,8,1,12,1,14,1,8,1,10, - 1,8,1,26,4,8,2,14,1,16,1,16,1,14,1,10, - 1,10,1,2,0,2,255,10,2,6,1,12,1,12,1,8, - 1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,46, - 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, - 0,0,0,0,0,0,9,0,0,0,10,0,0,0,67,0, - 0,0,115,190,0,0,0,124,0,106,0,125,1,122,22,116, - 1,160,2,124,1,112,22,116,1,160,3,161,0,161,1,125, - 2,87,0,110,30,4,0,116,4,116,5,116,6,102,3,107, - 10,114,58,1,0,1,0,1,0,103,0,125,2,89,0,110, - 2,88,0,116,7,106,8,160,9,100,1,161,1,115,84,116, - 10,124,2,131,1,124,0,95,11,110,74,116,10,131,0,125, - 3,124,2,68,0,93,56,125,4,124,4,160,12,100,2,161, - 1,92,3,125,5,125,6,125,7,124,6,114,136,100,3,160, - 13,124,5,124,7,160,14,161,0,161,2,125,8,110,4,124, - 5,125,8,124,3,160,15,124,8,161,1,1,0,113,94,124, - 3,124,0,95,11,116,7,106,8,160,9,116,16,161,1,114, - 186,100,4,100,5,132,0,124,2,68,0,131,1,124,0,95, - 17,100,6,83,0,41,7,122,68,70,105,108,108,32,116,104, - 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, - 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, - 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, - 105,115,32,100,105,114,101,99,116,111,114,121,46,114,0,0, - 0,0,114,71,0,0,0,114,61,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,83,0,0,0,115,20,0,0,0,104,0,124,0,93,12, - 125,1,124,1,160,0,161,0,146,2,113,4,83,0,114,3, - 0,0,0,41,1,114,106,0,0,0,41,2,114,32,0,0, - 0,90,2,102,110,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,9,60,115,101,116,99,111,109,112,62,1, - 6,0,0,115,4,0,0,0,6,0,2,0,122,41,70,105, - 108,101,70,105,110,100,101,114,46,95,102,105,108,108,95,99, - 97,99,104,101,46,60,108,111,99,97,108,115,62,46,60,115, - 101,116,99,111,109,112,62,78,41,18,114,44,0,0,0,114, - 2,0,0,0,114,6,1,0,0,114,55,0,0,0,114,2, - 1,0,0,218,15,80,101,114,109,105,115,115,105,111,110,69, - 114,114,111,114,218,18,78,111,116,65,68,105,114,101,99,116, - 111,114,121,69,114,114,111,114,114,8,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,83,1,0,0,114,84,1,0, - 0,114,101,0,0,0,114,62,0,0,0,114,106,0,0,0, - 218,3,97,100,100,114,11,0,0,0,114,85,1,0,0,41, - 9,114,119,0,0,0,114,44,0,0,0,114,7,1,0,0, - 90,21,108,111,119,101,114,95,115,117,102,102,105,120,95,99, - 111,110,116,101,110,116,115,114,41,1,0,0,114,117,0,0, - 0,114,29,1,0,0,114,17,1,0,0,90,8,110,101,119, - 95,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,114,87,1,0,0,228,5,0,0,115,34,0, - 0,0,0,2,6,1,2,1,22,1,20,3,10,3,12,1, - 12,7,6,1,8,1,16,1,4,1,18,2,4,1,12,1, - 6,1,12,1,122,22,70,105,108,101,70,105,110,100,101,114, - 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,7,0,0,0,115,18,0,0,0,135,0,135,1,102,2, - 100,1,100,2,132,8,125,2,124,2,83,0,41,3,97,20, - 1,0,0,65,32,99,108,97,115,115,32,109,101,116,104,111, - 100,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, - 97,32,99,108,111,115,117,114,101,32,116,111,32,117,115,101, - 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, - 107,10,32,32,32,32,32,32,32,32,119,104,105,99,104,32, - 119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,105, - 110,115,116,97,110,99,101,32,117,115,105,110,103,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,108,111,97,100, - 101,114,115,32,97,110,100,32,116,104,101,32,112,97,116,104, - 10,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32, - 111,110,32,116,104,101,32,99,108,111,115,117,114,101,46,10, - 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, - 112,97,116,104,32,99,97,108,108,101,100,32,111,110,32,116, - 104,101,32,99,108,111,115,117,114,101,32,105,115,32,110,111, - 116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,115,10,32,32, - 32,32,32,32,32,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,32,32,32,32,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,19,0,0,0, - 115,34,0,0,0,116,0,124,0,131,1,115,20,116,1,100, - 1,124,0,100,2,141,2,130,1,136,0,124,0,102,1,136, - 1,158,2,142,0,83,0,41,3,122,45,80,97,116,104,32, - 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, - 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, - 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, - 117,112,112,111,114,116,101,100,114,48,0,0,0,41,2,114, - 56,0,0,0,114,118,0,0,0,114,48,0,0,0,169,2, - 114,193,0,0,0,114,86,1,0,0,114,3,0,0,0,114, - 6,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, - 102,111,114,95,70,105,108,101,70,105,110,100,101,114,13,6, - 0,0,115,6,0,0,0,0,2,8,1,12,1,122,54,70, - 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, - 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116, - 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, - 105,110,100,101,114,114,3,0,0,0,41,3,114,193,0,0, - 0,114,86,1,0,0,114,93,1,0,0,114,3,0,0,0, - 114,92,1,0,0,114,6,0,0,0,218,9,112,97,116,104, - 95,104,111,111,107,3,6,0,0,115,4,0,0,0,0,10, - 14,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112, - 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1, - 83,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101, - 114,40,123,33,114,125,41,41,2,114,62,0,0,0,114,44, - 0,0,0,114,246,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,39,1,0,0,21,6,0,0, - 115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,110, - 100,101,114,46,95,95,114,101,112,114,95,95,41,1,78,41, - 15,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, - 114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114, - 143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58, - 1,0,0,114,203,0,0,0,114,87,1,0,0,114,207,0, - 0,0,114,94,1,0,0,114,39,1,0,0,114,3,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,79,1,0,0,134,5,0,0,115,22,0,0,0,8,2, - 4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31, - 2,1,10,17,114,79,1,0,0,99,4,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0, - 0,0,115,146,0,0,0,124,0,160,0,100,1,161,1,125, - 4,124,0,160,0,100,2,161,1,125,5,124,4,115,66,124, - 5,114,36,124,5,106,1,125,4,110,30,124,2,124,3,107, - 2,114,56,116,2,124,1,124,2,131,2,125,4,110,10,116, - 3,124,1,124,2,131,2,125,4,124,5,115,84,116,4,124, - 1,124,2,124,4,100,3,141,3,125,5,122,36,124,5,124, - 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, - 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110, - 20,4,0,116,5,107,10,114,140,1,0,1,0,1,0,89, - 0,110,2,88,0,100,0,83,0,41,6,78,218,10,95,95, - 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, - 95,95,114,80,1,0,0,90,8,95,95,102,105,108,101,95, - 95,90,10,95,95,99,97,99,104,101,100,95,95,41,6,218, - 3,103,101,116,114,140,0,0,0,114,14,1,0,0,114,8, - 1,0,0,114,190,0,0,0,114,72,1,0,0,41,6,90, - 2,110,115,114,117,0,0,0,90,8,112,97,116,104,110,97, - 109,101,90,9,99,112,97,116,104,110,97,109,101,114,140,0, - 0,0,114,187,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,14,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,27,6,0,0,115,34,0,0,0,0, - 2,10,1,10,1,4,1,4,1,8,1,8,1,12,2,10, - 1,4,1,14,1,2,1,8,1,8,1,8,1,12,1,14, - 2,114,98,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, - 38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,0, - 116,3,116,4,102,2,125,1,116,5,116,6,102,2,125,2, - 124,0,124,1,124,2,103,3,83,0,41,1,122,95,82,101, - 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, - 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, - 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, - 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, - 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, - 102,102,105,120,101,115,41,46,10,32,32,32,32,41,7,114, - 15,1,0,0,114,163,0,0,0,218,18,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,114,8,1, - 0,0,114,102,0,0,0,114,14,1,0,0,114,89,0,0, - 0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90, - 6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100, - 101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,184,0,0,0,50,6,0,0,115,8,0,0,0,0,5, - 12,1,8,1,8,1,114,184,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,12,0,0,0,9,0,0,0, - 67,0,0,0,115,178,1,0,0,124,0,97,0,116,0,106, - 1,97,1,116,0,106,2,97,2,116,1,106,3,116,4,25, - 0,125,1,100,1,68,0,93,48,125,2,124,2,116,1,106, - 3,107,7,114,56,116,0,160,5,124,2,161,1,125,3,110, - 10,116,1,106,3,124,2,25,0,125,3,116,6,124,1,124, - 2,124,3,131,3,1,0,113,30,100,2,100,3,103,1,102, - 2,100,4,100,5,100,3,103,2,102,2,102,2,125,4,124, - 4,68,0,93,110,92,2,125,5,125,6,116,7,100,6,100, - 7,132,0,124,6,68,0,131,1,131,1,115,136,116,8,130, - 1,124,6,100,8,25,0,125,7,124,5,116,1,106,3,107, - 6,114,170,116,1,106,3,124,5,25,0,125,8,1,0,113, - 226,113,106,122,20,116,0,160,5,124,5,161,1,125,8,87, - 0,1,0,113,226,87,0,113,106,4,0,116,9,107,10,114, - 214,1,0,1,0,1,0,89,0,113,106,89,0,113,106,88, - 0,113,106,116,9,100,9,131,1,130,1,116,6,124,1,100, - 10,124,8,131,3,1,0,116,6,124,1,100,11,124,7,131, - 3,1,0,116,6,124,1,100,12,100,13,160,10,124,6,161, - 1,131,3,1,0,116,6,124,1,100,14,100,15,100,16,132, - 0,124,6,68,0,131,1,131,3,1,0,116,0,160,5,100, - 17,161,1,125,9,116,6,124,1,100,17,124,9,131,3,1, - 0,116,0,160,5,100,18,161,1,125,10,116,6,124,1,100, - 18,124,10,131,3,1,0,124,5,100,4,107,2,144,1,114, - 110,116,0,160,5,100,19,161,1,125,11,116,6,124,1,100, - 20,124,11,131,3,1,0,116,6,124,1,100,21,116,11,131, - 0,131,3,1,0,116,12,160,13,116,2,160,14,161,0,161, - 1,1,0,124,5,100,4,107,2,144,1,114,174,116,15,160, - 16,100,22,161,1,1,0,100,23,116,12,107,6,144,1,114, - 174,100,24,116,17,95,18,100,25,83,0,41,26,122,205,83, - 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, - 114,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,10, - 32,32,32,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, - 110,103,32,116,104,101,109,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,79,116,104,101,114,32,99,111, - 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, - 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, - 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,41,4,114,64, - 0,0,0,114,75,0,0,0,218,8,98,117,105,108,116,105, - 110,115,114,160,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,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, - 0,115,26,0,0,0,124,0,93,18,125,1,116,0,124,1, - 131,1,100,0,107,2,86,0,1,0,113,2,100,1,83,0, - 41,2,114,39,0,0,0,78,41,1,114,22,0,0,0,41, - 2,114,32,0,0,0,114,95,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,86, - 6,0,0,115,4,0,0,0,4,0,2,0,122,25,95,115, - 101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,114,73,0,0,0,122,30,105,109, - 112,111,114,116,108,105,98,32,114,101,113,117,105,114,101,115, - 32,112,111,115,105,120,32,111,114,32,110,116,114,2,0,0, - 0,114,35,0,0,0,114,31,0,0,0,114,40,0,0,0, - 114,58,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,83,0,0,0,115,22, - 0,0,0,104,0,124,0,93,14,125,1,100,0,124,1,155, - 0,157,2,146,2,113,4,83,0,41,1,114,74,0,0,0, - 114,3,0,0,0,41,2,114,32,0,0,0,218,1,115,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,88, - 1,0,0,102,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,192,0,0,0,114,7,0,0,0, - 122,4,46,112,121,119,122,6,95,100,46,112,121,100,84,78, - 41,19,114,134,0,0,0,114,8,0,0,0,114,163,0,0, - 0,114,31,1,0,0,114,125,0,0,0,90,18,95,98,117, - 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, - 129,0,0,0,218,3,97,108,108,114,23,0,0,0,114,118, - 0,0,0,114,36,0,0,0,114,13,0,0,0,114,21,1, - 0,0,114,167,0,0,0,114,99,1,0,0,114,102,0,0, - 0,114,186,0,0,0,114,191,0,0,0,114,195,0,0,0, - 41,12,218,17,95,98,111,111,116,115,116,114,97,112,95,109, - 111,100,117,108,101,90,11,115,101,108,102,95,109,111,100,117, - 108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, - 90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, - 90,10,111,115,95,100,101,116,97,105,108,115,90,10,98,117, - 105,108,116,105,110,95,111,115,114,31,0,0,0,114,35,0, - 0,0,90,9,111,115,95,109,111,100,117,108,101,90,13,116, - 104,114,101,97,100,95,109,111,100,117,108,101,90,14,119,101, - 97,107,114,101,102,95,109,111,100,117,108,101,90,13,119,105, - 110,114,101,103,95,109,111,100,117,108,101,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,6,95,115,101,116, - 117,112,61,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,106,1,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,67,0,0,0,115,50,0,0,0,116,0,124,0, - 131,1,1,0,116,1,131,0,125,1,116,2,106,3,160,4, - 116,5,106,6,124,1,142,0,103,1,161,1,1,0,116,2, - 106,7,160,8,116,9,161,1,1,0,100,1,83,0,41,2, - 122,41,73,110,115,116,97,108,108,32,116,104,101,32,112,97, - 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,32, - 99,111,109,112,111,110,101,110,116,115,46,78,41,10,114,106, - 1,0,0,114,184,0,0,0,114,8,0,0,0,114,51,1, - 0,0,114,167,0,0,0,114,79,1,0,0,114,94,1,0, - 0,218,9,109,101,116,97,95,112,97,116,104,114,186,0,0, - 0,114,45,1,0,0,41,2,114,105,1,0,0,90,17,115, - 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, - 8,95,105,110,115,116,97,108,108,126,6,0,0,115,8,0, - 0,0,0,2,8,1,6,1,20,1,114,108,1,0,0,41, - 63,114,127,0,0,0,114,12,0,0,0,90,37,95,67,65, - 83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80, - 76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,75, - 69,89,114,11,0,0,0,114,13,0,0,0,114,20,0,0, - 0,114,27,0,0,0,114,29,0,0,0,114,38,0,0,0, - 114,47,0,0,0,114,49,0,0,0,114,53,0,0,0,114, - 54,0,0,0,114,56,0,0,0,114,59,0,0,0,114,69, - 0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,100, - 101,95,95,114,162,0,0,0,114,18,0,0,0,114,148,0, - 0,0,114,17,0,0,0,114,24,0,0,0,114,236,0,0, - 0,114,92,0,0,0,114,88,0,0,0,114,102,0,0,0, - 114,89,0,0,0,90,23,68,69,66,85,71,95,66,89,84, - 69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,27, - 79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,114,98,0,0,0, - 114,103,0,0,0,114,109,0,0,0,114,113,0,0,0,114, - 115,0,0,0,114,136,0,0,0,114,143,0,0,0,114,152, - 0,0,0,114,156,0,0,0,114,158,0,0,0,114,165,0, - 0,0,114,170,0,0,0,114,171,0,0,0,114,176,0,0, - 0,218,6,111,98,106,101,99,116,114,185,0,0,0,114,190, - 0,0,0,114,191,0,0,0,114,208,0,0,0,114,221,0, - 0,0,114,239,0,0,0,114,8,1,0,0,114,14,1,0, - 0,114,21,1,0,0,114,15,1,0,0,114,22,1,0,0, - 114,43,1,0,0,114,45,1,0,0,114,79,1,0,0,114, - 98,1,0,0,114,184,0,0,0,114,106,1,0,0,114,108, - 1,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,8,60,109,111,100,117,108,101, - 62,1,0,0,0,115,126,0,0,0,4,22,4,1,4,1, - 2,1,2,255,4,4,8,17,8,5,8,5,8,6,8,6, - 8,12,8,10,8,9,8,5,8,7,8,9,12,22,10,127, - 0,8,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,63,14,42,14,127,0,58,14,127, - 0,22,12,23,8,11,8,65, + 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, + 115,126,0,0,0,4,22,4,1,4,1,2,1,2,255,4, + 4,8,17,8,5,8,5,8,6,8,6,8,12,8,10,8, + 9,8,5,8,7,8,9,12,22,10,127,0,8,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,63,14,42,14,127,0,59,14,127,0,22,12,23,8, + 11,8,65, }; From ccbccced0c6d49383ae793f405ff4790e79a1aa6 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 24 May 2019 16:45:24 -0400 Subject: [PATCH 23/23] Refresh from importlib_metadata@cpython (0.15) --- Doc/library/importlib.metadata.rst | 2 +- Lib/importlib/metadata/__init__.py | 28 ++++-------- Lib/test/test_importlib/fixtures.py | 45 +++++++++++--------- Lib/test/test_importlib/test_main.py | 7 +-- Lib/test/test_importlib/test_metadata_api.py | 17 +++++--- Lib/test/test_importlib/test_zip.py | 1 - Python.framework/Resources | 1 + 7 files changed, 51 insertions(+), 50 deletions(-) create mode 120000 Python.framework/Resources diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst index 416d8b6f707fc3..3d10b5aeabfdc0 100644 --- a/Doc/library/importlib.metadata.rst +++ b/Doc/library/importlib.metadata.rst @@ -221,7 +221,7 @@ interface expected of finders by Python's import system. an iterator over instances of the ``Distribution`` abstract class. This method must have the signature:: - def find_distributions(name=None, path=sys.path): + def find_distributions(name=None, path=None): """Return an iterable of all Distribution instances capable of loading the metadata for packages matching the name (or all names if not supplied) along the paths in the list diff --git a/Lib/importlib/metadata/__init__.py b/Lib/importlib/metadata/__init__.py index 9a4ba6171cc879..24d45d2caad0ad 100644 --- a/Lib/importlib/metadata/__init__.py +++ b/Lib/importlib/metadata/__init__.py @@ -35,7 +35,12 @@ class PackageNotFoundError(ModuleNotFoundError): class EntryPoint(collections.namedtuple('EntryPointBase', 'name value group')): - """An entry point as defined by Python packaging conventions.""" + """An entry point as defined by Python packaging conventions. + + See `the packaging docs on entry points + `_ + for more information. + """ pattern = re.compile( r'(?P[\w.]+)\s*' @@ -178,15 +183,6 @@ def _discover_resolvers(): ) return filter(None, declared) - @classmethod - def find_local(cls): - dists = itertools.chain.from_iterable( - resolver(path=['.']) - for resolver in cls._discover_resolvers() - ) - dist, = dists - return dist - @property def metadata(self): """Return the parsed metadata for this Distribution. @@ -309,8 +305,10 @@ class DistributionFinder(MetaPathFinder): @abc.abstractmethod def find_distributions(self, name=None, path=None): """ + Find distributions. + Return an iterable of all Distribution instances capable of - loading the metadata for packages matching the name + loading the metadata for packages matching the ``name`` (or all names if not supplied) along the paths in the list of directories ``path`` (defaults to sys.path). """ @@ -347,14 +345,6 @@ def distributions(): return Distribution.discover() -def local_distribution(): - """Get the ``Distribution`` instance for the package in CWD. - - :return: A ``Distribution`` instance (or subclass thereof). - """ - return Distribution.find_local() - - def metadata(package): """Get the metadata for the package. diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py index 00fcffa9d92d98..3b926ba26df779 100644 --- a/Lib/test/test_importlib/fixtures.py +++ b/Lib/test/test_importlib/fixtures.py @@ -48,23 +48,28 @@ def tempdir_as_cwd(): class SiteDir: + def setUp(self): + self.fixtures = ExitStack() + self.addCleanup(self.fixtures.close) + self.site_dir = self.fixtures.enter_context(tempdir()) + + +class OnSysPath: @staticmethod @contextlib.contextmanager - def site_dir(): - with tempdir() as tmp: - sys.path[:0] = [str(tmp)] - try: - yield tmp - finally: - sys.path.remove(str(tmp)) + def add_sys_path(dir): + sys.path[:0] = [str(dir)] + try: + yield + finally: + sys.path.remove(str(dir)) def setUp(self): - self.fixtures = ExitStack() - self.addCleanup(self.fixtures.close) - self.site_dir = self.fixtures.enter_context(self.site_dir()) + super(OnSysPath, self).setUp() + self.fixtures.enter_context(self.add_sys_path(self.site_dir)) -class DistInfoPkg(SiteDir): +class DistInfoPkg(OnSysPath, SiteDir): files = { "distinfo_pkg-1.0.0.dist-info": { "METADATA": """ @@ -91,7 +96,13 @@ def setUp(self): build_files(DistInfoPkg.files, self.site_dir) -class EggInfoPkg(SiteDir): +class DistInfoPkgOffPath(SiteDir): + def setUp(self): + super(DistInfoPkgOffPath, self).setUp() + build_files(DistInfoPkg.files, self.site_dir) + + +class EggInfoPkg(OnSysPath, SiteDir): files = { "egginfo_pkg.egg-info": { "PKG-INFO": """ @@ -128,7 +139,7 @@ def setUp(self): build_files(EggInfoPkg.files, prefix=self.site_dir) -class EggInfoFile(SiteDir): +class EggInfoFile(OnSysPath, SiteDir): files = { "egginfo_file.egg-info": """ Metadata-Version: 1.0 @@ -149,14 +160,6 @@ def setUp(self): build_files(EggInfoFile.files, prefix=self.site_dir) -class LocalPackage: - def setUp(self): - self.fixtures = ExitStack() - self.addCleanup(self.fixtures.close) - self.fixtures.enter_context(tempdir_as_cwd()) - build_files(EggInfoPkg.files) - - def build_files(file_defs, prefix=pathlib.Path()): """Build a set of files/directories, as described by the diff --git a/Lib/test/test_importlib/test_main.py b/Lib/test/test_importlib/test_main.py index bb5c6760f55574..b70f9440f6973a 100644 --- a/Lib/test/test_importlib/test_main.py +++ b/Lib/test/test_importlib/test_main.py @@ -50,7 +50,8 @@ def test_resolve_without_attr(self): assert ep.load() is importlib.metadata -class NameNormalizationTests(fixtures.SiteDir, unittest.TestCase): +class NameNormalizationTests( + fixtures.OnSysPath, fixtures.SiteDir, unittest.TestCase): @staticmethod def pkg_with_dashes(site_dir): """ @@ -95,7 +96,7 @@ def test_dist_name_found_as_any_case(self): assert version(pkg_name.upper()) == '1.0' -class NonASCIITests(fixtures.SiteDir, unittest.TestCase): +class NonASCIITests(fixtures.OnSysPath, fixtures.SiteDir, unittest.TestCase): @staticmethod def pkg_with_non_ascii_description(site_dir): """ @@ -146,7 +147,7 @@ def test_package_discovery(self): assert all( isinstance(dist, Distribution) for dist in dists - ), dists + ) assert any( dist.metadata['Name'] == 'egginfo-pkg' for dist in dists diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 36c812da752dd0..899777f4b1ad01 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -1,13 +1,14 @@ import re import textwrap import unittest +import itertools from collections.abc import Iterator from . import fixtures from importlib.metadata import ( Distribution, PackageNotFoundError, distribution, - entry_points, files, local_distribution, metadata, requires, version, + entry_points, files, metadata, requires, version, ) @@ -138,7 +139,13 @@ def test_more_complex_deps_requires_text(self): assert deps == expected -class LocalProjectTests(fixtures.LocalPackage, unittest.TestCase): - def test_find_local(self): - dist = local_distribution() - assert dist.metadata['Name'] == 'egginfo-pkg' +class OffSysPathTests(fixtures.DistInfoPkgOffPath, unittest.TestCase): + def test_find_distributions_specified_path(self): + dists = itertools.chain.from_iterable( + resolver(path=[str(self.site_dir)]) + for resolver in Distribution._discover_resolvers() + ) + assert any( + dist.metadata['Name'] == 'distinfo-pkg' + for dist in dists + ) diff --git a/Lib/test/test_importlib/test_zip.py b/Lib/test/test_importlib/test_zip.py index 22da01630810c8..db39e190ea7ac9 100644 --- a/Lib/test/test_importlib/test_zip.py +++ b/Lib/test/test_importlib/test_zip.py @@ -48,7 +48,6 @@ def setUp(self): egg = self.resources.enter_context( path(self.root, 'example-21.12-py3.6.egg')) sys.path.insert(0, str(egg)) - print('***', sys.path) self.resources.callback(sys.path.pop, 0) def test_files(self): diff --git a/Python.framework/Resources b/Python.framework/Resources new file mode 120000 index 00000000000000..953ee36f3bb709 --- /dev/null +++ b/Python.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file