diff -r 0c9415ddf403 Doc/library/os.rst --- a/Doc/library/os.rst Sun Mar 31 20:37:34 2013 +0200 +++ b/Doc/library/os.rst Sun Mar 31 14:03:49 2013 -0700 @@ -1497,7 +1497,13 @@ in all other circumstances, they will be of type ``str``. This function can also support :ref:`specifying a file descriptor - `; the file descriptor must refer to a directory. + `; the file descriptor must refer to a directory. The + file descriptor will remain open and be rewound on return. + + For an iterable that does not build up a list see :func:`scandir`. + + The behavior when the directory changes while listdir is building + its list is undefined and may differ between operating systems. .. note:: To encode ``str`` filenames to ``bytes``, use :func:`~os.fsencode`. @@ -1784,6 +1790,38 @@ The *dir_fd* parameter. +.. function:: scandir(path='.') + + Return an iterator over the names of the entries in the directory given by + *path*. Iteration is in arbitrary order and does not include the special + entries ``'.'`` and ``'..'`` even if they are present in the directory. + + *path* may be either of type ``str`` or of type ``bytes``. If *path* + is of type ``bytes``, the filenames returned will also be of type ``bytes``; + in all other circumstances they will be of type ``str``. + + This function can also support :ref:`specifying a file descriptor + `; the file descriptor must refer to a directory. The + file descriptor will remain open and be rewound after iteration ends. + + Prefer this method to :func:`listdir` to avoid loading the entire + directory contents into memory at once. + + If there is a problem accessing path an OSError will be raised + either at iterator construction time or during iteration. Callers + should be prepared for both. + + The behavior when the directory changes while iterating over the + directory is undefined and may differ between operating systems. + + .. note:: + To encode ``str`` filenames to ``bytes``, use :func:`~os.fsencode`. + + Availability: Unix, Windows. + + .. versionadded: 3.4 + + .. function:: stat(path, *, dir_fd=None, follow_symlinks=True) Perform the equivalent of a :c:func:`stat` system call on the given path. diff -r 0c9415ddf403 Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py Sun Mar 31 20:37:34 2013 +0200 +++ b/Lib/importlib/_bootstrap.py Sun Mar 31 14:03:49 2013 -0700 @@ -1402,15 +1402,15 @@ """Fill the cache of potential modules and packages for this directory.""" path = self.path try: - contents = _os.listdir(path) + contents = set(_os.scandir(path)) except (FileNotFoundError, PermissionError, NotADirectoryError): # Directory has either been removed, turned into a file, or made # unreadable. - contents = [] + contents = set() # We store two cached versions, to handle runtime changes of the # PYTHONCASEOK environment variable. if not sys.platform.startswith('win'): - self._path_cache = set(contents) + self._path_cache = contents else: # Windows users can import modules with case-insensitive file # suffixes (for legacy reasons). Make the suffix lowercase here diff -r 0c9415ddf403 Lib/os.py --- a/Lib/os.py Sun Mar 31 20:37:34 2013 +0200 +++ b/Lib/os.py Sun Mar 31 14:03:49 2013 -0700 @@ -146,6 +146,7 @@ _add("HAVE_FCHMOD", "chmod") _add("HAVE_FCHOWN", "chown") _add("HAVE_FDOPENDIR", "listdir") + _add("HAVE_FDOPENDIR", "scandir") _add("HAVE_FEXECVE", "execve") _set.add(stat) # fstat always works _add("HAVE_FTRUNCATE", "truncate") @@ -309,6 +310,30 @@ __all__.extend(["makedirs", "removedirs", "renames"]) + +if "scandir" in globals(): + def listdir(path=None): + """listdir(path='.') -> list_of_filenames + + Return a list containing the names of the files in the directory. + The list is in arbitrary order. It does not include the special + entries '.' and '..' even if they are present in the directory. + + path can be specified as either str or bytes. If path is bytes, + the filenames returned will also be bytes; otherwise the filenames + returned will be str. + On some platforms, path may also be specified as an open file + descriptor; the file descriptor must refer to a directory. + If this functionality is unavailable it raises NotImplementedError. + """ + # This allows the default behavior to be implemented inside scandir. + if path is None: + return list(scandir()) + return list(scandir(path)) + + __all__.append("listdir") + + def walk(top, topdown=True, onerror=None, followlinks=False): """Directory tree generator. diff -r 0c9415ddf403 Lib/test/test_os.py --- a/Lib/test/test_os.py Sun Mar 31 20:37:34 2013 +0200 +++ b/Lib/test/test_os.py Sun Mar 31 14:03:49 2013 -0700 @@ -798,8 +798,9 @@ os.fstat(rootfd) # redundant check os.stat(rootfd) - # check that listdir() returns consistent information - self.assertEqual(set(os.listdir(rootfd)), set(dirs) | set(files)) + # check that listdir() & scandir() return consistent information + self.assertEqual(set(os.listdir(rootfd)), set(dirs)|set(files)) + self.assertEqual(set(os.scandir(rootfd)), set(dirs)|set(files)) def test_fd_leak(self): # Since we're opening a lot of FDs, we must be careful to avoid leaks: @@ -1328,18 +1329,32 @@ def tearDown(self): shutil.rmtree(self.dir) - def test_listdir(self): + def _test_scandir_or_listdir(self, dir_func): expected = self.unicodefn - found = set(os.listdir(self.dir)) + found = set(dir_func(self.dir)) self.assertEqual(found, expected) # test listdir without arguments current_directory = os.getcwd() try: os.chdir(os.sep) - self.assertEqual(set(os.listdir()), set(os.listdir(os.sep))) + self.assertEqual(set(dir_func()), set(dir_func(os.sep))) finally: os.chdir(current_directory) + def test_listdir(self): + self._test_scandir_or_listdir(os.listdir) + + def test_scandir(self): + self._test_scandir_or_listdir(os.scandir) + + def test_scandir_no_reuse(self): + scandir_iter = os.scandir(self.dir) + empty = [x for x in scandir_iter if not x] + self.assertEqual([], empty) + # A scandir iterator cannot be reused. + with self.assertRaisesRegex(RuntimeError, '.*already started.*'): + list(scandir_iter) + def test_open(self): for fn in self.unicodefn: f = open(os.path.join(self.dir, fn), 'rb') @@ -1575,7 +1590,7 @@ os.chdir(level2) link = os.path.join(level2, "link") os.symlink(os.path.relpath(file1), "link") - self.assertIn("link", os.listdir(os.getcwd())) + self.assertIn("link", os.scandir(os.getcwd())) # Check os.stat calls from the same dir as the link self.assertEqual(os.stat(file1), os.stat("link")) @@ -2047,6 +2062,7 @@ (os.open, filename, os.O_RDONLY), (os.rename, filename, filename), (os.rmdir, filename), + (os.scandir, filename), (os.startfile, filename), (os.stat, filename), (os.unlink, filename), @@ -2107,6 +2123,14 @@ self.assertEqual(expected, actual) +class ReprTests(unittest.TestCase): + def test_scandir_repr(self): + self.assertEqual('os.scandir()', repr(os.scandir())) + self.assertIn('os.scandir(b', repr(os.scandir(b'/'))) + self.assertIn('os.scandir(', repr(os.scandir('/'))) + self.assertIn('/', repr(os.scandir('/'))) + + class OSErrorTests(unittest.TestCase): def setUp(self): class Str(str): @@ -2139,6 +2163,17 @@ (self.filenames, os.stat,), (self.filenames, os.unlink,), ] + + # Explicitly test os.scandir() regardless of if os.listdir() + # is implemented using it or not. + def iter_over_scandir(path=None): + if path is None: + return list(os.scandir()) + # scandir may raise its OSError on first iteration rather + # than on iterator construction. Forcing iteration accepts + # either behavior. + return list(os.scandir(path)) + if sys.platform == "win32": funcs.extend(( (self.bytes_filenames, os.rename, b"dst"), @@ -2155,10 +2190,12 @@ # fails with ERROR_FILE_NOT_FOUND (2), instead of # ERROR_PATH_NOT_FOUND (3). (self.unicode_filenames, os.listdir,), + (self.unicode_filenames, iter_over_scandir,), )) else: funcs.extend(( (self.filenames, os.listdir,), + (self.filenames, iter_over_scandir,), (self.filenames, os.rename, "dst"), (self.filenames, os.replace, "dst"), )) @@ -2200,7 +2237,9 @@ try: func(name, *func_args) except OSError as err: - self.assertIs(err.filename, name) + self.assertIs(err.filename, name, + msg="{} did not report " + "the correct filename".format(func)) else: self.fail("No exception thrown by {}".format(func)) @@ -2232,6 +2271,7 @@ ExtendedAttributeTests, Win32DeprecatedBytesAPI, TermsizeTests, + ReprTests, OSErrorTests, RemoveDirsTests, ) diff -r 0c9415ddf403 Lib/test/test_posix.py --- a/Lib/test/test_posix.py Sun Mar 31 20:37:34 2013 +0200 +++ b/Lib/test/test_posix.py Sun Mar 31 14:03:49 2013 -0700 @@ -500,32 +500,32 @@ posix.chdir(os.curdir) self.assertRaises(OSError, posix.chdir, support.TESTFN) - def test_listdir(self): - self.assertTrue(support.TESTFN in posix.listdir(os.curdir)) + def test_scandir(self): + self.assertTrue(support.TESTFN in posix.scandir(os.curdir)) - def test_listdir_default(self): - # When listdir is called without argument, - # it's the same as listdir(os.curdir). - self.assertTrue(support.TESTFN in posix.listdir()) + def test_scandir_default(self): + # When scandir is called without argument, + # it's the same as scandir(os.curdir). + self.assertTrue(support.TESTFN in posix.scandir()) - def test_listdir_bytes(self): - # When listdir is called with a bytes object, + def test_scandir_bytes(self): + # When scandir is called with a bytes object, # the returned strings are of type bytes. - self.assertTrue(os.fsencode(support.TESTFN) in posix.listdir(b'.')) + self.assertTrue(os.fsencode(support.TESTFN) in posix.scandir(b'.')) - @unittest.skipUnless(posix.listdir in os.supports_fd, - "test needs fd support for posix.listdir()") - def test_listdir_fd(self): + @unittest.skipUnless(posix.scandir in os.supports_fd, + "test needs fd support for posix.scandir()") + def test_scandir_fd(self): f = posix.open(posix.getcwd(), posix.O_RDONLY) self.addCleanup(posix.close, f) self.assertEqual( - sorted(posix.listdir('.')), - sorted(posix.listdir(f)) + sorted(posix.scandir('.')), + sorted(posix.scandir(f)) ) # Check that the fd offset was reset (issue #13739) self.assertEqual( - sorted(posix.listdir('.')), - sorted(posix.listdir(f)) + sorted(posix.scandir('.')), + sorted(posix.scandir(f)) ) def test_access(self): diff -r 0c9415ddf403 Modules/posixmodule.c --- a/Modules/posixmodule.c Sun Mar 31 20:37:34 2013 +0200 +++ b/Modules/posixmodule.c Sun Mar 31 14:03:49 2013 -0700 @@ -661,10 +661,7 @@ static void path_cleanup(path_t *path) { - if (path->cleanup) { - Py_DECREF(path->cleanup); - path->cleanup = NULL; - } + Py_CLEAR(path->cleanup); } static int @@ -3235,308 +3232,507 @@ #endif - -PyDoc_STRVAR(posix_listdir__doc__, -"listdir(path='.') -> list_of_filenames\n\n\ -Return a list containing the names of the files in the directory.\n\ -The list is in arbitrary order. It does not include the special\n\ +#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) +#define _WINDOWS_WITHOUT_OPENDIR +#endif + +PyDoc_STRVAR(posix_scandir__doc__, +"scandir(path='.') -> iterable of filenames\n\n\ +Returns an iterator over the names of files in the directory.\n\ +Iteration is in arbitrary order. It will not include the special\n\ entries '.' and '..' even if they are present in the directory.\n\ \n\ path can be specified as either str or bytes. If path is bytes,\n\ - the filenames returned will also be bytes; in all other circumstances\n\ - the filenames returned will be str.\n\ -On some platforms, path may also be specified as an open file descriptor;\n\ - the file descriptor must refer to a directory.\n\ - If this functionality is unavailable, using it raises NotImplementedError."); - -#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) -static PyObject * -_listdir_windows_no_opendir(path_t *path, PyObject *list) + the filenames returned will also be bytes; otherwise the filenames\n\ + returned will be str.\n\ +On some platforms, path may also be specified as an open file\n\ + descriptor; the file descriptor must refer to a directory.\n\ + If this functionality is unavailable it raises NotImplementedError."); + + +typedef struct { + PyObject_HEAD + path_t path; + int started; /* bool: Has iteration started? */ +#ifdef _WINDOWS_WITHOUT_OPENDIR + HANDLE h_find_file; + int last_error; + int first_file; /* bool: Was FindFirstFile just called? */ + union { + WIN32_FIND_DATA narrow; /* Used when path.narrow; returns bytes.*/ + WIN32_FIND_DATAW wide; /* Used when !path.narrow; return str.*/ + } file_data; + union { + char *narrow; + wchar_t *wide; + } namebuf; +#else /* POSIX */ + DIR *dirp; + char *name; /* The pathname if we have one. */ + int dir_fd; /* The dup'ed fd being used by fdopendir or -1. */ + int return_str; /* bool: Return a str or bytes? */ +#endif +} scandir_object; + + +PyTypeObject PyScanDir_Type; + +/* Forward declare these as they are used by iter and iternext. */ +#ifdef _WINDOWS_WITHOUT_OPENDIR +static void windows_scandir_cleanup(scandir_object *scan); +#else +static void posix_scandir_cleanup(scandir_object *scan); +#endif + + +static PyObject * +scandir_repr(scandir_object *scan) +{ + if (scan->path.object == NULL) { + return PyUnicode_FromString("os.scandir()"); + } + return PyUnicode_FromFormat("os.scandir(%R)", scan->path.object); +} + + +static scandir_object * +scandir_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { static char *keywords[] = {"path", NULL}; - PyObject *v; - HANDLE hFindFile = INVALID_HANDLE_VALUE; - BOOL result; - WIN32_FIND_DATA FileData; - char namebuf[MAX_PATH+5]; /* Overallocate for \\*.*\0 */ - char *bufptr = namebuf; - /* only claim to have space for MAX_PATH */ - Py_ssize_t len = sizeof(namebuf)-5; - PyObject *po = NULL; - wchar_t *wnamebuf = NULL; - - if (!path->narrow) { - WIN32_FIND_DATAW wFileData; + scandir_object *scan; + path_t path; + + memset(&path, 0, sizeof(path)); + path.function_name = "scandir"; + path.nullable = 1; +#ifdef HAVE_FDOPENDIR + path.allow_fd = 1; + path.fd = -1; +#endif + + if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:scandir", keywords, + path_converter, &path)) { + return NULL; + } + + scan = PyObject_New(scandir_object, type); + if (scan == NULL) { + return NULL; + } + scan->path = path; + scan->started = 0; + +#ifdef _WINDOWS_WITHOUT_OPENDIR + scan->h_find_file = INVALID_HANDLE_VALUE; + scan->last_error = ERROR_SUCCESS; + scan->first_file = 1; + /* The +5's are so we can append "\\*.*\0" */ + if (path.narrow) { + Py_ssize_t len; + char *namebuf; + scan->namebuf.narrow = PyMem_Malloc(MAX_PATH+5); + namebuf = scan->namebuf.narrow; + if (namebuf == NULL) { + PyObject_Del(scan); + PyErr_NoMemory(); + return NULL; + } + len = path.length; + strcpy(namebuf, path.narrow); + if (len > 0) { + char ch = namebuf[len-1]; + if (ch != SEP && ch != ALTSEP && ch != ':') + namebuf[len++] = '/'; + strcpy(namebuf + len, "*.*"); + } + } else { wchar_t *po_wchars; - - if (!path->wide) { /* Default arg: "." */ + wchar_t *wnamebuf; + Py_ssize_t len; + + if (!path.wide) { /* Default arg: "." */ po_wchars = L"."; len = 1; } else { - po_wchars = path->wide; - len = wcslen(path->wide); - } - /* The +5 is so we can append "\\*.*\0" */ - wnamebuf = malloc((len + 5) * sizeof(wchar_t)); - if (!wnamebuf) { + po_wchars = path.wide; + len = wcslen(path.wide); + } + scan->namebuf.wide = PyMem_Malloc((len+5)*sizeof(wchar_t)); + if (scan->namebuf.wide == NULL) { + PyObject_Del(scan); PyErr_NoMemory(); - goto exit; - } + return NULL; + } + wnamebuf = scan->namebuf.wide; wcscpy(wnamebuf, po_wchars); - if (len > 0) { + if (len > 0) { /* Append "\\*.*" */ wchar_t wch = wnamebuf[len-1]; if (wch != L'/' && wch != L'\\' && wch != L':') wnamebuf[len++] = L'\\'; wcscpy(wnamebuf + len, L"*.*"); } - if ((list = PyList_New(0)) == NULL) { - goto exit; - } + } +#else /* POSIX APIs */ + scan->dirp = NULL; + scan->dir_fd = -1; + if (path.fd == -1 && path.narrow) { + scan->name = path.narrow; + scan->return_str = !PyBytes_Check(path.object); + } else { + if (path.fd == -1) { + scan->name = "."; /* Default arg: "." */ + } else { + scan->name = NULL; + } + scan->return_str = 1; + } +#endif + + /* We're keeping a reference for the life of this scandir instance. */ + Py_XINCREF(scan->path.object); + return scan; +} + + +static PyObject * +posix_scandir(PyObject *self, PyObject *args, PyObject *kwargs) +{ + return (PyObject *)scandir_new(&PyScanDir_Type, args, kwargs); +} + + +#ifdef _WINDOWS_WITHOUT_OPENDIR +static scandir_object * +windows_scandir_iter(scandir_object *scan) +{ + if (scan->started) { + PyErr_SetString(PyExc_RuntimeError, + "Iteration over this instance already started."); + return NULL; + } + scan->started = 1; + if (!scan->path.narrow) { Py_BEGIN_ALLOW_THREADS - hFindFile = FindFirstFileW(wnamebuf, &wFileData); + scan->h_find_file = FindFirstFileW( + scan->namebuf.wide, &scan->file_data.wide); Py_END_ALLOW_THREADS - if (hFindFile == INVALID_HANDLE_VALUE) { - int error = GetLastError(); - if (error == ERROR_FILE_NOT_FOUND) - goto exit; - Py_DECREF(list); - list = path_error(path); - goto exit; - } - do { - /* Skip over . and .. */ - if (wcscmp(wFileData.cFileName, L".") != 0 && - wcscmp(wFileData.cFileName, L"..") != 0) { - v = PyUnicode_FromWideChar(wFileData.cFileName, - wcslen(wFileData.cFileName)); - if (v == NULL) { - Py_DECREF(list); - list = NULL; - break; - } - if (PyList_Append(list, v) != 0) { - Py_DECREF(v); - Py_DECREF(list); - list = NULL; - break; - } - Py_DECREF(v); - } - Py_BEGIN_ALLOW_THREADS - result = FindNextFileW(hFindFile, &wFileData); - Py_END_ALLOW_THREADS + } else { + Py_BEGIN_ALLOW_THREADS + scan->h_find_file = FindFirstFile( + scan->namebuf.narrow, &scan->file_data.narrow); + Py_END_ALLOW_THREADS + } + if (scan->h_find_file == INVALID_HANDLE_VALUE) { + scan->last_error = GetLastError(); + /* File not found means StopIteration on the first iternext. */ + if (scan->last_error != ERROR_FILE_NOT_FOUND) { + path_error(&scan->path); + return NULL; + } + } + Py_INCREF((PyObject *)scan); + return scan; +} +#define scandir_iter windows_scandir_iter +#else /* POSIX */ + +static scandir_object * +posix_scandir_iter(scandir_object *scan) +{ + if (scan->started) { + PyErr_SetString(PyExc_RuntimeError, + "Iteration over this instance already started."); + return NULL; + } + scan->started = 1; +#ifdef HAVE_FDOPENDIR + if (scan->name == NULL) { + assert(scan->path.fd != -1); + /* closedir() closes the FD, so we duplicate it. */ + Py_BEGIN_ALLOW_THREADS + scan->dir_fd = dup(scan->path.fd); + + /* TODO: This should set CLOEXEC on fd while duping using dup3 when + * available at compile time in libc and runtime in the kernel. + * fcntl F_DUPFD may also be an option? See issue17036. + * EINTR and EBUSY handling will also then be required. */ + + if (scan->dir_fd == -1) { + Py_BLOCK_THREADS + posix_error(); + return NULL; + } + + scan->dirp = fdopendir(scan->dir_fd); + Py_END_ALLOW_THREADS + } + else +#endif + { + Py_BEGIN_ALLOW_THREADS + scan->dirp = opendir(scan->name); + Py_END_ALLOW_THREADS + } + + if (scan->dirp == NULL) { + path_error(&scan->path); + return NULL; + } + + Py_INCREF((PyObject *)scan); + return scan; +} +#define scandir_iter posix_scandir_iter +#endif + + +#ifdef _WINDOWS_WITHOUT_OPENDIR +static PyObject * +windows_scandir_iternext(scandir_object *scan) +{ + PyObject *name; + BOOL result; + + switch (scan->last_error) { + case ERROR_SUCCESS: + break; + case ERROR_FILE_NOT_FOUND: /* Empty directory from FindFirstFile. */ + case ERROR_NO_MORE_FILES: + goto stop_iteration; /* StopIteration */ + default: + SetLastError(scan->last_error); /* For path_error to use. */ + path_error(&scan->path); + goto stop_iteration; + } + + if (!scan->first_file) { +read_next_dir_entry: + Py_BEGIN_ALLOW_THREADS + if (scan->path.narrow) { + result = FindNextFile(scan->h_find_file, &scan->file_data.narrow); + } else { + result = FindNextFileW(scan->h_find_file, &scan->file_data.wide); + } + Py_END_ALLOW_THREADS + + if (!result) { + scan->last_error = GetLastError(); /* FindNextFile sets error to ERROR_NO_MORE_FILES if it got to the end of the directory. */ - if (!result && GetLastError() != ERROR_NO_MORE_FILES) { - Py_DECREF(list); - list = path_error(path); - goto exit; + if (scan->last_error != ERROR_NO_MORE_FILES) { + path_error(&scan->path); } - } while (result == TRUE); - - goto exit; - } - strcpy(namebuf, path->narrow); - len = path->length; - if (len > 0) { - char ch = namebuf[len-1]; - if (ch != SEP && ch != ALTSEP && ch != ':') - namebuf[len++] = '/'; - strcpy(namebuf + len, "*.*"); - } - - if ((list = PyList_New(0)) == NULL) - return NULL; - + goto stop_iteration; /* StopIteration or exception. */ + } + } else { + /* FindFirstFile was called in windows_scandir_iter. */ + scan->first_file = 0; + } + + if (scan->path.narrow) { + /* Skip over . and .. */ + if (strcmp(scan->file_data.narrow.cFileName, ".") != 0 && + strcmp(scan->file_data.narrow.cFileName, "..") != 0) { + name = PyBytes_FromString(scan->file_data.narrow.cFileName); + } else { + goto read_next_dir_entry; + } + } else { + /* Skip over . and .. */ + if (wcscmp(scan->file_data.wide.cFileName, L".") != 0 && + wcscmp(scan->file_data.wide.cFileName, L"..") != 0) { + name = PyUnicode_FromWideChar( + scan->file_data.wide.cFileName, + wcslen(scan->file_data.wide.cFileName)); + } else { + goto read_next_dir_entry; + } + } + if (name == NULL) { + goto stop_iteration; + } + + /* TODO: Support returning a namedtuple of WIN32_FIND_DATA? issueXXXXX */ +#if 0 + if (name != NULL && scan->return_tuple) { + ... windows has a lot of stat-like info in WIN32_FIND_DATA + return namedtuple; + } +#endif + + return name; + +stop_iteration: + windows_scandir_cleanup(scan); + return NULL; +} +#define scandir_iternext windows_scandir_iternext +#else /* POSIX */ + +static PyObject * +posix_scandir_iternext(scandir_object *scan) +{ + PyObject *name; + struct dirent *ep; + unsigned int name_len; + + errno = 0; Py_BEGIN_ALLOW_THREADS - hFindFile = FindFirstFile(namebuf, &FileData); +read_next_dir_entry: + ep = readdir(scan->dirp); + if (ep == NULL) { + Py_BLOCK_THREADS + if (errno != 0) { + path_error(&scan->path); + } + goto stop_iteration; + } + name_len = NAMLEN(ep); + if (name_len > 0 && ep->d_name[0] == '.' && + (name_len == 1 || + (ep->d_name[1] == '.' && name_len == 2))) { + /* Skip "." and ".." entries. */ + goto read_next_dir_entry; + } Py_END_ALLOW_THREADS - if (hFindFile == INVALID_HANDLE_VALUE) { - int error = GetLastError(); - if (error == ERROR_FILE_NOT_FOUND) - goto exit; - Py_DECREF(list); - list = path_error(path); - goto exit; - } - do { - /* Skip over . and .. */ - if (strcmp(FileData.cFileName, ".") != 0 && - strcmp(FileData.cFileName, "..") != 0) { - v = PyBytes_FromString(FileData.cFileName); - if (v == NULL) { - Py_DECREF(list); - list = NULL; - break; - } - if (PyList_Append(list, v) != 0) { - Py_DECREF(v); - Py_DECREF(list); - list = NULL; - break; - } - Py_DECREF(v); - } + + if (scan->return_str) { + name = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, name_len); + } else { + name = PyBytes_FromStringAndSize(ep->d_name, name_len); + } + if (name == NULL) { + goto stop_iteration; + } + + /* TODO Support returning a namedtuple with dirent info? issueXXXXX */ +#if 0 + if (name != NULL && scan->return_tuple) { + unsiged long long d_ino = ep->d_ino; + unsigned char d_type = 0; + d_type = ep->d_type; /* TODO surround with ifdef re: dirent.d_type */ + return Py_BuildValue("KBN", d_ino, d_type, name); + } +#endif + + return name; + +stop_iteration: + posix_scandir_cleanup(scan); + return NULL; +} +#define scandir_iternext posix_scandir_iternext +#endif + + +#ifdef _WINDOWS_WITHOUT_OPENDIR +static void +windows_scandir_cleanup(scandir_object *scan) +{ + if (scan->h_find_file != INVALID_HANDLE_VALUE) { + HANDLE old_handle = scan->h_find_file; + scan->h_find_file = INVALID_HANDLE_VALUE; Py_BEGIN_ALLOW_THREADS - result = FindNextFile(hFindFile, &FileData); + FindClose(old_handle); Py_END_ALLOW_THREADS - /* FindNextFile sets error to ERROR_NO_MORE_FILES if - it got to the end of the directory. */ - if (!result && GetLastError() != ERROR_NO_MORE_FILES) { - Py_DECREF(list); - list = path_error(path); - goto exit; - } - } while (result == TRUE); - -exit: - if (hFindFile != INVALID_HANDLE_VALUE) { - if (FindClose(hFindFile) == FALSE) { - if (list != NULL) { - Py_DECREF(list); - list = path_error(path); - } - } - } - if (wnamebuf) - free(wnamebuf); - - return list; -} /* end of _listdir_windows_no_opendir */ - -#else /* thus POSIX, ie: not (MS_WINDOWS and not HAVE_OPENDIR) */ - -static PyObject * -_posix_listdir(path_t *path, PyObject *list) -{ - int fd = -1; - - PyObject *v; - DIR *dirp = NULL; - struct dirent *ep; - int return_str; /* if false, return bytes */ - - errno = 0; -#ifdef HAVE_FDOPENDIR - if (path->fd != -1) { - /* closedir() closes the FD, so we duplicate it */ + } + if (scan->path.narrow) { + if (scan->namebuf.narrow != NULL) { + PyMem_Free(scan->namebuf.narrow); + scan->namebuf.narrow = NULL; + } + } else { + if (scan->namebuf.wide != NULL) { + PyMem_Free(scan->namebuf.wide); + scan->namebuf.wide = NULL; + } + } +} + +#else + +static void +posix_scandir_cleanup(scandir_object *scan) +{ + if (scan->dirp != NULL) { + DIR *old_dirp = scan->dirp; + scan->dirp = NULL; Py_BEGIN_ALLOW_THREADS - fd = dup(path->fd); + Py_BLOCK_THREADS + if (scan->dir_fd > -1) { + /* dir_fd gets closed by closedir. This will reset path.fd that + * this fd is a dup() of back to its starting position. */ + Py_UNBLOCK_THREADS + rewinddir(old_dirp); + } else { + Py_UNBLOCK_THREADS + } + closedir(old_dirp); Py_END_ALLOW_THREADS - - if (fd == -1) { - list = posix_error(); - goto exit; - } - - return_str = 1; - - Py_BEGIN_ALLOW_THREADS - dirp = fdopendir(fd); - Py_END_ALLOW_THREADS - } - else -#endif - { - char *name; - if (path->narrow) { - name = path->narrow; - /* only return bytes if they specified a bytes object */ - return_str = !(PyBytes_Check(path->object)); - } - else { - name = "."; - return_str = 1; - } - - Py_BEGIN_ALLOW_THREADS - dirp = opendir(name); - Py_END_ALLOW_THREADS - } - - if (dirp == NULL) { - list = path_error(path); - goto exit; - } - if ((list = PyList_New(0)) == NULL) { - goto exit; - } - for (;;) { - errno = 0; - Py_BEGIN_ALLOW_THREADS - ep = readdir(dirp); - Py_END_ALLOW_THREADS - if (ep == NULL) { - if (errno == 0) { - break; - } else { - Py_DECREF(list); - list = path_error(path); - goto exit; - } - } - if (ep->d_name[0] == '.' && - (NAMLEN(ep) == 1 || - (ep->d_name[1] == '.' && NAMLEN(ep) == 2))) - continue; - if (return_str) - v = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, NAMLEN(ep)); - else - v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep)); - if (v == NULL) { - Py_CLEAR(list); - break; - } - if (PyList_Append(list, v) != 0) { - Py_DECREF(v); - Py_CLEAR(list); - break; - } - Py_DECREF(v); - } - -exit: - if (dirp != NULL) { - Py_BEGIN_ALLOW_THREADS - if (fd > -1) - rewinddir(dirp); - closedir(dirp); - Py_END_ALLOW_THREADS - } - - return list; -} /* end of _posix_listdir */ -#endif /* which OS */ - -static PyObject * -posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs) -{ - path_t path; - PyObject *list = NULL; - static char *keywords[] = {"path", NULL}; - PyObject *return_value; - - memset(&path, 0, sizeof(path)); - path.function_name = "listdir"; - path.nullable = 1; -#ifdef HAVE_FDOPENDIR - path.allow_fd = 1; - path.fd = -1; -#endif - - if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", keywords, - path_converter, &path)) { - return NULL; - } - -#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) - return_value = _listdir_windows_no_opendir(&path, list); -#else - return_value = _posix_listdir(&path, list); -#endif - path_cleanup(&path); - return return_value; -} + } +} +#endif + + +static void +scandir_dealloc(scandir_object *scan) +{ +#ifdef _WINDOWS_WITHOUT_OPENDIR + windows_scandir_cleanup(scan); +#else + posix_scandir_cleanup(scan); +#endif + Py_CLEAR(scan->path.object); + path_cleanup(&scan->path); + PyObject_Del(scan); +} + + +PyDoc_STRVAR(scandir_doc, + "scandir(path) - An iterator over the filenames in path."); + + +PyTypeObject PyScanDir_Type = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "scandir", /* Name of this type */ + sizeof(scandir_object), /* Basic object size */ + 0, /* Item size for varobject */ + (destructor)scandir_dealloc, /* tp_dealloc */ + NULL, /* tp_print */ + NULL, /* tp_getattr */ + NULL, /* tp_setattr */ + NULL, /* tp_reserved */ + (reprfunc)scandir_repr, /* tp_repr */ + NULL, /* tp_as_number */ + NULL, /* tp_as_sequence */ + NULL, /* tp_as_mapping */ + NULL, /* tp_hash */ + NULL, /* tp_call */ + NULL, /* tp_str */ + NULL, /* tp_getattro */ + NULL, /* tp_setattro */ + NULL, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + scandir_doc, /* tp_doc */ + NULL, /* tp_traverse */ + NULL, /* tp_clear */ + NULL, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + (getiterfunc)scandir_iter, /* tp_iter */ + (iternextfunc)scandir_iternext, /* tp_iternext */ + NULL, /* tp_methods */ + NULL, /* tp_members */ + NULL, /* tp_getset */ + NULL, /* tp_base */ + NULL, /* tp_dict */ + NULL, /* tp_descr_get */ + NULL, /* tp_descr_set */ + 0, /* tp_dictoffset */ + NULL, /* tp_init */ + NULL, /* tp_alloc */ + (newfunc)scandir_new, /* tp_new */ +}; + #ifdef MS_WINDOWS /* A helper function for abspath on win32 */ @@ -10349,9 +10545,6 @@ METH_VARARGS | METH_KEYWORDS, posix_link__doc__}, #endif /* HAVE_LINK */ - {"listdir", (PyCFunction)posix_listdir, - METH_VARARGS | METH_KEYWORDS, - posix_listdir__doc__}, {"lstat", (PyCFunction)posix_lstat, METH_VARARGS | METH_KEYWORDS, posix_lstat__doc__}, @@ -10386,6 +10579,9 @@ {"rmdir", (PyCFunction)posix_rmdir, METH_VARARGS | METH_KEYWORDS, posix_rmdir__doc__}, + {"scandir", (PyCFunction)posix_scandir, + METH_VARARGS | METH_KEYWORDS, + posix_scandir__doc__}, {"stat", (PyCFunction)posix_stat, METH_VARARGS | METH_KEYWORDS, posix_stat__doc__}, diff -r 0c9415ddf403 Python/importlib.h --- a/Python/importlib.h Sun Mar 31 20:37:34 2013 +0200 +++ b/Python/importlib.h Sun Mar 31 14:03:49 2013 -0700 @@ -2797,718 +2797,718 @@ 1,13,1,117,22,0,0,0,70,105,108,101,70,105,110,100, 101,114,46,102,105,110,100,95,108,111,97,100,101,114,99,1, 0,0,0,0,0,0,0,9,0,0,0,13,0,0,0,67, - 0,0,0,115,2,1,0,0,124,0,0,106,0,0,125,1, - 0,121,19,0,116,1,0,106,2,0,124,1,0,131,1,0, - 125,2,0,87,110,33,0,4,116,3,0,116,4,0,116,5, - 0,102,3,0,107,10,0,114,63,0,1,1,1,103,0,0, - 125,2,0,89,110,1,0,88,116,6,0,106,7,0,106,8, - 0,100,1,0,131,1,0,115,100,0,116,9,0,124,2,0, - 131,1,0,124,0,0,95,10,0,110,111,0,116,9,0,131, - 0,0,125,3,0,120,90,0,124,2,0,68,93,82,0,125, - 4,0,124,4,0,106,11,0,100,2,0,131,1,0,92,3, - 0,125,5,0,125,6,0,125,7,0,124,6,0,114,179,0, - 100,3,0,106,12,0,124,5,0,124,7,0,106,13,0,131, - 0,0,131,2,0,125,8,0,110,6,0,124,5,0,125,8, - 0,124,3,0,106,14,0,124,8,0,131,1,0,1,113,116, - 0,87,124,3,0,124,0,0,95,10,0,116,6,0,106,7, - 0,106,8,0,116,15,0,131,1,0,114,254,0,100,4,0, - 100,5,0,132,0,0,124,2,0,68,131,1,0,124,0,0, - 95,16,0,110,0,0,100,6,0,83,40,7,0,0,0,117, - 68,0,0,0,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,104,0, - 0,0,117,5,0,0,0,123,125,46,123,125,99,1,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,83,0,0, - 0,115,28,0,0,0,104,0,0,124,0,0,93,18,0,125, - 1,0,124,1,0,106,0,0,131,0,0,146,2,0,113,6, - 0,83,114,4,0,0,0,40,1,0,0,0,114,127,0,0, - 0,40,2,0,0,0,114,22,0,0,0,116,2,0,0,0, - 102,110,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,245,9,0,0,0,60,115,101,116,99,111,109,112,62,150, - 5,0,0,115,2,0,0,0,9,0,117,41,0,0,0,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,40,17,0,0,0,114,35, - 0,0,0,114,3,0,0,0,116,7,0,0,0,108,105,115, - 116,100,105,114,244,17,0,0,0,70,105,108,101,78,111,116, - 70,111,117,110,100,69,114,114,111,114,244,15,0,0,0,80, - 101,114,109,105,115,115,105,111,110,69,114,114,111,114,244,18, - 0,0,0,78,111,116,65,68,105,114,101,99,116,111,114,121, - 69,114,114,111,114,114,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,114,33,1,0,0,114,34,1,0,0,114,109, - 0,0,0,114,46,0,0,0,114,127,0,0,0,244,3,0, - 0,0,97,100,100,114,10,0,0,0,114,35,1,0,0,40, - 9,0,0,0,114,78,0,0,0,114,35,0,0,0,116,8, - 0,0,0,99,111,110,116,101,110,116,115,116,21,0,0,0, - 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, - 116,101,110,116,115,114,15,1,0,0,114,66,0,0,0,114, - 9,1,0,0,114,253,0,0,0,116,8,0,0,0,110,101, - 119,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,36,1,0,0,121,5,0,0,115,34, - 0,0,0,0,2,9,1,3,1,19,1,22,3,11,3,18, - 1,18,7,9,1,13,1,24,1,6,1,27,2,6,1,17, - 1,9,1,18,1,117,22,0,0,0,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,3,0,0,0,3,0,0, - 0,7,0,0,0,115,25,0,0,0,135,0,0,135,1,0, - 102,2,0,100,1,0,100,2,0,134,0,0,125,2,0,124, - 2,0,83,40,3,0,0,0,117,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,1,0,0,0,4,0, - 0,0,19,0,0,0,115,46,0,0,0,116,0,0,124,0, - 0,131,1,0,115,33,0,116,1,0,100,1,0,100,2,0, - 124,0,0,131,1,1,130,1,0,110,0,0,136,0,0,124, - 0,0,136,1,0,140,1,0,83,40,3,0,0,0,117,45, - 0,0,0,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, - 117,30,0,0,0,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,35,0,0,0,40,2,0,0,0,114,45,0, - 0,0,114,151,0,0,0,40,1,0,0,0,114,35,0,0, - 0,40,2,0,0,0,114,192,0,0,0,244,14,0,0,0, - 108,111,97,100,101,114,95,100,101,116,97,105,108,115,114,4, - 0,0,0,114,5,0,0,0,244,24,0,0,0,112,97,116, - 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, - 105,110,100,101,114,162,5,0,0,115,6,0,0,0,0,2, - 12,1,21,1,117,54,0,0,0,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, - 4,0,0,0,40,3,0,0,0,114,192,0,0,0,114,42, - 1,0,0,114,43,1,0,0,114,4,0,0,0,40,2,0, - 0,0,114,192,0,0,0,114,42,1,0,0,114,5,0,0, - 0,244,9,0,0,0,112,97,116,104,95,104,111,111,107,152, - 5,0,0,115,4,0,0,0,0,10,21,6,117,20,0,0, - 0,70,105,108,101,70,105,110,100,101,114,46,112,97,116,104, - 95,104,111,111,107,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,100, - 1,0,106,0,0,124,0,0,106,1,0,131,1,0,83,40, - 2,0,0,0,78,117,16,0,0,0,70,105,108,101,70,105, - 110,100,101,114,40,123,33,114,125,41,40,2,0,0,0,114, - 46,0,0,0,114,35,0,0,0,40,1,0,0,0,114,78, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,90,0,0,0,170,5,0,0,115,2,0,0,0, - 0,1,117,19,0,0,0,70,105,108,101,70,105,110,100,101, - 114,46,95,95,114,101,112,114,95,95,78,40,13,0,0,0, - 114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,114, - 58,0,0,0,114,79,0,0,0,114,19,1,0,0,114,173, - 0,0,0,114,194,0,0,0,114,166,0,0,0,114,36,1, - 0,0,114,198,0,0,0,114,44,1,0,0,114,90,0,0, - 0,40,1,0,0,0,114,69,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,30,1,0,0,50, - 5,0,0,115,16,0,0,0,16,7,6,2,12,14,12,4, - 6,2,12,42,12,31,18,18,114,30,1,0,0,99,1,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,66,0, - 0,0,115,50,0,0,0,124,0,0,69,101,0,0,90,1, - 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, - 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, - 0,0,90,5,0,100,6,0,83,40,7,0,0,0,244,18, - 0,0,0,95,73,109,112,111,114,116,76,111,99,107,67,111, - 110,116,101,120,116,117,36,0,0,0,67,111,110,116,101,120, - 116,32,109,97,110,97,103,101,114,32,102,111,114,32,116,104, - 101,32,105,109,112,111,114,116,32,108,111,99,107,46,99,1, - 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,67, - 0,0,0,115,14,0,0,0,116,0,0,106,1,0,131,0, - 0,1,100,1,0,83,40,2,0,0,0,117,24,0,0,0, - 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, - 114,116,32,108,111,99,107,46,78,40,2,0,0,0,114,97, - 0,0,0,244,12,0,0,0,97,99,113,117,105,114,101,95, - 108,111,99,107,40,1,0,0,0,114,78,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,244,9,0, - 0,0,95,95,101,110,116,101,114,95,95,180,5,0,0,115, - 2,0,0,0,0,2,117,28,0,0,0,95,73,109,112,111, + 0,0,0,115,5,1,0,0,124,0,0,106,0,0,125,1, + 0,121,25,0,116,1,0,116,2,0,106,3,0,124,1,0, + 131,1,0,131,1,0,125,2,0,87,110,36,0,4,116,4, + 0,116,5,0,116,6,0,102,3,0,107,10,0,114,72,0, + 1,1,1,116,1,0,131,0,0,125,2,0,89,110,1,0, + 88,116,7,0,106,8,0,106,9,0,100,1,0,131,1,0, + 115,103,0,124,2,0,124,0,0,95,10,0,110,111,0,116, + 1,0,131,0,0,125,3,0,120,90,0,124,2,0,68,93, + 82,0,125,4,0,124,4,0,106,11,0,100,2,0,131,1, + 0,92,3,0,125,5,0,125,6,0,125,7,0,124,6,0, + 114,182,0,100,3,0,106,12,0,124,5,0,124,7,0,106, + 13,0,131,0,0,131,2,0,125,8,0,110,6,0,124,5, + 0,125,8,0,124,3,0,106,14,0,124,8,0,131,1,0, + 1,113,119,0,87,124,3,0,124,0,0,95,10,0,116,7, + 0,106,8,0,106,9,0,116,15,0,131,1,0,114,1,1, + 100,4,0,100,5,0,132,0,0,124,2,0,68,131,1,0, + 124,0,0,95,16,0,110,0,0,100,6,0,83,40,7,0, + 0,0,117,68,0,0,0,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,104,0,0,0,117,5,0,0,0,123,125,46,123,125,99, + 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 83,0,0,0,115,28,0,0,0,104,0,0,124,0,0,93, + 18,0,125,1,0,124,1,0,106,0,0,131,0,0,146,2, + 0,113,6,0,83,114,4,0,0,0,40,1,0,0,0,114, + 127,0,0,0,40,2,0,0,0,114,22,0,0,0,116,2, + 0,0,0,102,110,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,245,9,0,0,0,60,115,101,116,99,111,109, + 112,62,150,5,0,0,115,2,0,0,0,9,0,117,41,0, + 0,0,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,40,17,0,0, + 0,114,35,0,0,0,114,33,1,0,0,114,3,0,0,0, + 116,7,0,0,0,115,99,97,110,100,105,114,244,17,0,0, + 0,70,105,108,101,78,111,116,70,111,117,110,100,69,114,114, + 111,114,244,15,0,0,0,80,101,114,109,105,115,115,105,111, + 110,69,114,114,111,114,244,18,0,0,0,78,111,116,65,68, + 105,114,101,99,116,111,114,121,69,114,114,111,114,114,7,0, + 0,0,114,8,0,0,0,114,9,0,0,0,114,34,1,0, + 0,114,109,0,0,0,114,46,0,0,0,114,127,0,0,0, + 244,3,0,0,0,97,100,100,114,10,0,0,0,114,35,1, + 0,0,40,9,0,0,0,114,78,0,0,0,114,35,0,0, + 0,116,8,0,0,0,99,111,110,116,101,110,116,115,116,21, + 0,0,0,108,111,119,101,114,95,115,117,102,102,105,120,95, + 99,111,110,116,101,110,116,115,114,15,1,0,0,114,66,0, + 0,0,114,9,1,0,0,114,253,0,0,0,116,8,0,0, + 0,110,101,119,95,110,97,109,101,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,36,1,0,0,121,5,0, + 0,115,34,0,0,0,0,2,9,1,3,1,25,1,22,3, + 14,3,18,1,12,7,9,1,13,1,24,1,6,1,27,2, + 6,1,17,1,9,1,18,1,117,22,0,0,0,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,3,0,0,0, + 3,0,0,0,7,0,0,0,115,25,0,0,0,135,0,0, + 135,1,0,102,2,0,100,1,0,100,2,0,134,0,0,125, + 2,0,124,2,0,83,40,3,0,0,0,117,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,1,0,0, + 0,4,0,0,0,19,0,0,0,115,46,0,0,0,116,0, + 0,124,0,0,131,1,0,115,33,0,116,1,0,100,1,0, + 100,2,0,124,0,0,131,1,1,130,1,0,110,0,0,136, + 0,0,124,0,0,136,1,0,140,1,0,83,40,3,0,0, + 0,117,45,0,0,0,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,117,30,0,0,0,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,35,0,0,0,40,2,0,0,0, + 114,45,0,0,0,114,151,0,0,0,40,1,0,0,0,114, + 35,0,0,0,40,2,0,0,0,114,192,0,0,0,244,14, + 0,0,0,108,111,97,100,101,114,95,100,101,116,97,105,108, + 115,114,4,0,0,0,114,5,0,0,0,244,24,0,0,0, + 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, + 108,101,70,105,110,100,101,114,162,5,0,0,115,6,0,0, + 0,0,2,12,1,21,1,117,54,0,0,0,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,4,0,0,0,40,3,0,0,0,114,192,0,0, + 0,114,42,1,0,0,114,43,1,0,0,114,4,0,0,0, + 40,2,0,0,0,114,192,0,0,0,114,42,1,0,0,114, + 5,0,0,0,244,9,0,0,0,112,97,116,104,95,104,111, + 111,107,152,5,0,0,115,4,0,0,0,0,10,21,6,117, + 20,0,0,0,70,105,108,101,70,105,110,100,101,114,46,112, + 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,100,1,0,106,0,0,124,0,0,106,1,0,131,1, + 0,83,40,2,0,0,0,78,117,16,0,0,0,70,105,108, + 101,70,105,110,100,101,114,40,123,33,114,125,41,40,2,0, + 0,0,114,46,0,0,0,114,35,0,0,0,40,1,0,0, + 0,114,78,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,90,0,0,0,170,5,0,0,115,2, + 0,0,0,0,1,117,19,0,0,0,70,105,108,101,70,105, + 110,100,101,114,46,95,95,114,101,112,114,95,95,78,40,13, + 0,0,0,114,56,0,0,0,114,55,0,0,0,114,57,0, + 0,0,114,58,0,0,0,114,79,0,0,0,114,19,1,0, + 0,114,173,0,0,0,114,194,0,0,0,114,166,0,0,0, + 114,36,1,0,0,114,198,0,0,0,114,44,1,0,0,114, + 90,0,0,0,40,1,0,0,0,114,69,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,30,1, + 0,0,50,5,0,0,115,16,0,0,0,16,7,6,2,12, + 14,12,4,6,2,12,42,12,31,18,18,114,30,1,0,0, + 99,1,0,0,0,0,0,0,0,1,0,0,0,2,0,0, + 0,66,0,0,0,115,50,0,0,0,124,0,0,69,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,90,3,0, + 100,2,0,100,3,0,132,0,0,90,4,0,100,4,0,100, + 5,0,132,0,0,90,5,0,100,6,0,83,40,7,0,0, + 0,244,18,0,0,0,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,117,36,0,0,0,67,111,110, + 116,101,120,116,32,109,97,110,97,103,101,114,32,102,111,114, + 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, + 46,99,1,0,0,0,0,0,0,0,1,0,0,0,1,0, + 0,0,67,0,0,0,115,14,0,0,0,116,0,0,106,1, + 0,131,0,0,1,100,1,0,83,40,2,0,0,0,117,24, + 0,0,0,65,99,113,117,105,114,101,32,116,104,101,32,105, + 109,112,111,114,116,32,108,111,99,107,46,78,40,2,0,0, + 0,114,97,0,0,0,244,12,0,0,0,97,99,113,117,105, + 114,101,95,108,111,99,107,40,1,0,0,0,114,78,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 244,9,0,0,0,95,95,101,110,116,101,114,95,95,180,5, + 0,0,115,2,0,0,0,0,2,117,28,0,0,0,95,73, + 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, + 46,95,95,101,110,116,101,114,95,95,99,4,0,0,0,0, + 0,0,0,4,0,0,0,1,0,0,0,67,0,0,0,115, + 14,0,0,0,116,0,0,106,1,0,131,0,0,1,100,1, + 0,83,40,2,0,0,0,117,60,0,0,0,82,101,108,101, + 97,115,101,32,116,104,101,32,105,109,112,111,114,116,32,108, + 111,99,107,32,114,101,103,97,114,100,108,101,115,115,32,111, + 102,32,97,110,121,32,114,97,105,115,101,100,32,101,120,99, + 101,112,116,105,111,110,115,46,78,40,2,0,0,0,114,97, + 0,0,0,114,98,0,0,0,40,4,0,0,0,114,78,0, + 0,0,116,8,0,0,0,101,120,99,95,116,121,112,101,116, + 9,0,0,0,101,120,99,95,118,97,108,117,101,116,13,0, + 0,0,101,120,99,95,116,114,97,99,101,98,97,99,107,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,8, + 0,0,0,95,95,101,120,105,116,95,95,184,5,0,0,115, + 2,0,0,0,0,2,117,27,0,0,0,95,73,109,112,111, 114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95, - 101,110,116,101,114,95,95,99,4,0,0,0,0,0,0,0, - 4,0,0,0,1,0,0,0,67,0,0,0,115,14,0,0, - 0,116,0,0,106,1,0,131,0,0,1,100,1,0,83,40, - 2,0,0,0,117,60,0,0,0,82,101,108,101,97,115,101, - 32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107, - 32,114,101,103,97,114,100,108,101,115,115,32,111,102,32,97, - 110,121,32,114,97,105,115,101,100,32,101,120,99,101,112,116, - 105,111,110,115,46,78,40,2,0,0,0,114,97,0,0,0, - 114,98,0,0,0,40,4,0,0,0,114,78,0,0,0,116, - 8,0,0,0,101,120,99,95,116,121,112,101,116,9,0,0, - 0,101,120,99,95,118,97,108,117,101,116,13,0,0,0,101, - 120,99,95,116,114,97,99,101,98,97,99,107,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,244,8,0,0,0, - 95,95,101,120,105,116,95,95,184,5,0,0,115,2,0,0, - 0,0,2,117,27,0,0,0,95,73,109,112,111,114,116,76, - 111,99,107,67,111,110,116,101,120,116,46,95,95,101,120,105, - 116,95,95,78,40,6,0,0,0,114,56,0,0,0,114,55, - 0,0,0,114,57,0,0,0,114,58,0,0,0,114,47,1, - 0,0,114,48,1,0,0,40,1,0,0,0,114,69,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,45,1,0,0,176,5,0,0,115,6,0,0,0,16,2, - 6,2,12,4,114,45,1,0,0,99,3,0,0,0,0,0, - 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,91, - 0,0,0,124,1,0,106,0,0,100,1,0,124,2,0,100, - 2,0,24,131,2,0,125,3,0,116,1,0,124,3,0,131, - 1,0,124,2,0,107,0,0,114,55,0,116,2,0,100,3, - 0,131,1,0,130,1,0,110,0,0,124,3,0,100,4,0, - 25,125,4,0,124,0,0,114,87,0,100,5,0,106,3,0, - 124,4,0,124,0,0,131,2,0,83,124,4,0,83,40,6, - 0,0,0,117,50,0,0,0,82,101,115,111,108,118,101,32, - 97,32,114,101,108,97,116,105,118,101,32,109,111,100,117,108, - 101,32,110,97,109,101,32,116,111,32,97,110,32,97,98,115, - 111,108,117,116,101,32,111,110,101,46,114,104,0,0,0,114, - 29,0,0,0,117,50,0,0,0,97,116,116,101,109,112,116, - 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111, - 114,116,32,98,101,121,111,110,100,32,116,111,112,45,108,101, - 118,101,108,32,112,97,99,107,97,103,101,114,71,0,0,0, - 117,5,0,0,0,123,125,46,123,125,40,4,0,0,0,114, - 34,0,0,0,114,31,0,0,0,114,121,0,0,0,114,46, - 0,0,0,40,5,0,0,0,114,66,0,0,0,244,7,0, - 0,0,112,97,99,107,97,103,101,244,5,0,0,0,108,101, - 118,101,108,116,4,0,0,0,98,105,116,115,116,4,0,0, - 0,98,97,115,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,244,13,0,0,0,95,114,101,115,111,108,118, - 101,95,110,97,109,101,189,5,0,0,115,10,0,0,0,0, - 2,22,1,18,1,15,1,10,1,114,51,1,0,0,99,2, - 0,0,0,0,0,0,0,4,0,0,0,11,0,0,0,67, - 0,0,0,115,138,0,0,0,116,0,0,106,1,0,115,28, - 0,116,2,0,106,3,0,100,1,0,116,4,0,131,2,0, - 1,110,0,0,120,103,0,116,0,0,106,1,0,68,93,88, - 0,125,2,0,116,5,0,131,0,0,143,23,0,1,124,2, - 0,106,6,0,124,0,0,124,1,0,131,2,0,125,3,0, - 87,100,2,0,81,88,124,3,0,100,2,0,107,9,0,114, - 38,0,124,0,0,116,0,0,106,7,0,107,7,0,114,109, - 0,124,3,0,83,116,0,0,106,7,0,124,0,0,25,106, - 8,0,83,113,38,0,113,38,0,87,100,2,0,83,100,2, - 0,83,40,3,0,0,0,117,23,0,0,0,70,105,110,100, - 32,97,32,109,111,100,117,108,101,39,115,32,108,111,97,100, - 101,114,46,117,22,0,0,0,115,121,115,46,109,101,116,97, - 95,112,97,116,104,32,105,115,32,101,109,112,116,121,78,40, - 9,0,0,0,114,7,0,0,0,244,9,0,0,0,109,101, - 116,97,95,112,97,116,104,114,167,0,0,0,114,168,0,0, - 0,114,169,0,0,0,114,45,1,0,0,114,194,0,0,0, - 114,149,0,0,0,114,146,0,0,0,40,4,0,0,0,114, - 66,0,0,0,114,35,0,0,0,114,22,1,0,0,114,170, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,244,12,0,0,0,95,102,105,110,100,95,109,111,100, - 117,108,101,198,5,0,0,115,20,0,0,0,0,2,9,1, - 19,1,16,1,10,1,24,1,12,2,15,1,4,2,21,2, - 114,53,1,0,0,99,3,0,0,0,0,0,0,0,4,0, - 0,0,4,0,0,0,67,0,0,0,115,194,0,0,0,116, - 0,0,124,0,0,116,1,0,131,2,0,115,45,0,116,2, - 0,100,1,0,106,3,0,116,4,0,124,0,0,131,1,0, - 131,1,0,131,1,0,130,1,0,110,0,0,124,2,0,100, - 2,0,107,0,0,114,72,0,116,5,0,100,3,0,131,1, - 0,130,1,0,110,0,0,124,1,0,114,156,0,116,0,0, - 124,1,0,116,1,0,131,2,0,115,108,0,116,2,0,100, - 4,0,131,1,0,130,1,0,113,156,0,124,1,0,116,6, - 0,106,7,0,107,7,0,114,156,0,100,5,0,125,3,0, - 116,8,0,124,3,0,106,3,0,124,1,0,131,1,0,131, - 1,0,130,1,0,113,156,0,110,0,0,124,0,0,12,114, - 190,0,124,2,0,100,2,0,107,2,0,114,190,0,116,5, - 0,100,6,0,131,1,0,130,1,0,110,0,0,100,7,0, - 83,40,8,0,0,0,117,28,0,0,0,86,101,114,105,102, - 121,32,97,114,103,117,109,101,110,116,115,32,97,114,101,32, - 34,115,97,110,101,34,46,117,31,0,0,0,109,111,100,117, - 108,101,32,110,97,109,101,32,109,117,115,116,32,98,101,32, - 115,116,114,44,32,110,111,116,32,123,125,114,71,0,0,0, - 117,18,0,0,0,108,101,118,101,108,32,109,117,115,116,32, - 98,101,32,62,61,32,48,117,31,0,0,0,95,95,112,97, - 99,107,97,103,101,95,95,32,110,111,116,32,115,101,116,32, - 116,111,32,97,32,115,116,114,105,110,103,117,61,0,0,0, - 80,97,114,101,110,116,32,109,111,100,117,108,101,32,123,33, - 114,125,32,110,111,116,32,108,111,97,100,101,100,44,32,99, - 97,110,110,111,116,32,112,101,114,102,111,114,109,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,117,17,0, - 0,0,69,109,112,116,121,32,109,111,100,117,108,101,32,110, - 97,109,101,78,40,9,0,0,0,114,184,0,0,0,114,26, - 1,0,0,244,9,0,0,0,84,121,112,101,69,114,114,111, - 114,114,46,0,0,0,114,65,0,0,0,114,121,0,0,0, - 114,7,0,0,0,114,149,0,0,0,244,11,0,0,0,83, - 121,115,116,101,109,69,114,114,111,114,40,4,0,0,0,114, - 66,0,0,0,114,49,1,0,0,114,50,1,0,0,114,172, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,244,13,0,0,0,95,115,97,110,105,116,121,95,99, - 104,101,99,107,215,5,0,0,115,24,0,0,0,0,2,15, - 1,30,1,12,1,15,1,6,1,15,1,15,1,15,1,6, - 2,27,1,19,1,114,56,1,0,0,117,20,0,0,0,78, - 111,32,109,111,100,117,108,101,32,110,97,109,101,100,32,123, - 33,114,125,99,2,0,0,0,0,0,0,0,9,0,0,0, - 27,0,0,0,67,0,0,0,115,21,2,0,0,100,0,0, - 125,2,0,124,0,0,106,0,0,100,1,0,131,1,0,100, - 2,0,25,125,3,0,124,3,0,114,178,0,124,3,0,116, - 1,0,106,2,0,107,7,0,114,62,0,116,3,0,124,1, - 0,124,3,0,131,2,0,1,110,0,0,124,0,0,116,1, - 0,106,2,0,107,6,0,114,88,0,116,1,0,106,2,0, - 124,0,0,25,83,116,1,0,106,2,0,124,3,0,25,125, - 4,0,121,13,0,124,4,0,106,4,0,125,2,0,87,113, - 178,0,4,116,5,0,107,10,0,114,174,0,1,1,1,116, - 6,0,100,3,0,23,106,7,0,124,0,0,124,3,0,131, - 2,0,125,5,0,116,8,0,124,5,0,100,4,0,124,0, - 0,131,1,1,130,1,0,89,113,178,0,88,110,0,0,116, - 9,0,124,0,0,124,2,0,131,2,0,125,6,0,124,6, - 0,100,0,0,107,8,0,114,250,0,116,8,0,116,6,0, - 106,7,0,124,0,0,131,1,0,100,4,0,124,0,0,131, - 1,1,125,7,0,100,5,0,124,7,0,95,10,0,124,7, - 0,130,1,0,110,47,0,124,0,0,116,1,0,106,2,0, - 107,7,0,114,41,1,124,6,0,106,11,0,124,0,0,131, - 1,0,1,116,12,0,100,6,0,124,0,0,124,6,0,131, - 3,0,1,110,0,0,116,1,0,106,2,0,124,0,0,25, - 125,8,0,124,3,0,114,105,1,116,1,0,106,2,0,124, - 3,0,25,125,4,0,116,13,0,124,4,0,124,0,0,106, - 0,0,100,1,0,131,1,0,100,7,0,25,124,8,0,131, - 3,0,1,110,0,0,116,14,0,124,8,0,100,8,0,100, - 0,0,131,3,0,100,0,0,107,8,0,114,212,1,121,59, - 0,124,8,0,106,15,0,124,8,0,95,16,0,116,17,0, - 124,8,0,100,9,0,131,2,0,115,187,1,124,8,0,106, - 16,0,106,0,0,100,1,0,131,1,0,100,2,0,25,124, - 8,0,95,16,0,110,0,0,87,113,212,1,4,116,5,0, - 107,10,0,114,208,1,1,1,1,89,113,212,1,88,110,0, - 0,116,14,0,124,8,0,100,10,0,100,0,0,131,3,0, - 100,0,0,107,8,0,114,17,2,121,13,0,124,6,0,124, - 8,0,95,18,0,87,113,17,2,4,116,5,0,107,10,0, - 114,13,2,1,1,1,89,113,17,2,88,110,0,0,124,8, - 0,83,40,11,0,0,0,78,114,104,0,0,0,114,71,0, - 0,0,117,21,0,0,0,59,32,123,125,32,105,115,32,110, - 111,116,32,97,32,112,97,99,107,97,103,101,114,66,0,0, - 0,84,117,18,0,0,0,105,109,112,111,114,116,32,123,33, - 114,125,32,35,32,123,33,114,125,114,103,0,0,0,114,139, - 0,0,0,114,140,0,0,0,114,146,0,0,0,40,19,0, - 0,0,114,32,0,0,0,114,7,0,0,0,114,149,0,0, - 0,114,102,0,0,0,114,140,0,0,0,114,152,0,0,0, - 244,8,0,0,0,95,69,82,82,95,77,83,71,114,46,0, - 0,0,114,151,0,0,0,114,53,1,0,0,244,10,0,0, - 0,95,110,111,116,95,102,111,117,110,100,114,195,0,0,0, - 114,138,0,0,0,114,60,0,0,0,114,61,0,0,0,114, - 56,0,0,0,114,139,0,0,0,114,59,0,0,0,114,146, - 0,0,0,40,9,0,0,0,114,66,0,0,0,244,7,0, - 0,0,105,109,112,111,114,116,95,114,35,0,0,0,114,250, - 0,0,0,116,13,0,0,0,112,97,114,101,110,116,95,109, - 111,100,117,108,101,114,172,0,0,0,114,170,0,0,0,114, - 232,0,0,0,114,142,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,244,23,0,0,0,95,102,105, - 110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,111, - 99,107,101,100,234,5,0,0,115,76,0,0,0,0,1,6, - 1,19,1,6,1,15,1,16,2,15,1,11,2,13,1,3, - 1,13,1,13,1,22,1,26,1,15,1,12,1,27,3,9, - 1,9,1,15,2,13,1,19,2,13,1,6,2,13,1,32, - 2,24,1,3,1,12,1,15,1,32,1,13,1,8,2,24, - 1,3,1,13,1,13,1,8,1,114,60,1,0,0,99,2, - 0,0,0,0,0,0,0,3,0,0,0,18,0,0,0,67, - 0,0,0,115,75,0,0,0,122,16,0,116,0,0,124,0, - 0,131,1,0,125,2,0,87,100,1,0,116,1,0,106,2, - 0,131,0,0,1,88,124,2,0,106,3,0,131,0,0,1, - 122,17,0,116,4,0,124,0,0,124,1,0,131,2,0,83, - 87,100,1,0,124,2,0,106,5,0,131,0,0,1,88,100, - 1,0,83,40,2,0,0,0,117,54,0,0,0,70,105,110, - 100,32,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,32,116,104,101,32,105,109,112,111,114,116,32,108,111, - 99,107,46,78,40,6,0,0,0,114,96,0,0,0,114,97, - 0,0,0,114,98,0,0,0,114,86,0,0,0,114,60,1, - 0,0,114,87,0,0,0,40,3,0,0,0,114,66,0,0, - 0,114,59,1,0,0,114,73,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,244,14,0,0,0,95, - 102,105,110,100,95,97,110,100,95,108,111,97,100,28,6,0, - 0,115,14,0,0,0,0,2,3,1,16,2,11,1,10,1, - 3,1,17,2,114,61,1,0,0,99,3,0,0,0,0,0, - 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,172, - 0,0,0,116,0,0,124,0,0,124,1,0,124,2,0,131, - 3,0,1,124,2,0,100,1,0,107,4,0,114,49,0,116, - 1,0,124,0,0,124,1,0,124,2,0,131,3,0,125,0, - 0,110,0,0,116,2,0,106,3,0,131,0,0,1,124,0, - 0,116,4,0,106,5,0,107,7,0,114,87,0,116,6,0, - 124,0,0,116,7,0,131,2,0,83,116,4,0,106,5,0, - 124,0,0,25,125,3,0,124,3,0,100,2,0,107,8,0, - 114,158,0,116,2,0,106,8,0,131,0,0,1,100,3,0, - 106,9,0,124,0,0,131,1,0,125,4,0,116,10,0,124, - 4,0,100,4,0,124,0,0,131,1,1,130,1,0,110,0, - 0,116,11,0,124,0,0,131,1,0,1,124,3,0,83,40, - 5,0,0,0,117,50,1,0,0,73,109,112,111,114,116,32, - 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,109, - 111,100,117,108,101,32,98,97,115,101,100,32,111,110,32,105, - 116,115,32,110,97,109,101,44,32,116,104,101,32,112,97,99, - 107,97,103,101,32,116,104,101,32,99,97,108,108,32,105,115, - 10,32,32,32,32,98,101,105,110,103,32,109,97,100,101,32, - 102,114,111,109,44,32,97,110,100,32,116,104,101,32,108,101, - 118,101,108,32,97,100,106,117,115,116,109,101,110,116,46,10, - 10,32,32,32,32,84,104,105,115,32,102,117,110,99,116,105, - 111,110,32,114,101,112,114,101,115,101,110,116,115,32,116,104, - 101,32,103,114,101,97,116,101,115,116,32,99,111,109,109,111, - 110,32,100,101,110,111,109,105,110,97,116,111,114,32,111,102, - 32,102,117,110,99,116,105,111,110,97,108,105,116,121,10,32, - 32,32,32,98,101,116,119,101,101,110,32,105,109,112,111,114, - 116,95,109,111,100,117,108,101,32,97,110,100,32,95,95,105, - 109,112,111,114,116,95,95,46,32,84,104,105,115,32,105,110, - 99,108,117,100,101,115,32,115,101,116,116,105,110,103,32,95, - 95,112,97,99,107,97,103,101,95,95,32,105,102,10,32,32, - 32,32,116,104,101,32,108,111,97,100,101,114,32,100,105,100, - 32,110,111,116,46,10,10,32,32,32,32,114,71,0,0,0, - 78,117,40,0,0,0,105,109,112,111,114,116,32,111,102,32, - 123,125,32,104,97,108,116,101,100,59,32,78,111,110,101,32, - 105,110,32,115,121,115,46,109,111,100,117,108,101,115,114,66, - 0,0,0,40,12,0,0,0,114,56,1,0,0,114,51,1, - 0,0,114,97,0,0,0,114,46,1,0,0,114,7,0,0, - 0,114,149,0,0,0,114,61,1,0,0,244,11,0,0,0, - 95,103,99,100,95,105,109,112,111,114,116,114,98,0,0,0, - 114,46,0,0,0,114,151,0,0,0,114,99,0,0,0,40, - 5,0,0,0,114,66,0,0,0,114,49,1,0,0,114,50, - 1,0,0,114,142,0,0,0,114,137,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,62,1,0, - 0,41,6,0,0,115,26,0,0,0,0,9,16,1,12,1, - 21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,1, - 21,1,10,1,114,62,1,0,0,99,3,0,0,0,0,0, - 0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,254, - 0,0,0,116,0,0,124,0,0,100,1,0,131,2,0,114, - 250,0,100,2,0,124,1,0,107,6,0,114,89,0,116,1, - 0,124,1,0,131,1,0,125,1,0,124,1,0,106,2,0, - 100,2,0,131,1,0,1,116,0,0,124,0,0,100,3,0, - 131,2,0,114,89,0,124,1,0,106,3,0,124,0,0,106, - 4,0,131,1,0,1,113,89,0,110,0,0,120,158,0,124, - 1,0,68,93,147,0,125,3,0,116,0,0,124,0,0,124, - 3,0,131,2,0,115,96,0,100,4,0,106,5,0,124,0, - 0,106,6,0,124,3,0,131,2,0,125,4,0,121,17,0, - 116,7,0,124,2,0,124,4,0,131,2,0,1,87,113,243, - 0,4,116,8,0,107,10,0,114,239,0,1,125,5,0,1, - 122,50,0,116,9,0,124,5,0,100,5,0,100,6,0,131, - 3,0,114,218,0,124,5,0,106,10,0,124,4,0,107,2, - 0,114,218,0,119,96,0,113,218,0,110,0,0,130,0,0, - 87,89,100,7,0,100,7,0,125,5,0,126,5,0,88,113, - 243,0,88,113,96,0,113,96,0,87,110,0,0,124,0,0, - 83,40,8,0,0,0,117,238,0,0,0,70,105,103,117,114, - 101,32,111,117,116,32,119,104,97,116,32,95,95,105,109,112, - 111,114,116,95,95,32,115,104,111,117,108,100,32,114,101,116, - 117,114,110,46,10,10,32,32,32,32,84,104,101,32,105,109, - 112,111,114,116,95,32,112,97,114,97,109,101,116,101,114,32, - 105,115,32,97,32,99,97,108,108,97,98,108,101,32,119,104, - 105,99,104,32,116,97,107,101,115,32,116,104,101,32,110,97, - 109,101,32,111,102,32,109,111,100,117,108,101,32,116,111,10, - 32,32,32,32,105,109,112,111,114,116,46,32,73,116,32,105, - 115,32,114,101,113,117,105,114,101,100,32,116,111,32,100,101, - 99,111,117,112,108,101,32,116,104,101,32,102,117,110,99,116, - 105,111,110,32,102,114,111,109,32,97,115,115,117,109,105,110, - 103,32,105,109,112,111,114,116,108,105,98,39,115,10,32,32, - 32,32,105,109,112,111,114,116,32,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,32,105,115,32,100,101,115,105,114, - 101,100,46,10,10,32,32,32,32,114,140,0,0,0,245,1, - 0,0,0,42,244,7,0,0,0,95,95,97,108,108,95,95, - 117,5,0,0,0,123,125,46,123,125,114,58,1,0,0,70, - 78,40,11,0,0,0,114,59,0,0,0,244,4,0,0,0, - 108,105,115,116,244,6,0,0,0,114,101,109,111,118,101,114, - 189,0,0,0,114,64,1,0,0,114,46,0,0,0,114,56, - 0,0,0,114,102,0,0,0,114,151,0,0,0,114,61,0, - 0,0,114,66,0,0,0,40,6,0,0,0,114,142,0,0, - 0,244,8,0,0,0,102,114,111,109,108,105,115,116,114,59, - 1,0,0,114,16,0,0,0,116,9,0,0,0,102,114,111, - 109,95,110,97,109,101,114,232,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,244,16,0,0,0,95, - 104,97,110,100,108,101,95,102,114,111,109,108,105,115,116,65, - 6,0,0,115,34,0,0,0,0,10,15,1,12,1,12,1, - 13,1,15,1,22,1,13,1,15,1,21,1,3,1,17,1, - 18,6,18,1,15,1,9,1,32,1,114,68,1,0,0,99, - 1,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, - 67,0,0,0,115,78,0,0,0,124,0,0,106,0,0,100, - 1,0,131,1,0,125,1,0,124,1,0,100,2,0,107,8, - 0,114,74,0,124,0,0,100,3,0,25,125,1,0,100,4, - 0,124,0,0,107,7,0,114,74,0,124,1,0,106,1,0, - 100,5,0,131,1,0,100,6,0,25,125,1,0,113,74,0, - 110,0,0,124,1,0,83,40,7,0,0,0,117,167,0,0, - 0,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32, - 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117, - 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97, - 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103, - 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32, - 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100, - 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10, - 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116, - 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114, - 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119, - 110,46,10,10,32,32,32,32,114,139,0,0,0,78,114,56, - 0,0,0,114,140,0,0,0,114,104,0,0,0,114,71,0, - 0,0,40,2,0,0,0,114,82,0,0,0,114,32,0,0, - 0,40,2,0,0,0,244,7,0,0,0,103,108,111,98,97, - 108,115,114,49,1,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,244,17,0,0,0,95,99,97,108,99, - 95,95,95,112,97,99,107,97,103,101,95,95,99,6,0,0, - 115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,25, - 1,114,70,1,0,0,99,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,0, - 116,0,0,116,1,0,106,2,0,131,0,0,102,2,0,125, - 0,0,116,3,0,116,4,0,102,2,0,125,1,0,116,5, - 0,116,6,0,102,2,0,125,2,0,124,0,0,124,1,0, - 124,2,0,103,3,0,83,40,1,0,0,0,117,111,0,0, - 0,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,44,32,97,108,108,111,119, - 95,112,97,99,107,97,103,101,115,41,46,10,32,32,32,32, - 40,7,0,0,0,114,252,0,0,0,114,97,0,0,0,244, - 18,0,0,0,101,120,116,101,110,115,105,111,110,95,115,117, - 102,102,105,120,101,115,114,244,0,0,0,114,122,0,0,0, - 114,251,0,0,0,244,17,0,0,0,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,40,3,0,0,0, - 116,10,0,0,0,101,120,116,101,110,115,105,111,110,115,116, - 6,0,0,0,115,111,117,114,99,101,116,8,0,0,0,98, - 121,116,101,99,111,100,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,212,0,0,0,114,6,0,0,115, - 8,0,0,0,0,5,18,1,12,1,12,1,114,212,0,0, - 0,99,5,0,0,0,0,0,0,0,9,0,0,0,5,0, - 0,0,67,0,0,0,115,227,0,0,0,124,4,0,100,1, - 0,107,2,0,114,27,0,116,0,0,124,0,0,131,1,0, - 125,5,0,110,54,0,124,1,0,100,2,0,107,9,0,114, - 45,0,124,1,0,110,3,0,105,0,0,125,6,0,116,1, - 0,124,6,0,131,1,0,125,7,0,116,0,0,124,0,0, - 124,7,0,124,4,0,131,3,0,125,5,0,124,3,0,115, - 207,0,124,4,0,100,1,0,107,2,0,114,122,0,116,0, - 0,124,0,0,106,2,0,100,3,0,131,1,0,100,1,0, - 25,131,1,0,83,124,0,0,115,132,0,124,5,0,83,116, - 3,0,124,0,0,131,1,0,116,3,0,124,0,0,106,2, - 0,100,3,0,131,1,0,100,1,0,25,131,1,0,24,125, - 8,0,116,4,0,106,5,0,124,5,0,106,6,0,100,2, - 0,116,3,0,124,5,0,106,6,0,131,1,0,124,8,0, - 24,133,2,0,25,25,83,110,16,0,116,7,0,124,5,0, - 124,3,0,116,0,0,131,3,0,83,100,2,0,83,40,4, - 0,0,0,117,214,1,0,0,73,109,112,111,114,116,32,97, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, - 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, - 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, - 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, - 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, - 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, - 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, - 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, - 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, - 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, - 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, - 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, - 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, - 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, - 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, - 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, - 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, - 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, - 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, - 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, - 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, - 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, - 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, - 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, - 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, - 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, - 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, - 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, - 39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,71, - 0,0,0,78,114,104,0,0,0,40,8,0,0,0,114,62, - 1,0,0,114,70,1,0,0,114,109,0,0,0,114,31,0, - 0,0,114,7,0,0,0,114,149,0,0,0,114,56,0,0, - 0,114,68,1,0,0,40,9,0,0,0,114,66,0,0,0, - 114,69,1,0,0,244,6,0,0,0,108,111,99,97,108,115, - 114,67,1,0,0,114,50,1,0,0,114,142,0,0,0,116, - 8,0,0,0,103,108,111,98,97,108,115,95,114,49,1,0, - 0,116,7,0,0,0,99,117,116,95,111,102,102,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,244,10,0,0, - 0,95,95,105,109,112,111,114,116,95,95,125,6,0,0,115, - 26,0,0,0,0,11,12,1,15,2,24,1,12,1,18,1, - 6,3,12,1,23,1,6,1,4,4,35,3,40,2,114,74, - 1,0,0,99,2,0,0,0,0,0,0,0,16,0,0,0, - 13,0,0,0,67,0,0,0,115,228,2,0,0,124,1,0, - 97,0,0,124,0,0,97,1,0,116,1,0,106,2,0,106, - 3,0,114,33,0,116,4,0,97,5,0,110,6,0,116,6, - 0,97,5,0,116,7,0,116,1,0,131,1,0,125,2,0, - 120,119,0,116,1,0,106,8,0,106,9,0,131,0,0,68, - 93,102,0,92,2,0,125,3,0,125,4,0,116,10,0,124, - 4,0,124,2,0,131,2,0,114,67,0,116,11,0,124,4, - 0,100,1,0,131,2,0,115,169,0,124,3,0,116,1,0, - 106,12,0,107,6,0,114,136,0,116,13,0,124,4,0,95, - 14,0,113,166,0,116,0,0,106,15,0,124,3,0,131,1, - 0,114,166,0,116,16,0,124,4,0,95,14,0,113,166,0, - 113,169,0,113,67,0,113,67,0,87,116,1,0,106,8,0, - 116,17,0,25,125,5,0,120,76,0,100,27,0,68,93,68, - 0,125,6,0,124,6,0,116,1,0,106,8,0,107,7,0, - 114,232,0,116,13,0,106,18,0,124,6,0,131,1,0,125, - 7,0,110,13,0,116,1,0,106,8,0,124,6,0,25,125, - 7,0,116,19,0,124,5,0,124,6,0,124,7,0,131,3, - 0,1,113,193,0,87,100,6,0,100,7,0,103,1,0,102, - 2,0,100,8,0,100,9,0,100,7,0,103,2,0,102,2, - 0,102,2,0,125,8,0,120,149,0,124,8,0,68,93,129, - 0,92,2,0,125,9,0,125,10,0,116,20,0,100,10,0, - 100,11,0,132,0,0,124,10,0,68,131,1,0,131,1,0, - 115,92,1,116,21,0,130,1,0,124,10,0,100,12,0,25, - 125,11,0,124,9,0,116,1,0,106,8,0,107,6,0,114, - 134,1,116,1,0,106,8,0,124,9,0,25,125,12,0,80, - 113,49,1,121,20,0,116,13,0,106,18,0,124,9,0,131, - 1,0,125,12,0,80,87,113,49,1,4,116,22,0,107,10, - 0,114,177,1,1,1,1,119,49,1,89,113,49,1,88,113, - 49,1,87,116,22,0,100,13,0,131,1,0,130,1,0,121, - 19,0,116,13,0,106,18,0,100,14,0,131,1,0,125,13, - 0,87,110,24,0,4,116,22,0,107,10,0,114,239,1,1, - 1,1,100,15,0,125,13,0,89,110,1,0,88,116,13,0, - 106,18,0,100,16,0,131,1,0,125,14,0,124,9,0,100, - 8,0,107,2,0,114,45,2,116,13,0,106,18,0,100,17, - 0,131,1,0,125,15,0,116,19,0,124,5,0,100,18,0, - 124,15,0,131,3,0,1,110,0,0,116,19,0,124,5,0, - 100,19,0,124,12,0,131,3,0,1,116,19,0,124,5,0, - 100,14,0,124,13,0,131,3,0,1,116,19,0,124,5,0, - 100,16,0,124,14,0,131,3,0,1,116,19,0,124,5,0, - 100,20,0,124,11,0,131,3,0,1,116,19,0,124,5,0, - 100,21,0,100,22,0,106,23,0,124,10,0,131,1,0,131, - 3,0,1,116,19,0,124,5,0,100,23,0,116,24,0,131, - 0,0,131,3,0,1,116,25,0,106,26,0,116,0,0,106, - 27,0,131,0,0,131,1,0,1,124,9,0,100,8,0,107, - 2,0,114,224,2,116,28,0,106,29,0,100,24,0,131,1, - 0,1,100,25,0,116,25,0,107,6,0,114,224,2,100,26, - 0,116,30,0,95,31,0,113,224,2,110,0,0,100,15,0, - 83,40,28,0,0,0,117,250,0,0,0,83,101,116,117,112, - 32,105,109,112,111,114,116,108,105,98,32,98,121,32,105,109, - 112,111,114,116,105,110,103,32,110,101,101,100,101,100,32,98, - 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32, - 97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,104, - 101,109,10,32,32,32,32,105,110,116,111,32,116,104,101,32, - 103,108,111,98,97,108,32,110,97,109,101,115,112,97,99,101, - 46,10,10,32,32,32,32,65,115,32,115,121,115,32,105,115, - 32,110,101,101,100,101,100,32,102,111,114,32,115,121,115,46, - 109,111,100,117,108,101,115,32,97,99,99,101,115,115,32,97, - 110,100,32,95,105,109,112,32,105,115,32,110,101,101,100,101, - 100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,45, - 105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,32, - 116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,101, - 115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,99, - 105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,10, - 10,32,32,32,32,114,146,0,0,0,114,48,0,0,0,114, - 167,0,0,0,244,8,0,0,0,98,117,105,108,116,105,110, - 115,114,183,0,0,0,116,5,0,0,0,112,111,115,105,120, - 245,1,0,0,0,47,244,2,0,0,0,110,116,245,1,0, - 0,0,92,99,1,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,115,0,0,0,115,33,0,0,0,124,0,0, - 93,23,0,125,1,0,116,0,0,124,1,0,131,1,0,100, - 0,0,107,2,0,86,1,113,3,0,100,1,0,83,40,2, - 0,0,0,114,29,0,0,0,78,40,1,0,0,0,114,31, - 0,0,0,40,2,0,0,0,114,22,0,0,0,114,118,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,255,0,0,0,198,6,0,0,115,2,0,0,0,6, - 0,117,25,0,0,0,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, - 71,0,0,0,117,30,0,0,0,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,72,0,0,0,78,114,95,0, - 0,0,116,6,0,0,0,119,105,110,114,101,103,114,203,0, - 0,0,114,3,0,0,0,114,25,0,0,0,114,21,0,0, - 0,114,30,0,0,0,114,6,0,0,0,117,4,0,0,0, - 46,112,121,119,117,6,0,0,0,95,100,46,112,121,100,84, - 40,4,0,0,0,117,3,0,0,0,95,105,111,117,9,0, - 0,0,95,119,97,114,110,105,110,103,115,117,8,0,0,0, - 98,117,105,108,116,105,110,115,117,7,0,0,0,109,97,114, - 115,104,97,108,40,32,0,0,0,114,97,0,0,0,114,7, - 0,0,0,114,105,0,0,0,114,106,0,0,0,114,108,0, - 0,0,114,72,1,0,0,114,107,0,0,0,114,65,0,0, - 0,114,149,0,0,0,244,5,0,0,0,105,116,101,109,115, - 114,184,0,0,0,114,59,0,0,0,114,160,0,0,0,114, - 191,0,0,0,114,146,0,0,0,114,163,0,0,0,114,199, - 0,0,0,114,56,0,0,0,114,195,0,0,0,114,60,0, - 0,0,244,3,0,0,0,97,108,108,114,89,0,0,0,114, - 151,0,0,0,114,26,0,0,0,114,11,0,0,0,114,1, - 1,0,0,114,189,0,0,0,114,71,1,0,0,114,122,0, - 0,0,114,248,0,0,0,114,202,0,0,0,114,206,0,0, - 0,40,16,0,0,0,244,10,0,0,0,115,121,115,95,109, - 111,100,117,108,101,244,11,0,0,0,95,105,109,112,95,109, - 111,100,117,108,101,116,11,0,0,0,109,111,100,117,108,101, - 95,116,121,112,101,114,66,0,0,0,114,142,0,0,0,116, - 11,0,0,0,115,101,108,102,95,109,111,100,117,108,101,116, - 12,0,0,0,98,117,105,108,116,105,110,95,110,97,109,101, - 116,14,0,0,0,98,117,105,108,116,105,110,95,109,111,100, - 117,108,101,116,10,0,0,0,111,115,95,100,101,116,97,105, - 108,115,116,10,0,0,0,98,117,105,108,116,105,110,95,111, - 115,114,21,0,0,0,114,25,0,0,0,116,9,0,0,0, - 111,115,95,109,111,100,117,108,101,116,13,0,0,0,116,104, - 114,101,97,100,95,109,111,100,117,108,101,116,14,0,0,0, - 119,101,97,107,114,101,102,95,109,111,100,117,108,101,116,13, - 0,0,0,119,105,110,114,101,103,95,109,111,100,117,108,101, + 101,120,105,116,95,95,78,40,6,0,0,0,114,56,0,0, + 0,114,55,0,0,0,114,57,0,0,0,114,58,0,0,0, + 114,47,1,0,0,114,48,1,0,0,40,1,0,0,0,114, + 69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,45,1,0,0,176,5,0,0,115,6,0,0, + 0,16,2,6,2,12,4,114,45,1,0,0,99,3,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,91,0,0,0,124,1,0,106,0,0,100,1,0,124, + 2,0,100,2,0,24,131,2,0,125,3,0,116,1,0,124, + 3,0,131,1,0,124,2,0,107,0,0,114,55,0,116,2, + 0,100,3,0,131,1,0,130,1,0,110,0,0,124,3,0, + 100,4,0,25,125,4,0,124,0,0,114,87,0,100,5,0, + 106,3,0,124,4,0,124,0,0,131,2,0,83,124,4,0, + 83,40,6,0,0,0,117,50,0,0,0,82,101,115,111,108, + 118,101,32,97,32,114,101,108,97,116,105,118,101,32,109,111, + 100,117,108,101,32,110,97,109,101,32,116,111,32,97,110,32, + 97,98,115,111,108,117,116,101,32,111,110,101,46,114,104,0, + 0,0,114,29,0,0,0,117,50,0,0,0,97,116,116,101, + 109,112,116,101,100,32,114,101,108,97,116,105,118,101,32,105, + 109,112,111,114,116,32,98,101,121,111,110,100,32,116,111,112, + 45,108,101,118,101,108,32,112,97,99,107,97,103,101,114,71, + 0,0,0,117,5,0,0,0,123,125,46,123,125,40,4,0, + 0,0,114,34,0,0,0,114,31,0,0,0,114,121,0,0, + 0,114,46,0,0,0,40,5,0,0,0,114,66,0,0,0, + 244,7,0,0,0,112,97,99,107,97,103,101,244,5,0,0, + 0,108,101,118,101,108,116,4,0,0,0,98,105,116,115,116, + 4,0,0,0,98,97,115,101,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,244,13,0,0,0,95,114,101,115, + 111,108,118,101,95,110,97,109,101,189,5,0,0,115,10,0, + 0,0,0,2,22,1,18,1,15,1,10,1,114,51,1,0, + 0,99,2,0,0,0,0,0,0,0,4,0,0,0,11,0, + 0,0,67,0,0,0,115,138,0,0,0,116,0,0,106,1, + 0,115,28,0,116,2,0,106,3,0,100,1,0,116,4,0, + 131,2,0,1,110,0,0,120,103,0,116,0,0,106,1,0, + 68,93,88,0,125,2,0,116,5,0,131,0,0,143,23,0, + 1,124,2,0,106,6,0,124,0,0,124,1,0,131,2,0, + 125,3,0,87,100,2,0,81,88,124,3,0,100,2,0,107, + 9,0,114,38,0,124,0,0,116,0,0,106,7,0,107,7, + 0,114,109,0,124,3,0,83,116,0,0,106,7,0,124,0, + 0,25,106,8,0,83,113,38,0,113,38,0,87,100,2,0, + 83,100,2,0,83,40,3,0,0,0,117,23,0,0,0,70, + 105,110,100,32,97,32,109,111,100,117,108,101,39,115,32,108, + 111,97,100,101,114,46,117,22,0,0,0,115,121,115,46,109, + 101,116,97,95,112,97,116,104,32,105,115,32,101,109,112,116, + 121,78,40,9,0,0,0,114,7,0,0,0,244,9,0,0, + 0,109,101,116,97,95,112,97,116,104,114,167,0,0,0,114, + 168,0,0,0,114,169,0,0,0,114,45,1,0,0,114,194, + 0,0,0,114,149,0,0,0,114,146,0,0,0,40,4,0, + 0,0,114,66,0,0,0,114,35,0,0,0,114,22,1,0, + 0,114,170,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,244,12,0,0,0,95,102,105,110,100,95, + 109,111,100,117,108,101,198,5,0,0,115,20,0,0,0,0, + 2,9,1,19,1,16,1,10,1,24,1,12,2,15,1,4, + 2,21,2,114,53,1,0,0,99,3,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,194,0, + 0,0,116,0,0,124,0,0,116,1,0,131,2,0,115,45, + 0,116,2,0,100,1,0,106,3,0,116,4,0,124,0,0, + 131,1,0,131,1,0,131,1,0,130,1,0,110,0,0,124, + 2,0,100,2,0,107,0,0,114,72,0,116,5,0,100,3, + 0,131,1,0,130,1,0,110,0,0,124,1,0,114,156,0, + 116,0,0,124,1,0,116,1,0,131,2,0,115,108,0,116, + 2,0,100,4,0,131,1,0,130,1,0,113,156,0,124,1, + 0,116,6,0,106,7,0,107,7,0,114,156,0,100,5,0, + 125,3,0,116,8,0,124,3,0,106,3,0,124,1,0,131, + 1,0,131,1,0,130,1,0,113,156,0,110,0,0,124,0, + 0,12,114,190,0,124,2,0,100,2,0,107,2,0,114,190, + 0,116,5,0,100,6,0,131,1,0,130,1,0,110,0,0, + 100,7,0,83,40,8,0,0,0,117,28,0,0,0,86,101, + 114,105,102,121,32,97,114,103,117,109,101,110,116,115,32,97, + 114,101,32,34,115,97,110,101,34,46,117,31,0,0,0,109, + 111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,32, + 98,101,32,115,116,114,44,32,110,111,116,32,123,125,114,71, + 0,0,0,117,18,0,0,0,108,101,118,101,108,32,109,117, + 115,116,32,98,101,32,62,61,32,48,117,31,0,0,0,95, + 95,112,97,99,107,97,103,101,95,95,32,110,111,116,32,115, + 101,116,32,116,111,32,97,32,115,116,114,105,110,103,117,61, + 0,0,0,80,97,114,101,110,116,32,109,111,100,117,108,101, + 32,123,33,114,125,32,110,111,116,32,108,111,97,100,101,100, + 44,32,99,97,110,110,111,116,32,112,101,114,102,111,114,109, + 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, + 117,17,0,0,0,69,109,112,116,121,32,109,111,100,117,108, + 101,32,110,97,109,101,78,40,9,0,0,0,114,184,0,0, + 0,114,26,1,0,0,244,9,0,0,0,84,121,112,101,69, + 114,114,111,114,114,46,0,0,0,114,65,0,0,0,114,121, + 0,0,0,114,7,0,0,0,114,149,0,0,0,244,11,0, + 0,0,83,121,115,116,101,109,69,114,114,111,114,40,4,0, + 0,0,114,66,0,0,0,114,49,1,0,0,114,50,1,0, + 0,114,172,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,244,13,0,0,0,95,115,97,110,105,116, + 121,95,99,104,101,99,107,215,5,0,0,115,24,0,0,0, + 0,2,15,1,30,1,12,1,15,1,6,1,15,1,15,1, + 15,1,6,2,27,1,19,1,114,56,1,0,0,117,20,0, + 0,0,78,111,32,109,111,100,117,108,101,32,110,97,109,101, + 100,32,123,33,114,125,99,2,0,0,0,0,0,0,0,9, + 0,0,0,27,0,0,0,67,0,0,0,115,21,2,0,0, + 100,0,0,125,2,0,124,0,0,106,0,0,100,1,0,131, + 1,0,100,2,0,25,125,3,0,124,3,0,114,178,0,124, + 3,0,116,1,0,106,2,0,107,7,0,114,62,0,116,3, + 0,124,1,0,124,3,0,131,2,0,1,110,0,0,124,0, + 0,116,1,0,106,2,0,107,6,0,114,88,0,116,1,0, + 106,2,0,124,0,0,25,83,116,1,0,106,2,0,124,3, + 0,25,125,4,0,121,13,0,124,4,0,106,4,0,125,2, + 0,87,113,178,0,4,116,5,0,107,10,0,114,174,0,1, + 1,1,116,6,0,100,3,0,23,106,7,0,124,0,0,124, + 3,0,131,2,0,125,5,0,116,8,0,124,5,0,100,4, + 0,124,0,0,131,1,1,130,1,0,89,113,178,0,88,110, + 0,0,116,9,0,124,0,0,124,2,0,131,2,0,125,6, + 0,124,6,0,100,0,0,107,8,0,114,250,0,116,8,0, + 116,6,0,106,7,0,124,0,0,131,1,0,100,4,0,124, + 0,0,131,1,1,125,7,0,100,5,0,124,7,0,95,10, + 0,124,7,0,130,1,0,110,47,0,124,0,0,116,1,0, + 106,2,0,107,7,0,114,41,1,124,6,0,106,11,0,124, + 0,0,131,1,0,1,116,12,0,100,6,0,124,0,0,124, + 6,0,131,3,0,1,110,0,0,116,1,0,106,2,0,124, + 0,0,25,125,8,0,124,3,0,114,105,1,116,1,0,106, + 2,0,124,3,0,25,125,4,0,116,13,0,124,4,0,124, + 0,0,106,0,0,100,1,0,131,1,0,100,7,0,25,124, + 8,0,131,3,0,1,110,0,0,116,14,0,124,8,0,100, + 8,0,100,0,0,131,3,0,100,0,0,107,8,0,114,212, + 1,121,59,0,124,8,0,106,15,0,124,8,0,95,16,0, + 116,17,0,124,8,0,100,9,0,131,2,0,115,187,1,124, + 8,0,106,16,0,106,0,0,100,1,0,131,1,0,100,2, + 0,25,124,8,0,95,16,0,110,0,0,87,113,212,1,4, + 116,5,0,107,10,0,114,208,1,1,1,1,89,113,212,1, + 88,110,0,0,116,14,0,124,8,0,100,10,0,100,0,0, + 131,3,0,100,0,0,107,8,0,114,17,2,121,13,0,124, + 6,0,124,8,0,95,18,0,87,113,17,2,4,116,5,0, + 107,10,0,114,13,2,1,1,1,89,113,17,2,88,110,0, + 0,124,8,0,83,40,11,0,0,0,78,114,104,0,0,0, + 114,71,0,0,0,117,21,0,0,0,59,32,123,125,32,105, + 115,32,110,111,116,32,97,32,112,97,99,107,97,103,101,114, + 66,0,0,0,84,117,18,0,0,0,105,109,112,111,114,116, + 32,123,33,114,125,32,35,32,123,33,114,125,114,103,0,0, + 0,114,139,0,0,0,114,140,0,0,0,114,146,0,0,0, + 40,19,0,0,0,114,32,0,0,0,114,7,0,0,0,114, + 149,0,0,0,114,102,0,0,0,114,140,0,0,0,114,152, + 0,0,0,244,8,0,0,0,95,69,82,82,95,77,83,71, + 114,46,0,0,0,114,151,0,0,0,114,53,1,0,0,244, + 10,0,0,0,95,110,111,116,95,102,111,117,110,100,114,195, + 0,0,0,114,138,0,0,0,114,60,0,0,0,114,61,0, + 0,0,114,56,0,0,0,114,139,0,0,0,114,59,0,0, + 0,114,146,0,0,0,40,9,0,0,0,114,66,0,0,0, + 244,7,0,0,0,105,109,112,111,114,116,95,114,35,0,0, + 0,114,250,0,0,0,116,13,0,0,0,112,97,114,101,110, + 116,95,109,111,100,117,108,101,114,172,0,0,0,114,170,0, + 0,0,114,232,0,0,0,114,142,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,244,23,0,0,0, + 95,102,105,110,100,95,97,110,100,95,108,111,97,100,95,117, + 110,108,111,99,107,101,100,234,5,0,0,115,76,0,0,0, + 0,1,6,1,19,1,6,1,15,1,16,2,15,1,11,2, + 13,1,3,1,13,1,13,1,22,1,26,1,15,1,12,1, + 27,3,9,1,9,1,15,2,13,1,19,2,13,1,6,2, + 13,1,32,2,24,1,3,1,12,1,15,1,32,1,13,1, + 8,2,24,1,3,1,13,1,13,1,8,1,114,60,1,0, + 0,99,2,0,0,0,0,0,0,0,3,0,0,0,18,0, + 0,0,67,0,0,0,115,75,0,0,0,122,16,0,116,0, + 0,124,0,0,131,1,0,125,2,0,87,100,1,0,116,1, + 0,106,2,0,131,0,0,1,88,124,2,0,106,3,0,131, + 0,0,1,122,17,0,116,4,0,124,0,0,124,1,0,131, + 2,0,83,87,100,1,0,124,2,0,106,5,0,131,0,0, + 1,88,100,1,0,83,40,2,0,0,0,117,54,0,0,0, + 70,105,110,100,32,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,32,116,104,101,32,105,109,112,111,114,116, + 32,108,111,99,107,46,78,40,6,0,0,0,114,96,0,0, + 0,114,97,0,0,0,114,98,0,0,0,114,86,0,0,0, + 114,60,1,0,0,114,87,0,0,0,40,3,0,0,0,114, + 66,0,0,0,114,59,1,0,0,114,73,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,244,14,0, + 0,0,95,102,105,110,100,95,97,110,100,95,108,111,97,100, + 28,6,0,0,115,14,0,0,0,0,2,3,1,16,2,11, + 1,10,1,3,1,17,2,114,61,1,0,0,99,3,0,0, + 0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,0, + 0,115,172,0,0,0,116,0,0,124,0,0,124,1,0,124, + 2,0,131,3,0,1,124,2,0,100,1,0,107,4,0,114, + 49,0,116,1,0,124,0,0,124,1,0,124,2,0,131,3, + 0,125,0,0,110,0,0,116,2,0,106,3,0,131,0,0, + 1,124,0,0,116,4,0,106,5,0,107,7,0,114,87,0, + 116,6,0,124,0,0,116,7,0,131,2,0,83,116,4,0, + 106,5,0,124,0,0,25,125,3,0,124,3,0,100,2,0, + 107,8,0,114,158,0,116,2,0,106,8,0,131,0,0,1, + 100,3,0,106,9,0,124,0,0,131,1,0,125,4,0,116, + 10,0,124,4,0,100,4,0,124,0,0,131,1,1,130,1, + 0,110,0,0,116,11,0,124,0,0,131,1,0,1,124,3, + 0,83,40,5,0,0,0,117,50,1,0,0,73,109,112,111, + 114,116,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, + 110,32,105,116,115,32,110,97,109,101,44,32,116,104,101,32, + 112,97,99,107,97,103,101,32,116,104,101,32,99,97,108,108, + 32,105,115,10,32,32,32,32,98,101,105,110,103,32,109,97, + 100,101,32,102,114,111,109,44,32,97,110,100,32,116,104,101, + 32,108,101,118,101,108,32,97,100,106,117,115,116,109,101,110, + 116,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, + 99,116,105,111,110,32,114,101,112,114,101,115,101,110,116,115, + 32,116,104,101,32,103,114,101,97,116,101,115,116,32,99,111, + 109,109,111,110,32,100,101,110,111,109,105,110,97,116,111,114, + 32,111,102,32,102,117,110,99,116,105,111,110,97,108,105,116, + 121,10,32,32,32,32,98,101,116,119,101,101,110,32,105,109, + 112,111,114,116,95,109,111,100,117,108,101,32,97,110,100,32, + 95,95,105,109,112,111,114,116,95,95,46,32,84,104,105,115, + 32,105,110,99,108,117,100,101,115,32,115,101,116,116,105,110, + 103,32,95,95,112,97,99,107,97,103,101,95,95,32,105,102, + 10,32,32,32,32,116,104,101,32,108,111,97,100,101,114,32, + 100,105,100,32,110,111,116,46,10,10,32,32,32,32,114,71, + 0,0,0,78,117,40,0,0,0,105,109,112,111,114,116,32, + 111,102,32,123,125,32,104,97,108,116,101,100,59,32,78,111, + 110,101,32,105,110,32,115,121,115,46,109,111,100,117,108,101, + 115,114,66,0,0,0,40,12,0,0,0,114,56,1,0,0, + 114,51,1,0,0,114,97,0,0,0,114,46,1,0,0,114, + 7,0,0,0,114,149,0,0,0,114,61,1,0,0,244,11, + 0,0,0,95,103,99,100,95,105,109,112,111,114,116,114,98, + 0,0,0,114,46,0,0,0,114,151,0,0,0,114,99,0, + 0,0,40,5,0,0,0,114,66,0,0,0,114,49,1,0, + 0,114,50,1,0,0,114,142,0,0,0,114,137,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 62,1,0,0,41,6,0,0,115,26,0,0,0,0,9,16, + 1,12,1,21,1,10,1,15,1,13,1,13,1,12,1,10, + 2,15,1,21,1,10,1,114,62,1,0,0,99,3,0,0, + 0,0,0,0,0,6,0,0,0,17,0,0,0,67,0,0, + 0,115,254,0,0,0,116,0,0,124,0,0,100,1,0,131, + 2,0,114,250,0,100,2,0,124,1,0,107,6,0,114,89, + 0,116,1,0,124,1,0,131,1,0,125,1,0,124,1,0, + 106,2,0,100,2,0,131,1,0,1,116,0,0,124,0,0, + 100,3,0,131,2,0,114,89,0,124,1,0,106,3,0,124, + 0,0,106,4,0,131,1,0,1,113,89,0,110,0,0,120, + 158,0,124,1,0,68,93,147,0,125,3,0,116,0,0,124, + 0,0,124,3,0,131,2,0,115,96,0,100,4,0,106,5, + 0,124,0,0,106,6,0,124,3,0,131,2,0,125,4,0, + 121,17,0,116,7,0,124,2,0,124,4,0,131,2,0,1, + 87,113,243,0,4,116,8,0,107,10,0,114,239,0,1,125, + 5,0,1,122,50,0,116,9,0,124,5,0,100,5,0,100, + 6,0,131,3,0,114,218,0,124,5,0,106,10,0,124,4, + 0,107,2,0,114,218,0,119,96,0,113,218,0,110,0,0, + 130,0,0,87,89,100,7,0,100,7,0,125,5,0,126,5, + 0,88,113,243,0,88,113,96,0,113,96,0,87,110,0,0, + 124,0,0,83,40,8,0,0,0,117,238,0,0,0,70,105, + 103,117,114,101,32,111,117,116,32,119,104,97,116,32,95,95, + 105,109,112,111,114,116,95,95,32,115,104,111,117,108,100,32, + 114,101,116,117,114,110,46,10,10,32,32,32,32,84,104,101, + 32,105,109,112,111,114,116,95,32,112,97,114,97,109,101,116, + 101,114,32,105,115,32,97,32,99,97,108,108,97,98,108,101, + 32,119,104,105,99,104,32,116,97,107,101,115,32,116,104,101, + 32,110,97,109,101,32,111,102,32,109,111,100,117,108,101,32, + 116,111,10,32,32,32,32,105,109,112,111,114,116,46,32,73, + 116,32,105,115,32,114,101,113,117,105,114,101,100,32,116,111, + 32,100,101,99,111,117,112,108,101,32,116,104,101,32,102,117, + 110,99,116,105,111,110,32,102,114,111,109,32,97,115,115,117, + 109,105,110,103,32,105,109,112,111,114,116,108,105,98,39,115, + 10,32,32,32,32,105,109,112,111,114,116,32,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,32,105,115,32,100,101, + 115,105,114,101,100,46,10,10,32,32,32,32,114,140,0,0, + 0,245,1,0,0,0,42,244,7,0,0,0,95,95,97,108, + 108,95,95,117,5,0,0,0,123,125,46,123,125,114,58,1, + 0,0,70,78,40,11,0,0,0,114,59,0,0,0,244,4, + 0,0,0,108,105,115,116,244,6,0,0,0,114,101,109,111, + 118,101,114,189,0,0,0,114,64,1,0,0,114,46,0,0, + 0,114,56,0,0,0,114,102,0,0,0,114,151,0,0,0, + 114,61,0,0,0,114,66,0,0,0,40,6,0,0,0,114, + 142,0,0,0,244,8,0,0,0,102,114,111,109,108,105,115, + 116,114,59,1,0,0,114,16,0,0,0,116,9,0,0,0, + 102,114,111,109,95,110,97,109,101,114,232,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,244,16,0, + 0,0,95,104,97,110,100,108,101,95,102,114,111,109,108,105, + 115,116,65,6,0,0,115,34,0,0,0,0,10,15,1,12, + 1,12,1,13,1,15,1,22,1,13,1,15,1,21,1,3, + 1,17,1,18,6,18,1,15,1,9,1,32,1,114,68,1, + 0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,78,0,0,0,124,0,0,106, + 0,0,100,1,0,131,1,0,125,1,0,124,1,0,100,2, + 0,107,8,0,114,74,0,124,0,0,100,3,0,25,125,1, + 0,100,4,0,124,0,0,107,7,0,114,74,0,124,1,0, + 106,1,0,100,5,0,131,1,0,100,6,0,25,125,1,0, + 113,74,0,110,0,0,124,1,0,83,40,7,0,0,0,117, + 167,0,0,0,67,97,108,99,117,108,97,116,101,32,119,104, + 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, + 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, + 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, + 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, + 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, + 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, + 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, + 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, + 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, + 110,111,119,110,46,10,10,32,32,32,32,114,139,0,0,0, + 78,114,56,0,0,0,114,140,0,0,0,114,104,0,0,0, + 114,71,0,0,0,40,2,0,0,0,114,82,0,0,0,114, + 32,0,0,0,40,2,0,0,0,244,7,0,0,0,103,108, + 111,98,97,108,115,114,49,1,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,244,17,0,0,0,95,99, + 97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,99, + 6,0,0,115,12,0,0,0,0,7,15,1,12,1,10,1, + 12,1,25,1,114,70,1,0,0,99,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,55, + 0,0,0,116,0,0,116,1,0,106,2,0,131,0,0,102, + 2,0,125,0,0,116,3,0,116,4,0,102,2,0,125,1, + 0,116,5,0,116,6,0,102,2,0,125,2,0,124,0,0, + 124,1,0,124,2,0,103,3,0,83,40,1,0,0,0,117, + 111,0,0,0,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,44,32,97,108, + 108,111,119,95,112,97,99,107,97,103,101,115,41,46,10,32, + 32,32,32,40,7,0,0,0,114,252,0,0,0,114,97,0, + 0,0,244,18,0,0,0,101,120,116,101,110,115,105,111,110, + 95,115,117,102,102,105,120,101,115,114,244,0,0,0,114,122, + 0,0,0,114,251,0,0,0,244,17,0,0,0,66,89,84, + 69,67,79,68,69,95,83,85,70,70,73,88,69,83,40,3, + 0,0,0,116,10,0,0,0,101,120,116,101,110,115,105,111, + 110,115,116,6,0,0,0,115,111,117,114,99,101,116,8,0, + 0,0,98,121,116,101,99,111,100,101,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,212,0,0,0,114,6, + 0,0,115,8,0,0,0,0,5,18,1,12,1,12,1,114, + 212,0,0,0,99,5,0,0,0,0,0,0,0,9,0,0, + 0,5,0,0,0,67,0,0,0,115,227,0,0,0,124,4, + 0,100,1,0,107,2,0,114,27,0,116,0,0,124,0,0, + 131,1,0,125,5,0,110,54,0,124,1,0,100,2,0,107, + 9,0,114,45,0,124,1,0,110,3,0,105,0,0,125,6, + 0,116,1,0,124,6,0,131,1,0,125,7,0,116,0,0, + 124,0,0,124,7,0,124,4,0,131,3,0,125,5,0,124, + 3,0,115,207,0,124,4,0,100,1,0,107,2,0,114,122, + 0,116,0,0,124,0,0,106,2,0,100,3,0,131,1,0, + 100,1,0,25,131,1,0,83,124,0,0,115,132,0,124,5, + 0,83,116,3,0,124,0,0,131,1,0,116,3,0,124,0, + 0,106,2,0,100,3,0,131,1,0,100,1,0,25,131,1, + 0,24,125,8,0,116,4,0,106,5,0,124,5,0,106,6, + 0,100,2,0,116,3,0,124,5,0,106,6,0,131,1,0, + 124,8,0,24,133,2,0,25,25,83,110,16,0,116,7,0, + 124,5,0,124,3,0,116,0,0,131,3,0,83,100,2,0, + 83,40,4,0,0,0,117,214,1,0,0,73,109,112,111,114, + 116,32,97,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,84,104,101,32,39,103,108,111,98,97,108,115,39,32,97, + 114,103,117,109,101,110,116,32,105,115,32,117,115,101,100,32, + 116,111,32,105,110,102,101,114,32,119,104,101,114,101,32,116, + 104,101,32,105,109,112,111,114,116,32,105,115,32,111,99,99, + 117,114,105,110,103,32,102,114,111,109,10,32,32,32,32,116, + 111,32,104,97,110,100,108,101,32,114,101,108,97,116,105,118, + 101,32,105,109,112,111,114,116,115,46,32,84,104,101,32,39, + 108,111,99,97,108,115,39,32,97,114,103,117,109,101,110,116, + 32,105,115,32,105,103,110,111,114,101,100,46,32,84,104,101, + 10,32,32,32,32,39,102,114,111,109,108,105,115,116,39,32, + 97,114,103,117,109,101,110,116,32,115,112,101,99,105,102,105, + 101,115,32,119,104,97,116,32,115,104,111,117,108,100,32,101, + 120,105,115,116,32,97,115,32,97,116,116,114,105,98,117,116, + 101,115,32,111,110,32,116,104,101,32,109,111,100,117,108,101, + 10,32,32,32,32,98,101,105,110,103,32,105,109,112,111,114, + 116,101,100,32,40,101,46,103,46,32,96,96,102,114,111,109, + 32,109,111,100,117,108,101,32,105,109,112,111,114,116,32,60, + 102,114,111,109,108,105,115,116,62,96,96,41,46,32,32,84, + 104,101,32,39,108,101,118,101,108,39,10,32,32,32,32,97, + 114,103,117,109,101,110,116,32,114,101,112,114,101,115,101,110, + 116,115,32,116,104,101,32,112,97,99,107,97,103,101,32,108, + 111,99,97,116,105,111,110,32,116,111,32,105,109,112,111,114, + 116,32,102,114,111,109,32,105,110,32,97,32,114,101,108,97, + 116,105,118,101,10,32,32,32,32,105,109,112,111,114,116,32, + 40,101,46,103,46,32,96,96,102,114,111,109,32,46,46,112, + 107,103,32,105,109,112,111,114,116,32,109,111,100,96,96,32, + 119,111,117,108,100,32,104,97,118,101,32,97,32,39,108,101, + 118,101,108,39,32,111,102,32,50,41,46,10,10,32,32,32, + 32,114,71,0,0,0,78,114,104,0,0,0,40,8,0,0, + 0,114,62,1,0,0,114,70,1,0,0,114,109,0,0,0, + 114,31,0,0,0,114,7,0,0,0,114,149,0,0,0,114, + 56,0,0,0,114,68,1,0,0,40,9,0,0,0,114,66, + 0,0,0,114,69,1,0,0,244,6,0,0,0,108,111,99, + 97,108,115,114,67,1,0,0,114,50,1,0,0,114,142,0, + 0,0,116,8,0,0,0,103,108,111,98,97,108,115,95,114, + 49,1,0,0,116,7,0,0,0,99,117,116,95,111,102,102, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244, - 6,0,0,0,95,115,101,116,117,112,161,6,0,0,115,102, - 0,0,0,0,9,6,1,6,2,12,1,9,2,6,2,12, - 1,28,1,15,1,15,1,15,1,12,1,15,1,22,2,13, - 1,13,1,15,1,18,2,13,1,20,2,33,1,19,2,31, - 1,10,1,15,1,13,1,4,2,3,1,15,1,5,1,13, - 1,12,2,12,2,3,1,19,1,13,2,11,1,15,2,12, - 1,15,1,19,2,16,1,16,1,16,1,16,1,25,2,19, - 1,19,1,12,1,13,1,12,1,114,83,1,0,0,99,2, - 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, - 0,0,0,115,136,0,0,0,116,0,0,124,0,0,124,1, - 0,131,2,0,1,116,1,0,131,0,0,125,2,0,116,2, - 0,106,3,0,106,4,0,116,5,0,106,6,0,124,2,0, - 140,0,0,103,1,0,131,1,0,1,116,2,0,106,7,0, - 106,8,0,116,9,0,131,1,0,1,116,2,0,106,7,0, - 106,8,0,116,10,0,131,1,0,1,116,11,0,106,12,0, - 100,1,0,107,2,0,114,116,0,116,2,0,106,7,0,106, - 8,0,116,13,0,131,1,0,1,110,0,0,116,2,0,106, - 7,0,106,8,0,116,14,0,131,1,0,1,100,2,0,83, - 40,3,0,0,0,117,50,0,0,0,73,110,115,116,97,108, - 108,32,105,109,112,111,114,116,108,105,98,32,97,115,32,116, - 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,105,109,112,111,114,116,46,114,77,1,0, - 0,78,40,15,0,0,0,114,83,1,0,0,114,212,0,0, - 0,114,7,0,0,0,114,23,1,0,0,114,189,0,0,0, - 114,30,1,0,0,114,44,1,0,0,114,52,1,0,0,114, - 248,0,0,0,114,191,0,0,0,114,199,0,0,0,114,3, - 0,0,0,114,56,0,0,0,114,202,0,0,0,114,18,1, - 0,0,40,3,0,0,0,114,81,1,0,0,114,82,1,0, - 0,116,17,0,0,0,115,117,112,112,111,114,116,101,100,95, - 108,111,97,100,101,114,115,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,244,8,0,0,0,95,105,110,115,116, - 97,108,108,237,6,0,0,115,16,0,0,0,0,2,13,1, - 9,1,28,1,16,1,16,1,15,1,19,1,114,84,1,0, - 0,40,3,0,0,0,117,3,0,0,0,119,105,110,114,1, - 0,0,0,114,2,0,0,0,40,76,0,0,0,114,58,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,17,0,0, - 0,114,19,0,0,0,114,28,0,0,0,114,38,0,0,0, - 114,43,0,0,0,114,44,0,0,0,114,45,0,0,0,114, - 54,0,0,0,114,64,0,0,0,114,65,0,0,0,244,8, - 0,0,0,95,95,99,111,100,101,95,95,114,185,0,0,0, - 114,67,0,0,0,114,92,0,0,0,114,81,0,0,0,114, - 88,0,0,0,114,68,0,0,0,114,70,0,0,0,114,91, - 0,0,0,114,96,0,0,0,114,99,0,0,0,114,102,0, - 0,0,114,15,0,0,0,114,178,0,0,0,114,14,0,0, - 0,114,18,0,0,0,116,17,0,0,0,95,82,65,87,95, - 77,65,71,73,67,95,78,85,77,66,69,82,114,113,0,0, - 0,114,122,0,0,0,114,107,0,0,0,114,108,0,0,0, - 114,120,0,0,0,114,123,0,0,0,114,131,0,0,0,114, - 138,0,0,0,114,145,0,0,0,114,148,0,0,0,114,156, - 0,0,0,114,159,0,0,0,114,162,0,0,0,114,165,0, - 0,0,114,173,0,0,0,114,182,0,0,0,114,187,0,0, - 0,114,190,0,0,0,114,191,0,0,0,114,199,0,0,0, - 114,202,0,0,0,114,215,0,0,0,114,221,0,0,0,114, - 240,0,0,0,114,244,0,0,0,114,251,0,0,0,114,1, - 1,0,0,114,252,0,0,0,114,2,1,0,0,114,17,1, - 0,0,114,18,1,0,0,114,30,1,0,0,114,45,1,0, - 0,114,51,1,0,0,114,53,1,0,0,114,56,1,0,0, - 114,57,1,0,0,114,60,1,0,0,114,61,1,0,0,114, - 62,1,0,0,114,68,1,0,0,114,70,1,0,0,114,212, - 0,0,0,114,74,1,0,0,114,83,1,0,0,114,84,1, - 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,244,8,0,0,0,60,109,111,100,117, - 108,101,62,8,0,0,0,115,138,0,0,0,6,21,6,3, - 12,13,12,10,12,9,12,6,12,12,12,10,12,6,12,7, - 15,22,12,8,15,3,12,12,6,2,6,3,22,4,19,68, - 19,23,12,19,12,20,12,107,22,1,18,2,6,2,9,2, - 9,1,9,2,15,27,12,23,12,21,12,8,12,13,12,11, - 12,55,12,18,12,11,12,11,12,13,21,54,21,12,18,12, - 19,57,19,54,19,50,19,34,22,131,19,29,25,49,25,19, - 6,3,19,45,19,55,19,18,19,91,19,126,19,13,12,9, - 12,17,12,17,6,2,12,50,12,13,18,24,12,34,12,15, - 12,11,24,36,12,76, + 10,0,0,0,95,95,105,109,112,111,114,116,95,95,125,6, + 0,0,115,26,0,0,0,0,11,12,1,15,2,24,1,12, + 1,18,1,6,3,12,1,23,1,6,1,4,4,35,3,40, + 2,114,74,1,0,0,99,2,0,0,0,0,0,0,0,16, + 0,0,0,13,0,0,0,67,0,0,0,115,228,2,0,0, + 124,1,0,97,0,0,124,0,0,97,1,0,116,1,0,106, + 2,0,106,3,0,114,33,0,116,4,0,97,5,0,110,6, + 0,116,6,0,97,5,0,116,7,0,116,1,0,131,1,0, + 125,2,0,120,119,0,116,1,0,106,8,0,106,9,0,131, + 0,0,68,93,102,0,92,2,0,125,3,0,125,4,0,116, + 10,0,124,4,0,124,2,0,131,2,0,114,67,0,116,11, + 0,124,4,0,100,1,0,131,2,0,115,169,0,124,3,0, + 116,1,0,106,12,0,107,6,0,114,136,0,116,13,0,124, + 4,0,95,14,0,113,166,0,116,0,0,106,15,0,124,3, + 0,131,1,0,114,166,0,116,16,0,124,4,0,95,14,0, + 113,166,0,113,169,0,113,67,0,113,67,0,87,116,1,0, + 106,8,0,116,17,0,25,125,5,0,120,76,0,100,27,0, + 68,93,68,0,125,6,0,124,6,0,116,1,0,106,8,0, + 107,7,0,114,232,0,116,13,0,106,18,0,124,6,0,131, + 1,0,125,7,0,110,13,0,116,1,0,106,8,0,124,6, + 0,25,125,7,0,116,19,0,124,5,0,124,6,0,124,7, + 0,131,3,0,1,113,193,0,87,100,6,0,100,7,0,103, + 1,0,102,2,0,100,8,0,100,9,0,100,7,0,103,2, + 0,102,2,0,102,2,0,125,8,0,120,149,0,124,8,0, + 68,93,129,0,92,2,0,125,9,0,125,10,0,116,20,0, + 100,10,0,100,11,0,132,0,0,124,10,0,68,131,1,0, + 131,1,0,115,92,1,116,21,0,130,1,0,124,10,0,100, + 12,0,25,125,11,0,124,9,0,116,1,0,106,8,0,107, + 6,0,114,134,1,116,1,0,106,8,0,124,9,0,25,125, + 12,0,80,113,49,1,121,20,0,116,13,0,106,18,0,124, + 9,0,131,1,0,125,12,0,80,87,113,49,1,4,116,22, + 0,107,10,0,114,177,1,1,1,1,119,49,1,89,113,49, + 1,88,113,49,1,87,116,22,0,100,13,0,131,1,0,130, + 1,0,121,19,0,116,13,0,106,18,0,100,14,0,131,1, + 0,125,13,0,87,110,24,0,4,116,22,0,107,10,0,114, + 239,1,1,1,1,100,15,0,125,13,0,89,110,1,0,88, + 116,13,0,106,18,0,100,16,0,131,1,0,125,14,0,124, + 9,0,100,8,0,107,2,0,114,45,2,116,13,0,106,18, + 0,100,17,0,131,1,0,125,15,0,116,19,0,124,5,0, + 100,18,0,124,15,0,131,3,0,1,110,0,0,116,19,0, + 124,5,0,100,19,0,124,12,0,131,3,0,1,116,19,0, + 124,5,0,100,14,0,124,13,0,131,3,0,1,116,19,0, + 124,5,0,100,16,0,124,14,0,131,3,0,1,116,19,0, + 124,5,0,100,20,0,124,11,0,131,3,0,1,116,19,0, + 124,5,0,100,21,0,100,22,0,106,23,0,124,10,0,131, + 1,0,131,3,0,1,116,19,0,124,5,0,100,23,0,116, + 24,0,131,0,0,131,3,0,1,116,25,0,106,26,0,116, + 0,0,106,27,0,131,0,0,131,1,0,1,124,9,0,100, + 8,0,107,2,0,114,224,2,116,28,0,106,29,0,100,24, + 0,131,1,0,1,100,25,0,116,25,0,107,6,0,114,224, + 2,100,26,0,116,30,0,95,31,0,113,224,2,110,0,0, + 100,15,0,83,40,28,0,0,0,117,250,0,0,0,83,101, + 116,117,112,32,105,109,112,111,114,116,108,105,98,32,98,121, + 32,105,109,112,111,114,116,105,110,103,32,110,101,101,100,101, + 100,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103, + 32,116,104,101,109,10,32,32,32,32,105,110,116,111,32,116, + 104,101,32,103,108,111,98,97,108,32,110,97,109,101,115,112, + 97,99,101,46,10,10,32,32,32,32,65,115,32,115,121,115, + 32,105,115,32,110,101,101,100,101,100,32,102,111,114,32,115, + 121,115,46,109,111,100,117,108,101,115,32,97,99,99,101,115, + 115,32,97,110,100,32,95,105,109,112,32,105,115,32,110,101, + 101,100,101,100,32,116,111,32,108,111,97,100,32,98,117,105, + 108,116,45,105,110,10,32,32,32,32,109,111,100,117,108,101, + 115,44,32,116,104,111,115,101,32,116,119,111,32,109,111,100, + 117,108,101,115,32,109,117,115,116,32,98,101,32,101,120,112, + 108,105,99,105,116,108,121,32,112,97,115,115,101,100,32,105, + 110,46,10,10,32,32,32,32,114,146,0,0,0,114,48,0, + 0,0,114,167,0,0,0,244,8,0,0,0,98,117,105,108, + 116,105,110,115,114,183,0,0,0,116,5,0,0,0,112,111, + 115,105,120,245,1,0,0,0,47,244,2,0,0,0,110,116, + 245,1,0,0,0,92,99,1,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,115,0,0,0,115,33,0,0,0, + 124,0,0,93,23,0,125,1,0,116,0,0,124,1,0,131, + 1,0,100,0,0,107,2,0,86,1,113,3,0,100,1,0, + 83,40,2,0,0,0,114,29,0,0,0,78,40,1,0,0, + 0,114,31,0,0,0,40,2,0,0,0,114,22,0,0,0, + 114,118,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,255,0,0,0,198,6,0,0,115,2,0, + 0,0,6,0,117,25,0,0,0,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,71,0,0,0,117,30,0,0,0,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,72,0,0,0,78, + 114,95,0,0,0,116,6,0,0,0,119,105,110,114,101,103, + 114,203,0,0,0,114,3,0,0,0,114,25,0,0,0,114, + 21,0,0,0,114,30,0,0,0,114,6,0,0,0,117,4, + 0,0,0,46,112,121,119,117,6,0,0,0,95,100,46,112, + 121,100,84,40,4,0,0,0,117,3,0,0,0,95,105,111, + 117,9,0,0,0,95,119,97,114,110,105,110,103,115,117,8, + 0,0,0,98,117,105,108,116,105,110,115,117,7,0,0,0, + 109,97,114,115,104,97,108,40,32,0,0,0,114,97,0,0, + 0,114,7,0,0,0,114,105,0,0,0,114,106,0,0,0, + 114,108,0,0,0,114,72,1,0,0,114,107,0,0,0,114, + 65,0,0,0,114,149,0,0,0,244,5,0,0,0,105,116, + 101,109,115,114,184,0,0,0,114,59,0,0,0,114,160,0, + 0,0,114,191,0,0,0,114,146,0,0,0,114,163,0,0, + 0,114,199,0,0,0,114,56,0,0,0,114,195,0,0,0, + 114,60,0,0,0,244,3,0,0,0,97,108,108,114,89,0, + 0,0,114,151,0,0,0,114,26,0,0,0,114,11,0,0, + 0,114,1,1,0,0,114,189,0,0,0,114,71,1,0,0, + 114,122,0,0,0,114,248,0,0,0,114,202,0,0,0,114, + 206,0,0,0,40,16,0,0,0,244,10,0,0,0,115,121, + 115,95,109,111,100,117,108,101,244,11,0,0,0,95,105,109, + 112,95,109,111,100,117,108,101,116,11,0,0,0,109,111,100, + 117,108,101,95,116,121,112,101,114,66,0,0,0,114,142,0, + 0,0,116,11,0,0,0,115,101,108,102,95,109,111,100,117, + 108,101,116,12,0,0,0,98,117,105,108,116,105,110,95,110, + 97,109,101,116,14,0,0,0,98,117,105,108,116,105,110,95, + 109,111,100,117,108,101,116,10,0,0,0,111,115,95,100,101, + 116,97,105,108,115,116,10,0,0,0,98,117,105,108,116,105, + 110,95,111,115,114,21,0,0,0,114,25,0,0,0,116,9, + 0,0,0,111,115,95,109,111,100,117,108,101,116,13,0,0, + 0,116,104,114,101,97,100,95,109,111,100,117,108,101,116,14, + 0,0,0,119,101,97,107,114,101,102,95,109,111,100,117,108, + 101,116,13,0,0,0,119,105,110,114,101,103,95,109,111,100, + 117,108,101,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,244,6,0,0,0,95,115,101,116,117,112,161,6,0, + 0,115,102,0,0,0,0,9,6,1,6,2,12,1,9,2, + 6,2,12,1,28,1,15,1,15,1,15,1,12,1,15,1, + 22,2,13,1,13,1,15,1,18,2,13,1,20,2,33,1, + 19,2,31,1,10,1,15,1,13,1,4,2,3,1,15,1, + 5,1,13,1,12,2,12,2,3,1,19,1,13,2,11,1, + 15,2,12,1,15,1,19,2,16,1,16,1,16,1,16,1, + 25,2,19,1,19,1,12,1,13,1,12,1,114,83,1,0, + 0,99,2,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,67,0,0,0,115,136,0,0,0,116,0,0,124,0, + 0,124,1,0,131,2,0,1,116,1,0,131,0,0,125,2, + 0,116,2,0,106,3,0,106,4,0,116,5,0,106,6,0, + 124,2,0,140,0,0,103,1,0,131,1,0,1,116,2,0, + 106,7,0,106,8,0,116,9,0,131,1,0,1,116,2,0, + 106,7,0,106,8,0,116,10,0,131,1,0,1,116,11,0, + 106,12,0,100,1,0,107,2,0,114,116,0,116,2,0,106, + 7,0,106,8,0,116,13,0,131,1,0,1,110,0,0,116, + 2,0,106,7,0,106,8,0,116,14,0,131,1,0,1,100, + 2,0,83,40,3,0,0,0,117,50,0,0,0,73,110,115, + 116,97,108,108,32,105,109,112,111,114,116,108,105,98,32,97, + 115,32,116,104,101,32,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,32,111,102,32,105,109,112,111,114,116,46,114, + 77,1,0,0,78,40,15,0,0,0,114,83,1,0,0,114, + 212,0,0,0,114,7,0,0,0,114,23,1,0,0,114,189, + 0,0,0,114,30,1,0,0,114,44,1,0,0,114,52,1, + 0,0,114,248,0,0,0,114,191,0,0,0,114,199,0,0, + 0,114,3,0,0,0,114,56,0,0,0,114,202,0,0,0, + 114,18,1,0,0,40,3,0,0,0,114,81,1,0,0,114, + 82,1,0,0,116,17,0,0,0,115,117,112,112,111,114,116, + 101,100,95,108,111,97,100,101,114,115,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,244,8,0,0,0,95,105, + 110,115,116,97,108,108,237,6,0,0,115,16,0,0,0,0, + 2,13,1,9,1,28,1,16,1,16,1,15,1,19,1,114, + 84,1,0,0,40,3,0,0,0,117,3,0,0,0,119,105, + 110,114,1,0,0,0,114,2,0,0,0,40,76,0,0,0, + 114,58,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, + 0,0,0,114,43,0,0,0,114,44,0,0,0,114,45,0, + 0,0,114,54,0,0,0,114,64,0,0,0,114,65,0,0, + 0,244,8,0,0,0,95,95,99,111,100,101,95,95,114,185, + 0,0,0,114,67,0,0,0,114,92,0,0,0,114,81,0, + 0,0,114,88,0,0,0,114,68,0,0,0,114,70,0,0, + 0,114,91,0,0,0,114,96,0,0,0,114,99,0,0,0, + 114,102,0,0,0,114,15,0,0,0,114,178,0,0,0,114, + 14,0,0,0,114,18,0,0,0,116,17,0,0,0,95,82, + 65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114, + 113,0,0,0,114,122,0,0,0,114,107,0,0,0,114,108, + 0,0,0,114,120,0,0,0,114,123,0,0,0,114,131,0, + 0,0,114,138,0,0,0,114,145,0,0,0,114,148,0,0, + 0,114,156,0,0,0,114,159,0,0,0,114,162,0,0,0, + 114,165,0,0,0,114,173,0,0,0,114,182,0,0,0,114, + 187,0,0,0,114,190,0,0,0,114,191,0,0,0,114,199, + 0,0,0,114,202,0,0,0,114,215,0,0,0,114,221,0, + 0,0,114,240,0,0,0,114,244,0,0,0,114,251,0,0, + 0,114,1,1,0,0,114,252,0,0,0,114,2,1,0,0, + 114,17,1,0,0,114,18,1,0,0,114,30,1,0,0,114, + 45,1,0,0,114,51,1,0,0,114,53,1,0,0,114,56, + 1,0,0,114,57,1,0,0,114,60,1,0,0,114,61,1, + 0,0,114,62,1,0,0,114,68,1,0,0,114,70,1,0, + 0,114,212,0,0,0,114,74,1,0,0,114,83,1,0,0, + 114,84,1,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,244,8,0,0,0,60,109, + 111,100,117,108,101,62,8,0,0,0,115,138,0,0,0,6, + 21,6,3,12,13,12,10,12,9,12,6,12,12,12,10,12, + 6,12,7,15,22,12,8,15,3,12,12,6,2,6,3,22, + 4,19,68,19,23,12,19,12,20,12,107,22,1,18,2,6, + 2,9,2,9,1,9,2,15,27,12,23,12,21,12,8,12, + 13,12,11,12,55,12,18,12,11,12,11,12,13,21,54,21, + 12,18,12,19,57,19,54,19,50,19,34,22,131,19,29,25, + 49,25,19,6,3,19,45,19,55,19,18,19,91,19,126,19, + 13,12,9,12,17,12,17,6,2,12,50,12,13,18,24,12, + 34,12,15,12,11,24,36,12,76, };