- Issue #16514: Fix regression causing a traceback when sys.path[0] is None

(actually, any non-string or non-bytes type).
This commit is contained in:
Barry Warsaw 2012-11-20 15:22:51 -05:00
parent 23089ab1db
commit 82c1c781c7
6 changed files with 111 additions and 77 deletions

View File

@ -783,7 +783,9 @@ always available.
current directory first. Notice that the script directory is inserted *before* current directory first. Notice that the script directory is inserted *before*
the entries inserted as a result of :envvar:`PYTHONPATH`. the entries inserted as a result of :envvar:`PYTHONPATH`.
A program is free to modify this list for its own purposes. A program is free to modify this list for its own purposes. Only strings
and bytes should be added to :data:`sys.path`; all other data types are
ignored during import.
.. seealso:: .. seealso::

View File

@ -540,7 +540,10 @@ environment variable and various other installation- and
implementation-specific defaults. Entries in :data:`sys.path` can name implementation-specific defaults. Entries in :data:`sys.path` can name
directories on the file system, zip files, and potentially other "locations" directories on the file system, zip files, and potentially other "locations"
(see the :mod:`site` module) that should be searched for modules, such as (see the :mod:`site` module) that should be searched for modules, such as
URLs, or database queries. URLs, or database queries. Only strings and bytes should be present on
:data:`sys.path`; all other data types are ignored. The encoding of bytes
entries is determined by the individual :term:`path entry finders <path entry
finder>`.
The :term:`path based finder` is a :term:`meta path finder`, so the import The :term:`path based finder` is a :term:`meta path finder`, so the import
machinery begins the :term:`import path` search by calling the path machinery begins the :term:`import path` search by calling the path
@ -563,14 +566,17 @@ free to remove cache entries from :data:`sys.path_importer_cache` forcing
the path based finder to perform the path entry search again [#fnpic]_. the path based finder to perform the path entry search again [#fnpic]_.
If the path entry is not present in the cache, the path based finder iterates If the path entry is not present in the cache, the path based finder iterates
over every callable in :data:`sys.path_hooks`. Each of the over every callable in :data:`sys.path_hooks`. Each of the :term:`path entry
:term:`path entry hooks <path entry hook>` in this list is called with a hooks <path entry hook>` in this list is called with a single argument, the
single argument, the path entry to be searched. This callable may either path entry to be searched. This callable may either return a :term:`path
return a :term:`path entry finder` that can handle the path entry, or it may entry finder` that can handle the path entry, or it may raise
raise :exc:`ImportError`. :exc:`ImportError`. An :exc:`ImportError` is used by the path based finder to
An :exc:`ImportError` is used by the path based finder to signal that the hook signal that the hook cannot find a :term:`path entry finder` for that
cannot find a :term:`path entry finder` for that :term:`path entry`. The :term:`path entry`. The exception is ignored and :term:`import path`
exception is ignored and :term:`import path` iteration continues. iteration continues. The hook should expect either a string or bytes object;
the encoding of bytes objects is up to the hook (e.g. it may be a file system
encoding, UTF-8, or something else), and if the hook cannot decode the
argument, it should raise :exc:`ImportError`.
If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder` If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder`
being returned, then the path based finder's :meth:`find_module()` method being returned, then the path based finder's :meth:`find_module()` method

View File

@ -1281,6 +1281,8 @@ class PathFinder:
# the list of paths that will become its __path__ # the list of paths that will become its __path__
namespace_path = [] namespace_path = []
for entry in path: for entry in path:
if not isinstance(entry, (str, bytes)):
continue
finder = cls._path_importer_cache(entry) finder = cls._path_importer_cache(entry)
if finder is not None: if finder is not None:
if hasattr(finder, 'find_loader'): if hasattr(finder, 'find_loader'):

View File

@ -1,15 +1,14 @@
from importlib import _bootstrap from importlib import _bootstrap
from importlib import machinery from importlib import machinery
from importlib import import_module
from .. import util from .. import util
from . import util as import_util from . import util as import_util
import imp
import os import os
import sys import sys
import tempfile from types import ModuleType
from test import support
from types import MethodType
import unittest import unittest
import warnings import warnings
import zipimport
class FinderTests(unittest.TestCase): class FinderTests(unittest.TestCase):
@ -89,6 +88,24 @@ class FinderTests(unittest.TestCase):
self.assertIs(loader, importer) self.assertIs(loader, importer)
self.assertIn(os.curdir, sys.path_importer_cache) self.assertIn(os.curdir, sys.path_importer_cache)
def test_None_on_sys_path(self):
# Putting None in sys.path[0] caused an import regression from Python
# 3.2: http://bugs.python.org/issue16514
new_path = sys.path[:]
new_path.insert(0, None)
new_path_importer_cache = sys.path_importer_cache.copy()
new_path_importer_cache.pop(None, None)
new_path_hooks = [zipimport.zipimporter,
_bootstrap.FileFinder.path_hook(
*_bootstrap._get_supported_file_loaders())]
with util.uncache('email'):
with util.import_state(meta_path=sys.meta_path[:],
path=new_path,
path_importer_cache=new_path_importer_cache,
path_hooks=new_path_hooks):
module = import_module('email')
self.assertIsInstance(module, ModuleType)
def test_main(): def test_main():
from test.support import run_unittest from test.support import run_unittest

View File

@ -12,6 +12,9 @@ What's New in Python 3.3.1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #16514: Fix regression causing a traceback when sys.path[0] is None
(actually, any non-string or non-bytes type).
- Issue #16306: Fix multiple error messages when unknown command line - Issue #16306: Fix multiple error messages when unknown command line
parameters where passed to the interpreter. Patch by Hieu Nguyen. parameters where passed to the interpreter. Patch by Hieu Nguyen.

View File

@ -3187,40 +3187,44 @@ unsigned char _Py_M__importlib[] = {
3,1,17,1,13,1,15,1,18,1,117,31,0,0,0,80, 3,1,17,1,13,1,15,1,18,1,117,31,0,0,0,80,
97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,
105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,
0,0,0,0,0,0,0,8,0,0,0,4,0,0,0,67, 0,0,0,0,0,0,0,8,0,0,0,5,0,0,0,67,
0,0,0,115,162,0,0,0,103,0,0,125,3,0,120,149, 0,0,0,115,189,0,0,0,103,0,0,125,3,0,120,176,
0,124,2,0,68,93,131,0,125,4,0,124,0,0,106,0, 0,124,2,0,68,93,158,0,125,4,0,116,0,0,124,4,
0,124,4,0,131,1,0,125,5,0,124,5,0,100,2,0, 0,116,1,0,116,2,0,102,2,0,131,2,0,115,46,0,
107,9,0,114,13,0,116,2,0,124,5,0,100,1,0,131, 113,13,0,110,0,0,124,0,0,106,3,0,124,4,0,131,
2,0,114,85,0,124,5,0,106,3,0,124,1,0,131,1, 1,0,125,5,0,124,5,0,100,2,0,107,9,0,114,13,
0,92,2,0,125,6,0,125,7,0,110,21,0,124,5,0, 0,116,5,0,124,5,0,100,1,0,131,2,0,114,112,0,
106,4,0,124,1,0,131,1,0,125,6,0,103,0,0,125, 124,5,0,106,6,0,124,1,0,131,1,0,92,2,0,125,
7,0,124,6,0,100,2,0,107,9,0,114,128,0,124,6, 6,0,125,7,0,110,21,0,124,5,0,106,7,0,124,1,
0,124,3,0,102,2,0,83,124,3,0,106,5,0,124,7, 0,131,1,0,125,6,0,103,0,0,125,7,0,124,6,0,
0,131,1,0,1,113,13,0,113,13,0,87,100,2,0,124, 100,2,0,107,9,0,114,155,0,124,6,0,124,3,0,102,
3,0,102,2,0,83,100,2,0,83,40,3,0,0,0,117, 2,0,83,124,3,0,106,8,0,124,7,0,131,1,0,1,
63,0,0,0,70,105,110,100,32,116,104,101,32,108,111,97, 113,13,0,113,13,0,87,100,2,0,124,3,0,102,2,0,
100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, 83,100,2,0,83,40,3,0,0,0,117,63,0,0,0,70,
95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, 105,110,100,32,116,104,101,32,108,111,97,100,101,114,32,111,
111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, 114,32,110,97,109,101,115,112,97,99,101,95,112,97,116,104,
109,101,46,117,11,0,0,0,102,105,110,100,95,108,111,97, 32,102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,
100,101,114,78,40,6,0,0,0,117,20,0,0,0,95,112, 47,112,97,99,107,97,103,101,32,110,97,109,101,46,117,11,
97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, 0,0,0,102,105,110,100,95,108,111,97,100,101,114,78,40,
104,101,117,4,0,0,0,78,111,110,101,117,7,0,0,0, 9,0,0,0,117,10,0,0,0,105,115,105,110,115,116,97,
104,97,115,97,116,116,114,117,11,0,0,0,102,105,110,100, 110,99,101,117,3,0,0,0,115,116,114,117,5,0,0,0,
95,108,111,97,100,101,114,117,11,0,0,0,102,105,110,100, 98,121,116,101,115,117,20,0,0,0,95,112,97,116,104,95,
95,109,111,100,117,108,101,117,6,0,0,0,101,120,116,101, 105,109,112,111,114,116,101,114,95,99,97,99,104,101,117,4,
110,100,40,8,0,0,0,117,3,0,0,0,99,108,115,117, 0,0,0,78,111,110,101,117,7,0,0,0,104,97,115,97,
8,0,0,0,102,117,108,108,110,97,109,101,117,4,0,0, 116,116,114,117,11,0,0,0,102,105,110,100,95,108,111,97,
0,112,97,116,104,117,14,0,0,0,110,97,109,101,115,112, 100,101,114,117,11,0,0,0,102,105,110,100,95,109,111,100,
97,99,101,95,112,97,116,104,117,5,0,0,0,101,110,116, 117,108,101,117,6,0,0,0,101,120,116,101,110,100,40,8,
114,121,117,6,0,0,0,102,105,110,100,101,114,117,6,0, 0,0,0,117,3,0,0,0,99,108,115,117,8,0,0,0,
0,0,108,111,97,100,101,114,117,8,0,0,0,112,111,114, 102,117,108,108,110,97,109,101,117,4,0,0,0,112,97,116,
116,105,111,110,115,40,0,0,0,0,40,0,0,0,0,117, 104,117,14,0,0,0,110,97,109,101,115,112,97,99,101,95,
29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111, 112,97,116,104,117,5,0,0,0,101,110,116,114,121,117,6,
114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112, 0,0,0,102,105,110,100,101,114,117,6,0,0,0,108,111,
62,117,11,0,0,0,95,103,101,116,95,108,111,97,100,101, 97,100,101,114,117,8,0,0,0,112,111,114,116,105,111,110,
114,253,4,0,0,115,24,0,0,0,0,5,6,1,13,1, 115,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,
60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,
98,46,95,98,111,111,116,115,116,114,97,112,62,117,11,0,
0,0,95,103,101,116,95,108,111,97,100,101,114,253,4,0,
0,115,28,0,0,0,0,5,6,1,13,1,21,1,6,1,
15,1,12,1,15,1,24,2,15,1,6,1,12,2,10,5, 15,1,12,1,15,1,24,2,15,1,6,1,12,2,10,5,
20,2,117,22,0,0,0,80,97,116,104,70,105,110,100,101, 20,2,117,22,0,0,0,80,97,116,104,70,105,110,100,101,
114,46,95,103,101,116,95,108,111,97,100,101,114,99,3,0, 114,46,95,103,101,116,95,108,111,97,100,101,114,99,3,0,
@ -3250,7 +3254,7 @@ unsigned char _Py_M__importlib[] = {
0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,11,0,0,0,102,105,110,100,95,109, 116,114,97,112,62,117,11,0,0,0,102,105,110,100,95,109,
111,100,117,108,101,22,5,0,0,115,16,0,0,0,0,4, 111,100,117,108,101,24,5,0,0,115,16,0,0,0,0,4,
12,1,12,1,24,1,12,1,4,2,6,3,19,2,117,22, 12,1,12,1,24,1,12,1,4,2,6,3,19,2,117,22,
0,0,0,80,97,116,104,70,105,110,100,101,114,46,102,105, 0,0,0,80,97,116,104,70,105,110,100,101,114,46,102,105,
110,100,95,109,111,100,117,108,101,78,40,11,0,0,0,117, 110,100,95,109,111,100,117,108,101,78,40,11,0,0,0,117,
@ -3271,7 +3275,7 @@ unsigned char _Py_M__importlib[] = {
116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62, 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62,
117,10,0,0,0,80,97,116,104,70,105,110,100,101,114,207, 117,10,0,0,0,80,97,116,104,70,105,110,100,101,114,207,
4,0,0,115,14,0,0,0,16,2,6,2,18,8,18,17, 4,0,0,115,14,0,0,0,16,2,6,2,18,8,18,17,
18,17,18,25,3,1,117,10,0,0,0,80,97,116,104,70, 18,17,18,27,3,1,117,10,0,0,0,80,97,116,104,70,
105,110,100,101,114,99,1,0,0,0,0,0,0,0,1,0, 105,110,100,101,114,99,1,0,0,0,0,0,0,0,1,0,
0,0,3,0,0,0,66,0,0,0,115,110,0,0,0,124, 0,0,3,0,0,0,66,0,0,0,115,110,0,0,0,124,
0,0,69,101,0,0,90,1,0,100,0,0,90,2,0,100, 0,0,69,101,0,0,90,1,0,100,0,0,90,2,0,100,
@ -3325,7 +3329,7 @@ unsigned char _Py_M__importlib[] = {
40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101, 40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,
110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,
116,115,116,114,97,112,62,117,9,0,0,0,60,103,101,110, 116,115,116,114,97,112,62,117,9,0,0,0,60,103,101,110,
101,120,112,114,62,55,5,0,0,115,2,0,0,0,6,0, 101,120,112,114,62,57,5,0,0,115,2,0,0,0,6,0,
117,38,0,0,0,70,105,108,101,70,105,110,100,101,114,46, 117,38,0,0,0,70,105,108,101,70,105,110,100,101,114,46,
95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115, 95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,
62,46,60,103,101,110,101,120,112,114,62,117,1,0,0,0, 62,46,60,103,101,110,101,120,112,114,62,117,1,0,0,0,
@ -3344,7 +3348,7 @@ unsigned char _Py_M__importlib[] = {
100,101,114,117,29,0,0,0,60,102,114,111,122,101,110,32, 100,101,114,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,8,0,0,0,95,95,105,110,105,116, 116,114,97,112,62,117,8,0,0,0,95,95,105,110,105,116,
95,95,49,5,0,0,115,16,0,0,0,0,4,6,1,19, 95,95,51,5,0,0,115,16,0,0,0,0,4,6,1,19,
1,36,1,9,2,15,1,9,1,12,1,117,19,0,0,0, 1,36,1,9,2,15,1,9,1,12,1,117,19,0,0,0,
70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105,
116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,
@ -3359,7 +3363,7 @@ unsigned char _Py_M__importlib[] = {
60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105, 60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,
98,46,95,98,111,111,116,115,116,114,97,112,62,117,17,0, 98,46,95,98,111,111,116,115,116,114,97,112,62,117,17,0,
0,0,105,110,118,97,108,105,100,97,116,101,95,99,97,99, 0,0,105,110,118,97,108,105,100,97,116,101,95,99,97,99,
104,101,115,63,5,0,0,115,2,0,0,0,0,2,117,28, 104,101,115,65,5,0,0,115,2,0,0,0,0,2,117,28,
0,0,0,70,105,108,101,70,105,110,100,101,114,46,105,110, 0,0,0,70,105,108,101,70,105,110,100,101,114,46,105,110,
118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,
2,0,0,0,0,0,0,0,12,0,0,0,13,0,0,0, 2,0,0,0,0,0,0,0,12,0,0,0,13,0,0,0,
@ -3431,7 +3435,7 @@ unsigned char _Py_M__importlib[] = {
0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,105, 0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,105,
109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116, 109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116,
114,97,112,62,117,11,0,0,0,102,105,110,100,95,108,111, 114,97,112,62,117,11,0,0,0,102,105,110,100,95,108,111,
97,100,101,114,69,5,0,0,115,62,0,0,0,0,3,6, 97,100,101,114,71,5,0,0,115,62,0,0,0,0,3,6,
1,19,1,3,1,25,1,13,1,11,1,15,1,10,1,12, 1,19,1,3,1,25,1,13,1,11,1,15,1,10,1,12,
2,9,1,9,1,15,2,9,1,6,2,12,1,18,1,12, 2,9,1,9,1,15,2,9,1,6,2,12,1,18,1,12,
1,22,1,10,1,15,1,12,1,26,4,12,2,22,1,16, 1,22,1,10,1,15,1,12,1,26,4,12,2,22,1,16,
@ -3470,7 +3474,7 @@ unsigned char _Py_M__importlib[] = {
102,110,40,0,0,0,0,40,0,0,0,0,117,29,0,0, 102,110,40,0,0,0,0,40,0,0,0,0,117,29,0,0,
0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, 0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,
105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,9, 105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,9,
0,0,0,60,103,101,110,101,120,112,114,62,139,5,0,0, 0,0,0,60,103,101,110,101,120,112,114,62,141,5,0,0,
115,2,0,0,0,6,0,117,41,0,0,0,70,105,108,101, 115,2,0,0,0,6,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, 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,103,101,110, 104,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110,
@ -3498,7 +3502,7 @@ unsigned char _Py_M__importlib[] = {
0,0,40,0,0,0,0,117,29,0,0,0,60,102,114,111, 0,0,40,0,0,0,0,117,29,0,0,0,60,102,114,111,
122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,
111,111,116,115,116,114,97,112,62,117,11,0,0,0,95,102, 111,111,116,115,116,114,97,112,62,117,11,0,0,0,95,102,
105,108,108,95,99,97,99,104,101,111,5,0,0,115,34,0, 105,108,108,95,99,97,99,104,101,113,5,0,0,115,34,0,
0,0,0,2,9,1,3,1,19,1,13,2,11,3,18,1, 0,0,0,2,9,1,3,1,19,1,13,2,11,3,18,1,
18,7,9,1,13,1,24,1,6,1,27,2,6,1,17,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, 9,1,18,1,117,22,0,0,0,70,105,108,101,70,105,110,
@ -3544,7 +3548,7 @@ unsigned char _Py_M__importlib[] = {
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,24,0,0,0,112,97,116,104,95,104, 116,114,97,112,62,117,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, 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,
101,114,151,5,0,0,115,6,0,0,0,0,2,12,1,21, 101,114,153,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, 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, 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, 108,115,62,46,112,97,116,104,95,104,111,111,107,95,102,111,
@ -3558,7 +3562,7 @@ unsigned char _Py_M__importlib[] = {
105,108,115,117,29,0,0,0,60,102,114,111,122,101,110,32, 105,108,115,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,9,0,0,0,112,97,116,104,95,104, 116,114,97,112,62,117,9,0,0,0,112,97,116,104,95,104,
111,111,107,141,5,0,0,115,4,0,0,0,0,10,21,6, 111,111,107,143,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, 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, 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,14, 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,14,
@ -3569,7 +3573,7 @@ unsigned char _Py_M__importlib[] = {
0,0,115,101,108,102,40,0,0,0,0,40,0,0,0,0, 0,0,115,101,108,102,40,0,0,0,0,40,0,0,0,0,
117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112, 117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,
111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,
112,62,117,8,0,0,0,95,95,114,101,112,114,95,95,159, 112,62,117,8,0,0,0,95,95,114,101,112,114,95,95,161,
5,0,0,115,2,0,0,0,0,1,117,19,0,0,0,70, 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, 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,
95,95,78,40,13,0,0,0,117,8,0,0,0,95,95,110, 95,95,78,40,13,0,0,0,117,8,0,0,0,95,95,110,
@ -3590,7 +3594,7 @@ unsigned char _Py_M__importlib[] = {
0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,10,0,0,0,70,105,108,101,70,105, 116,114,97,112,62,117,10,0,0,0,70,105,108,101,70,105,
110,100,101,114,40,5,0,0,115,16,0,0,0,16,7,6, 110,100,101,114,42,5,0,0,115,16,0,0,0,16,7,6,
2,12,14,12,4,6,2,12,42,12,30,18,18,117,10,0, 2,12,14,12,4,6,2,12,42,12,30,18,18,117,10,0,
0,0,70,105,108,101,70,105,110,100,101,114,99,1,0,0, 0,0,70,105,108,101,70,105,110,100,101,114,99,1,0,0,
0,0,0,0,0,1,0,0,0,2,0,0,0,66,0,0, 0,0,0,0,0,1,0,0,0,2,0,0,0,66,0,0,
@ -3612,7 +3616,7 @@ unsigned char _Py_M__importlib[] = {
0,115,101,108,102,40,0,0,0,0,40,0,0,0,0,117, 0,115,101,108,102,40,0,0,0,0,40,0,0,0,0,117,
29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111, 29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,
114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112, 114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,
62,117,9,0,0,0,95,95,101,110,116,101,114,95,95,169, 62,117,9,0,0,0,95,95,101,110,116,101,114,95,95,171,
5,0,0,115,2,0,0,0,0,2,117,28,0,0,0,95, 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, 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, 116,46,95,95,101,110,116,101,114,95,95,99,4,0,0,0,
@ -3631,7 +3635,7 @@ unsigned char _Py_M__importlib[] = {
98,97,99,107,40,0,0,0,0,40,0,0,0,0,117,29, 98,97,99,107,40,0,0,0,0,40,0,0,0,0,117,29,
0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,114, 0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,114,
116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62, 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62,
117,8,0,0,0,95,95,101,120,105,116,95,95,173,5,0, 117,8,0,0,0,95,95,101,120,105,116,95,95,175,5,0,
0,115,2,0,0,0,0,2,117,27,0,0,0,95,73,109, 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, 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,117,8, 95,95,101,120,105,116,95,95,78,40,6,0,0,0,117,8,
@ -3645,7 +3649,7 @@ unsigned char _Py_M__importlib[] = {
117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112, 117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,
111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,
112,62,117,18,0,0,0,95,73,109,112,111,114,116,76,111, 112,62,117,18,0,0,0,95,73,109,112,111,114,116,76,111,
99,107,67,111,110,116,101,120,116,165,5,0,0,115,6,0, 99,107,67,111,110,116,101,120,116,167,5,0,0,115,6,0,
0,0,16,2,6,2,12,4,117,18,0,0,0,95,73,109, 0,0,16,2,6,2,12,4,117,18,0,0,0,95,73,109,
112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,99, 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,99,
3,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, 3,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0,
@ -3674,7 +3678,7 @@ unsigned char _Py_M__importlib[] = {
0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,13,0,0,0,95,114,101,115,111,108, 116,114,97,112,62,117,13,0,0,0,95,114,101,115,111,108,
118,101,95,110,97,109,101,178,5,0,0,115,10,0,0,0, 118,101,95,110,97,109,101,180,5,0,0,115,10,0,0,0,
0,2,22,1,18,1,15,1,10,1,117,13,0,0,0,95, 0,2,22,1,18,1,15,1,10,1,117,13,0,0,0,95,
114,101,115,111,108,118,101,95,110,97,109,101,99,2,0,0, 114,101,115,111,108,118,101,95,110,97,109,101,99,2,0,0,
0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0, 0,0,0,0,0,4,0,0,0,11,0,0,0,67,0,0,
@ -3706,7 +3710,7 @@ unsigned char _Py_M__importlib[] = {
0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,
105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,12,0,0,0,95,102,105,110,100,95, 116,114,97,112,62,117,12,0,0,0,95,102,105,110,100,95,
109,111,100,117,108,101,187,5,0,0,115,20,0,0,0,0, 109,111,100,117,108,101,189,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,9,1,19,1,16,1,10,1,24,1,12,2,15,1,4,
2,21,2,117,12,0,0,0,95,102,105,110,100,95,109,111, 2,21,2,117,12,0,0,0,95,102,105,110,100,95,109,111,
100,117,108,101,99,3,0,0,0,0,0,0,0,4,0,0, 100,117,108,101,99,3,0,0,0,0,0,0,0,4,0,0,
@ -3750,7 +3754,7 @@ unsigned char _Py_M__importlib[] = {
40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,60, 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,60,
102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98,
46,95,98,111,111,116,115,116,114,97,112,62,117,13,0,0, 46,95,98,111,111,116,115,116,114,97,112,62,117,13,0,0,
0,95,115,97,110,105,116,121,95,99,104,101,99,107,204,5, 0,95,115,97,110,105,116,121,95,99,104,101,99,107,206,5,
0,0,115,24,0,0,0,0,2,15,1,30,1,12,1,15, 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,117, 1,6,1,15,1,15,1,15,1,6,2,27,1,19,1,117,
13,0,0,0,95,115,97,110,105,116,121,95,99,104,101,99, 13,0,0,0,95,115,97,110,105,116,121,95,99,104,101,99,
@ -3828,7 +3832,7 @@ unsigned char _Py_M__importlib[] = {
109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116, 109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116,
114,97,112,62,117,23,0,0,0,95,102,105,110,100,95,97, 114,97,112,62,117,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, 110,100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,
223,5,0,0,115,76,0,0,0,0,1,6,1,19,1,6, 225,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,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, 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, 2,13,1,19,2,13,1,6,2,13,1,32,2,24,1,3,
@ -3858,7 +3862,7 @@ unsigned char _Py_M__importlib[] = {
0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, 0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,
105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,14, 105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,14,
0,0,0,95,102,105,110,100,95,97,110,100,95,108,111,97, 0,0,0,95,102,105,110,100,95,97,110,100,95,108,111,97,
100,17,6,0,0,115,14,0,0,0,0,2,3,1,16,2, 100,19,6,0,0,115,14,0,0,0,0,2,3,1,16,2,
11,1,10,1,3,1,17,2,117,14,0,0,0,95,102,105, 11,1,10,1,3,1,17,2,117,14,0,0,0,95,102,105,
110,100,95,97,110,100,95,108,111,97,100,99,3,0,0,0, 110,100,95,97,110,100,95,108,111,97,100,99,3,0,0,0,
0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,
@ -3916,7 +3920,7 @@ unsigned char _Py_M__importlib[] = {
40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101, 40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,
110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111, 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,
116,115,116,114,97,112,62,117,11,0,0,0,95,103,99,100, 116,115,116,114,97,112,62,117,11,0,0,0,95,103,99,100,
95,105,109,112,111,114,116,30,6,0,0,115,28,0,0,0, 95,105,109,112,111,114,116,32,6,0,0,115,28,0,0,0,
0,9,16,1,12,1,21,1,10,1,15,1,13,1,13,1, 0,9,16,1,12,1,21,1,10,1,15,1,13,1,13,1,
12,1,10,1,6,1,9,1,21,1,10,1,117,11,0,0, 12,1,10,1,6,1,9,1,21,1,10,1,117,11,0,0,
0,95,103,99,100,95,105,109,112,111,114,116,99,3,0,0, 0,95,103,99,100,95,105,109,112,111,114,116,99,3,0,0,
@ -3974,7 +3978,7 @@ unsigned char _Py_M__importlib[] = {
0,40,0,0,0,0,117,29,0,0,0,60,102,114,111,122, 0,40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,
101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,111, 101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,
111,116,115,116,114,97,112,62,117,16,0,0,0,95,104,97, 111,116,115,116,114,97,112,62,117,16,0,0,0,95,104,97,
110,100,108,101,95,102,114,111,109,108,105,115,116,54,6,0, 110,100,108,101,95,102,114,111,109,108,105,115,116,56,6,0,
0,115,34,0,0,0,0,10,15,1,12,1,12,1,13,1, 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, 15,1,22,1,13,1,15,1,21,1,3,1,17,1,18,6,
18,1,15,1,9,1,32,1,117,16,0,0,0,95,104,97, 18,1,15,1,9,1,32,1,117,16,0,0,0,95,104,97,
@ -4008,7 +4012,7 @@ unsigned char _Py_M__importlib[] = {
111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95, 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,
98,111,111,116,115,116,114,97,112,62,117,17,0,0,0,95, 98,111,111,116,115,116,114,97,112,62,117,17,0,0,0,95,
99,97,108,99,95,95,95,112,97,99,107,97,103,101,95,95, 99,97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,
88,6,0,0,115,12,0,0,0,0,7,15,1,12,1,10, 90,6,0,0,115,12,0,0,0,0,7,15,1,12,1,10,
1,12,1,25,1,117,17,0,0,0,95,99,97,108,99,95, 1,12,1,25,1,117,17,0,0,0,95,99,97,108,99,95,
95,95,112,97,99,107,97,103,101,95,95,99,0,0,0,0, 95,95,112,97,99,107,97,103,101,95,95,99,0,0,0,0,
0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0, 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
@ -4040,7 +4044,7 @@ unsigned char _Py_M__importlib[] = {
111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,
112,62,117,27,0,0,0,95,103,101,116,95,115,117,112,112, 112,62,117,27,0,0,0,95,103,101,116,95,115,117,112,112,
111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101, 111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,
114,115,103,6,0,0,115,8,0,0,0,0,5,18,1,12, 114,115,105,6,0,0,115,8,0,0,0,0,5,18,1,12,
1,12,1,117,27,0,0,0,95,103,101,116,95,115,117,112, 1,12,1,117,27,0,0,0,95,103,101,116,95,115,117,112,
112,111,114,116,101,100,95,102,105,108,101,95,108,111,97,100, 112,111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,
101,114,115,99,5,0,0,0,0,0,0,0,9,0,0,0, 101,114,115,99,5,0,0,0,0,0,0,0,9,0,0,0,
@ -4108,7 +4112,7 @@ unsigned char _Py_M__importlib[] = {
0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,105, 0,0,117,29,0,0,0,60,102,114,111,122,101,110,32,105,
109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116, 109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,116,
114,97,112,62,117,10,0,0,0,95,95,105,109,112,111,114, 114,97,112,62,117,10,0,0,0,95,95,105,109,112,111,114,
116,95,95,114,6,0,0,115,26,0,0,0,0,11,12,1, 116,95,95,116,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, 15,2,24,1,12,1,18,1,6,3,12,1,23,1,6,1,
4,4,35,3,40,2,117,10,0,0,0,95,95,105,109,112, 4,4,35,3,40,2,117,10,0,0,0,95,95,105,109,112,
111,114,116,95,95,99,2,0,0,0,0,0,0,0,14,0, 111,114,116,95,95,99,2,0,0,0,0,0,0,0,14,0,
@ -4189,7 +4193,7 @@ unsigned char _Py_M__importlib[] = {
112,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, 112,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,
60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105, 60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,
98,46,95,98,111,111,116,115,116,114,97,112,62,117,9,0, 98,46,95,98,111,111,116,115,116,114,97,112,62,117,9,0,
0,0,60,103,101,110,101,120,112,114,62,182,6,0,0,115, 0,0,60,103,101,110,101,120,112,114,62,184,6,0,0,115,
2,0,0,0,6,0,117,25,0,0,0,95,115,101,116,117, 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, 112,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,
120,112,114,62,105,0,0,0,0,117,7,0,0,0,69,77, 120,112,114,62,105,0,0,0,0,117,7,0,0,0,69,77,
@ -4253,7 +4257,7 @@ unsigned char _Py_M__importlib[] = {
108,101,40,0,0,0,0,40,0,0,0,0,117,29,0,0, 108,101,40,0,0,0,0,40,0,0,0,0,117,29,0,0,
0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, 0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,
105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,6, 105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,6,
0,0,0,95,115,101,116,117,112,150,6,0,0,115,96,0, 0,0,0,95,115,101,116,117,112,152,6,0,0,115,96,0,
0,0,0,9,6,1,6,2,12,1,9,2,6,2,19,1, 0,0,0,9,6,1,6,2,12,1,9,2,6,2,19,1,
15,1,16,2,13,1,13,1,15,1,18,2,13,1,20,2, 15,1,16,2,13,1,13,1,15,1,18,2,13,1,20,2,
48,1,19,2,31,1,10,1,15,1,13,1,4,2,3,1, 48,1,19,2,31,1,10,1,15,1,13,1,4,2,3,1,
@ -4297,7 +4301,7 @@ unsigned char _Py_M__importlib[] = {
0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,110, 0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,
32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116, 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,
115,116,114,97,112,62,117,8,0,0,0,95,105,110,115,116, 115,116,114,97,112,62,117,8,0,0,0,95,105,110,115,116,
97,108,108,224,6,0,0,115,16,0,0,0,0,2,13,1, 97,108,108,226,6,0,0,115,16,0,0,0,0,2,13,1,
9,1,28,1,16,1,16,1,15,1,19,1,117,8,0,0, 9,1,28,1,16,1,16,1,15,1,19,1,117,8,0,0,
0,95,105,110,115,116,97,108,108,78,40,3,0,0,0,117, 0,95,105,110,115,116,97,108,108,78,40,3,0,0,0,117,
3,0,0,0,119,105,110,117,6,0,0,0,99,121,103,119, 3,0,0,0,119,105,110,117,6,0,0,0,99,121,103,119,
@ -4398,7 +4402,7 @@ unsigned char _Py_M__importlib[] = {
1,37,2,6,2,9,2,9,1,9,2,15,27,12,23,12, 1,37,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, 21,12,8,12,13,12,11,12,55,12,18,12,11,12,11,12,
17,19,57,19,54,19,50,19,82,22,134,19,29,25,49,25, 17,19,57,19,54,19,50,19,82,22,134,19,29,25,49,25,
25,6,3,19,45,19,55,19,18,19,89,19,125,19,13,12, 25,6,3,19,45,19,55,19,18,19,91,19,125,19,13,12,
9,12,17,12,17,6,2,12,50,12,13,18,24,12,34,12, 9,12,17,12,17,6,2,12,50,12,13,18,24,12,34,12,
15,12,11,24,36,12,74, 15,12,11,24,36,12,74,
}; };