[Python-checkins] bpo-43693: Compute deref offsets in compiler (gh-25152)

ericsnowcurrently webhook-mailer at python.org
Thu Jun 3 20:04:04 EDT 2021


https://github.com/python/cpython/commit/b2bf2bc1ece673d387341e06c8d3c2bc6e259747
commit: b2bf2bc1ece673d387341e06c8d3c2bc6e259747
branch: main
author: Mark Shannon <mark at hotpy.org>
committer: ericsnowcurrently <ericsnowcurrently at gmail.com>
date: 2021-06-03T18:03:54-06:00
summary:

bpo-43693: Compute deref offsets in compiler (gh-25152)

Merges locals and cells into a single array.
Saves a pointer in the interpreter and means that we don't need the LOAD_CLOSURE opcode any more

https://bugs.python.org/issue43693

files:
A Misc/NEWS.d/next/Core and Builtins/2021-04-02-15-02-16.bpo-43693.l3Ureu.rst
M Doc/library/dis.rst
M Lib/dis.py
M Lib/importlib/_bootstrap_external.py
M Lib/test/test_dis.py
M Objects/clinic/codeobject.c.h
M Objects/codeobject.c
M Python/ceval.c
M Python/compile.c
M Python/importlib.h
M Python/importlib_external.h

diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst
index eaa001c2fcecc5..bc206f7d2e96af 100644
--- a/Doc/library/dis.rst
+++ b/Doc/library/dis.rst
@@ -1058,16 +1058,24 @@ All of the following opcodes use their arguments.
 
 .. opcode:: LOAD_CLOSURE (i)
 
-   Pushes a reference to the cell contained in slot *i* of the cell and free
-   variable storage.  The name of the variable is
-   ``co_fastlocalnames[i + len(co_varnames)]``.
+   Pushes a reference to the cell contained in slot ``i`` of the "fast locals"
+   storage.  The name of the variable is ``co_fastlocalnames[i]``.
+
+   Note that ``LOAD_CLOSURE`` is effectively an alias for ``LOAD_FAST``.
+   It exists to keep bytecode a little more readable.
+
+   .. versionchanged:: 3.11
+      ``i`` is no longer offset by the length of ``co_varnames``.
 
 
 .. opcode:: LOAD_DEREF (i)
 
-   Loads the cell contained in slot *i* of the cell and free variable storage.
+   Loads the cell contained in slot ``i`` of the "fast locals" storage.
    Pushes a reference to the object the cell contains on the stack.
 
+   .. versionchanged:: 3.11
+      ``i`` is no longer offset by the length of ``co_varnames``.
+
 
 .. opcode:: LOAD_CLASSDEREF (i)
 
@@ -1077,20 +1085,29 @@ All of the following opcodes use their arguments.
 
    .. versionadded:: 3.4
 
+   .. versionchanged:: 3.11
+      ``i`` is no longer offset by the length of ``co_varnames``.
+
 
 .. opcode:: STORE_DEREF (i)
 
-   Stores TOS into the cell contained in slot *i* of the cell and free variable
+   Stores TOS into the cell contained in slot ``i`` of the "fast locals"
    storage.
 
+   .. versionchanged:: 3.11
+      ``i`` is no longer offset by the length of ``co_varnames``.
+
 
 .. opcode:: DELETE_DEREF (i)
 
-   Empties the cell contained in slot *i* of the cell and free variable storage.
+   Empties the cell contained in slot ``i`` of the "fast locals" storage.
    Used by the :keyword:`del` statement.
 
    .. versionadded:: 3.2
 
+   .. versionchanged:: 3.11
+      ``i`` is no longer offset by the length of ``co_varnames``.
+
 
 .. opcode:: RAISE_VARARGS (argc)
 
diff --git a/Lib/dis.py b/Lib/dis.py
index dfadad79d2dfd1..48a6ab8e41df3f 100644
--- a/Lib/dis.py
+++ b/Lib/dis.py
@@ -378,14 +378,11 @@ def _get_instructions_bytes(code, varname_from_oparg=None,
             elif op in hasjrel:
                 argval = offset + 2 + arg*2
                 argrepr = "to " + repr(argval)
-            elif op in haslocal:
+            elif op in haslocal or op in hasfree:
                 argval, argrepr = _get_name_info(arg, varname_from_oparg)
             elif op in hascompare:
                 argval = cmp_op[arg]
                 argrepr = argval
-            elif op in hasfree:
-                argval, argrepr = _get_name_info(arg, varname_from_oparg,
-                                                 cell=True)
             elif op == FORMAT_VALUE:
                 argval, argrepr = FORMAT_VALUE_CONVERTERS[arg & 0x3]
                 argval = (argval, bool(arg & 0x4))
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index b2d8a70996b90f..39552186c8735d 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -356,6 +356,7 @@ def _write_atomic(path, data, mode=0o666):
 #     Python 3.11a1 3451 (Add CALL_METHOD_KW)
 #     Python 3.11a1 3452 (drop nlocals from marshaled code objects)
 #     Python 3.11a1 3453 (add co_fastlocalnames and co_fastlocalkinds)
+#     Python 3.11a1 3454 (compute cell offsets relative to locals bpo-43693)
 
 #
 # MAGIC must change whenever the bytecode emitted by the compiler may no
@@ -365,7 +366,7 @@ def _write_atomic(path, data, mode=0o666):
 # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
 # in PC/launcher.c must also be updated.
 
-MAGIC_NUMBER = (3453).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3454).to_bytes(2, 'little') + b'\r\n'
 _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little')  # For import.c
 
 _PYCACHE = '__pycache__'
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index f341a3e5750349..b119d183d66c10 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -427,7 +427,7 @@ def foo(x):
     return foo
 
 dis_nested_0 = """\
-%3d           0 LOAD_CLOSURE             0 (y)
+%3d           0 LOAD_CLOSURE             2 (y)
               2 BUILD_TUPLE              1
               4 LOAD_CONST               1 (<code object foo at 0x..., file "%s", line %d>)
               6 LOAD_CONST               2 ('_h.<locals>.foo')
@@ -444,12 +444,12 @@ def foo(x):
 
 dis_nested_1 = """%s
 Disassembly of <code object foo at 0x..., file "%s", line %d>:
-%3d           0 LOAD_CLOSURE             0 (x)
+%3d           0 LOAD_CLOSURE             1 (x)
               2 BUILD_TUPLE              1
               4 LOAD_CONST               1 (<code object <listcomp> at 0x..., file "%s", line %d>)
               6 LOAD_CONST               2 ('_h.<locals>.foo.<locals>.<listcomp>')
               8 MAKE_FUNCTION            8 (closure)
-             10 LOAD_DEREF               1 (y)
+             10 LOAD_DEREF               2 (y)
              12 GET_ITER
              14 CALL_FUNCTION            1
              16 RETURN_VALUE
@@ -467,7 +467,7 @@ def foo(x):
               2 LOAD_FAST                0 (.0)
         >>    4 FOR_ITER                 6 (to 18)
               6 STORE_FAST               1 (z)
-              8 LOAD_DEREF               0 (x)
+              8 LOAD_DEREF               2 (x)
              10 LOAD_FAST                1 (z)
              12 BINARY_ADD
              14 LIST_APPEND              2
@@ -962,16 +962,16 @@ def jumpy():
 Instruction = dis.Instruction
 expected_opinfo_outer = [
   Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval=(3, 4), argrepr='(3, 4)', offset=0, starts_line=2, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=0, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=1, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=3, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=4, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
   Instruction(opname='BUILD_TUPLE', opcode=102, arg=2, argval=2, argrepr='', offset=6, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_f, argrepr=repr(code_object_f), offset=8, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer.<locals>.f', argrepr="'outer.<locals>.f'", offset=10, starts_line=None, is_jump_target=False),
   Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='defaults, closure', offset=12, starts_line=None, is_jump_target=False),
   Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='f', argrepr='f', offset=14, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=16, starts_line=7, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=0, argval='a', argrepr='a', offset=18, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=1, argval='b', argrepr='b', offset=20, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=3, argval='a', argrepr='a', offset=18, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=4, argval='b', argrepr='b', offset=20, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval='', argrepr="''", offset=22, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval=1, argrepr='1', offset=24, starts_line=None, is_jump_target=False),
   Instruction(opname='BUILD_LIST', opcode=103, arg=0, argval=0, argrepr='', offset=26, starts_line=None, is_jump_target=False),
@@ -985,20 +985,20 @@ def jumpy():
 
 expected_opinfo_f = [
   Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=(5, 6), argrepr='(5, 6)', offset=0, starts_line=3, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=2, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=3, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=0, argval='c', argrepr='c', offset=6, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=1, argval='d', argrepr='d', offset=8, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=5, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=6, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=3, argval='c', argrepr='c', offset=6, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_CLOSURE', opcode=135, arg=4, argval='d', argrepr='d', offset=8, starts_line=None, is_jump_target=False),
   Instruction(opname='BUILD_TUPLE', opcode=102, arg=4, argval=4, argrepr='', offset=10, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_inner, argrepr=repr(code_object_inner), offset=12, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer.<locals>.f.<locals>.inner', argrepr="'outer.<locals>.f.<locals>.inner'", offset=14, starts_line=None, is_jump_target=False),
   Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='defaults, closure', offset=16, starts_line=None, is_jump_target=False),
   Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='inner', argrepr='inner', offset=18, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=20, starts_line=5, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=2, argval='a', argrepr='a', offset=22, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=3, argval='b', argrepr='b', offset=24, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=0, argval='c', argrepr='c', offset=26, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=1, argval='d', argrepr='d', offset=28, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=5, argval='a', argrepr='a', offset=22, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=6, argval='b', argrepr='b', offset=24, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=3, argval='c', argrepr='c', offset=26, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=4, argval='d', argrepr='d', offset=28, starts_line=None, is_jump_target=False),
   Instruction(opname='CALL_FUNCTION', opcode=131, arg=4, argval=4, argrepr='', offset=30, starts_line=None, is_jump_target=False),
   Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=32, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_FAST', opcode=124, arg=2, argval='inner', argrepr='inner', offset=34, starts_line=6, is_jump_target=False),
@@ -1007,10 +1007,10 @@ def jumpy():
 
 expected_opinfo_inner = [
   Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=0, starts_line=4, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=0, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=1, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=2, argval='c', argrepr='c', offset=6, starts_line=None, is_jump_target=False),
