Issue #15767: Use ModuleNotFoundError.

This commit is contained in:
Eric Snow 2016-09-07 16:56:15 -07:00
parent c943265ba5
commit 46f97b85a8
16 changed files with 337 additions and 284 deletions

View file

@ -306,6 +306,13 @@ an error value).
:mod:`warnings` module and the :option:`-W` option in the command line :mod:`warnings` module and the :option:`-W` option in the command line
documentation. There is no C API for warning control. documentation. There is no C API for warning control.
.. c:function:: PyObject* PyErr_SetImportErrorSubclass(PyObject *msg, PyObject *name, PyObject *path)
Much like :c:func:`PyErr_SetImportError` but this function allows for
specifying a subclass of :exc:`ImportError` to raise.
.. versionadded:: 3.4
.. c:function:: int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry) .. c:function:: int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry)

View file

@ -36,7 +36,7 @@ implement import semantics.
When a module is first imported, Python searches for the module and if found, When a module is first imported, Python searches for the module and if found,
it creates a module object [#fnmo]_, initializing it. If the named module it creates a module object [#fnmo]_, initializing it. If the named module
cannot be found, an :exc:`ImportError` is raised. Python implements various cannot be found, an :exc:`ModuleNotFoundError` is raised. Python implements various
strategies to search for the named module when the import machinery is strategies to search for the named module when the import machinery is
invoked. These strategies can be modified and extended by using various hooks invoked. These strategies can be modified and extended by using various hooks
described in the sections below. described in the sections below.
@ -167,7 +167,7 @@ arguments to the :keyword:`import` statement, or from the parameters to the
This name will be used in various phases of the import search, and it may be This name will be used in various phases of the import search, and it may be
the dotted path to a submodule, e.g. ``foo.bar.baz``. In this case, Python the dotted path to a submodule, e.g. ``foo.bar.baz``. In this case, Python
first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``. first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``.
If any of the intermediate imports fail, an :exc:`ImportError` is raised. If any of the intermediate imports fail, an :exc:`ModuleNotFoundError` is raised.
The module cache The module cache
@ -186,7 +186,7 @@ object.
During import, the module name is looked up in :data:`sys.modules` and if During import, the module name is looked up in :data:`sys.modules` and if
present, the associated value is the module satisfying the import, and the present, the associated value is the module satisfying the import, and the
process completes. However, if the value is ``None``, then an process completes. However, if the value is ``None``, then an
:exc:`ImportError` is raised. If the module name is missing, Python will :exc:`ModuleNotFoundError` is raised. If the module name is missing, Python will
continue searching for the module. continue searching for the module.
:data:`sys.modules` is writable. Deleting a key may not destroy the :data:`sys.modules` is writable. Deleting a key may not destroy the
@ -194,7 +194,7 @@ associated module (as other modules may hold references to it),
but it will invalidate the cache entry for the named module, causing but it will invalidate the cache entry for the named module, causing
Python to search anew for the named module upon its next Python to search anew for the named module upon its next
import. The key can also be assigned to ``None``, forcing the next import import. The key can also be assigned to ``None``, forcing the next import
of the module to result in an :exc:`ImportError`. of the module to result in an :exc:`ModuleNotFoundError`.
Beware though, as if you keep a reference to the module object, Beware though, as if you keep a reference to the module object,
invalidate its cache entry in :data:`sys.modules`, and then re-import the invalidate its cache entry in :data:`sys.modules`, and then re-import the
@ -288,8 +288,8 @@ the named module or not.
If the meta path finder knows how to handle the named module, it returns a If the meta path finder knows how to handle the named module, it returns a
spec object. If it cannot handle the named module, it returns ``None``. If spec object. If it cannot handle the named module, it returns ``None``. If
:data:`sys.meta_path` processing reaches the end of its list without returning :data:`sys.meta_path` processing reaches the end of its list without returning
a spec, then an :exc:`ImportError` is raised. Any other exceptions raised a spec, then a :exc:`ModuleNotFoundError` is raised. Any other exceptions
are simply propagated up, aborting the import process. raised are simply propagated up, aborting the import process.
The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path
finders is called with two or three arguments. The first is the fully finders is called with two or three arguments. The first is the fully
@ -298,9 +298,9 @@ The second argument is the path entries to use for the module search. For
top-level modules, the second argument is ``None``, but for submodules or top-level modules, the second argument is ``None``, but for submodules or
subpackages, the second argument is the value of the parent package's subpackages, the second argument is the value of the parent package's
``__path__`` attribute. If the appropriate ``__path__`` attribute cannot ``__path__`` attribute. If the appropriate ``__path__`` attribute cannot
be accessed, an :exc:`ImportError` is raised. The third argument is an be accessed, an :exc:`ModuleNotFoundError` is raised. The third argument
existing module object that will be the target of loading later. The is an existing module object that will be the target of loading later.
import system passes in a target module only during reload. The import system passes in a target module only during reload.
The meta path may be traversed multiple times for a single import request. The meta path may be traversed multiple times for a single import request.
For example, assuming none of the modules involved has already been cached, For example, assuming none of the modules involved has already been cached,
@ -887,7 +887,7 @@ import statements within that module.
To selectively prevent import of some modules from a hook early on the To selectively prevent import of some modules from a hook early on the
meta path (rather than disabling the standard import system entirely), meta path (rather than disabling the standard import system entirely),
it is sufficient to raise :exc:`ImportError` directly from it is sufficient to raise :exc:`ModuleNoFoundError` directly from
:meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning :meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning
``None``. The latter indicates that the meta path search should continue, ``None``. The latter indicates that the meta path search should continue,
while raising an exception terminates it immediately. while raising an exception terminates it immediately.

View file

@ -350,6 +350,10 @@ Some smaller changes made to the core Python language are:
:ref:`py36-traceback` for an example). :ref:`py36-traceback` for an example).
(Contributed by Emanuel Barry in :issue:`26823`.) (Contributed by Emanuel Barry in :issue:`26823`.)
* Import now raises the new exception :exc:`ModuleNotFoundError`
(subclass of :exc:`ImportError`) when it cannot find a module. Code
that current checks for ImportError (in try-except) will still work.
New Modules New Modules
=========== ===========
@ -959,6 +963,9 @@ Changes in the Python API
* When :meth:`importlib.abc.Loader.exec_module` is defined, * When :meth:`importlib.abc.Loader.exec_module` is defined,
:meth:`importlib.abc.Loader.create_module` must also be defined. :meth:`importlib.abc.Loader.create_module` must also be defined.
* :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg**
argument is not set. Previously only ``NULL`` was returned.
* The format of the ``co_lnotab`` attribute of code objects changed to support * The format of the ``co_lnotab`` attribute of code objects changed to support
negative line number delta. By default, Python does not emit bytecode with negative line number delta. By default, Python does not emit bytecode with
negative line number delta. Functions using ``frame.f_lineno``, negative line number delta. Functions using ``frame.f_lineno``,

View file

@ -284,6 +284,9 @@ PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
PyAPI_FUNC(PyObject *) PyErr_SetExcWithArgsKwargs(PyObject *, PyObject *, PyAPI_FUNC(PyObject *) PyErr_SetExcWithArgsKwargs(PyObject *, PyObject *,
PyObject *); PyObject *);
PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *,
PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *, PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *,
PyObject *); PyObject *);

