From 1bbf7b661f0ac8aac12d5531928d9a85c98ec1a9 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 24 May 2019 19:59:01 -0400 Subject: bpo-34632: Add importlib.metadata (GH-12547) Add importlib.metadata module as forward port of the standalone importlib_metadata. --- Doc/library/importlib.metadata.rst | 257 ++++ Doc/library/modules.rst | 1 + Doc/tools/susp-ignored.csv | 3 + Lib/importlib/_bootstrap_external.py | 52 + Lib/importlib/metadata/__init__.py | 394 ++++++ Lib/test/test_importlib/data/__init__.py | 0 .../data/example-21.12-py3-none-any.whl | Bin 0 -> 1453 bytes .../test_importlib/data/example-21.12-py3.6.egg | Bin 0 -> 1492 bytes Lib/test/test_importlib/fixtures.py | 199 +++ Lib/test/test_importlib/test_main.py | 158 +++ Lib/test/test_importlib/test_metadata_api.py | 151 +++ Lib/test/test_importlib/test_zip.py | 56 + .../2019-05-11-02-30-45.bpo-34632.8MXa7T.rst | 1 + Python.framework/Resources | 1 + Python/importlib_external.h | 1413 +++++++++++--------- 15 files changed, 2048 insertions(+), 638 deletions(-) create mode 100644 Doc/library/importlib.metadata.rst create mode 100644 Lib/importlib/metadata/__init__.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/data/example-21.12-py3.6.egg 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 create mode 100644 Misc/NEWS.d/next/Library/2019-05-11-02-30-45.bpo-34632.8MXa7T.rst create mode 120000 Python.framework/Resources diff --git a/Doc/library/importlib.metadata.rst b/Doc/library/importlib.metadata.rst new file mode 100644 index 0000000..3d10b5a --- /dev/null +++ b/Doc/library/importlib.metadata.rst @@ -0,0 +1,257 @@ +.. _using: + +========================== + 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 +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 zip archives 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:: + +.. highlight:: none + + $ python3 -m venv example + $ source example/bin/activate + (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 # doctest: +SKIP + >>> version('wheel') # doctest: +SKIP + '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')) # 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 +:ref:`constituent files `, and get a list of the distribution's +:ref:`requirements`. + + +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() # doctest: +SKIP + >>> list(eps) # doctest: +SKIP + ['console_scripts', 'distutils.commands', 'distutils.setup_keywords', 'egg_info.writers', 'setuptools.installation'] + >>> 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() # doctest: +SKIP + >>> main # doctest: +SKIP + + +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') # 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'] # doctest: +SKIP + '>=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') # doctest: +SKIP + '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] # doctest: +SKIP + >>> util # doctest: +SKIP + PackagePath('wheel/util.py') + >>> util.size # doctest: +SKIP + 859 + >>> util.dist # doctest: +SKIP + + >>> util.hash # doctest: +SKIP + + +Once you have the file, you can also read its contents:: + + >>> print(util.read_text()) # doctest: +SKIP + 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')) # doctest: +SKIP + ["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 # doctest: +SKIP + >>> dist = distribution('wheel') # doctest: +SKIP + +Thus, an alternative way to get the version number is through the +``Distribution`` instance:: + + >>> dist.version # doctest: +SKIP + '0.32.3' + +There are all kinds of additional metadata available on the ``Distribution`` +instance:: + + >>> d.metadata['Requires-Python'] # doctest: +SKIP + '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*' + >>> d.metadata['License'] # doctest: +SKIP + 'MIT' + +The full set of available metadata is not described here. See `PEP 566 +`_ for additional details. + + +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=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). + """ + +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/Doc/library/modules.rst b/Doc/library/modules.rst index 6b2a40a..565ce05 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 diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 31b2266..85ff9d0 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). diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 7da0cd0..9b5db81 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1363,6 +1363,58 @@ class PathFinder: return None return spec.loader + search_template = r'(?:{pattern}(-.*)?\.(dist|egg)-info|EGG-INFO)' + + @classmethod + def find_distributions(cls, name=None, path=None): + """ + 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). + """ + import re + from importlib.metadata 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/__init__.py b/Lib/importlib/metadata/__init__.py new file mode 100644 index 0000000..24d45d2 --- /dev/null +++ b/Lib/importlib/metadata/__init__.py @@ -0,0 +1,394 @@ +import io +import re +import abc +import csv +import sys +import email +import pathlib +import operator +import functools +import itertools +import collections + +from configparser import ConfigParser +from contextlib import suppress +from importlib import import_module +from importlib.abc import MetaPathFinder +from itertools import starmap + + +__all__ = [ + 'Distribution', + 'PackageNotFoundError', + 'distribution', + 'distributions', + 'entry_points', + 'files', + 'metadata', + '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. + + See `the packaging docs on entry points + `_ + for more information. + """ + + 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) + + @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): + """ + 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). + """ + + +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 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/data/__init__.py b/Lib/test/test_importlib/data/__init__.py new file mode 100644 index 0000000..e69de29 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 0000000..f92f771 Binary files /dev/null and b/Lib/test/test_importlib/data/example-21.12-py3-none-any.whl differ 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 0000000..1d3f998 Binary files /dev/null and b/Lib/test/test_importlib/data/example-21.12-py3.6.egg differ diff --git a/Lib/test/test_importlib/fixtures.py b/Lib/test/test_importlib/fixtures.py new file mode 100644 index 0000000..3b926ba --- /dev/null +++ b/Lib/test/test_importlib/fixtures.py @@ -0,0 +1,199 @@ +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() + try: + yield pathlib.Path(tmpdir) + finally: + 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: + 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 add_sys_path(dir): + sys.path[:0] = [str(dir)] + try: + yield + finally: + sys.path.remove(str(dir)) + + def setUp(self): + super(OnSysPath, self).setUp() + self.fixtures.enter_context(self.add_sys_path(self.site_dir)) + + +class DistInfoPkg(OnSysPath, 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 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": """ + 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 EggInfoFile(OnSysPath, 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) + + +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 0000000..b70f944 --- /dev/null +++ b/Lib/test/test_importlib/test_main.py @@ -0,0 +1,158 @@ +# coding: utf-8 + +import re +import textwrap +import unittest +import importlib.metadata + +from . import fixtures +from importlib.metadata import ( + Distribution, EntryPoint, + PackageNotFoundError, 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 = 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(PackageNotFoundError): + Distribution.from_name('does-not-exist') + + def test_new_style_classes(self): + self.assertIsInstance(Distribution, 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(entry_points()['entries']) + ep = entries['main'] + self.assertEqual(ep.load().__name__, "main") + + def test_resolve_without_attr(self): + ep = EntryPoint( + name='ep', + value='importlib.metadata', + group='grp', + ) + assert ep.load() is importlib.metadata + + +class NameNormalizationTests( + fixtures.OnSysPath, 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 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 version(pkg_name) == '1.0' + assert version(pkg_name.lower()) == '1.0' + assert version(pkg_name.upper()) == '1.0' + + +class NonASCIITests(fixtures.OnSysPath, 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 = 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 = 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(distributions()) + assert all( + isinstance(dist, 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 0000000..899777f --- /dev/null +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -0,0 +1,151 @@ +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, metadata, requires, version, + ) + + +class APITests( + fixtures.EggInfoPkg, + fixtures.DistInfoPkg, + fixtures.EggInfoFile, + unittest.TestCase): + + version_pattern = r'\d+\.\d+(\.\d)?' + + def test_retrieves_version_of_self(self): + pkg_version = version('egginfo-pkg') + assert isinstance(pkg_version, str) + assert re.match(self.version_pattern, pkg_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(PackageNotFoundError): + distribution('does-not-exist') + + def test_for_top_level(self): + self.assertEqual( + distribution('egginfo-pkg').read_text('top_level.txt').strip(), + 'mod') + + def test_read_text(self): + top_level = [ + 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): + 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 = 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 files('distinfo-pkg') + if p.name == 'mod.py' + ][0] + assertRegex( + repr(util.hash), + '') + + def test_files_dist_info(self): + self._test_files(files('distinfo-pkg')) + + def test_files_egg_info(self): + self._test_files(files('egginfo-pkg')) + + def test_version_egg_info_file(self): + self.assertEqual(version('egginfo-file'), '0.1') + + def test_requires_egg_info_file(self): + requirements = requires('egginfo-file') + self.assertIsNone(requirements) + + def test_requires(self): + 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(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(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 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 new file mode 100644 index 0000000..db39e19 --- /dev/null +++ b/Lib/test/test_importlib/test_zip.py @@ -0,0 +1,56 @@ +import sys +import unittest + +from contextlib import ExitStack +from importlib.metadata import distribution, entry_points, files, version +from importlib.resources import path + + +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(self.root, '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(version('example'), '21.12') + + def test_zip_entry_points(self): + scripts = dict(entry_points()['console_scripts']) + entry_point = scripts['example'] + self.assertEqual(entry_point.value, 'example:main') + + def test_missing_metadata(self): + self.assertIsNone(distribution('example').read_text('does not exist')) + + def test_case_insensitive(self): + self.assertEqual(version('Example'), '21.12') + + 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(self.root, '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 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 0000000..ab44338 --- /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 diff --git a/Python.framework/Resources b/Python.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/Python.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 36b95d9..e724560 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -2051,650 +2051,787 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 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,3, + 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,213,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,223,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, + 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,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,3,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,236,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,2, - 5,0,0,115,18,0,0,0,0,4,10,1,16,2,10,1, - 4,1,8,1,12,1,12,1,6,1,122,27,80,97,116,104, - 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, - 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, - 0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0, - 0,115,166,0,0,0,103,0,125,4,124,2,68,0,93,134, - 125,5,116,0,124,5,116,1,116,2,102,2,131,2,115,28, - 113,8,124,0,160,3,124,5,161,1,125,6,124,6,100,1, - 107,9,114,8,116,4,124,6,100,2,131,2,114,70,124,6, - 160,5,124,1,124,3,161,2,125,7,110,12,124,0,160,6, - 124,1,124,6,161,2,125,7,124,7,100,1,107,8,114,92, - 113,8,124,7,106,7,100,1,107,9,114,110,124,7,2,0, - 1,0,83,0,124,7,106,8,125,8,124,8,100,1,107,8, - 114,132,116,9,100,3,131,1,130,1,124,4,160,10,124,8, - 161,1,1,0,113,8,116,11,160,12,124,1,100,1,161,2, - 125,7,124,4,124,7,95,8,124,7,83,0,41,4,122,63, - 70,105,110,100,32,116,104,101,32,108,111,97,100,101,114,32, - 111,114,32,110,97,109,101,115,112,97,99,101,95,112,97,116, - 104,32,102,111,114,32,116,104,105,115,32,109,111,100,117,108, - 101,47,112,97,99,107,97,103,101,32,110,97,109,101,46,78, - 114,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,17,5,0,0,115,40,0,0,0,0,5, - 4,1,8,1,14,1,2,1,10,1,8,1,10,1,14,2, - 12,1,8,1,2,1,10,1,8,1,6,1,8,1,8,5, - 12,2,12,1,6,1,122,20,80,97,116,104,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,99,4,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0, - 0,67,0,0,0,115,100,0,0,0,124,2,100,1,107,8, - 114,14,116,0,106,1,125,2,124,0,160,2,124,1,124,2, - 124,3,161,3,125,4,124,4,100,1,107,8,114,40,100,1, - 83,0,124,4,106,3,100,1,107,8,114,92,124,4,106,4, - 125,5,124,5,114,86,100,1,124,4,95,5,116,6,124,1, - 124,5,124,0,106,2,131,3,124,4,95,4,124,4,83,0, - 100,1,83,0,110,4,124,4,83,0,100,1,83,0,41,2, - 122,141,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,39,102,117,108,108,110,97, - 109,101,39,32,111,110,32,115,121,115,46,112,97,116,104,32, - 111,114,32,39,112,97,116,104,39,46,10,10,32,32,32,32, - 32,32,32,32,84,104,101,32,115,101,97,114,99,104,32,105, - 115,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,97,110,100,32,115,121, - 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,46,10,32,32,32,32,32,32,32,32,78, - 41,7,114,8,0,0,0,114,44,0,0,0,114,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,49,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, + 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,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,73,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,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,209,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,102,5, - 0,0,115,4,0,0,0,4,0,2,0,122,38,70,105,108, + 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,213,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, + 223,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, + 3,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,236,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,2,5,0,0,115,18,0,0,0,0,4,10,1,16,2, + 10,1,4,1,8,1,12,1,12,1,6,1,122,27,80,97, + 116,104,70,105,110,100,101,114,46,95,108,101,103,97,99,121, + 95,103,101,116,95,115,112,101,99,78,99,4,0,0,0,0, + 0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,67, + 0,0,0,115,166,0,0,0,103,0,125,4,124,2,68,0, + 93,134,125,5,116,0,124,5,116,1,116,2,102,2,131,2, + 115,28,113,8,124,0,160,3,124,5,161,1,125,6,124,6, + 100,1,107,9,114,8,116,4,124,6,100,2,131,2,114,70, + 124,6,160,5,124,1,124,3,161,2,125,7,110,12,124,0, + 160,6,124,1,124,6,161,2,125,7,124,7,100,1,107,8, + 114,92,113,8,124,7,106,7,100,1,107,9,114,110,124,7, + 2,0,1,0,83,0,124,7,106,8,125,8,124,8,100,1, + 107,8,114,132,116,9,100,3,131,1,130,1,124,4,160,10, + 124,8,161,1,1,0,113,8,116,11,160,12,124,1,100,1, + 161,2,125,7,124,4,124,7,95,8,124,7,83,0,41,4, + 122,63,70,105,110,100,32,116,104,101,32,108,111,97,100,101, + 114,32,111,114,32,110,97,109,101,115,112,97,99,101,95,112, + 97,116,104,32,102,111,114,32,116,104,105,115,32,109,111,100, + 117,108,101,47,112,97,99,107,97,103,101,32,110,97,109,101, + 46,78,114,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,17,5,0,0,115,40,0,0,0, + 0,5,4,1,8,1,14,1,2,1,10,1,8,1,10,1, + 14,2,12,1,8,1,2,1,10,1,8,1,6,1,8,1, + 8,5,12,2,12,1,6,1,122,20,80,97,116,104,70,105, + 110,100,101,114,46,95,103,101,116,95,115,112,101,99,99,4, + 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5, + 0,0,0,67,0,0,0,115,100,0,0,0,124,2,100,1, + 107,8,114,14,116,0,106,1,125,2,124,0,160,2,124,1, + 124,2,124,3,161,3,125,4,124,4,100,1,107,8,114,40, + 100,1,83,0,124,4,106,3,100,1,107,8,114,92,124,4, + 106,4,125,5,124,5,114,86,100,1,124,4,95,5,116,6, + 124,1,124,5,124,0,106,2,131,3,124,4,95,4,124,4, + 83,0,100,1,83,0,110,4,124,4,83,0,100,1,83,0, + 41,2,122,141,84,114,121,32,116,111,32,102,105,110,100,32, + 97,32,115,112,101,99,32,102,111,114,32,39,102,117,108,108, + 110,97,109,101,39,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,101,97,114,99,104, + 32,105,115,32,98,97,115,101,100,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,32,32,32,32,32,32,32, + 32,78,41,7,114,8,0,0,0,114,44,0,0,0,114,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,49,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,73,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,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,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,88,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,110,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,106,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,115,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,124,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,135,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,129,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,209,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,154,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,148,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, - 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,96,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,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,46,1,0,0,110,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, + 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,162,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,168,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,180,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,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, + 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, + 10,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,185,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,6,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,7, + 1,0,0,114,55,0,0,0,114,3,1,0,0,218,15,80, + 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, + 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, + 111,114,114,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,8,1,0,0,90,21,108,111,119,101, + 114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,116, + 115,114,41,1,0,0,114,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,233,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,18,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,8, + 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,137,0,0,0,116,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, - 128,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,10,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,133,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,210,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,7,1,0,0,114,55,0,0,0,114,3,1,0, - 0,218,15,80,101,114,109,105,115,115,105,111,110,69,114,114, - 111,114,218,18,78,111,116,65,68,105,114,101,99,116,111,114, - 121,69,114,114,111,114,114,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,8,1,0,0,90,21, - 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, - 116,101,110,116,115,114,41,1,0,0,114,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,181,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,222,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,212,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,230,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,87,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,15,1,0,0,114,9,1,0, - 0,114,190,0,0,0,218,9,69,120,99,101,112,116,105,111, - 110,41,6,90,2,110,115,114,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,236,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,252,0,0,0,114,163,0,0,0,218,18,101, - 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, - 115,114,9,1,0,0,114,102,0,0,0,114,15,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,3,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,39,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,68,1,0,0,55,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,14,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,79,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,9,1,0,0, - 114,15,1,0,0,114,21,1,0,0,114,252,0,0,0,114, - 22,1,0,0,114,43,1,0,0,114,45,1,0,0,114,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,72,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, + 0,114,39,1,0,0,26,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,139, + 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,15,1,0,0,114,9,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, + 32,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,252,0,0,0,114,163, + 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, + 117,102,102,105,120,101,115,114,9,1,0,0,114,102,0,0, + 0,114,15,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,55, + 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,91,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,107,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,66,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,131,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,9,1,0,0,114,15,1,0,0,114,21,1,0,0, + 114,252,0,0,0,114,22,1,0,0,114,43,1,0,0,114, + 45,1,0,0,114,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,72,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, }; -- cgit v0.12