-  Instruction(opname='LOAD_DEREF', opcode=136, arg=3, argval='d', argrepr='d', offset=8, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=2, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=3, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=4, argval='c', argrepr='c', offset=6, starts_line=None, is_jump_target=False),
+  Instruction(opname='LOAD_DEREF', opcode=136, arg=5, argval='d', argrepr='d', offset=8, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='e', argrepr='e', offset=10, starts_line=None, is_jump_target=False),
   Instruction(opname='LOAD_FAST', opcode=124, arg=1, argval='f', argrepr='f', offset=12, starts_line=None, is_jump_target=False),
   Instruction(opname='CALL_FUNCTION', opcode=131, arg=6, argval=6, argrepr='', offset=14, starts_line=None, is_jump_target=False),
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-04-02-15-02-16.bpo-43693.l3Ureu.rst b/Misc/NEWS.d/next/Core and Builtins/2021-04-02-15-02-16.bpo-43693.l3Ureu.rst
new file mode 100644
index 00000000000000..948c4d52482dc0
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-04-02-15-02-16.bpo-43693.l3Ureu.rst	
@@ -0,0 +1,4 @@
+Compute cell offsets relative to locals in compiler. Allows the interpreter
+to treats locals and cells a single array, which is slightly more efficient.
+Also make the LOAD_CLOSURE opcode an alias for LOAD_FAST.  Preserving
+LOAD_CLOSURE helps keep bytecode a bit more readable.
diff --git a/Objects/clinic/codeobject.c.h b/Objects/clinic/codeobject.c.h
index 629d26580c6fe3..c1ad09cea05890 100644
--- a/Objects/clinic/codeobject.c.h
+++ b/Objects/clinic/codeobject.c.h
@@ -375,7 +375,7 @@ code_replace(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObje
 }
 
 PyDoc_STRVAR(code__varname_from_oparg__doc__,
-"_varname_from_oparg($self, /, oparg, *, cell=False)\n"
+"_varname_from_oparg($self, /, oparg)\n"
 "--\n"
 "\n"
 "(internal-only) Return the local variable name for the given oparg.\n"
@@ -386,18 +386,16 @@ PyDoc_STRVAR(code__varname_from_oparg__doc__,
     {"_varname_from_oparg", (PyCFunction)(void(*)(void))code__varname_from_oparg, METH_FASTCALL|METH_KEYWORDS, code__varname_from_oparg__doc__},
 
 static PyObject *
-code__varname_from_oparg_impl(PyCodeObject *self, int oparg, int cell);
+code__varname_from_oparg_impl(PyCodeObject *self, int oparg);
 
 static PyObject *
 code__varname_from_oparg(PyCodeObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
 {
     PyObject *return_value = NULL;
-    static const char * const _keywords[] = {"oparg", "cell", NULL};
+    static const char * const _keywords[] = {"oparg", NULL};
     static _PyArg_Parser _parser = {NULL, _keywords, "_varname_from_oparg", 0};
-    PyObject *argsbuf[2];
-    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
+    PyObject *argsbuf[1];
     int oparg;
-    int cell = 0;
 
     args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
     if (!args) {
@@ -407,17 +405,9 @@ code__varname_from_oparg(PyCodeObject *self, PyObject *const *args, Py_ssize_t n
     if (oparg == -1 && PyErr_Occurred()) {
         goto exit;
     }
-    if (!noptargs) {
-        goto skip_optional_kwonly;
-    }
-    cell = PyObject_IsTrue(args[1]);
-    if (cell < 0) {
-        goto exit;
-    }
-skip_optional_kwonly:
-    return_value = code__varname_from_oparg_impl(self, oparg, cell);
+    return_value = code__varname_from_oparg_impl(self, oparg);
 
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=43f4eef80d584fe0 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=ba4c5487e0364ce8 input=a9049054013a1b77]*/
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 051aefece334fd..b82a1b5fb8f7b4 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -1547,8 +1547,6 @@ code_replace_impl(PyCodeObject *self, int co_argcount,
 code._varname_from_oparg
 
     oparg: int
-    *
-    cell: bool = False
 
 (internal-only) Return the local variable name for the given oparg.
 
@@ -1556,12 +1554,9 @@ WARNING: this method is for internal use only and may change or go away.
 [clinic start generated code]*/
 
 static PyObject *
-code__varname_from_oparg_impl(PyCodeObject *self, int oparg, int cell)
-/*[clinic end generated code: output=c7d39c9723692c8f input=2945bb291d3a3118]*/
+code__varname_from_oparg_impl(PyCodeObject *self, int oparg)
+/*[clinic end generated code: output=1fd1130413184206 input=c5fa3ee9bac7d4ca]*/
 {
-    if (cell) {
-        oparg += self->co_nlocals;
-    }
     PyObject *name = PyTuple_GetItem(self->co_localsplusnames, oparg);
     if (name == NULL) {
         return NULL;
diff --git a/Python/ceval.c b/Python/ceval.c
index 4e16322daa5092..7602ac9eaf5260 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1569,7 +1569,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
     const _Py_CODEUNIT *next_instr;
     int opcode;        /* Current opcode */
     int oparg;         /* Current opcode argument, if any */
-    PyObject **localsplus, **freevars, **specials;
+    PyObject **localsplus, **specials;
     PyObject *retval = NULL;            /* Return value */
     _Py_atomic_int * const eval_breaker = &tstate->interp->ceval.eval_breaker;
     PyCodeObject *co;
@@ -1647,7 +1647,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
     names = co->co_names;
     consts = co->co_consts;
     localsplus = f->f_localsptr;
-    freevars = f->f_localsptr + co->co_nlocals;
     assert(PyBytes_Check(co->co_code));
     assert(PyBytes_GET_SIZE(co->co_code) <= INT_MAX);
     assert(PyBytes_GET_SIZE(co->co_code) % sizeof(_Py_CODEUNIT) == 0);
@@ -1820,6 +1819,8 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
             DISPATCH();
         }
 
+        /* We keep LOAD_CLOSURE so that the bytecode stays more readable. */
+        case TARGET(LOAD_CLOSURE):
         case TARGET(LOAD_FAST): {
             PyObject *value = GETLOCAL(oparg);
             if (value == NULL) {
@@ -3060,7 +3061,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
         }
 
         case TARGET(DELETE_DEREF): {
-            PyObject *cell = freevars[oparg];
+            PyObject *cell = GETLOCAL(oparg);
             PyObject *oldobj = PyCell_GET(cell);
             if (oldobj != NULL) {
                 PyCell_SET(cell, NULL);
@@ -3071,21 +3072,11 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
             goto error;
         }
 
-        case TARGET(LOAD_CLOSURE): {
-            PyObject *cell = freevars[oparg];
-            Py_INCREF(cell);
-            PUSH(cell);
-            DISPATCH();
-        }
-
         case TARGET(LOAD_CLASSDEREF): {
             PyObject *name, *value, *locals = LOCALS();
-            Py_ssize_t idx;
             assert(locals);
-            assert(oparg >= co->co_ncellvars);
-            idx = oparg + co->co_nlocals;
-            assert(idx < co->co_nlocalsplus);
-            name = PyTuple_GET_ITEM(co->co_localsplusnames, idx);
+            assert(oparg >= 0 && oparg < co->co_nlocalsplus);
+            name = PyTuple_GET_ITEM(co->co_localsplusnames, oparg);
             if (PyDict_CheckExact(locals)) {
                 value = PyDict_GetItemWithError(locals, name);
                 if (value != NULL) {
@@ -3105,7 +3096,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
                 }
             }
             if (!value) {
-                PyObject *cell = freevars[oparg];
+                PyObject *cell = GETLOCAL(oparg);
                 value = PyCell_GET(cell);
                 if (value == NULL) {
                     format_exc_unbound(tstate, co, oparg);
@@ -3118,7 +3109,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
         }
 
         case TARGET(LOAD_DEREF): {
-            PyObject *cell = freevars[oparg];
+            PyObject *cell = GETLOCAL(oparg);
             PyObject *value = PyCell_GET(cell);
             if (value == NULL) {
                 format_exc_unbound(tstate, co, oparg);
@@ -3131,7 +3122,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag)
 
         case TARGET(STORE_DEREF): {
             PyObject *v = POP();
-            PyObject *cell = freevars[oparg];
+            PyObject *cell = GETLOCAL(oparg);
             PyObject *oldobj = PyCell_GET(cell);
             PyCell_SET(cell, v);
             Py_XDECREF(oldobj);
@@ -4882,7 +4873,6 @@ initialize_locals(PyThreadState *tstate, PyFrameConstructor *con,
 {
     PyCodeObject *co = (PyCodeObject*)con->fc_code;
     const Py_ssize_t total_args = co->co_argcount + co->co_kwonlyargcount;
-    PyObject **freevars = localsplus + co->co_nlocals;
 
     /* Create a dictionary for keyword parameters (**kwags) */
     PyObject *kwdict;
@@ -5086,7 +5076,7 @@ initialize_locals(PyThreadState *tstate, PyFrameConstructor *con,
     for (i = 0; i < co->co_nfreevars; ++i) {
         PyObject *o = PyTuple_GET_ITEM(con->fc_closure, i);
         Py_INCREF(o);
-        freevars[co->co_ncellvars + i] = o;
+        localsplus[co->co_nlocals + co->co_ncellvars + i] = o;
     }
 
     return 0;
@@ -6419,8 +6409,8 @@ format_exc_unbound(PyThreadState *tstate, PyCodeObject *co, int oparg)
     /* Don't stomp existing exception */
     if (_PyErr_Occurred(tstate))
         return;
-    name = PyTuple_GET_ITEM(co->co_localsplusnames, oparg + co->co_nlocals);
-    if (oparg < co->co_ncellvars) {
+    name = PyTuple_GET_ITEM(co->co_localsplusnames, oparg);
+    if (oparg < co->co_ncellvars + co->co_nlocals) {
         format_exc_check_arg(tstate, PyExc_UnboundLocalError,
                              UNBOUNDLOCAL_ERROR_MSG, name);
     } else {
@@ -6472,9 +6462,7 @@ unicode_concatenate(PyThreadState *tstate, PyObject *v, PyObject *w,
         }
         case STORE_DEREF:
         {
-            PyObject **freevars = (f->f_localsptr +
-                                   f->f_code->co_nlocals);
-            PyObject *c = freevars[oparg];
+            PyObject *c = f->f_localsptr[oparg];
             if (PyCell_GET(c) ==  v) {
                 PyCell_SET(c, NULL);
                 Py_DECREF(v);
diff --git a/Python/compile.c b/Python/compile.c
index b0c9f3c4d561c9..110425000c8639 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -7435,6 +7435,24 @@ guarantee_lineno_for_exits(struct assembler *a, int firstlineno) {
     }
 }
 
+static void
+offset_derefs(basicblock *entryblock, int nlocals)
+{
+    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
+        for (int i = 0; i < b->b_iused; i++) {
+            struct instr *inst = &b->b_instr[i];
+            switch(inst->i_opcode) {
+                case LOAD_CLOSURE:
+                case LOAD_DEREF:
+                case STORE_DEREF:
+                case DELETE_DEREF:
+                case LOAD_CLASSDEREF:
+                    inst->i_oparg += nlocals;
+            }
+        }
+    }
+}
+
 static PyCodeObject *
 assemble(struct compiler *c, int addNone)
 {
@@ -7490,6 +7508,9 @@ assemble(struct compiler *c, int addNone)
     a.a_entry = entryblock;
     a.a_nblocks = nblocks;
 
+    assert(PyDict_GET_SIZE(c->u->u_varnames) < INT_MAX);
+    offset_derefs(entryblock, (int)PyDict_GET_SIZE(c->u->u_varnames));
+
     consts = consts_dict_keys_inorder(c->u->u_consts);
     if (consts == NULL) {
         goto error;
diff --git a/Python/importlib.h b/Python/importlib.h
index 77b0bf78bf1522..1c59989743c801 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -430,15 +430,15 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
     103,101,244,0,0,0,115,10,0,0,0,12,2,10,1,8,
     1,24,1,4,253,114,17,0,0,0,114,84,0,0,0,99,
     1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
-    3,0,0,0,243,26,0,0,0,135,0,102,1,100,1,100,
-    2,132,8,125,1,116,0,124,1,136,0,131,2,1,0,124,
+    3,0,0,0,243,26,0,0,0,135,2,102,1,100,1,100,
+    2,132,8,125,1,116,0,124,1,136,2,131,2,1,0,124,
     1,83,0,41,4,122,49,68,101,99,111,114,97,116,111,114,
     32,116,111,32,118,101,114,105,102,121,32,116,104,101,32,110,
     97,109,101,100,32,109,111,100,117,108,101,32,105,115,32,98,
     117,105,108,116,45,105,110,46,99,2,0,0,0,0,0,0,
     0,0,0,0,0,4,0,0,0,19,0,0,0,115,38,0,
     0,0,124,1,116,0,106,1,118,1,114,14,116,2,100,1,
-    160,3,124,1,161,1,124,1,100,2,141,2,130,1,136,0,
+    160,3,124,1,161,1,124,1,100,2,141,2,130,1,136,2,
     124,0,124,1,131,2,83,0,41,3,78,250,29,123,33,114,
     125,32,105,115,32,110,111,116,32,97,32,98,117,105,108,116,
     45,105,110,32,109,111,100,117,108,101,114,19,0,0,0,41,
@@ -466,7 +466,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
     2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
     19,0,0,0,115,38,0,0,0,116,0,160,1,124,1,161,
     1,115,14,116,2,100,1,160,3,124,1,161,1,124,1,100,
-    2,141,2,130,1,136,0,124,0,124,1,131,2,83,0,169,
+    2,141,2,130,1,136,2,124,0,124,1,131,2,83,0,169,
     3,78,122,27,123,33,114,125,32,105,115,32,110,111,116,32,
     97,32,102,114,111,122,101,110,32,109,111,100,117,108,101,114,
     19,0,0,0,41,4,114,65,0,0,0,218,9,105,115,95,
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
index cf3fcb762db864..69dc6cad421c1c 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -94,7 +94,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
     115,62,0,0,0,116,0,106,1,160,2,116,3,161,1,114,
     25,116,0,106,1,160,2,116,4,161,1,114,15,100,1,137,
-    0,110,2,100,2,137,0,135,0,102,1,100,3,100,4,132,
+    1,110,2,100,2,137,1,135,1,102,1,100,3,100,4,132,
     8,125,0,124,0,83,0,100,5,100,4,132,0,125,0,124,
     0,83,0,41,6,78,90,12,80,89,84,72,79,78,67,65,
     83,69,79,75,115,12,0,0,0,80,89,84,72,79,78,67,
@@ -223,15 +223,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     67,0,0,0,126,0,0,0,115,6,0,0,0,10,2,2,
     1,8,255,114,9,0,0,0,99,1,0,0,0,0,0,0,
     0,0,0,0,0,4,0,0,0,3,0,0,0,115,66,0,
-    0,0,116,0,135,0,102,1,100,1,100,2,132,8,116,1,
+    0,0,116,0,135,2,102,1,100,1,100,2,132,8,116,1,
     68,0,131,1,131,1,125,1,124,1,100,3,107,0,114,19,
-    100,4,136,0,102,2,83,0,136,0,100,5,124,1,133,2,
-    25,0,136,0,124,1,100,6,23,0,100,5,133,2,25,0,
+    100,4,136,2,102,2,83,0,136,2,100,5,124,1,133,2,
+    25,0,136,2,124,1,100,6,23,0,100,5,133,2,25,0,
     102,2,83,0,41,7,122,32,82,101,112,108,97,99,101,109,
     101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,
     115,112,108,105,116,40,41,46,99,1,0,0,0,0,0,0,
     0,0,0,0,0,4,0,0,0,51,0,0,0,115,26,0,
-    0,0,129,0,124,0,93,8,125,1,136,0,160,0,124,1,
+    0,0,129,0,124,0,93,8,125,1,136,2,160,0,124,1,
     161,1,86,0,1,0,113,2,100,0,83,0,169,1,78,41,
     1,218,5,114,102,105,110,100,41,3,114,5,0,0,0,114,
     52,0,0,0,114,65,0,0,0,32,32,128,114,7,0,0,
@@ -355,7 +355,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     176,3,47,11,179,9,62,0,190,7,65,22,7,193,6,5,
     65,12,6,193,11,1,65,22,7,193,12,7,65,21,13,193,
     19,3,65,22,7,193,23,1,65,21,13,193,24,1,65,22,
-    7,114,95,0,0,0,105,125,13,0,0,114,45,0,0,0,
+    7,114,95,0,0,0,105,126,13,0,0,114,45,0,0,0,
     114,33,0,0,0,115,2,0,0,0,13,10,90,11,95,95,
     112,121,99,97,99,104,101,95,95,122,4,111,112,116,45,122,
     3,46,112,121,122,4,46,112,121,119,122,4,46,112,121,99,
@@ -469,7 +469,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     97,108,109,111,115,116,95,102,105,108,101,110,97,109,101,218,
     8,102,105,108,101,110,97,109,101,32,32,32,32,32,32,32,
     32,32,32,32,32,114,7,0,0,0,218,17,99,97,99,104,
-    101,95,102,114,111,109,95,115,111,117,114,99,101,128,1,0,
+    101,95,102,114,111,109,95,115,111,117,114,99,101,129,1,0,
     0,115,72,0,0,0,8,18,6,1,2,1,4,255,8,2,
     4,1,8,1,12,1,10,1,12,1,16,1,8,1,8,1,
     8,1,24,1,8,1,12,1,6,1,8,2,8,1,8,1,
@@ -550,7 +550,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     90,9,111,112,116,95,108,101,118,101,108,90,13,98,97,115,
     101,95,102,105,108,101,110,97,109,101,32,32,32,32,32,32,
     32,32,32,32,114,7,0,0,0,218,17,115,111,117,114,99,
-    101,95,102,114,111,109,95,99,97,99,104,101,199,1,0,0,
+    101,95,102,114,111,109,95,99,97,99,104,101,200,1,0,0,
     115,60,0,0,0,12,9,8,1,10,1,12,1,4,1,10,
     1,12,1,14,1,16,1,4,1,4,1,12,1,8,1,8,
     1,2,1,8,255,10,2,8,1,14,1,8,1,16,1,10,
@@ -585,7 +585,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     112,97,116,104,114,119,0,0,0,218,1,95,90,9,101,120,
     116,101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,
     112,97,116,104,32,32,32,32,32,114,7,0,0,0,218,15,
-    95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,239,
+    95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,240,
     1,0,0,115,26,0,0,0,12,7,4,1,16,1,24,1,
     4,1,2,1,10,1,2,128,16,1,16,1,2,128,16,1,
     2,254,115,12,0,0,0,159,4,36,0,164,15,53,7,190,
@@ -599,7 +599,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     58,0,0,0,218,5,116,117,112,108,101,114,127,0,0,0,
     114,121,0,0,0,114,107,0,0,0,114,113,0,0,0,41,
     1,114,120,0,0,0,32,114,7,0,0,0,218,11,95,103,
-    101,116,95,99,97,99,104,101,100,2,2,0,0,115,22,0,
+    101,116,95,99,97,99,104,101,100,3,2,0,0,115,22,0,
     0,0,14,1,2,1,8,1,2,128,12,1,6,1,2,128,
     14,1,4,1,4,2,2,251,115,12,0,0,0,136,3,12,
     0,140,7,22,7,162,1,22,7,114,137,0,0,0,99,1,
@@ -614,15 +614,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     108,101,46,114,87,0,0,0,233,128,0,0,0,78,41,3,
     114,75,0,0,0,114,77,0,0,0,114,76,0,0,0,41,
     2,114,65,0,0,0,114,78,0,0,0,32,32,114,7,0,
-    0,0,218,10,95,99,97,108,99,95,109,111,100,101,14,2,
+    0,0,218,10,95,99,97,108,99,95,109,111,100,101,15,2,
     0,0,115,18,0,0,0,2,2,12,1,2,128,12,1,8,
     1,2,128,8,3,4,1,2,251,115,12,0,0,0,129,5,
     7,0,135,9,18,7,153,1,18,7,114,139,0,0,0,99,
     1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
-    3,0,0,0,115,52,0,0,0,100,6,135,0,102,1,100,
+    3,0,0,0,115,52,0,0,0,100,6,135,3,102,1,100,
     2,100,3,132,9,125,1,116,0,100,1,117,1,114,15,116,
     0,106,1,125,2,110,4,100,4,100,5,132,0,125,2,124,
-    2,124,1,136,0,131,2,1,0,124,1,83,0,41,7,122,
+    2,124,1,136,3,131,2,1,0,124,1,83,0,41,7,122,
     252,68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,
     114,105,102,121,32,116,104,97,116,32,116,104,101,32,109,111,
     100,117,108,101,32,98,101,105,110,103,32,114,101,113,117,101,
@@ -643,7 +643,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,115,76,0,0,0,124,1,100,0,117,0,114,8,
     124,0,106,0,125,1,110,18,124,0,106,0,124,1,107,3,
     114,26,116,1,100,1,124,0,106,0,155,1,100,2,124,1,
-    155,1,157,4,124,1,100,3,141,2,130,1,136,0,124,0,
+    155,1,157,4,124,1,100,3,141,2,130,1,136,4,124,0,
     124,1,103,2,124,2,162,1,82,0,105,0,124,3,164,1,
     142,1,83,0,41,4,78,122,11,108,111,97,100,101,114,32,
     102,111,114,32,122,15,32,99,97,110,110,111,116,32,104,97,
@@ -653,7 +653,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     97,114,103,115,218,6,107,119,97,114,103,115,218,6,109,101,
     116,104,111,100,32,32,32,32,128,114,7,0,0,0,218,19,
     95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,
-    112,101,114,34,2,0,0,115,18,0,0,0,8,1,8,1,
+    112,101,114,35,2,0,0,115,18,0,0,0,8,1,8,1,
     10,1,4,1,12,1,2,255,2,1,6,255,24,2,114,9,
     0,0,0,122,40,95,99,104,101,99,107,95,110,97,109,101,
     46,60,108,111,99,97,108,115,62,46,95,99,104,101,99,107,
@@ -671,14 +671,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     95,95,100,105,99,116,95,95,218,6,117,112,100,97,116,101,
     41,3,90,3,110,101,119,90,3,111,108,100,114,85,0,0,
     0,32,32,32,114,7,0,0,0,218,5,95,119,114,97,112,
-    47,2,0,0,115,10,0,0,0,8,1,10,1,18,1,2,
+    48,2,0,0,115,10,0,0,0,8,1,10,1,18,1,2,
     128,18,1,114,9,0,0,0,122,26,95,99,104,101,99,107,
     95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,95,
     119,114,97,112,114,69,0,0,0,41,2,218,10,95,98,111,
     111,116,115,116,114,97,112,114,157,0,0,0,41,4,114,146,
     0,0,0,114,147,0,0,0,114,157,0,0,0,114,146,0,
     0,0,96,32,32,64,114,7,0,0,0,218,11,95,99,104,
-    101,99,107,95,110,97,109,101,26,2,0,0,115,12,0,0,
+    101,99,107,95,110,97,109,101,27,2,0,0,115,12,0,0,
     0,14,8,8,10,8,1,8,2,10,6,4,1,114,9,0,
     0,0,114,159,0,0,0,99,2,0,0,0,0,0,0,0,
     0,0,0,0,6,0,0,0,67,0,0,0,115,72,0,0,
@@ -713,7 +713,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     218,6,108,111,97,100,101,114,218,8,112,111,114,116,105,111,
     110,115,218,3,109,115,103,32,32,32,32,32,114,7,0,0,
     0,218,17,95,102,105,110,100,95,109,111,100,117,108,101,95,
-    115,104,105,109,57,2,0,0,115,16,0,0,0,6,7,2,
+    115,104,105,109,58,2,0,0,115,16,0,0,0,6,7,2,
     2,4,254,14,6,16,1,4,1,22,1,4,1,114,9,0,
     0,0,114,166,0,0,0,99,3,0,0,0,0,0,0,0,
     0,0,0,0,4,0,0,0,67,0,0,0,115,166,0,0,
@@ -780,7 +780,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,218,11,101,120,99,95,100,101,116,97,105,108,115,90,5,
     109,97,103,105,99,114,117,0,0,0,114,17,0,0,0,32,
     32,32,32,32,32,114,7,0,0,0,218,13,95,99,108,97,
-    115,115,105,102,121,95,112,121,99,77,2,0,0,115,28,0,
+    115,115,105,102,121,95,112,121,99,78,2,0,0,115,28,0,
     0,0,12,16,8,1,16,1,12,1,16,1,12,1,10,1,
     12,1,8,1,16,1,8,2,16,1,16,1,4,1,114,9,
     0,0,0,114,175,0,0,0,99,5,0,0,0,0,0,0,
@@ -835,7 +835,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     101,95,115,105,122,101,114,141,0,0,0,114,174,0,0,0,
     114,117,0,0,0,32,32,32,32,32,32,114,7,0,0,0,
     218,23,95,118,97,108,105,100,97,116,101,95,116,105,109,101,
-    115,116,97,109,112,95,112,121,99,110,2,0,0,115,18,0,
+    115,116,97,109,112,95,112,121,99,111,2,0,0,115,18,0,
     0,0,24,19,10,1,12,1,16,1,8,1,22,1,2,255,
     22,2,8,254,114,9,0,0,0,114,179,0,0,0,99,4,
     0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,67,
@@ -881,7 +881,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,42,0,0,0,218,11,115,111,117,114,99,101,95,104,97,
     115,104,114,141,0,0,0,114,174,0,0,0,32,32,32,32,
     114,7,0,0,0,218,18,95,118,97,108,105,100,97,116,101,
-    95,104,97,115,104,95,112,121,99,138,2,0,0,115,14,0,
+    95,104,97,115,104,95,112,121,99,139,2,0,0,115,14,0,
     0,0,16,17,2,1,8,1,4,255,2,2,6,254,4,255,
     114,9,0,0,0,114,181,0,0,0,99,4,0,0,0,0,
     0,0,0,0,0,0,0,5,0,0,0,67,0,0,0,115,
@@ -905,7 +905,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,114,141,0,0,0,114,132,0,0,0,114,134,0,0,0,
     218,4,99,111,100,101,32,32,32,32,32,114,7,0,0,0,
     218,17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,
-    111,100,101,162,2,0,0,115,18,0,0,0,10,2,10,1,
+    111,100,101,163,2,0,0,115,18,0,0,0,10,2,10,1,
     12,1,8,1,12,1,4,1,10,2,4,1,6,255,114,9,
     0,0,0,114,188,0,0,0,99,3,0,0,0,0,0,0,
     0,0,0,0,0,5,0,0,0,67,0,0,0,115,70,0,
@@ -923,7 +923,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     5,109,116,105,109,101,114,178,0,0,0,114,42,0,0,0,
     32,32,32,32,114,7,0,0,0,218,22,95,99,111,100,101,
     95,116,111,95,116,105,109,101,115,116,97,109,112,95,112,121,
-    99,175,2,0,0,115,12,0,0,0,8,2,14,1,14,1,
+    99,176,2,0,0,115,12,0,0,0,8,2,14,1,14,1,
     14,1,16,1,4,1,114,9,0,0,0,114,193,0,0,0,
     84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
     0,0,67,0,0,0,115,80,0,0,0,116,0,116,1,131,
@@ -941,7 +941,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,90,7,99,104,101,99,107,101,100,114,42,0,0,0,114,
     17,0,0,0,32,32,32,32,32,114,7,0,0,0,218,17,
     95,99,111,100,101,95,116,111,95,104,97,115,104,95,112,121,
-    99,185,2,0,0,115,14,0,0,0,8,2,12,1,14,1,
+    99,186,2,0,0,115,14,0,0,0,8,2,12,1,14,1,
     16,1,10,1,16,1,4,1,114,9,0,0,0,114,194,0,
     0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,6,
     0,0,0,67,0,0,0,115,62,0,0,0,100,1,100,2,
@@ -968,7 +968,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101,
     119,108,105,110,101,95,100,101,99,111,100,101,114,32,32,32,
     32,32,114,7,0,0,0,218,13,100,101,99,111,100,101,95,
-    115,111,117,114,99,101,196,2,0,0,115,10,0,0,0,8,
+    115,111,117,114,99,101,197,2,0,0,115,10,0,0,0,8,
     5,12,1,10,1,12,1,20,1,114,9,0,0,0,114,199,
     0,0,0,169,2,114,163,0,0,0,218,26,115,117,98,109,
     111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
@@ -1033,7 +1033,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     8,115,117,102,102,105,120,101,115,114,205,0,0,0,90,7,
     100,105,114,110,97,109,101,32,32,32,32,32,32,32,32,32,
     114,7,0,0,0,218,23,115,112,101,99,95,102,114,111,109,
-    95,102,105,108,101,95,108,111,99,97,116,105,111,110,213,2,
+    95,102,105,108,101,95,108,111,99,97,116,105,111,110,214,2,
     0,0,115,96,0,0,0,8,12,4,4,10,1,2,2,12,
     1,2,128,12,1,4,1,2,128,2,251,10,7,8,1,2,
     1,16,1,2,128,12,1,4,1,2,128,16,8,6,1,8,
@@ -1075,7 +1075,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     82,69,78,84,95,85,83,69,82,114,76,0,0,0,90,18,
     72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,
     78,69,114,20,0,0,0,32,114,7,0,0,0,218,14,95,
-    111,112,101,110,95,114,101,103,105,115,116,114,121,42,3,0,
+    111,112,101,110,95,114,101,103,105,115,116,114,121,43,3,0,
     0,115,14,0,0,0,2,2,14,1,2,128,12,1,18,1,
     2,128,2,255,115,12,0,0,0,129,6,8,0,136,14,24,
     7,153,1,24,7,122,36,87,105,110,100,111,119,115,82,101,
@@ -1104,7 +1104,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     107,101,121,114,21,0,0,0,90,4,104,107,101,121,218,8,
     102,105,108,101,112,97,116,104,32,32,32,32,32,32,114,7,
     0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103,
-    105,115,116,114,121,49,3,0,0,115,34,0,0,0,6,2,
+    105,115,116,114,121,50,3,0,0,115,34,0,0,0,6,2,
     8,1,6,2,6,1,16,1,6,255,2,2,12,1,12,1,
     12,255,22,128,4,4,2,128,12,254,6,1,2,128,2,255,
     115,39,0,0,0,153,5,56,0,158,7,43,3,165,6,56,
@@ -1129,7 +1129,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     162,0,0,0,114,65,0,0,0,218,6,116,97,114,103,101,
     116,114,221,0,0,0,114,163,0,0,0,114,211,0,0,0,
     114,209,0,0,0,32,32,32,32,32,32,32,32,114,7,0,
-    0,0,218,9,102,105,110,100,95,115,112,101,99,64,3,0,
+    0,0,218,9,102,105,110,100,95,115,112,101,99,65,3,0,
     0,115,38,0,0,0,10,2,8,1,4,1,2,1,10,1,
     2,128,12,1,6,1,2,128,14,1,14,1,6,1,8,1,
     2,1,6,254,8,3,2,252,4,255,2,254,115,12,0,0,
@@ -1158,7 +1158,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     101,0,0,0,114,225,0,0,0,114,163,0,0,0,169,4,
     114,220,0,0,0,114,162,0,0,0,114,65,0,0,0,114,
     209,0,0,0,32,32,32,32,114,7,0,0,0,218,11,102,
-    105,110,100,95,109,111,100,117,108,101,80,3,0,0,115,14,
+    105,110,100,95,109,111,100,117,108,101,81,3,0,0,115,14,
     0,0,0,6,7,2,2,4,254,12,3,8,1,6,1,4,
     2,114,9,0,0,0,122,33,87,105,110,100,111,119,115,82,
     101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105,
@@ -1171,7 +1171,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     109,101,116,104,111,100,114,215,0,0,0,218,11,99,108,97,
     115,115,109,101,116,104,111,100,114,222,0,0,0,114,225,0,
     0,0,114,228,0,0,0,114,12,0,0,0,114,7,0,0,
-    0,114,213,0,0,0,30,3,0,0,115,30,0,0,0,8,
+    0,114,213,0,0,0,31,3,0,0,115,30,0,0,0,8,
     0,4,2,2,3,2,255,2,4,2,255,12,3,2,2,10,
     1,2,6,10,1,2,14,12,1,2,15,16,1,114,9,0,
     0,0,114,213,0,0,0,99,0,0,0,0,0,0,0,0,
@@ -1207,7 +1207,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,114,120,0,0,0,90,13,102,105,108,101,110,97,
     109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97,
     109,101,32,32,32,32,32,114,7,0,0,0,114,205,0,0,
-    0,102,3,0,0,115,8,0,0,0,18,3,16,1,14,1,
+    0,103,3,0,0,115,8,0,0,0,18,3,16,1,14,1,
     16,1,114,9,0,0,0,122,24,95,76,111,97,100,101,114,
     66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103,
     101,99,2,0,0,0,0,0,0,0,0,0,0,0,1,0,
@@ -1217,7 +1217,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     99,114,101,97,116,105,111,110,46,78,114,12,0,0,0,169,
     2,114,143,0,0,0,114,209,0,0,0,32,32,114,7,0,
     0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,
-    101,110,3,0,0,243,2,0,0,0,4,0,114,9,0,0,
+    101,111,3,0,0,243,2,0,0,0,4,0,114,9,0,0,
     0,122,27,95,76,111,97,100,101,114,66,97,115,105,99,115,
     46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,
     0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,67,
@@ -1236,7 +1236,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     115,95,114,101,109,111,118,101,100,218,4,101,120,101,99,114,
     155,0,0,0,41,3,114,143,0,0,0,218,6,109,111,100,
     117,108,101,114,187,0,0,0,32,32,32,114,7,0,0,0,
-    218,11,101,120,101,99,95,109,111,100,117,108,101,113,3,0,
+    218,11,101,120,101,99,95,109,111,100,117,108,101,114,3,0,
     0,115,12,0,0,0,12,2,8,1,4,1,8,1,4,255,
     20,2,114,9,0,0,0,122,25,95,76,111,97,100,101,114,
     66,97,115,105,99,115,46,101,120,101,99,95,109,111,100,117,
@@ -1248,13 +1248,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105,
     109,169,2,114,143,0,0,0,114,162,0,0,0,32,32,114,
     7,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,
-    101,121,3,0,0,115,2,0,0,0,12,3,114,9,0,0,
+    101,122,3,0,0,115,2,0,0,0,12,3,114,9,0,0,
     0,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115,
     46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114,
     149,0,0,0,114,148,0,0,0,114,150,0,0,0,114,151,
     0,0,0,114,205,0,0,0,114,238,0,0,0,114,244,0,
     0,0,114,247,0,0,0,114,12,0,0,0,114,7,0,0,
-    0,114,234,0,0,0,97,3,0,0,115,12,0,0,0,8,
+    0,114,234,0,0,0,98,3,0,0,115,12,0,0,0,8,
     0,4,2,8,3,8,8,8,3,12,8,114,9,0,0,0,
     114,234,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
     0,0,3,0,0,0,64,0,0,0,115,74,0,0,0,101,
@@ -1278,7 +1278,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     97,110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,
     78,41,1,114,76,0,0,0,169,2,114,143,0,0,0,114,
     65,0,0,0,32,32,114,7,0,0,0,218,10,112,97,116,
-    104,95,109,116,105,109,101,129,3,0,0,115,2,0,0,0,
+    104,95,109,116,105,109,101,130,3,0,0,115,2,0,0,0,
     4,6,114,9,0,0,0,122,23,83,111,117,114,99,101,76,
     111,97,100,101,114,46,112,97,116,104,95,109,116,105,109,101,
     99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
@@ -1312,7 +1312,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     108,101,100,46,10,32,32,32,32,32,32,32,32,114,192,0,
     0,0,78,41,1,114,250,0,0,0,114,249,0,0,0,32,
     32,114,7,0,0,0,218,10,112,97,116,104,95,115,116,97,
-    116,115,137,3,0,0,115,2,0,0,0,14,12,114,9,0,
+    116,115,138,3,0,0,115,2,0,0,0,14,12,114,9,0,
     0,0,122,23,83,111,117,114,99,101,76,111,97,100,101,114,
     46,112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,
     0,0,0,0,0,0,0,0,4,0,0,0,67,0,0,0,
@@ -1335,7 +1335,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     116,95,100,97,116,97,41,4,114,143,0,0,0,114,134,0,
     0,0,90,10,99,97,99,104,101,95,112,97,116,104,114,42,
     0,0,0,32,32,32,32,114,7,0,0,0,218,15,95,99,
-    97,99,104,101,95,98,121,116,101,99,111,100,101,151,3,0,
+    97,99,104,101,95,98,121,116,101,99,111,100,101,152,3,0,
     0,115,2,0,0,0,12,8,114,9,0,0,0,122,28,83,
     111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99,
     104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0,
@@ -1352,7 +1352,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78,
     114,12,0,0,0,41,3,114,143,0,0,0,114,65,0,0,
     0,114,42,0,0,0,32,32,32,114,7,0,0,0,114,252,
-    0,0,0,161,3,0,0,114,239,0,0,0,114,9,0,0,
+    0,0,0,162,3,0,0,114,239,0,0,0,114,9,0,0,
     0,122,21,83,111,117,114,99,101,76,111,97,100,101,114,46,
     115,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,
     0,0,0,0,0,8,0,0,0,67,0,0,0,115,70,0,
@@ -1372,7 +1372,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     5,114,143,0,0,0,114,162,0,0,0,114,65,0,0,0,
     114,197,0,0,0,218,3,101,120,99,32,32,32,32,32,114,
     7,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,
-    168,3,0,0,115,26,0,0,0,10,2,2,1,10,1,8,
+    169,3,0,0,115,26,0,0,0,10,2,2,1,10,1,8,
     4,2,128,12,253,4,1,2,1,4,255,2,1,2,255,10,
     128,2,255,115,20,0,0,0,134,5,15,0,143,7,33,7,
     150,7,29,7,157,4,33,7,162,1,33,7,122,23,83,111,
@@ -1395,7 +1395,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,241,0,0,0,218,7,99,111,109,112,105,108,101,41,4,
     114,143,0,0,0,114,42,0,0,0,114,65,0,0,0,114,
     1,1,0,0,32,32,32,32,114,7,0,0,0,218,14,115,
-    111,117,114,99,101,95,116,111,95,99,111,100,101,178,3,0,
+    111,117,114,99,101,95,116,111,95,99,111,100,101,179,3,0,
     0,115,6,0,0,0,12,5,4,1,6,255,114,9,0,0,
     0,122,27,83,111,117,114,99,101,76,111,97,100,101,114,46,
     115,111,117,114,99,101,95,116,111,95,99,111,100,101,99,2,
@@ -1473,7 +1473,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,90,10,98,121,116,101,115,95,100,97,116,97,90,
     11,99,111,100,101,95,111,98,106,101,99,116,32,32,32,32,
     32,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0,
-    114,240,0,0,0,186,3,0,0,115,188,0,0,0,10,7,
+    114,240,0,0,0,187,3,0,0,115,188,0,0,0,10,7,
     4,1,4,1,4,1,4,1,4,1,2,1,10,1,2,128,
     14,1,8,1,2,128,2,2,12,1,2,128,14,1,4,1,
     2,128,12,2,2,1,12,1,2,128,14,1,4,1,2,128,
@@ -1496,7 +1496,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,114,150,0,0,0,114,250,0,0,0,114,251,0,
     0,0,114,253,0,0,0,114,252,0,0,0,114,0,1,0,
     0,114,4,1,0,0,114,240,0,0,0,114,12,0,0,0,
-    114,7,0,0,0,114,248,0,0,0,127,3,0,0,115,16,
+    114,7,0,0,0,114,248,0,0,0,128,3,0,0,115,16,
     0,0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,
     10,12,8,114,9,0,0,0,114,248,0,0,0,99,0,0,
     0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,
@@ -1523,7 +1523,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     116,104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,
     101,114,46,78,114,182,0,0,0,41,3,114,143,0,0,0,
     114,162,0,0,0,114,65,0,0,0,32,32,32,114,7,0,
-    0,0,114,235,0,0,0,20,4,0,0,115,4,0,0,0,
+    0,0,114,235,0,0,0,21,4,0,0,115,4,0,0,0,
     6,3,10,1,114,9,0,0,0,122,19,70,105,108,101,76,
     111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,
     0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,67,
@@ -1532,7 +1532,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,69,0,0,0,169,2,218,9,95,95,99,108,97,115,115,
     95,95,114,155,0,0,0,169,2,114,143,0,0,0,90,5,
     111,116,104,101,114,32,32,114,7,0,0,0,218,6,95,95,
-    101,113,95,95,26,4,0,0,243,6,0,0,0,12,1,10,
+    101,113,95,95,27,4,0,0,243,6,0,0,0,12,1,10,
     1,2,255,114,9,0,0,0,122,17,70,105,108,101,76,111,
     97,100,101,114,46,95,95,101,113,95,95,99,1,0,0,0,
     0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,0,
@@ -1540,7 +1540,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,106,2,131,1,65,0,83,0,114,69,0,0,0,169,3,
     218,4,104,97,115,104,114,141,0,0,0,114,65,0,0,0,
     169,1,114,143,0,0,0,32,114,7,0,0,0,218,8,95,
-    95,104,97,115,104,95,95,30,4,0,0,243,2,0,0,0,
+    95,104,97,115,104,95,95,31,4,0,0,243,2,0,0,0,
     20,1,114,9,0,0,0,122,19,70,105,108,101,76,111,97,
     100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0,
     0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,
@@ -1555,7 +1555,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     3,218,5,115,117,112,101,114,114,10,1,0,0,114,247,0,
     0,0,41,3,114,143,0,0,0,114,162,0,0,0,114,13,
     1,0,0,32,32,128,114,7,0,0,0,114,247,0,0,0,
-    33,4,0,0,115,2,0,0,0,16,10,114,9,0,0,0,
+    34,4,0,0,115,2,0,0,0,16,10,114,9,0,0,0,
     122,22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,
     100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,
     0,0,0,0,0,1,0,0,0,67,0,0,0,243,6,0,
@@ -1564,7 +1564,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,
     115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,
     105,110,100,101,114,46,78,114,74,0,0,0,114,246,0,0,
-    0,32,32,114,7,0,0,0,114,202,0,0,0,45,4,0,
+    0,32,32,114,7,0,0,0,114,202,0,0,0,46,4,0,
     0,243,2,0,0,0,6,3,114,9,0,0,0,122,23,70,
     105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105,
     108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,0,
@@ -1586,7 +1586,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     112,101,110,95,99,111,100,101,114,109,0,0,0,90,4,114,
     101,97,100,114,92,0,0,0,41,3,114,143,0,0,0,114,
     65,0,0,0,114,94,0,0,0,32,32,32,114,7,0,0,
-    0,114,254,0,0,0,50,4,0,0,115,22,0,0,0,14,
+    0,114,254,0,0,0,51,4,0,0,115,22,0,0,0,14,
     2,16,1,6,1,14,255,22,128,4,0,14,3,6,1,14,
     255,22,128,4,0,115,24,0,0,0,142,4,25,3,153,4,
     29,11,158,3,29,11,172,4,55,3,183,4,59,11,188,3,
@@ -1600,7 +1600,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,29,1,0,0,41,3,114,143,0,0,0,114,243,0,0,
     0,114,29,1,0,0,32,32,32,114,7,0,0,0,218,19,
     103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,
-    100,101,114,59,4,0,0,115,4,0,0,0,12,2,8,1,
+    100,101,114,60,4,0,0,115,4,0,0,0,12,2,8,1,
     114,9,0,0,0,122,30,70,105,108,101,76,111,97,100,101,
     114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,
     101,97,100,101,114,41,13,114,149,0,0,0,114,148,0,0,
@@ -1609,7 +1609,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     247,0,0,0,114,202,0,0,0,114,254,0,0,0,114,31,
     1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,108,
     95,95,41,1,114,13,1,0,0,64,114,7,0,0,0,114,
-    10,1,0,0,15,4,0,0,115,24,0,0,0,8,0,4,
+    10,1,0,0,16,4,0,0,115,24,0,0,0,8,0,4,
     2,8,3,8,6,8,4,2,3,14,1,2,11,10,1,8,
     4,2,9,18,1,114,9,0,0,0,114,10,1,0,0,99,
     0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
@@ -1631,7 +1631,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     75,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7,
     115,116,95,115,105,122,101,41,3,114,143,0,0,0,114,65,
     0,0,0,114,9,1,0,0,32,32,32,114,7,0,0,0,
-    114,251,0,0,0,69,4,0,0,115,4,0,0,0,8,2,
+    114,251,0,0,0,70,4,0,0,115,4,0,0,0,8,2,
     14,1,114,9,0,0,0,122,27,83,111,117,114,99,101,70,
     105,108,101,76,111,97,100,101,114,46,112,97,116,104,95,115,
     116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0,
@@ -1641,7 +1641,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     100,101,41,2,114,139,0,0,0,114,252,0,0,0,41,5,
     114,143,0,0,0,114,134,0,0,0,114,132,0,0,0,114,
     42,0,0,0,114,78,0,0,0,32,32,32,32,32,114,7,
-    0,0,0,114,253,0,0,0,74,4,0,0,115,4,0,0,
+    0,0,0,114,253,0,0,0,75,4,0,0,115,4,0,0,
     0,8,2,16,1,114,9,0,0,0,122,32,83,111,117,114,
     99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97,
     99,104,101,95,98,121,116,101,99,111,100,101,114,87,0,0,
@@ -1676,7 +1676,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,114,42,0,0,0,114,35,1,0,0,218,6,112,97,
     114,101,110,116,114,120,0,0,0,114,63,0,0,0,114,68,
     0,0,0,114,255,0,0,0,32,32,32,32,32,32,32,32,
-    32,114,7,0,0,0,114,252,0,0,0,79,4,0,0,115,
+    32,114,7,0,0,0,114,252,0,0,0,80,4,0,0,115,
     60,0,0,0,12,2,4,1,12,2,12,1,10,1,12,254,
     12,4,10,1,2,1,12,1,2,128,12,1,4,2,12,1,
     6,3,4,1,4,255,14,2,10,128,2,1,12,1,16,1,
@@ -1690,7 +1690,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     7,114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,
     114,151,0,0,0,114,251,0,0,0,114,253,0,0,0,114,
     252,0,0,0,114,12,0,0,0,114,7,0,0,0,114,32,
-    1,0,0,65,4,0,0,115,10,0,0,0,8,0,4,2,
+    1,0,0,66,4,0,0,115,10,0,0,0,8,0,4,2,
     8,2,8,5,18,5,114,9,0,0,0,114,32,1,0,0,
     99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
     0,64,0,0,0,115,32,0,0,0,101,0,90,1,100,0,
@@ -1711,7 +1711,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     254,0,0,0,114,175,0,0,0,114,188,0,0,0,114,6,
     1,0,0,41,5,114,143,0,0,0,114,162,0,0,0,114,
     65,0,0,0,114,42,0,0,0,114,174,0,0,0,32,32,
-    32,32,32,114,7,0,0,0,114,240,0,0,0,114,4,0,
+    32,32,32,114,7,0,0,0,114,240,0,0,0,115,4,0,
     0,115,22,0,0,0,10,1,10,1,2,4,2,1,6,254,
     12,4,2,1,14,1,2,1,2,1,6,253,114,9,0,0,
     0,122,29,83,111,117,114,99,101,108,101,115,115,70,105,108,
@@ -1721,13 +1721,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     116,117,114,110,32,78,111,110,101,32,97,115,32,116,104,101,
     114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,
     99,111,100,101,46,78,114,12,0,0,0,114,246,0,0,0,
-    32,32,114,7,0,0,0,114,0,1,0,0,130,4,0,0,
+    32,32,114,7,0,0,0,114,0,1,0,0,131,4,0,0,
     114,25,0,0,0,114,9,0,0,0,122,31,83,111,117,114,
     99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,
     46,103,101,116,95,115,111,117,114,99,101,78,41,6,114,149,
     0,0,0,114,148,0,0,0,114,150,0,0,0,114,151,0,
     0,0,114,240,0,0,0,114,0,1,0,0,114,12,0,0,
-    0,114,7,0,0,0,114,39,1,0,0,110,4,0,0,115,
+    0,114,7,0,0,0,114,39,1,0,0,111,4,0,0,115,
     8,0,0,0,8,0,4,2,8,2,12,16,114,9,0,0,
     0,114,39,1,0,0,99,0,0,0,0,0,0,0,0,0,
     0,0,0,3,0,0,0,64,0,0,0,115,92,0,0,0,
@@ -1748,19 +1748,19 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     95,0,124,2,124,0,95,1,100,0,83,0,114,69,0,0,
     0,114,182,0,0,0,41,3,114,143,0,0,0,114,141,0,
     0,0,114,65,0,0,0,32,32,32,114,7,0,0,0,114,
-    235,0,0,0,143,4,0,0,115,4,0,0,0,6,1,10,
+    235,0,0,0,144,4,0,0,115,4,0,0,0,6,1,10,
     1,114,9,0,0,0,122,28,69,120,116,101,110,115,105,111,
     110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,
     105,116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,
     0,2,0,0,0,67,0,0,0,114,11,1,0,0,114,69,
     0,0,0,114,12,1,0,0,114,14,1,0,0,32,32,114,
-    7,0,0,0,114,15,1,0,0,147,4,0,0,114,16,1,
+    7,0,0,0,114,15,1,0,0,148,4,0,0,114,16,1,
     0,0,114,9,0,0,0,122,26,69,120,116,101,110,115,105,
     111,110,70,105,108,101,76,111,97,100,101,114,46,95,95,101,
     113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
     3,0,0,0,67,0,0,0,114,17,1,0,0,114,69,0,
     0,0,114,18,1,0,0,114,20,1,0,0,32,114,7,0,
-    0,0,114,21,1,0,0,151,4,0,0,114,22,1,0,0,
+    0,0,114,21,1,0,0,152,4,0,0,114,22,1,0,0,
     114,9,0,0,0,122,28,69,120,116,101,110,115,105,111,110,
     70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115,
     104,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,
@@ -1777,7 +1777,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     110,97,109,105,99,114,172,0,0,0,114,141,0,0,0,114,
     65,0,0,0,41,3,114,143,0,0,0,114,209,0,0,0,
     114,243,0,0,0,32,32,32,114,7,0,0,0,114,238,0,
-    0,0,154,4,0,0,115,14,0,0,0,4,2,6,1,4,
+    0,0,155,4,0,0,115,14,0,0,0,4,2,6,1,4,
     255,6,2,8,1,4,255,4,2,114,9,0,0,0,122,33,
     69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
     100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,
@@ -1794,24 +1794,24 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     120,101,99,95,100,121,110,97,109,105,99,114,172,0,0,0,
     114,141,0,0,0,114,65,0,0,0,169,2,114,143,0,0,
     0,114,243,0,0,0,32,32,114,7,0,0,0,114,244,0,
-    0,0,162,4,0,0,115,8,0,0,0,14,2,6,1,8,
+    0,0,163,4,0,0,115,8,0,0,0,14,2,6,1,8,
     1,8,255,114,9,0,0,0,122,31,69,120,116,101,110,115,
     105,111,110,70,105,108,101,76,111,97,100,101,114,46,101,120,
     101,99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
     0,0,0,0,0,0,4,0,0,0,3,0,0,0,115,36,
     0,0,0,116,0,124,0,106,1,131,1,100,1,25,0,137,
-    0,116,2,135,0,102,1,100,2,100,3,132,8,116,3,68,
+    2,116,2,135,2,102,1,100,2,100,3,132,8,116,3,68,
     0,131,1,131,1,83,0,41,5,122,49,82,101,116,117,114,
     110,32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,
     116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,
     115,32,97,32,112,97,99,107,97,103,101,46,114,3,0,0,
     0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,
     0,0,51,0,0,0,115,28,0,0,0,129,0,124,0,93,
-    9,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1,
+    9,125,1,136,2,100,0,124,1,23,0,107,2,86,0,1,
     0,113,2,100,1,83,0,41,2,114,235,0,0,0,78,114,
     12,0,0,0,41,3,114,5,0,0,0,218,6,115,117,102,
     102,105,120,218,9,102,105,108,101,95,110,97,109,101,32,32,
-    128,114,7,0,0,0,114,8,0,0,0,171,4,0,0,115,
+    128,114,7,0,0,0,114,8,0,0,0,172,4,0,0,115,
     6,0,0,0,6,128,2,1,20,255,114,9,0,0,0,122,
     49,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
     97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,
@@ -1819,7 +1819,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,62,78,41,4,114,73,0,0,0,114,65,0,0,0,218,
     3,97,110,121,114,231,0,0,0,41,3,114,143,0,0,0,
     114,162,0,0,0,114,42,1,0,0,32,32,64,114,7,0,
-    0,0,114,205,0,0,0,168,4,0,0,115,8,0,0,0,
+    0,0,114,205,0,0,0,169,4,0,0,115,8,0,0,0,
     14,2,12,1,2,1,8,255,114,9,0,0,0,122,30,69,
     120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
     101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,
@@ -1830,7 +1830,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,
     100,101,32,111,98,106,101,99,116,46,78,114,12,0,0,0,
     114,246,0,0,0,32,32,114,7,0,0,0,114,240,0,0,
-    0,174,4,0,0,114,25,0,0,0,114,9,0,0,0,122,
+    0,175,4,0,0,114,25,0,0,0,114,9,0,0,0,122,
     28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
     97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,
     0,0,0,0,0,0,0,0,0,0,1,0,0,0,67,0,
@@ -1839,13 +1839,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101,
     32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,
     78,114,12,0,0,0,114,246,0,0,0,32,32,114,7,0,
-    0,0,114,0,1,0,0,178,4,0,0,114,25,0,0,0,
+    0,0,114,0,1,0,0,179,4,0,0,114,25,0,0,0,
     114,9,0,0,0,122,30,69,120,116,101,110,115,105,111,110,
     70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,
     111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0,
     0,0,1,0,0,0,67,0,0,0,114,24,1,0,0,114,
     25,1,0,0,114,74,0,0,0,114,246,0,0,0,32,32,
-    114,7,0,0,0,114,202,0,0,0,182,4,0,0,114,26,
+    114,7,0,0,0,114,202,0,0,0,183,4,0,0,114,26,
     1,0,0,114,9,0,0,0,122,32,69,120,116,101,110,115,
     105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,
     116,95,102,105,108,101,110,97,109,101,78,41,14,114,149,0,
@@ -1854,7 +1854,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,238,0,0,0,114,244,0,0,0,114,205,0,0,0,114,
     240,0,0,0,114,0,1,0,0,114,159,0,0,0,114,202,
     0,0,0,114,12,0,0,0,114,7,0,0,0,114,28,1,
-    0,0,135,4,0,0,115,24,0,0,0,8,0,4,2,8,
+    0,0,136,4,0,0,115,24,0,0,0,8,0,4,2,8,
     6,8,4,8,4,8,3,8,8,8,6,8,6,8,4,2,
     4,14,1,114,9,0,0,0,114,28,1,0,0,99,0,0,
     0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,
@@ -1896,7 +1896,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     95,102,105,110,100,101,114,169,4,114,143,0,0,0,114,141,
     0,0,0,114,65,0,0,0,90,11,112,97,116,104,95,102,
     105,110,100,101,114,32,32,32,32,114,7,0,0,0,114,235,
-    0,0,0,195,4,0,0,115,8,0,0,0,6,1,6,1,
+    0,0,0,196,4,0,0,115,8,0,0,0,6,1,6,1,
     14,1,10,1,114,9,0,0,0,122,23,95,78,97,109,101,
     115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116,
     95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
@@ -1913,7 +1913,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,41,4,114,143,0,0,0,114,38,1,0,0,218,3,100,
     111,116,90,2,109,101,32,32,32,32,114,7,0,0,0,218,
     23,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97,
-    116,104,95,110,97,109,101,115,201,4,0,0,115,8,0,0,
+    116,104,95,110,97,109,101,115,202,4,0,0,115,8,0,0,
     0,18,2,8,1,4,2,8,3,114,9,0,0,0,122,38,
     95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,
     102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,
@@ -1926,7 +1926,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,108,
     101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,116,
     114,95,110,97,109,101,32,32,32,114,7,0,0,0,114,47,
-    1,0,0,211,4,0,0,115,4,0,0,0,12,1,16,1,
+    1,0,0,212,4,0,0,115,4,0,0,0,12,1,16,1,
     114,9,0,0,0,122,31,95,78,97,109,101,115,112,97,99,
     101,80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,
     116,95,112,97,116,104,99,1,0,0,0,0,0,0,0,0,
@@ -1941,7 +1941,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,163,0,0,0,114,201,0,0,0,114,46,1,0,0,41,
     3,114,143,0,0,0,90,11,112,97,114,101,110,116,95,112,
     97,116,104,114,209,0,0,0,32,32,32,114,7,0,0,0,
-    218,12,95,114,101,99,97,108,99,117,108,97,116,101,215,4,
+    218,12,95,114,101,99,97,108,99,117,108,97,116,101,216,4,
     0,0,115,16,0,0,0,12,2,10,1,14,1,18,3,6,
     1,8,1,6,1,6,1,114,9,0,0,0,122,27,95,78,
     97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101,
@@ -1950,7 +1950,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,0,116,0,124,0,160,1,161,0,131,1,83,0,114,
     69,0,0,0,41,2,218,4,105,116,101,114,114,54,1,0,
     0,114,20,1,0,0,32,114,7,0,0,0,218,8,95,95,
-    105,116,101,114,95,95,228,4,0,0,243,2,0,0,0,12,
+    105,116,101,114,95,95,229,4,0,0,243,2,0,0,0,12,
     1,114,9,0,0,0,122,23,95,78,97,109,101,115,112,97,
     99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,
     2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
@@ -1958,7 +1958,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     1,25,0,83,0,114,69,0,0,0,169,1,114,54,1,0,
     0,41,2,114,143,0,0,0,218,5,105,110,100,101,120,32,
     32,114,7,0,0,0,218,11,95,95,103,101,116,105,116,101,
-    109,95,95,231,4,0,0,114,58,1,0,0,114,9,0,0,
+    109,95,95,232,4,0,0,114,58,1,0,0,114,9,0,0,
     0,122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,
     104,46,95,95,103,101,116,105,116,101,109,95,95,99,3,0,
     0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0,
@@ -1966,14 +1966,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,100,0,83,0,114,69,0,0,0,41,1,114,46,1,0,
     0,41,3,114,143,0,0,0,114,60,1,0,0,114,65,0,
     0,0,32,32,32,114,7,0,0,0,218,11,95,95,115,101,
-    116,105,116,101,109,95,95,234,4,0,0,115,2,0,0,0,
+    116,105,116,101,109,95,95,235,4,0,0,115,2,0,0,0,
     14,1,114,9,0,0,0,122,26,95,78,97,109,101,115,112,
     97,99,101,80,97,116,104,46,95,95,115,101,116,105,116,101,
     109,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
     3,0,0,0,67,0,0,0,114,55,1,0,0,114,69,0,
     0,0,41,2,114,4,0,0,0,114,54,1,0,0,114,20,
     1,0,0,32,114,7,0,0,0,218,7,95,95,108,101,110,
-    95,95,237,4,0,0,114,58,1,0,0,114,9,0,0,0,
+    95,95,238,4,0,0,114,58,1,0,0,114,9,0,0,0,
     122,22,95,78,97,109,101,115,112,97,99,101,80,97,116,104,
     46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,0,
     0,0,0,0,0,3,0,0,0,67,0,0,0,243,12,0,
@@ -1981,7 +1981,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     78,122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,
     104,40,123,33,114,125,41,41,2,114,89,0,0,0,114,46,
     1,0,0,114,20,1,0,0,32,114,7,0,0,0,218,8,
-    95,95,114,101,112,114,95,95,240,4,0,0,114,58,1,0,
+    95,95,114,101,112,114,95,95,241,4,0,0,114,58,1,0,
     0,114,9,0,0,0,122,23,95,78,97,109,101,115,112,97,
     99,101,80,97,116,104,46,95,95,114,101,112,114,95,95,99,
     2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
@@ -1989,14 +1989,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,118,0,83,0,114,69,0,0,0,114,59,1,0,0,169,
     2,114,143,0,0,0,218,4,105,116,101,109,32,32,114,7,
     0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,
-    95,243,4,0,0,114,58,1,0,0,114,9,0,0,0,122,
+    95,244,4,0,0,114,58,1,0,0,114,9,0,0,0,122,
     27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,
     95,95,99,111,110,116,97,105,110,115,95,95,99,2,0,0,
     0,0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,
     0,115,16,0,0,0,124,0,106,0,160,1,124,1,161,1,
     1,0,100,0,83,0,114,69,0,0,0,41,2,114,46,1,
     0,0,114,61,0,0,0,114,66,1,0,0,32,32,114,7,
-    0,0,0,114,61,0,0,0,246,4,0,0,243,2,0,0,
+    0,0,0,114,61,0,0,0,247,4,0,0,243,2,0,0,
     0,16,1,114,9,0,0,0,122,21,95,78,97,109,101,115,
     112,97,99,101,80,97,116,104,46,97,112,112,101,110,100,78,
     41,15,114,149,0,0,0,114,148,0,0,0,114,150,0,0,
@@ -2004,7 +2004,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,47,1,0,0,114,54,1,0,0,114,57,1,0,0,114,
     61,1,0,0,114,62,1,0,0,114,63,1,0,0,114,65,
     1,0,0,114,68,1,0,0,114,61,0,0,0,114,12,0,
-    0,0,114,7,0,0,0,114,44,1,0,0,188,4,0,0,
+    0,0,114,7,0,0,0,114,44,1,0,0,189,4,0,0,
     115,26,0,0,0,8,0,4,1,8,6,8,6,8,10,8,
     4,8,13,8,3,8,3,8,3,8,3,8,3,12,3,114,
     9,0,0,0,114,44,1,0,0,99,0,0,0,0,0,0,
@@ -2020,7 +2020,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     67,0,0,0,115,18,0,0,0,116,0,124,1,124,2,124,
     3,131,3,124,0,95,1,100,0,83,0,114,69,0,0,0,
     41,2,114,44,1,0,0,114,46,1,0,0,114,50,1,0,
-    0,32,32,32,32,114,7,0,0,0,114,235,0,0,0,252,
+    0,32,32,32,32,114,7,0,0,0,114,235,0,0,0,253,
     4,0,0,115,2,0,0,0,18,1,114,9,0,0,0,122,
     25,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
     114,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,
@@ -2044,20 +2044,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     41,62,78,41,5,114,99,0,0,0,114,100,0,0,0,114,
     101,0,0,0,114,89,0,0,0,114,149,0,0,0,41,1,
     114,243,0,0,0,32,114,7,0,0,0,218,11,109,111,100,
-    117,108,101,95,114,101,112,114,255,4,0,0,115,8,0,0,
+    117,108,101,95,114,101,112,114,0,5,0,0,115,8,0,0,
     0,6,7,2,1,4,255,12,2,114,9,0,0,0,122,28,
     95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,
     46,109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,
     0,0,0,0,0,0,0,0,0,1,0,0,0,67,0,0,
     0,114,24,0,0,0,41,2,78,84,114,12,0,0,0,114,
     246,0,0,0,32,32,114,7,0,0,0,114,205,0,0,0,
-    10,5,0,0,243,2,0,0,0,4,1,114,9,0,0,0,
+    11,5,0,0,243,2,0,0,0,4,1,114,9,0,0,0,
     122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100,
     101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0,
     0,0,0,0,0,0,0,0,0,0,1,0,0,0,67,0,
     0,0,114,24,0,0,0,41,2,78,114,10,0,0,0,114,
     12,0,0,0,114,246,0,0,0,32,32,114,7,0,0,0,
-    114,0,1,0,0,13,5,0,0,114,72,1,0,0,114,9,
+    114,0,1,0,0,14,5,0,0,114,72,1,0,0,114,9,
     0,0,0,122,27,95,78,97,109,101,115,112,97,99,101,76,
     111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,
     99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
@@ -2066,19 +2066,19 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,122,8,60,115,116,114,105,110,103,62,114,242,0,0,
     0,84,41,1,114,2,1,0,0,41,1,114,3,1,0,0,
     114,246,0,0,0,32,32,114,7,0,0,0,114,240,0,0,
-    0,16,5,0,0,114,69,1,0,0,114,9,0,0,0,122,
+    0,17,5,0,0,114,69,1,0,0,114,9,0,0,0,122,
     25,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
     114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,
     0,0,0,0,0,0,0,1,0,0,0,67,0,0,0,114,
     24,0,0,0,114,236,0,0,0,114,12,0,0,0,114,237,
-    0,0,0,32,32,114,7,0,0,0,114,238,0,0,0,19,
+    0,0,0,32,32,114,7,0,0,0,114,238,0,0,0,20,
     5,0,0,114,239,0,0,0,114,9,0,0,0,122,30,95,
     78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,
     99,114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,
     0,0,0,0,0,0,0,0,0,0,1,0,0,0,67,0,
     0,0,115,4,0,0,0,100,0,83,0,114,69,0,0,0,
     114,12,0,0,0,114,40,1,0,0,32,32,114,7,0,0,
-    0,114,244,0,0,0,22,5,0,0,114,72,1,0,0,114,
+    0,114,244,0,0,0,23,5,0,0,114,72,1,0,0,114,
     9,0,0,0,122,28,95,78,97,109,101,115,112,97,99,101,
     76,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,
     108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
@@ -2095,7 +2095,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     111,97,100,101,100,32,119,105,116,104,32,112,97,116,104,32,
     123,33,114,125,78,41,4,114,158,0,0,0,114,172,0,0,
     0,114,46,1,0,0,114,245,0,0,0,114,246,0,0,0,
-    32,32,114,7,0,0,0,114,247,0,0,0,25,5,0,0,
+    32,32,114,7,0,0,0,114,247,0,0,0,26,5,0,0,
     115,8,0,0,0,6,7,4,1,4,255,12,3,114,9,0,
     0,0,122,28,95,78,97,109,101,115,112,97,99,101,76,111,
     97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,
@@ -2106,7 +2106,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     115,112,97,99,101,82,101,97,100,101,114,41,3,114,30,1,
     0,0,114,73,1,0,0,114,46,1,0,0,41,3,114,143,
     0,0,0,114,243,0,0,0,114,73,1,0,0,32,32,32,
-    114,7,0,0,0,114,31,1,0,0,37,5,0,0,115,4,
+    114,7,0,0,0,114,31,1,0,0,38,5,0,0,115,4,
     0,0,0,12,1,10,1,114,9,0,0,0,122,36,95,78,
     97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,
     101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,
@@ -2115,7 +2115,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     1,0,0,114,205,0,0,0,114,0,1,0,0,114,240,0,
     0,0,114,238,0,0,0,114,244,0,0,0,114,247,0,0,
     0,114,31,1,0,0,114,12,0,0,0,114,7,0,0,0,
-    114,70,1,0,0,251,4,0,0,115,22,0,0,0,8,0,
+    114,70,1,0,0,252,4,0,0,115,22,0,0,0,8,0,
     8,1,2,3,10,1,8,10,8,3,8,3,8,3,8,3,
     8,3,12,12,114,9,0,0,0,114,70,1,0,0,99,0,
     0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,
@@ -2151,7 +2151,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     109,112,111,114,116,101,114,95,99,97,99,104,101,218,5,105,
     116,101,109,115,114,152,0,0,0,114,75,1,0,0,41,2,
     114,141,0,0,0,218,6,102,105,110,100,101,114,32,32,114,
-    7,0,0,0,114,75,1,0,0,48,5,0,0,115,14,0,
+    7,0,0,0,114,75,1,0,0,49,5,0,0,115,14,0,
     0,0,22,4,8,1,10,1,10,1,8,1,2,128,4,252,
     114,9,0,0,0,122,28,80,97,116,104,70,105,110,100,101,
     114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99,
@@ -2170,7 +2170,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     112,97,116,104,95,104,111,111,107,115,114,99,0,0,0,114,
     100,0,0,0,114,161,0,0,0,114,142,0,0,0,41,2,
     114,65,0,0,0,90,4,104,111,111,107,32,32,114,7,0,
-    0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,58,
+    0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,59,
     5,0,0,115,22,0,0,0,16,3,12,1,10,1,2,1,
     12,1,2,128,12,1,4,1,2,128,4,2,2,253,115,12,
     0,0,0,148,3,26,2,154,7,35,9,166,1,35,9,122,
@@ -2203,7 +2203,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     75,101,121,69,114,114,111,114,114,81,1,0,0,41,3,114,
     220,0,0,0,114,65,0,0,0,114,79,1,0,0,32,32,
     32,114,7,0,0,0,218,20,95,112,97,116,104,95,105,109,
-    112,111,114,116,101,114,95,99,97,99,104,101,71,5,0,0,
+    112,111,114,116,101,114,95,99,97,99,104,101,72,5,0,0,
     115,36,0,0,0,8,8,2,1,10,1,2,128,12,1,6,
     3,2,128,2,1,10,1,4,4,2,128,12,253,10,1,12,
     1,4,1,2,128,2,253,2,250,115,24,0,0,0,133,4,
@@ -2236,7 +2236,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     79,1,0,0,114,165,0,0,0,114,163,0,0,0,114,164,
     0,0,0,114,209,0,0,0,32,32,32,32,32,32,32,114,
     7,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,
-    116,95,115,112,101,99,93,5,0,0,115,26,0,0,0,10,
+    116,95,115,112,101,99,94,5,0,0,115,26,0,0,0,10,
     4,16,1,12,2,16,1,16,2,12,2,10,1,4,1,8,
     1,12,1,12,1,6,1,4,1,114,9,0,0,0,122,27,
     80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97,
@@ -2268,7 +2268,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     95,112,97,116,104,90,5,101,110,116,114,121,114,79,1,0,
     0,114,209,0,0,0,114,164,0,0,0,32,32,32,32,32,
     32,32,32,32,114,7,0,0,0,218,9,95,103,101,116,95,
-    115,112,101,99,114,5,0,0,115,42,0,0,0,4,5,8,
+    115,112,101,99,115,5,0,0,115,42,0,0,0,4,5,8,
     1,14,1,2,1,10,1,8,1,10,1,14,1,12,2,8,
     1,2,1,10,1,8,1,6,1,8,1,8,1,10,5,2,
     128,12,2,6,1,4,1,114,9,0,0,0,122,20,80,97,
@@ -2295,7 +2295,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,41,6,114,220,0,0,0,114,162,0,0,0,114,65,0,
     0,0,114,224,0,0,0,114,209,0,0,0,114,87,1,0,
     0,32,32,32,32,32,32,114,7,0,0,0,114,225,0,0,
-    0,146,5,0,0,115,26,0,0,0,8,6,6,1,14,1,
+    0,147,5,0,0,115,26,0,0,0,8,6,6,1,14,1,
     8,1,4,1,10,1,6,1,4,1,6,3,16,1,4,1,
     4,2,4,2,114,9,0,0,0,122,20,80,97,116,104,70,
     105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,
@@ -2322,7 +2322,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     32,117,115,101,32,102,105,110,100,95,115,112,101,99,40,41,
     32,105,110,115,116,101,97,100,78,114,226,0,0,0,114,227,
     0,0,0,32,32,32,32,114,7,0,0,0,114,228,0,0,
-    0,170,5,0,0,115,14,0,0,0,6,8,2,2,4,254,
+    0,171,5,0,0,115,14,0,0,0,6,8,2,2,4,254,
     12,3,8,1,4,1,6,1,114,9,0,0,0,122,22,80,
     97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,109,
     111,100,117,108,101,99,0,0,0,0,0,0,0,0,0,0,
@@ -2353,7 +2353,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     100,97,116,97,114,89,1,0,0,218,18,102,105,110,100,95,
     100,105,115,116,114,105,98,117,116,105,111,110,115,41,3,114,
     144,0,0,0,114,145,0,0,0,114,89,1,0,0,32,32,
-    32,114,7,0,0,0,114,90,1,0,0,186,5,0,0,115,
+    32,114,7,0,0,0,114,90,1,0,0,187,5,0,0,115,
     4,0,0,0,12,10,16,1,114,9,0,0,0,122,29,80,
     97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,100,
     105,115,116,114,105,98,117,116,105,111,110,115,114,69,0,0,
@@ -2362,7 +2362,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,114,75,1,0,0,114,81,1,0,0,114,233,0,0,0,
     114,84,1,0,0,114,85,1,0,0,114,88,1,0,0,114,
     225,0,0,0,114,228,0,0,0,114,90,1,0,0,114,12,
-    0,0,0,114,7,0,0,0,114,74,1,0,0,44,5,0,
+    0,0,0,114,7,0,0,0,114,74,1,0,0,45,5,0,
     0,115,36,0,0,0,8,0,4,2,2,2,10,1,2,9,
     10,1,2,12,10,1,2,21,10,1,2,20,12,1,2,31,
     12,1,2,23,12,1,2,15,14,1,114,9,0,0,0,114,
@@ -2387,8 +2387,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     98,101,101,110,32,109,111,100,105,102,105,101,100,46,10,10,
     32,32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,
     0,6,0,0,0,7,0,0,0,115,112,0,0,0,103,0,
-    125,3,124,2,68,0,93,16,92,2,137,0,125,4,124,3,
-    160,0,135,0,102,1,100,1,100,2,132,8,124,4,68,0,
+    125,3,124,2,68,0,93,16,92,2,137,5,125,4,124,3,
+    160,0,135,5,102,1,100,1,100,2,132,8,124,4,68,0,
     131,1,161,1,1,0,113,4,124,3,124,0,95,1,124,1,
     112,27,100,3,124,0,95,2,116,3,124,0,106,2,131,1,
     115,43,116,4,116,5,160,6,161,0,124,0,106,2,131,2,
@@ -2406,10 +2406,10 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     32,114,101,99,111,103,110,105,122,101,115,46,99,1,0,0,
     0,0,0,0,0,0,0,0,0,3,0,0,0,51,0,0,
     0,115,24,0,0,0,129,0,124,0,93,7,125,1,124,1,
-    136,0,102,2,86,0,1,0,113,2,100,0,83,0,114,69,
+    136,2,102,2,86,0,1,0,113,2,100,0,83,0,114,69,
     0,0,0,114,12,0,0,0,41,3,114,5,0,0,0,114,
     41,1,0,0,114,163,0,0,0,32,32,128,114,7,0,0,
-    0,114,8,0,0,0,215,5,0,0,115,4,0,0,0,6,
+    0,114,8,0,0,0,216,5,0,0,115,4,0,0,0,6,
     128,18,0,114,9,0,0,0,122,38,70,105,108,101,70,105,
     110,100,101,114,46,95,95,105,110,105,116,95,95,46,60,108,
     111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,
@@ -2423,7 +2423,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,65,0,0,0,218,14,108,111,97,100,101,114,95,100,101,
     116,97,105,108,115,90,7,108,111,97,100,101,114,115,114,211,
     0,0,0,114,163,0,0,0,32,32,32,32,32,64,114,7,
-    0,0,0,114,235,0,0,0,209,5,0,0,115,20,0,0,
+    0,0,0,114,235,0,0,0,210,5,0,0,115,20,0,0,
     0,4,4,12,1,26,1,6,1,10,2,10,1,18,1,6,
     1,8,1,12,1,114,9,0,0,0,122,19,70,105,108,101,
     70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99,
@@ -2433,7 +2433,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,
     109,116,105,109,101,46,114,130,0,0,0,78,41,1,114,93,
     1,0,0,114,20,1,0,0,32,114,7,0,0,0,114,75,
-    1,0,0,225,5,0,0,114,81,0,0,0,114,9,0,0,
+    1,0,0,226,5,0,0,114,81,0,0,0,114,9,0,0,
     0,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,
     118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,
     2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
@@ -2463,7 +2463,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     41,6,114,99,0,0,0,114,100,0,0,0,114,101,0,0,
     0,114,225,0,0,0,114,163,0,0,0,114,201,0,0,0,
     41,3,114,143,0,0,0,114,162,0,0,0,114,209,0,0,
-    0,32,32,32,114,7,0,0,0,114,160,0,0,0,231,5,
+    0,32,32,32,114,7,0,0,0,114,160,0,0,0,232,5,
     0,0,115,14,0,0,0,6,7,2,2,4,254,10,3,8,
     1,8,1,16,1,114,9,0,0,0,122,22,70,105,108,101,
     70,105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,
@@ -2474,7 +2474,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,212,0,0,0,41,7,114,143,0,0,0,114,210,0,0,
     0,114,162,0,0,0,114,65,0,0,0,90,4,115,109,115,
     108,114,224,0,0,0,114,163,0,0,0,32,32,32,32,32,
-    32,32,114,7,0,0,0,114,88,1,0,0,246,5,0,0,
+    32,32,114,7,0,0,0,114,88,1,0,0,247,5,0,0,
     115,8,0,0,0,10,1,8,1,2,1,6,255,114,9,0,
     0,0,122,20,70,105,108,101,70,105,110,100,101,114,46,95,
     103,101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,
@@ -2531,7 +2531,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,210,0,0,0,90,13,105,110,105,116,95,102,105,108,101,
     110,97,109,101,90,9,102,117,108,108,95,112,97,116,104,114,
     209,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,
-    32,32,114,7,0,0,0,114,225,0,0,0,251,5,0,0,
+    32,32,114,7,0,0,0,114,225,0,0,0,252,5,0,0,
     115,94,0,0,0,4,5,14,1,2,1,22,1,2,128,12,
     1,8,1,2,128,10,1,8,1,6,1,6,2,6,1,10,
     1,6,2,4,1,8,2,12,1,14,1,8,1,10,1,8,
@@ -2566,7 +2566,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     125,1,124,1,160,0,161,0,146,2,113,2,83,0,114,12,
     0,0,0,41,1,114,131,0,0,0,41,2,114,5,0,0,
     0,90,2,102,110,32,32,114,7,0,0,0,114,14,0,0,
-    0,75,6,0,0,115,2,0,0,0,20,0,114,9,0,0,
+    0,76,6,0,0,115,2,0,0,0,20,0,114,9,0,0,
     0,122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,
     105,108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,
     115,62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,
@@ -2583,15 +2583,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     116,101,110,116,115,114,67,1,0,0,114,141,0,0,0,114,
     51,1,0,0,114,41,1,0,0,90,8,110,101,119,95,110,
     97,109,101,32,32,32,32,32,32,32,32,32,114,7,0,0,
-    0,114,98,1,0,0,46,6,0,0,115,42,0,0,0,6,
+    0,114,98,1,0,0,47,6,0,0,115,42,0,0,0,6,
     2,2,1,20,1,2,128,18,1,8,3,2,128,12,3,12,
     1,6,7,8,1,16,1,4,1,18,1,4,2,12,1,6,
     1,12,1,20,1,4,255,2,233,115,13,0,0,0,132,9,
     14,0,142,12,28,7,193,32,1,28,7,122,22,70,105,108,
     101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,
     99,104,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
-    3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135,
-    1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41,
+    3,0,0,0,7,0,0,0,115,18,0,0,0,135,3,135,
+    4,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41,
     4,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101,
     116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114,
     110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32,
@@ -2612,7 +2612,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0,
     0,0,0,0,0,0,0,4,0,0,0,19,0,0,0,115,
     36,0,0,0,116,0,124,0,131,1,115,10,116,1,100,1,
-    124,0,100,2,141,2,130,1,136,0,124,0,103,1,136,1,
+    124,0,100,2,141,2,130,1,136,1,124,0,103,1,136,2,
     162,1,82,0,142,0,83,0,41,4,122,45,80,97,116,104,
     32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,
     108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,
@@ -2622,7 +2622,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     2,114,83,0,0,0,114,142,0,0,0,41,3,114,65,0,
     0,0,114,220,0,0,0,114,97,1,0,0,32,128,128,114,
     7,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,
-    102,111,114,95,70,105,108,101,70,105,110,100,101,114,87,6,
+    102,111,114,95,70,105,108,101,70,105,110,100,101,114,88,6,
     0,0,115,6,0,0,0,8,2,12,1,16,1,114,9,0,
     0,0,122,54,70,105,108,101,70,105,110,100,101,114,46,112,
     97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,
@@ -2631,14 +2631,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     41,5,114,220,0,0,0,114,97,1,0,0,114,102,1,0,
     0,114,220,0,0,0,114,97,1,0,0,96,96,32,64,64,
     114,7,0,0,0,218,9,112,97,116,104,95,104,111,111,107,
-    77,6,0,0,115,4,0,0,0,14,10,4,6,114,9,0,
+    78,6,0,0,115,4,0,0,0,14,10,4,6,114,9,0,
     0,0,122,20,70,105,108,101,70,105,110,100,101,114,46,112,
     97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,
     0,0,0,0,0,3,0,0,0,67,0,0,0,114,64,1,
     0,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,
     114,40,123,33,114,125,41,41,2,114,89,0,0,0,114,65,
     0,0,0,114,20,1,0,0,32,114,7,0,0,0,114,65,
-    1,0,0,95,6,0,0,114,58,1,0,0,114,9,0,0,
+    1,0,0,96,6,0,0,114,58,1,0,0,114,9,0,0,
     0,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,
     114,101,112,114,95,95,114,69,0,0,0,41,15,114,149,0,
     0,0,114,148,0,0,0,114,150,0,0,0,114,151,0,0,
@@ -2646,7 +2646,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,228,0,0,0,114,160,0,0,0,114,88,1,0,0,114,
     225,0,0,0,114,98,1,0,0,114,233,0,0,0,114,103,
     1,0,0,114,65,1,0,0,114,12,0,0,0,114,7,0,
-    0,0,114,91,1,0,0,200,5,0,0,115,24,0,0,0,
+    0,0,114,91,1,0,0,201,5,0,0,115,24,0,0,0,
     8,0,4,2,8,7,8,16,4,4,8,2,8,15,10,5,
     8,51,2,31,10,1,12,17,114,9,0,0,0,114,91,1,
     0,0,99,4,0,0,0,0,0,0,0,0,0,0,0,8,
@@ -2669,7 +2669,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     114,141,0,0,0,90,8,112,97,116,104,110,97,109,101,90,
     9,99,112,97,116,104,110,97,109,101,114,163,0,0,0,114,
     209,0,0,0,32,32,32,32,32,32,114,7,0,0,0,218,
-    14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,101,
+    14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,102,
     6,0,0,115,40,0,0,0,10,2,10,1,4,1,4,1,
     8,1,8,1,12,1,10,2,4,1,14,1,2,1,8,1,
     8,1,8,1,12,1,2,128,12,1,6,2,2,128,2,254,
@@ -2690,7 +2690,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     0,0,114,127,0,0,0,114,39,1,0,0,114,113,0,0,
     0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90,
     6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100,
-    101,32,32,32,114,7,0,0,0,114,207,0,0,0,124,6,
+    101,32,32,32,114,7,0,0,0,114,207,0,0,0,125,6,
     0,0,115,8,0,0,0,12,5,8,1,8,1,10,1,114,
     9,0,0,0,114,207,0,0,0,99,1,0,0,0,0,0,
     0,0,0,0,0,0,1,0,0,0,67,0,0,0,115,8,
@@ -2698,7 +2698,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     41,1,114,158,0,0,0,41,1,218,17,95,98,111,111,116,
     115,116,114,97,112,95,109,111,100,117,108,101,32,114,7,0,
     0,0,218,21,95,115,101,116,95,98,111,111,116,115,116,114,
-    97,112,95,109,111,100,117,108,101,135,6,0,0,115,2,0,
+    97,112,95,109,111,100,117,108,101,136,6,0,0,115,2,0,
     0,0,8,2,114,9,0,0,0,114,111,1,0,0,99,1,
     0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,67,
     0,0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,
@@ -2713,7 +2713,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     101,116,97,95,112,97,116,104,114,61,0,0,0,114,74,1,
     0,0,41,2,114,110,1,0,0,90,17,115,117,112,112,111,
     114,116,101,100,95,108,111,97,100,101,114,115,32,32,114,7,
-    0,0,0,218,8,95,105,110,115,116,97,108,108,140,6,0,
+    0,0,0,218,8,95,105,110,115,116,97,108,108,141,6,0,
     0,115,8,0,0,0,8,2,6,1,20,1,16,1,114,9,
     0,0,0,114,113,1,0,0,41,1,114,87,0,0,0,114,
     69,0,0,0,41,3,78,78,78,41,2,114,0,0,0,0,
@@ -2758,7 +2758,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
     1,4,4,4,1,2,1,2,1,4,255,8,4,6,16,8,
     3,8,5,8,5,4,6,10,1,8,30,8,6,8,8,8,
     10,8,9,8,5,4,7,10,1,8,8,10,5,10,22,0,
-    127,16,34,12,1,4,2,4,1,6,2,4,1,10,1,8,
+    127,16,35,12,1,4,2,4,1,6,2,4,1,10,1,8,
     2,6,2,8,2,16,2,8,71,8,40,8,19,8,12,8,
     12,8,31,8,20,8,33,8,28,10,24,10,13,10,10,8,
     11,6,14,4,3,2,1,12,255,14,73,14,67,16,30,0,



More information about the Python-checkins mailing list