View file

@ -943,10 +943,10 @@ def _find_and_load_unlocked(name, import_):
path = parent_module.__path__ path = parent_module.__path__
except AttributeError: except AttributeError:
msg = (_ERR_MSG + '; {!r} is not a package').format(name, parent) msg = (_ERR_MSG + '; {!r} is not a package').format(name, parent)
raise ImportError(msg, name=name) from None raise ModuleNotFoundError(msg, name=name) from None
spec = _find_spec(name, path) spec = _find_spec(name, path)
if spec is None: if spec is None:
raise ImportError(_ERR_MSG.format(name), name=name) raise ModuleNotFoundError(_ERR_MSG.format(name), name=name)
else: else:
module = _load_unlocked(spec) module = _load_unlocked(spec)
if parent: if parent:
@ -982,10 +982,11 @@ def _gcd_import(name, package=None, level=0):
_imp.release_lock() _imp.release_lock()
message = ('import of {} halted; ' message = ('import of {} halted; '
'None in sys.modules'.format(name)) 'None in sys.modules'.format(name))
raise ImportError(message, name=name) raise ModuleNotFoundError(message, name=name)
_lock_unlock_module(name) _lock_unlock_module(name)
return module return module
def _handle_fromlist(module, fromlist, import_): def _handle_fromlist(module, fromlist, import_):
"""Figure out what __import__ should return. """Figure out what __import__ should return.
@ -1007,13 +1008,12 @@ def _handle_fromlist(module, fromlist, import_):
from_name = '{}.{}'.format(module.__name__, x) from_name = '{}.{}'.format(module.__name__, x)
try: try:
_call_with_frames_removed(import_, from_name) _call_with_frames_removed(import_, from_name)
except ImportError as exc: except ModuleNotFoundError as exc:
# Backwards-compatibility dictates we ignore failed # Backwards-compatibility dictates we ignore failed
# imports triggered by fromlist for modules that don't # imports triggered by fromlist for modules that don't
# exist. # exist.
if str(exc).startswith(_ERR_MSG_PREFIX): if exc.name == from_name:
if exc.name == from_name: continue
continue
raise raise
return module return module

View file

@ -350,7 +350,7 @@ def safeimport(path, forceload=0, cache={}):
elif exc is SyntaxError: elif exc is SyntaxError:
# A SyntaxError occurred before we could execute the module. # A SyntaxError occurred before we could execute the module.
raise ErrorDuringImport(value.filename, info) raise ErrorDuringImport(value.filename, info)
elif exc is ImportError and value.name == path: elif issubclass(exc, ImportError) and value.name == path:
# No such module in the path. # No such module in the path.
return None return None
else: else:

View file

@ -428,7 +428,7 @@ class CmdLineTest(unittest.TestCase):
('builtins.x', br'Error while finding module specification.*' ('builtins.x', br'Error while finding module specification.*'
br'AttributeError'), br'AttributeError'),
('builtins.x.y', br'Error while finding module specification.*' ('builtins.x.y', br'Error while finding module specification.*'
br'ImportError.*No module named.*not a package'), br'ModuleNotFoundError.*No module named.*not a package'),
('os.path', br'loader.*cannot handle'), ('os.path', br'loader.*cannot handle'),
('importlib', br'No module named.*' ('importlib', br'No module named.*'
br'is a package and cannot be directly executed'), br'is a package and cannot be directly executed'),

View file

@ -69,6 +69,18 @@ class ImportTests(unittest.TestCase):
def tearDown(self): def tearDown(self):
unload(TESTFN) unload(TESTFN)
def test_import_raises_ModuleNotFoundError(self):
with self.assertRaises(ModuleNotFoundError):
import something_that_should_not_exist_anywhere
def test_from_import_missing_module_raises_ModuleNotFoundError(self):
with self.assertRaises(ModuleNotFoundError):
from something_that_should_not_exist_anywhere import blah
def test_from_import_missing_attr_raises_ImportError(self):
with self.assertRaises(ImportError):
from importlib import something_that_should_not_exist_anywhere
def test_case_sensitivity(self): def test_case_sensitivity(self):
# Brief digression to test that import is case-sensitive: if we got # Brief digression to test that import is case-sensitive: if we got
# this far, we know for sure that "random" exists. # this far, we know for sure that "random" exists.

View file

@ -43,6 +43,10 @@ class APITest:
"""Test API-specific details for __import__ (e.g. raising the right """Test API-specific details for __import__ (e.g. raising the right
exception when passing in an int for the module name).""" exception when passing in an int for the module name)."""
def test_raises_ModuleNotFoundError(self):
with self.assertRaises(ModuleNotFoundError):
util.import_importlib('some module that does not exist')
def test_name_requires_rparition(self): def test_name_requires_rparition(self):
# Raise TypeError if a non-string is passed in for the module name. # Raise TypeError if a non-string is passed in for the module name.
with self.assertRaises(TypeError): with self.assertRaises(TypeError):

View file

@ -73,16 +73,16 @@ class HandlingFromlist:
self.assertTrue(hasattr(module, 'module')) self.assertTrue(hasattr(module, 'module'))
self.assertEqual(module.module.__name__, 'pkg.module') self.assertEqual(module.module.__name__, 'pkg.module')
def test_module_from_package_triggers_ImportError(self): def test_module_from_package_triggers_ModuleNotFoundError(self):
# If a submodule causes an ImportError because it tries to import # If a submodule causes an ModuleNotFoundError because it tries
# a module which doesn't exist, that should let the ImportError # to import a module which doesn't exist, that should let the
# propagate. # ModuleNotFoundError propagate.
def module_code(): def module_code():
import i_do_not_exist import i_do_not_exist
with util.mock_modules('pkg.__init__', 'pkg.mod', with util.mock_modules('pkg.__init__', 'pkg.mod',
module_code={'pkg.mod': module_code}) as importer: module_code={'pkg.mod': module_code}) as importer:
with util.import_state(meta_path=[importer]): with util.import_state(meta_path=[importer]):
with self.assertRaises(ImportError) as exc: with self.assertRaises(ModuleNotFoundError) as exc:
self.__import__('pkg', fromlist=['mod']) self.__import__('pkg', fromlist=['mod'])
self.assertEqual('i_do_not_exist', exc.exception.name) self.assertEqual('i_do_not_exist', exc.exception.name)

View file

@ -263,7 +263,7 @@ Use help() to get the interactive help utility.
Use help(str) for help on the str class.'''.replace('\n', os.linesep) Use help(str) for help on the str class.'''.replace('\n', os.linesep)
# output pattern for module with bad imports # output pattern for module with bad imports
badimport_pattern = "problem in %s - ImportError: No module named %r" badimport_pattern = "problem in %s - ModuleNotFoundError: No module named %r"
expected_dynamicattribute_pattern = """ expected_dynamicattribute_pattern = """
Help on class DA in module %s: Help on class DA in module %s:

View file

@ -138,7 +138,7 @@ class HelperFunctionsTests(unittest.TestCase):
re.escape(os.path.join(pth_dir, pth_fn))) re.escape(os.path.join(pth_dir, pth_fn)))
# XXX: ditto previous XXX comment. # XXX: ditto previous XXX comment.
self.assertRegex(err_out.getvalue(), 'Traceback') self.assertRegex(err_out.getvalue(), 'Traceback')
self.assertRegex(err_out.getvalue(), 'ImportError') self.assertRegex(err_out.getvalue(), 'ModuleNotFoundError')
@unittest.skipIf(sys.platform == "win32", "Windows does not raise an " @unittest.skipIf(sys.platform == "win32", "Windows does not raise an "
"error for file paths containing null characters") "error for file paths containing null characters")

View file

@ -9966,6 +9966,10 @@ C-API
PyImport_ExecCodeModuleWithPathnames() (and thus by extension PyImport_ExecCodeModuleWithPathnames() (and thus by extension
PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()). PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).
- Issue #15767: Added PyErr_SetImportErrorSubclass().
- PyErr_SetImportError() now sets TypeError when its msg argument is set.
- Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and - Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
PyObject_CallMethod() now changed to `const char*`. Based on patches by PyObject_CallMethod() now changed to `const char*`. Based on patches by
Jörg Müller and Lars Buitinck. Jörg Müller and Lars Buitinck.

View file

@ -697,27 +697,37 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename(
#endif /* MS_WINDOWS */ #endif /* MS_WINDOWS */
PyObject * PyObject *
PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path) PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg,
PyObject *name, PyObject *path)
{ {
int issubclass;
PyObject *kwargs, *error; PyObject *kwargs, *error;
if (msg == NULL) { issubclass = PyObject_IsSubclass(exception, PyExc_ImportError);
if (issubclass < 0) {
return NULL;
}
else if (!issubclass) {
PyErr_SetString(PyExc_TypeError, "expected a subclass of ImportError");
return NULL; return NULL;
} }
kwargs = PyDict_New(); if (msg == NULL) {
if (kwargs == NULL) { PyErr_SetString(PyExc_TypeError, "expected a message argument");
return NULL; return NULL;
} }
if (name == NULL) { if (name == NULL) {
name = Py_None; name = Py_None;
} }
if (path == NULL) { if (path == NULL) {
path = Py_None; path = Py_None;
} }
kwargs = PyDict_New();
if (kwargs == NULL) {
return NULL;
}
if (PyDict_SetItemString(kwargs, "name", name) < 0) { if (PyDict_SetItemString(kwargs, "name", name) < 0) {
goto done; goto done;
} }
@ -725,7 +735,7 @@ PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
goto done; goto done;
} }
error = _PyObject_FastCallDict(PyExc_ImportError, &msg, 1, kwargs); error = _PyObject_FastCallDict(exception, &msg, 1, kwargs);
if (error != NULL) { if (error != NULL) {
PyErr_SetObject((PyObject *)Py_TYPE(error), error); PyErr_SetObject((PyObject *)Py_TYPE(error), error);
Py_DECREF(error); Py_DECREF(error);
@ -736,6 +746,12 @@ done:
return NULL; return NULL;
} }
PyObject *
PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
{
return PyErr_SetImportErrorSubclass(PyExc_ImportError, msg, name, path);
}
void void
_PyErr_BadInternalCall(const char *filename, int lineno) _PyErr_BadInternalCall(const char *filename, int lineno)
{ {

View file

@ -1539,7 +1539,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
PyObject *msg = PyUnicode_FromFormat("import of %R halted; " PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
"None in sys.modules", abs_name); "None in sys.modules", abs_name);
if (msg != NULL) { if (msg != NULL) {
PyErr_SetImportError(msg, abs_name, NULL); PyErr_SetImportErrorSubclass(PyExc_ModuleNotFoundError, msg,
abs_name, NULL);
Py_DECREF(msg); Py_DECREF(msg);
} }
mod = NULL; mod = NULL;

View file

@ -1516,7 +1516,8 @@ const unsigned char _Py_M__importlib[] = {
137,0,0,0,41,12,114,118,0,0,0,114,14,0,0,0, 137,0,0,0,41,12,114,118,0,0,0,114,14,0,0,0,
114,79,0,0,0,114,58,0,0,0,114,127,0,0,0,114, 114,79,0,0,0,114,58,0,0,0,114,127,0,0,0,114,
90,0,0,0,218,8,95,69,82,82,95,77,83,71,114,38, 90,0,0,0,218,8,95,69,82,82,95,77,83,71,114,38,
0,0,0,114,70,0,0,0,114,173,0,0,0,114,146,0, 0,0,0,218,19,77,111,100,117,108,101,78,111,116,70,111,
117,110,100,69,114,114,111,114,114,173,0,0,0,114,146,0,
0,0,114,5,0,0,0,41,8,114,15,0,0,0,218,7, 0,0,114,5,0,0,0,41,8,114,15,0,0,0,218,7,
105,109,112,111,114,116,95,114,149,0,0,0,114,119,0,0, 105,109,112,111,114,116,95,114,149,0,0,0,114,119,0,0,
0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,101, 0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,101,
@ -1526,7 +1527,7 @@ const unsigned char _Py_M__importlib[] = {
110,108,111,99,107,101,100,164,3,0,0,115,42,0,0,0, 110,108,111,99,107,101,100,164,3,0,0,115,42,0,0,0,
0,1,4,1,14,1,4,1,10,1,10,2,10,1,10,1, 0,1,4,1,14,1,4,1,10,1,10,2,10,1,10,1,
10,1,2,1,10,1,14,1,16,1,22,1,10,1,8,1, 10,1,2,1,10,1,14,1,16,1,22,1,10,1,8,1,
22,2,8,1,4,2,10,1,22,1,114,181,0,0,0,99, 22,2,8,1,4,2,10,1,22,1,114,182,0,0,0,99,
2,0,0,0,0,0,0,0,2,0,0,0,10,0,0,0, 2,0,0,0,0,0,0,0,2,0,0,0,10,0,0,0,
67,0,0,0,115,30,0,0,0,116,0,124,0,131,1,143, 67,0,0,0,115,30,0,0,0,116,0,124,0,131,1,143,
12,1,0,116,1,124,0,124,1,131,2,83,0,81,0,82, 12,1,0,116,1,124,0,124,1,131,2,83,0,81,0,82,
@ -1534,11 +1535,11 @@ const unsigned char _Py_M__importlib[] = {
97,110,100,32,108,111,97,100,32,116,104,101,32,109,111,100, 97,110,100,32,108,111,97,100,32,116,104,101,32,109,111,100,
117,108,101,44,32,97,110,100,32,114,101,108,101,97,115,101, 117,108,101,44,32,97,110,100,32,114,101,108,101,97,115,101,
32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,
46,78,41,2,114,42,0,0,0,114,181,0,0,0,41,2, 46,78,41,2,114,42,0,0,0,114,182,0,0,0,41,2,
114,15,0,0,0,114,180,0,0,0,114,10,0,0,0,114, 114,15,0,0,0,114,181,0,0,0,114,10,0,0,0,114,
10,0,0,0,114,11,0,0,0,218,14,95,102,105,110,100, 10,0,0,0,114,11,0,0,0,218,14,95,102,105,110,100,
95,97,110,100,95,108,111,97,100,191,3,0,0,115,4,0, 95,97,110,100,95,108,111,97,100,191,3,0,0,115,4,0,
0,0,0,2,10,1,114,182,0,0,0,114,19,0,0,0, 0,0,0,2,10,1,114,183,0,0,0,114,19,0,0,0,
99,3,0,0,0,0,0,0,0,5,0,0,0,4,0,0, 99,3,0,0,0,0,0,0,0,5,0,0,0,4,0,0,
0,67,0,0,0,115,122,0,0,0,116,0,124,0,124,1, 0,67,0,0,0,115,122,0,0,0,116,0,124,0,124,1,
124,2,131,3,1,0,124,2,100,1,107,4,114,32,116,1, 124,2,131,3,1,0,124,2,100,1,107,4,114,32,116,1,
@ -1573,259 +1574,257 @@ const unsigned char _Py_M__importlib[] = {
110,32,115,121,115,46,109,111,100,117,108,101,115,114,15,0, 110,32,115,121,115,46,109,111,100,117,108,101,115,114,15,0,
0,0,41,12,114,178,0,0,0,114,168,0,0,0,114,46, 0,0,41,12,114,178,0,0,0,114,168,0,0,0,114,46,
0,0,0,114,142,0,0,0,114,14,0,0,0,114,79,0, 0,0,0,114,142,0,0,0,114,14,0,0,0,114,79,0,
0,0,114,182,0,0,0,218,11,95,103,99,100,95,105,109, 0,0,114,183,0,0,0,218,11,95,103,99,100,95,105,109,
112,111,114,116,114,47,0,0,0,114,38,0,0,0,114,70, 112,111,114,116,114,47,0,0,0,114,38,0,0,0,114,180,
0,0,0,114,56,0,0,0,41,5,114,15,0,0,0,114, 0,0,0,114,56,0,0,0,41,5,114,15,0,0,0,114,
166,0,0,0,114,167,0,0,0,114,83,0,0,0,114,67, 166,0,0,0,114,167,0,0,0,114,83,0,0,0,114,67,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
0,0,114,183,0,0,0,197,3,0,0,115,28,0,0,0, 0,0,114,184,0,0,0,197,3,0,0,115,28,0,0,0,
0,9,12,1,8,1,12,1,8,1,10,1,10,1,10,1, 0,9,12,1,8,1,12,1,8,1,10,1,10,1,10,1,
8,1,8,1,4,1,6,1,14,1,8,1,114,183,0,0, 8,1,8,1,4,1,6,1,14,1,8,1,114,184,0,0,
0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0, 0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,
0,0,67,0,0,0,115,178,0,0,0,116,0,124,0,100, 0,0,67,0,0,0,115,164,0,0,0,116,0,124,0,100,
1,131,2,114,174,100,2,124,1,107,6,114,58,116,1,124, 1,131,2,114,160,100,2,124,1,107,6,114,58,116,1,124,
1,131,1,125,1,124,1,106,2,100,2,131,1,1,0,116, 1,131,1,125,1,124,1,106,2,100,2,131,1,1,0,116,
0,124,0,100,3,131,2,114,58,124,1,106,3,124,0,106, 0,124,0,100,3,131,2,114,58,124,1,106,3,124,0,106,
4,131,1,1,0,120,114,124,1,68,0,93,106,125,3,116, 4,131,1,1,0,120,100,124,1,68,0,93,92,125,3,116,
0,124,0,124,3,131,2,115,64,100,4,106,5,124,0,106, 0,124,0,124,3,131,2,115,64,100,4,106,5,124,0,106,
6,124,3,131,2,125,4,121,14,116,7,124,2,124,4,131, 6,124,3,131,2,125,4,121,14,116,7,124,2,124,4,131,
2,1,0,87,0,113,64,4,0,116,8,107,10,114,168,1, 2,1,0,87,0,113,64,4,0,116,8,107,10,114,154,1,
0,125,5,1,0,122,34,116,9,124,5,131,1,106,10,116, 0,125,5,1,0,122,20,124,5,106,9,124,4,107,2,114,
11,131,1,114,150,124,5,106,12,124,4,107,2,114,150,119, 136,119,64,130,0,87,0,89,0,100,5,100,5,125,5,126,
64,130,0,87,0,89,0,100,5,100,5,125,5,126,5,88, 5,88,0,113,64,88,0,113,64,87,0,124,0,83,0,41,
0,113,64,88,0,113,64,87,0,124,0,83,0,41,6,122, 6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104,
238,70,105,103,117,114,101,32,111,117,116,32,119,104,97,116, 97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,
32,95,95,105,109,112,111,114,116,95,95,32,115,104,111,117, 111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,
108,100,32,114,101,116,117,114,110,46,10,10,32,32,32,32, 32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,
84,104,101,32,105,109,112,111,114,116,95,32,112,97,114,97, 114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,
109,101,116,101,114,32,105,115,32,97,32,99,97,108,108,97, 108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,
98,108,101,32,119,104,105,99,104,32,116,97,107,101,115,32, 115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,
116,104,101,32,110,97,109,101,32,111,102,32,109,111,100,117, 100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,
108,101,32,116,111,10,32,32,32,32,105,109,112,111,114,116, 114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,
46,32,73,116,32,105,115,32,114,101,113,117,105,114,101,100, 101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,
32,116,111,32,100,101,99,111,117,112,108,101,32,116,104,101, 104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,
32,102,117,110,99,116,105,111,110,32,102,114,111,109,32,97, 32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,
115,115,117,109,105,110,103,32,105,109,112,111,114,116,108,105, 108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,
98,39,115,10,32,32,32,32,105,109,112,111,114,116,32,105, 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
109,112,108,101,109,101,110,116,97,116,105,111,110,32,105,115, 105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,
32,100,101,115,105,114,101,100,46,10,10,32,32,32,32,114, 32,114,127,0,0,0,250,1,42,218,7,95,95,97,108,108,
127,0,0,0,250,1,42,218,7,95,95,97,108,108,95,95, 95,95,122,5,123,125,46,123,125,78,41,10,114,4,0,0,
122,5,123,125,46,123,125,78,41,13,114,4,0,0,0,114, 0,114,126,0,0,0,218,6,114,101,109,111,118,101,218,6,
126,0,0,0,218,6,114,101,109,111,118,101,218,6,101,120, 101,120,116,101,110,100,114,186,0,0,0,114,38,0,0,0,
116,101,110,100,114,185,0,0,0,114,38,0,0,0,114,1, 114,1,0,0,0,114,58,0,0,0,114,180,0,0,0,114,
0,0,0,114,58,0,0,0,114,70,0,0,0,114,175,0, 15,0,0,0,41,6,114,83,0,0,0,218,8,102,114,111,
0,0,114,64,0,0,0,218,15,95,69,82,82,95,77,83, 109,108,105,115,116,114,181,0,0,0,218,1,120,90,9,102,
71,95,80,82,69,70,73,88,114,15,0,0,0,41,6,114, 114,111,109,95,110,97,109,101,90,3,101,120,99,114,10,0,
83,0,0,0,218,8,102,114,111,109,108,105,115,116,114,180, 0,0,114,10,0,0,0,114,11,0,0,0,218,16,95,104,
0,0,0,218,1,120,90,9,102,114,111,109,95,110,97,109, 97,110,100,108,101,95,102,114,111,109,108,105,115,116,222,3,
101,90,3,101,120,99,114,10,0,0,0,114,10,0,0,0, 0,0,115,32,0,0,0,0,10,10,1,8,1,8,1,10,
114,11,0,0,0,218,16,95,104,97,110,100,108,101,95,102, 1,10,1,12,1,10,1,10,1,14,1,2,1,14,1,16,
114,111,109,108,105,115,116,221,3,0,0,115,34,0,0,0, 4,10,1,2,1,24,1,114,191,0,0,0,99,1,0,0,
0,10,10,1,8,1,8,1,10,1,10,1,12,1,10,1, 0,0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,
10,1,14,1,2,1,14,1,16,4,14,1,10,1,2,1, 0,115,154,0,0,0,124,0,106,0,100,1,131,1,125,1,
24,1,114,191,0,0,0,99,1,0,0,0,0,0,0,0, 124,0,106,0,100,2,131,1,125,2,124,1,100,3,107,9,
3,0,0,0,6,0,0,0,67,0,0,0,115,154,0,0, 114,86,124,2,100,3,107,9,114,80,124,1,124,2,106,1,
0,124,0,106,0,100,1,131,1,125,1,124,0,106,0,100, 107,3,114,80,116,2,106,3,100,4,124,1,155,2,100,5,
2,131,1,125,2,124,1,100,3,107,9,114,86,124,2,100, 124,2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,
3,107,9,114,80,124,1,124,2,106,1,107,3,114,80,116, 144,1,131,2,1,0,124,1,83,0,110,64,124,2,100,3,
2,106,3,100,4,124,1,155,2,100,5,124,2,106,1,155, 107,9,114,102,124,2,106,1,83,0,110,48,116,2,106,3,
2,100,6,157,5,116,4,100,7,100,8,144,1,131,2,1, 100,9,116,4,100,7,100,8,144,1,131,2,1,0,124,0,
0,124,1,83,0,110,64,124,2,100,3,107,9,114,102,124, 100,10,25,0,125,1,100,11,124,0,107,7,114,150,124,1,
2,106,1,83,0,110,48,116,2,106,3,100,9,116,4,100, 106,5,100,12,131,1,100,13,25,0,125,1,124,1,83,0,
7,100,8,144,1,131,2,1,0,124,0,100,10,25,0,125, 41,14,122,167,67,97,108,99,117,108,97,116,101,32,119,104,
1,100,11,124,0,107,7,114,150,124,1,106,5,100,12,131, 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115,
1,100,13,25,0,125,1,124,1,83,0,41,14,122,167,67, 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95,
97,108,99,117,108,97,116,101,32,119,104,97,116,32,95,95, 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111,
112,97,99,107,97,103,101,95,95,32,115,104,111,117,108,100, 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,
32,98,101,46,10,10,32,32,32,32,95,95,112,97,99,107, 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111,
97,103,101,95,95,32,105,115,32,110,111,116,32,103,117,97, 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111,
114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101, 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115,
102,105,110,101,100,32,111,114,32,99,111,117,108,100,32,98, 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111,
101,32,115,101,116,32,116,111,32,78,111,110,101,10,32,32, 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107,
32,32,116,111,32,114,101,112,114,101,115,101,110,116,32,116, 110,111,119,110,46,10,10,32,32,32,32,114,130,0,0,0,
104,97,116,32,105,116,115,32,112,114,111,112,101,114,32,118, 114,89,0,0,0,78,122,32,95,95,112,97,99,107,97,103,
97,108,117,101,32,105,115,32,117,110,107,110,111,119,110,46, 101,95,95,32,33,61,32,95,95,115,112,101,99,95,95,46,
10,10,32,32,32,32,114,130,0,0,0,114,89,0,0,0, 112,97,114,101,110,116,32,40,122,4,32,33,61,32,250,1,
78,122,32,95,95,112,97,99,107,97,103,101,95,95,32,33, 41,114,136,0,0,0,233,3,0,0,0,122,89,99,97,110,
61,32,95,95,115,112,101,99,95,95,46,112,97,114,101,110, 39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97,
116,32,40,122,4,32,33,61,32,250,1,41,114,136,0,0, 103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95,
0,233,3,0,0,0,122,89,99,97,110,39,116,32,114,101, 32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44,
115,111,108,118,101,32,112,97,99,107,97,103,101,32,102,114, 32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110,
111,109,32,95,95,115,112,101,99,95,95,32,111,114,32,95, 32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95,
95,112,97,99,107,97,103,101,95,95,44,32,102,97,108,108, 112,97,116,104,95,95,114,1,0,0,0,114,127,0,0,0,
105,110,103,32,98,97,99,107,32,111,110,32,95,95,110,97, 114,117,0,0,0,114,19,0,0,0,41,6,114,30,0,0,
109,101,95,95,32,97,110,100,32,95,95,112,97,116,104,95, 0,114,119,0,0,0,114,138,0,0,0,114,139,0,0,0,
95,114,1,0,0,0,114,127,0,0,0,114,117,0,0,0, 114,172,0,0,0,114,118,0,0,0,41,3,218,7,103,108,
114,19,0,0,0,41,6,114,30,0,0,0,114,119,0,0, 111,98,97,108,115,114,166,0,0,0,114,82,0,0,0,114,
0,114,138,0,0,0,114,139,0,0,0,114,172,0,0,0, 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,17,
114,118,0,0,0,41,3,218,7,103,108,111,98,97,108,115, 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95,
114,166,0,0,0,114,82,0,0,0,114,10,0,0,0,114, 95,253,3,0,0,115,30,0,0,0,0,7,10,1,10,1,
10,0,0,0,114,11,0,0,0,218,17,95,99,97,108,99, 8,1,18,1,22,2,12,1,6,1,8,1,8,2,6,2,
95,95,95,112,97,99,107,97,103,101,95,95,253,3,0,0, 12,1,8,1,8,1,14,1,114,195,0,0,0,99,5,0,
115,30,0,0,0,0,7,10,1,10,1,8,1,18,1,22, 0,0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,
2,12,1,6,1,8,1,8,2,6,2,12,1,8,1,8, 0,0,115,170,0,0,0,124,4,100,1,107,2,114,18,116,
1,14,1,114,195,0,0,0,99,5,0,0,0,0,0,0, 0,124,0,131,1,125,5,110,36,124,1,100,2,107,9,114,
0,9,0,0,0,5,0,0,0,67,0,0,0,115,170,0, 30,124,1,110,2,105,0,125,6,116,1,124,6,131,1,125,
0,0,124,4,100,1,107,2,114,18,116,0,124,0,131,1, 7,116,0,124,0,124,7,124,4,131,3,125,5,124,3,115,
125,5,110,36,124,1,100,2,107,9,114,30,124,1,110,2, 154,124,4,100,1,107,2,114,86,116,0,124,0,106,2,100,
105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0, 3,131,1,100,1,25,0,131,1,83,0,113,166,124,0,115,
124,7,124,4,131,3,125,5,124,3,115,154,124,4,100,1, 96,124,5,83,0,113,166,116,3,124,0,131,1,116,3,124,
107,2,114,86,116,0,124,0,106,2,100,3,131,1,100,1, 0,106,2,100,3,131,1,100,1,25,0,131,1,24,0,125,
25,0,131,1,83,0,113,166,124,0,115,96,124,5,83,0, 8,116,4,106,5,124,5,106,6,100,2,116,3,124,5,106,
113,166,116,3,124,0,131,1,116,3,124,0,106,2,100,3, 6,131,1,124,8,24,0,133,2,25,0,25,0,83,0,110,
131,1,100,1,25,0,131,1,24,0,125,8,116,4,106,5, 12,116,7,124,5,124,3,116,0,131,3,83,0,100,2,83,
124,5,106,6,100,2,116,3,124,5,106,6,131,1,124,8, 0,41,4,97,215,1,0,0,73,109,112,111,114,116,32,97,
24,0,133,2,25,0,25,0,83,0,110,12,116,7,124,5, 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104,
124,3,116,0,131,3,83,0,100,2,83,0,41,4,97,215, 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117,
1,0,0,73,109,112,111,114,116,32,97,32,109,111,100,117, 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32,
108,101,46,10,10,32,32,32,32,84,104,101,32,39,103,108, 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32,
111,98,97,108,115,39,32,97,114,103,117,109,101,110,116,32, 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,114,
105,115,32,117,115,101,100,32,116,111,32,105,110,102,101,114, 105,110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,
32,119,104,101,114,101,32,116,104,101,32,105,109,112,111,114, 104,97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,
116,32,105,115,32,111,99,99,117,114,114,105,110,103,32,102, 105,109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,
114,111,109,10,32,32,32,32,116,111,32,104,97,110,100,108, 99,97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,
101,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, 115,32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,
116,115,46,32,84,104,101,32,39,108,111,99,97,108,115,39, 32,32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,
32,97,114,103,117,109,101,110,116,32,105,115,32,105,103,110, 103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,
111,114,101,100,46,32,84,104,101,10,32,32,32,32,39,102, 32,119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,
114,111,109,108,105,115,116,39,32,97,114,103,117,109,101,110, 115,116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,
116,32,115,112,101,99,105,102,105,101,115,32,119,104,97,116, 32,111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,
32,115,104,111,117,108,100,32,101,120,105,115,116,32,97,115, 32,32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
32,97,116,116,114,105,98,117,116,101,115,32,111,110,32,116, 100,32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,
104,101,32,109,111,100,117,108,101,10,32,32,32,32,98,101, 111,100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,
105,110,103,32,105,109,112,111,114,116,101,100,32,40,101,46, 111,109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,
103,46,32,96,96,102,114,111,109,32,109,111,100,117,108,101, 32,39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,
32,105,109,112,111,114,116,32,60,102,114,111,109,108,105,115, 117,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,
116,62,96,96,41,46,32,32,84,104,101,32,39,108,101,118, 32,116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,
101,108,39,10,32,32,32,32,97,114,103,117,109,101,110,116, 97,116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,
32,114,101,112,114,101,115,101,110,116,115,32,116,104,101,32, 102,114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,
112,97,99,107,97,103,101,32,108,111,99,97,116,105,111,110, 118,101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,
32,116,111,32,105,109,112,111,114,116,32,102,114,111,109,32, 46,103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,
105,110,32,97,32,114,101,108,97,116,105,118,101,10,32,32, 32,105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,
32,32,105,109,112,111,114,116,32,40,101,46,103,46,32,96, 117,108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,
96,102,114,111,109,32,46,46,112,107,103,32,105,109,112,111, 108,39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,
114,116,32,109,111,100,96,96,32,119,111,117,108,100,32,104, 19,0,0,0,78,114,117,0,0,0,41,8,114,184,0,0,
97,118,101,32,97,32,39,108,101,118,101,108,39,32,111,102, 0,114,195,0,0,0,218,9,112,97,114,116,105,116,105,111,
32,50,41,46,10,10,32,32,32,32,114,19,0,0,0,78, 110,114,164,0,0,0,114,14,0,0,0,114,79,0,0,0,
114,117,0,0,0,41,8,114,183,0,0,0,114,195,0,0, 114,1,0,0,0,114,191,0,0,0,41,9,114,15,0,0,
0,218,9,112,97,114,116,105,116,105,111,110,114,164,0,0, 0,114,194,0,0,0,218,6,108,111,99,97,108,115,114,189,
0,114,14,0,0,0,114,79,0,0,0,114,1,0,0,0, 0,0,0,114,167,0,0,0,114,83,0,0,0,90,8,103,
114,191,0,0,0,41,9,114,15,0,0,0,114,194,0,0, 108,111,98,97,108,115,95,114,166,0,0,0,90,7,99,117,
0,218,6,108,111,99,97,108,115,114,189,0,0,0,114,167, 116,95,111,102,102,114,10,0,0,0,114,10,0,0,0,114,
0,0,0,114,83,0,0,0,90,8,103,108,111,98,97,108, 11,0,0,0,218,10,95,95,105,109,112,111,114,116,95,95,
115,95,114,166,0,0,0,90,7,99,117,116,95,111,102,102, 24,4,0,0,115,26,0,0,0,0,11,8,1,10,2,16,
114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, 1,8,1,12,1,4,3,8,1,20,1,4,1,6,4,26,
10,95,95,105,109,112,111,114,116,95,95,24,4,0,0,115, 3,32,2,114,198,0,0,0,99,1,0,0,0,0,0,0,
26,0,0,0,0,11,8,1,10,2,16,1,8,1,12,1, 0,2,0,0,0,3,0,0,0,67,0,0,0,115,38,0,
4,3,8,1,20,1,4,1,6,4,26,3,32,2,114,198, 0,0,116,0,106,1,124,0,131,1,125,1,124,1,100,0,
0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, 107,8,114,30,116,2,100,1,124,0,23,0,131,1,130,1,
3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,106, 116,3,124,1,131,1,83,0,41,2,78,122,25,110,111,32,
1,124,0,131,1,125,1,124,1,100,0,107,8,114,30,116, 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,32,
2,100,1,124,0,23,0,131,1,130,1,116,3,124,1,131, 110,97,109,101,100,32,41,4,114,147,0,0,0,114,151,0,
1,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116, 0,0,114,70,0,0,0,114,146,0,0,0,41,2,114,15,
45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100, 0,0,0,114,82,0,0,0,114,10,0,0,0,114,10,0,
32,41,4,114,147,0,0,0,114,151,0,0,0,114,70,0, 0,0,114,11,0,0,0,218,18,95,98,117,105,108,116,105,
0,0,114,146,0,0,0,41,2,114,15,0,0,0,114,82, 110,95,102,114,111,109,95,110,97,109,101,59,4,0,0,115,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, 8,0,0,0,0,1,10,1,8,1,12,1,114,199,0,0,
0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111, 0,99,2,0,0,0,0,0,0,0,12,0,0,0,12,0,
109,95,110,97,109,101,59,4,0,0,115,8,0,0,0,0, 0,0,67,0,0,0,115,244,0,0,0,124,1,97,0,124,
1,10,1,8,1,12,1,114,199,0,0,0,99,2,0,0, 0,97,1,116,2,116,1,131,1,125,2,120,86,116,1,106,
0,0,0,0,0,12,0,0,0,12,0,0,0,67,0,0, 3,106,4,131,0,68,0,93,72,92,2,125,3,125,4,116,
0,115,244,0,0,0,124,1,97,0,124,0,97,1,116,2, 5,124,4,124,2,131,2,114,28,124,3,116,1,106,6,107,
116,1,131,1,125,2,120,86,116,1,106,3,106,4,131,0, 6,114,62,116,7,125,5,110,18,116,0,106,8,124,3,131,
68,0,93,72,92,2,125,3,125,4,116,5,124,4,124,2, 1,114,28,116,9,125,5,110,2,113,28,116,10,124,4,124,
131,2,114,28,124,3,116,1,106,6,107,6,114,62,116,7, 5,131,2,125,6,116,11,124,6,124,4,131,2,1,0,113,
125,5,110,18,116,0,106,8,124,3,131,1,114,28,116,9, 28,87,0,116,1,106,3,116,12,25,0,125,7,120,54,100,
125,5,110,2,113,28,116,10,124,4,124,5,131,2,125,6, 5,68,0,93,46,125,8,124,8,116,1,106,3,107,7,114,
116,11,124,6,124,4,131,2,1,0,113,28,87,0,116,1, 144,116,13,124,8,131,1,125,9,110,10,116,1,106,3,124,
106,3,116,12,25,0,125,7,120,54,100,5,68,0,93,46, 8,25,0,125,9,116,14,124,7,124,8,124,9,131,3,1,
125,8,124,8,116,1,106,3,107,7,114,144,116,13,124,8, 0,113,120,87,0,121,12,116,13,100,2,131,1,125,10,87,
131,1,125,9,110,10,116,1,106,3,124,8,25,0,125,9, 0,110,24,4,0,116,15,107,10,114,206,1,0,1,0,1,
116,14,124,7,124,8,124,9,131,3,1,0,113,120,87,0, 0,100,3,125,10,89,0,110,2,88,0,116,14,124,7,100,
121,12,116,13,100,2,131,1,125,10,87,0,110,24,4,0, 2,124,10,131,3,1,0,116,13,100,4,131,1,125,11,116,
116,15,107,10,114,206,1,0,1,0,1,0,100,3,125,10, 14,124,7,100,4,124,11,131,3,1,0,100,3,83,0,41,
89,0,110,2,88,0,116,14,124,7,100,2,124,10,131,3, 6,122,250,83,101,116,117,112,32,105,109,112,111,114,116,108,
1,0,116,13,100,4,131,1,125,11,116,14,124,7,100,4, 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32,
124,11,131,3,1,0,100,3,83,0,41,6,122,250,83,101, 110,101,101,100,101,100,32,98,117,105,108,116,45,105,110,32,
116,117,112,32,105,109,112,111,114,116,108,105,98,32,98,121, 109,111,100,117,108,101,115,32,97,110,100,32,105,110,106,101,
32,105,109,112,111,114,116,105,110,103,32,110,101,101,100,101, 99,116,105,110,103,32,116,104,101,109,10,32,32,32,32,105,
100,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110,
101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103, 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,65,
32,116,104,101,109,10,32,32,32,32,105,110,116,111,32,116, 115,32,115,121,115,32,105,115,32,110,101,101,100,101,100,32,
104,101,32,103,108,111,98,97,108,32,110,97,109,101,115,112, 102,111,114,32,115,121,115,46,109,111,100,117,108,101,115,32,
97,99,101,46,10,10,32,32,32,32,65,115,32,115,121,115, 97,99,99,101,115,115,32,97,110,100,32,95,105,109,112,32,
32,105,115,32,110,101,101,100,101,100,32,102,111,114,32,115, 105,115,32,110,101,101,100,101,100,32,116,111,32,108,111,97,
121,115,46,109,111,100,117,108,101,115,32,97,99,99,101,115, 100,32,98,117,105,108,116,45,105,110,10,32,32,32,32,109,
115,32,97,110,100,32,95,105,109,112,32,105,115,32,110,101, 111,100,117,108,101,115,44,32,116,104,111,115,101,32,116,119,
101,100,101,100,32,116,111,32,108,111,97,100,32,98,117,105, 111,32,109,111,100,117,108,101,115,32,109,117,115,116,32,98,
108,116,45,105,110,10,32,32,32,32,109,111,100,117,108,101, 101,32,101,120,112,108,105,99,105,116,108,121,32,112,97,115,
115,44,32,116,104,111,115,101,32,116,119,111,32,109,111,100, 115,101,100,32,105,110,46,10,10,32,32,32,32,114,138,0,
117,108,101,115,32,109,117,115,116,32,98,101,32,101,120,112, 0,0,114,20,0,0,0,78,114,55,0,0,0,41,1,122,
108,105,99,105,116,108,121,32,112,97,115,115,101,100,32,105, 9,95,119,97,114,110,105,110,103,115,41,16,114,46,0,0,
110,46,10,10,32,32,32,32,114,138,0,0,0,114,20,0, 0,114,14,0,0,0,114,13,0,0,0,114,79,0,0,0,
0,0,78,114,55,0,0,0,41,1,122,9,95,119,97,114, 218,5,105,116,101,109,115,114,174,0,0,0,114,69,0,0,
110,105,110,103,115,41,16,114,46,0,0,0,114,14,0,0, 0,114,147,0,0,0,114,75,0,0,0,114,157,0,0,0,
0,114,13,0,0,0,114,79,0,0,0,218,5,105,116,101, 114,128,0,0,0,114,133,0,0,0,114,1,0,0,0,114,
109,115,114,174,0,0,0,114,69,0,0,0,114,147,0,0, 199,0,0,0,114,5,0,0,0,114,70,0,0,0,41,12,
0,114,75,0,0,0,114,157,0,0,0,114,128,0,0,0, 218,10,115,121,115,95,109,111,100,117,108,101,218,11,95,105,
114,133,0,0,0,114,1,0,0,0,114,199,0,0,0,114, 109,112,95,109,111,100,117,108,101,90,11,109,111,100,117,108,
5,0,0,0,114,70,0,0,0,41,12,218,10,115,121,115, 101,95,116,121,112,101,114,15,0,0,0,114,83,0,0,0,
95,109,111,100,117,108,101,218,11,95,105,109,112,95,109,111, 114,93,0,0,0,114,82,0,0,0,90,11,115,101,108,102,
100,117,108,101,90,11,109,111,100,117,108,101,95,116,121,112, 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,
101,114,15,0,0,0,114,83,0,0,0,114,93,0,0,0, 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,
114,82,0,0,0,90,11,115,101,108,102,95,109,111,100,117, 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111,
108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101, 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111,
90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101, 100,117,108,101,114,10,0,0,0,114,10,0,0,0,114,11,
90,13,116,104,114,101,97,100,95,109,111,100,117,108,101,90, 0,0,0,218,6,95,115,101,116,117,112,66,4,0,0,115,
14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,114, 50,0,0,0,0,9,4,1,4,3,8,1,20,1,10,1,
10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,6, 10,1,6,1,10,1,6,2,2,1,10,1,14,3,10,1,
95,115,101,116,117,112,66,4,0,0,115,50,0,0,0,0, 10,1,10,1,10,2,10,1,16,3,2,1,12,1,14,2,
9,4,1,4,3,8,1,20,1,10,1,10,1,6,1,10, 10,1,12,3,8,1,114,203,0,0,0,99,2,0,0,0,
1,6,2,2,1,10,1,14,3,10,1,10,1,10,1,10, 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
2,10,1,16,3,2,1,12,1,14,2,10,1,12,3,8, 115,66,0,0,0,116,0,124,0,124,1,131,2,1,0,116,
1,114,203,0,0,0,99,2,0,0,0,0,0,0,0,3, 1,106,2,106,3,116,4,131,1,1,0,116,1,106,2,106,
0,0,0,3,0,0,0,67,0,0,0,115,66,0,0,0, 3,116,5,131,1,1,0,100,1,100,2,108,6,125,2,124,
116,0,124,0,124,1,131,2,1,0,116,1,106,2,106,3, 2,97,7,124,2,106,8,116,1,106,9,116,10,25,0,131,
116,4,131,1,1,0,116,1,106,2,106,3,116,5,131,1, 1,1,0,100,2,83,0,41,3,122,50,73,110,115,116,97,
1,0,100,1,100,2,108,6,125,2,124,2,97,7,124,2, 108,108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,
106,8,116,1,106,9,116,10,25,0,131,1,1,0,100,2, 116,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,
83,0,41,3,122,50,73,110,115,116,97,108,108,32,105,109, 111,110,32,111,102,32,105,109,112,111,114,116,46,114,19,0,
112,111,114,116,108,105,98,32,97,115,32,116,104,101,32,105, 0,0,78,41,11,114,203,0,0,0,114,14,0,0,0,114,
109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, 171,0,0,0,114,109,0,0,0,114,147,0,0,0,114,157,
32,105,109,112,111,114,116,46,114,19,0,0,0,78,41,11, 0,0,0,218,26,95,102,114,111,122,101,110,95,105,109,112,
114,203,0,0,0,114,14,0,0,0,114,171,0,0,0,114, 111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,114,
109,0,0,0,114,147,0,0,0,114,157,0,0,0,218,26, 115,0,0,0,218,8,95,105,110,115,116,97,108,108,114,79,
95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, 0,0,0,114,1,0,0,0,41,3,114,201,0,0,0,114,
98,95,101,120,116,101,114,110,97,108,114,115,0,0,0,218, 202,0,0,0,114,204,0,0,0,114,10,0,0,0,114,10,
8,95,105,110,115,116,97,108,108,114,79,0,0,0,114,1, 0,0,0,114,11,0,0,0,114,205,0,0,0,113,4,0,
0,0,0,41,3,114,201,0,0,0,114,202,0,0,0,114, 0,115,12,0,0,0,0,2,10,2,12,1,12,3,8,1,
204,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, 4,1,114,205,0,0,0,41,2,78,78,41,1,78,41,2,
0,0,0,114,205,0,0,0,113,4,0,0,115,12,0,0, 78,114,19,0,0,0,41,50,114,3,0,0,0,114,115,0,
0,0,2,10,2,12,1,12,3,8,1,4,1,114,205,0, 0,0,114,12,0,0,0,114,16,0,0,0,114,51,0,0,
0,0,41,2,78,78,41,1,78,41,2,78,114,19,0,0, 0,114,29,0,0,0,114,36,0,0,0,114,17,0,0,0,
0,41,50,114,3,0,0,0,114,115,0,0,0,114,12,0, 114,18,0,0,0,114,41,0,0,0,114,42,0,0,0,114,
0,0,114,16,0,0,0,114,51,0,0,0,114,29,0,0, 45,0,0,0,114,56,0,0,0,114,58,0,0,0,114,68,
0,114,36,0,0,0,114,17,0,0,0,114,18,0,0,0, 0,0,0,114,74,0,0,0,114,77,0,0,0,114,84,0,
114,41,0,0,0,114,42,0,0,0,114,45,0,0,0,114, 0,0,114,95,0,0,0,114,96,0,0,0,114,102,0,0,
56,0,0,0,114,58,0,0,0,114,68,0,0,0,114,74, 0,114,78,0,0,0,218,6,111,98,106,101,99,116,90,9,
0,0,0,114,77,0,0,0,114,84,0,0,0,114,95,0, 95,80,79,80,85,76,65,84,69,114,128,0,0,0,114,133,
0,0,114,96,0,0,0,114,102,0,0,0,114,78,0,0, 0,0,0,114,141,0,0,0,114,91,0,0,0,114,80,0,
0,218,6,111,98,106,101,99,116,90,9,95,80,79,80,85, 0,0,114,145,0,0,0,114,146,0,0,0,114,81,0,0,
76,65,84,69,114,128,0,0,0,114,133,0,0,0,114,141, 0,114,147,0,0,0,114,157,0,0,0,114,162,0,0,0,
0,0,0,114,91,0,0,0,114,80,0,0,0,114,145,0, 114,168,0,0,0,114,170,0,0,0,114,173,0,0,0,114,
0,0,114,146,0,0,0,114,81,0,0,0,114,147,0,0, 178,0,0,0,90,15,95,69,82,82,95,77,83,71,95,80,
0,114,157,0,0,0,114,162,0,0,0,114,168,0,0,0, 82,69,70,73,88,114,179,0,0,0,114,182,0,0,0,114,
114,170,0,0,0,114,173,0,0,0,114,178,0,0,0,114, 183,0,0,0,114,184,0,0,0,114,191,0,0,0,114,195,
188,0,0,0,114,179,0,0,0,114,181,0,0,0,114,182, 0,0,0,114,198,0,0,0,114,199,0,0,0,114,203,0,
0,0,0,114,183,0,0,0,114,191,0,0,0,114,195,0, 0,0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,
0,0,114,198,0,0,0,114,199,0,0,0,114,203,0,0, 0,114,10,0,0,0,114,11,0,0,0,218,8,60,109,111,
0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,0, 100,117,108,101,62,8,0,0,0,115,94,0,0,0,4,17,
114,10,0,0,0,114,11,0,0,0,218,8,60,109,111,100, 4,2,8,8,8,7,4,2,4,3,16,4,14,68,14,21,
117,108,101,62,8,0,0,0,115,94,0,0,0,4,17,4, 14,19,8,19,8,19,8,11,14,8,8,11,8,12,8,16,
2,8,8,8,7,4,2,4,3,16,4,14,68,14,21,14, 8,36,14,27,14,101,16,26,6,3,10,45,14,60,8,18,
19,8,19,8,19,8,11,14,8,8,11,8,12,8,16,8, 8,17,8,25,8,29,8,23,8,16,14,73,14,77,14,13,
36,14,27,14,101,16,26,6,3,10,45,14,60,8,18,8, 8,9,8,9,10,47,8,20,4,1,8,2,8,27,8,6,
17,8,25,8,29,8,23,8,16,14,73,14,77,14,13,8, 10,25,8,31,8,27,18,35,8,7,8,47,
9,8,9,10,47,8,20,4,1,8,2,8,27,8,6,10,
24,8,32,8,27,18,35,8,7,8,47,
}; };