From 312595ce3a75e91d53222e486dfdd6f3668422ca Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 15 May 2013 15:26:42 -0500 Subject: [PATCH] hide the __class__ closure from the class body (#12370) --- Include/symtable.h | 3 + Lib/importlib/_bootstrap.py | 3 +- Lib/test/test_super.py | 28 ++++- Misc/NEWS | 3 + Python/compile.c | 64 +++++++--- Python/importlib.h | 238 ++++++++++++++++++------------------ Python/symtable.c | 34 +++--- 7 files changed, 221 insertions(+), 152 deletions(-) diff --git a/Include/symtable.h b/Include/symtable.h index 4d82f0cf49f..44535d0d953 100644 --- a/Include/symtable.h +++ b/Include/symtable.h @@ -53,6 +53,9 @@ typedef struct _symtable_entry { unsigned ste_varkeywords : 1; /* true if block has varkeywords */ unsigned ste_returns_value : 1; /* true if namespace uses return with an argument */ + unsigned ste_needs_class_closure : 1; /* for class scopes, true if a + closure over __class__ + should be created */ int ste_lineno; /* first line of block */ int ste_col_offset; /* offset of first line of block */ int ste_opt_lineno; /* lineno of last exec or import * */ diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 155403e4297..e791983f9db 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -390,12 +390,13 @@ def _call_with_frames_removed(f, *args, **kwds): # keyword-only defaults) # Python 3.4a1 3260 (add LOAD_CLASSDEREF; allow locals of class to override # free vars) +# Python 3.4a1 3270 (various tweaks to the __class_ closure) # # MAGIC must change whenever the bytecode emitted by the compiler may no # longer be understood by older implementations of the eval loop (usually # due to the addition of new opcodes). -_MAGIC_BYTES = (3260).to_bytes(2, 'little') + b'\r\n' +_MAGIC_BYTES = (3270).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(_MAGIC_BYTES, 'little') _PYCACHE = '__pycache__' diff --git a/Lib/test/test_super.py b/Lib/test/test_super.py index 1e272ee2cf5..d0ce40a7ed7 100644 --- a/Lib/test/test_super.py +++ b/Lib/test/test_super.py @@ -81,8 +81,7 @@ class TestSuper(unittest.TestCase): self.assertEqual(E().f(), 'AE') - @unittest.expectedFailure - def test___class___set(self): + def test_various___class___pathologies(self): # See issue #12370 class X(A): def f(self): @@ -91,6 +90,31 @@ class TestSuper(unittest.TestCase): x = X() self.assertEqual(x.f(), 'A') self.assertEqual(x.__class__, 413) + class X: + x = __class__ + def f(): + __class__ + self.assertIs(X.x, type(self)) + with self.assertRaises(NameError) as e: + exec("""class X: + __class__ + def f(): + __class__""", globals(), {}) + self.assertIs(type(e.exception), NameError) # Not UnboundLocalError + class X: + global __class__ + __class__ = 42 + def f(): + __class__ + self.assertEqual(globals()["__class__"], 42) + del globals()["__class__"] + self.assertNotIn("__class__", X.__dict__) + class X: + nonlocal __class__ + __class__ = 42 + def f(): + __class__ + self.assertEqual(__class__, 42) def test___class___instancemethod(self): # See issue #14857 diff --git a/Misc/NEWS b/Misc/NEWS index c506822be86..1f7ac98c4f0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1? Core and Builtins ----------------- +- Issue #12370: Prevent class bodies from interfering with the __class__ + closure. + - Issue #17237: Fix crash in the ASCII decoder on m68k. - Issue #17927: Frame objects kept arguments alive if they had been diff --git a/Python/compile.c b/Python/compile.c index 1ecbae81812..24ff61f8a91 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -535,6 +535,37 @@ compiler_enter_scope(struct compiler *c, identifier name, compiler_unit_free(u); return 0; } + if (u->u_ste->ste_needs_class_closure) { + /* Cook up a implicit __class__ cell. */ + _Py_IDENTIFIER(__class__); + PyObject *tuple, *name, *zero; + int res; + assert(u->u_scope_type == COMPILER_SCOPE_CLASS); + assert(PyDict_Size(u->u_cellvars) == 0); + name = _PyUnicode_FromId(&PyId___class__); + if (!name) { + compiler_unit_free(u); + return 0; + } + tuple = PyTuple_Pack(2, name, Py_TYPE(name)); + if (!tuple) { + compiler_unit_free(u); + return 0; + } + zero = PyLong_FromLong(0); + if (!zero) { + Py_DECREF(tuple); + compiler_unit_free(u); + return 0; + } + res = PyDict_SetItem(u->u_cellvars, tuple, zero); + Py_DECREF(tuple); + Py_DECREF(zero); + if (res < 0) { + compiler_unit_free(u); + return 0; + } + } u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS, PyDict_Size(u->u_cellvars)); @@ -1331,6 +1362,9 @@ compiler_mod(struct compiler *c, mod_ty mod) static int get_ref_type(struct compiler *c, PyObject *name) { + if (c->u->u_scope_type == COMPILER_SCOPE_CLASS && + !PyUnicode_CompareWithASCIIString(name, "__class__")) + return CELL; int scope = PyST_GetScope(c->u->u_ste, name); if (scope == 0) { char buf[350]; @@ -1704,24 +1738,24 @@ compiler_class(struct compiler *c, stmt_ty s) compiler_exit_scope(c); return 0; } - /* return the (empty) __class__ cell */ - str = PyUnicode_InternFromString("__class__"); - if (str == NULL) { - compiler_exit_scope(c); - return 0; - } - i = compiler_lookup_arg(c->u->u_cellvars, str); - Py_DECREF(str); - if (i == -1) { - /* This happens when nobody references the cell */ - PyErr_Clear(); - /* Return None */ - ADDOP_O(c, LOAD_CONST, Py_None, consts); - } - else { + if (c->u->u_ste->ste_needs_class_closure) { + /* return the (empty) __class__ cell */ + str = PyUnicode_InternFromString("__class__"); + if (str == NULL) { + compiler_exit_scope(c); + return 0; + } + i = compiler_lookup_arg(c->u->u_cellvars, str); + Py_DECREF(str); + assert(i == 0); /* Return the cell where to store __class__ */ ADDOP_I(c, LOAD_CLOSURE, i); } + else { + assert(PyDict_Size(c->u->u_cellvars) == 0); + /* This happens when nobody references the cell. Return None. */ + ADDOP_O(c, LOAD_CONST, Py_None, consts); + } ADDOP_IN_SCOPE(c, RETURN_VALUE); /* create the code object */ co = assemble(c, 1); diff --git a/Python/importlib.h b/Python/importlib.h index b3cd54897d1..65dd44cc867 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -637,7 +637,7 @@ const unsigned char _Py_M__importlib[] = { 4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,25, 0,0,0,95,99,97,108,108,95,119,105,116,104,95,102,114, 97,109,101,115,95,114,101,109,111,118,101,100,33,1,0,0, - 115,2,0,0,0,0,8,114,102,0,0,0,105,188,12,0, + 115,2,0,0,0,0,8,114,102,0,0,0,105,198,12,0, 0,233,2,0,0,0,114,13,0,0,0,115,2,0,0,0, 13,10,116,11,0,0,0,95,95,112,121,99,97,99,104,101, 95,95,117,3,0,0,0,46,112,121,117,4,0,0,0,46, @@ -711,7 +711,7 @@ const unsigned char _Py_M__importlib[] = { 36,0,0,0,116,3,0,0,0,116,97,103,244,8,0,0, 0,102,105,108,101,110,97,109,101,114,4,0,0,0,114,4, 0,0,0,114,5,0,0,0,244,17,0,0,0,99,97,99, - 104,101,95,102,114,111,109,95,115,111,117,114,99,101,152,1, + 104,101,95,102,114,111,109,95,115,111,117,114,99,101,153,1, 0,0,115,22,0,0,0,0,13,31,1,6,1,9,2,6, 1,18,1,24,1,12,1,12,1,15,1,31,1,114,120,0, 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,5, @@ -771,7 +771,7 @@ const unsigned char _Py_M__importlib[] = { 109,101,116,7,0,0,0,112,121,99,97,99,104,101,114,117, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, 0,0,244,17,0,0,0,115,111,117,114,99,101,95,102,114, - 111,109,95,99,97,99,104,101,179,1,0,0,115,24,0,0, + 111,109,95,99,97,99,104,101,180,1,0,0,115,24,0,0, 0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24, 1,21,1,3,1,21,1,19,1,114,123,0,0,0,99,1, 0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67, @@ -812,7 +812,7 @@ const unsigned char _Py_M__importlib[] = { 101,120,116,101,110,115,105,111,110,244,11,0,0,0,115,111, 117,114,99,101,95,112,97,116,104,114,4,0,0,0,114,4, 0,0,0,114,5,0,0,0,244,15,0,0,0,95,103,101, - 116,95,115,111,117,114,99,101,102,105,108,101,202,1,0,0, + 116,95,115,111,117,114,99,101,102,105,108,101,203,1,0,0, 115,20,0,0,0,0,7,18,1,4,1,24,1,35,1,4, 2,3,1,16,1,19,1,21,2,114,131,0,0,0,99,1, 0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67, @@ -829,7 +829,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,40,0,0,0,40,2,0,0,0,114,35,0,0, 0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0, 114,5,0,0,0,244,10,0,0,0,95,99,97,108,99,95, - 109,111,100,101,223,1,0,0,115,12,0,0,0,0,2,3, + 109,111,100,101,224,1,0,0,115,12,0,0,0,0,2,3, 1,22,1,13,1,11,3,10,1,114,133,0,0,0,244,9, 0,0,0,118,101,114,98,111,115,105,116,121,114,29,0,0, 0,99,1,0,0,0,1,0,0,0,3,0,0,0,4,0, @@ -853,7 +853,7 @@ const unsigned char _Py_M__importlib[] = { 244,7,0,0,0,109,101,115,115,97,103,101,114,134,0,0, 0,114,101,0,0,0,114,4,0,0,0,114,4,0,0,0, 114,5,0,0,0,244,16,0,0,0,95,118,101,114,98,111, - 115,101,95,109,101,115,115,97,103,101,235,1,0,0,115,8, + 115,101,95,109,101,115,115,97,103,101,236,1,0,0,115,8, 0,0,0,0,2,18,1,15,1,13,1,114,141,0,0,0, 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, 0,3,0,0,0,115,35,0,0,0,135,0,0,102,1,0, @@ -879,7 +879,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,109,111,100,117,108,101,40,1,0,0,0,244,3,0, 0,0,102,120,110,114,4,0,0,0,114,5,0,0,0,244, 19,0,0,0,115,101,116,95,112,97,99,107,97,103,101,95, - 119,114,97,112,112,101,114,245,1,0,0,115,12,0,0,0, + 119,114,97,112,112,101,114,246,1,0,0,115,12,0,0,0, 0,1,15,1,24,1,12,1,15,1,31,1,117,40,0,0, 0,115,101,116,95,112,97,99,107,97,103,101,46,60,108,111, 99,97,108,115,62,46,115,101,116,95,112,97,99,107,97,103, @@ -887,7 +887,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,40,2,0,0,0,114,146,0,0,0,114,147,0, 0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0, 0,114,5,0,0,0,244,11,0,0,0,115,101,116,95,112, - 97,99,107,97,103,101,243,1,0,0,115,6,0,0,0,0, + 97,99,107,97,103,101,244,1,0,0,115,6,0,0,0,0, 2,18,7,13,1,114,148,0,0,0,99,1,0,0,0,0, 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115, 35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0, @@ -907,14 +907,14 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,145,0,0,0,40,1,0,0,0,114,146,0, 0,0,114,4,0,0,0,114,5,0,0,0,244,18,0,0, 0,115,101,116,95,108,111,97,100,101,114,95,119,114,97,112, - 112,101,114,2,2,0,0,115,8,0,0,0,0,1,18,1, + 112,101,114,3,2,0,0,115,8,0,0,0,0,1,18,1, 24,1,12,1,117,38,0,0,0,115,101,116,95,108,111,97, 100,101,114,46,60,108,111,99,97,108,115,62,46,115,101,116, 95,108,111,97,100,101,114,95,119,114,97,112,112,101,114,40, 1,0,0,0,114,64,0,0,0,40,2,0,0,0,114,146, 0,0,0,114,150,0,0,0,114,4,0,0,0,40,1,0, 0,0,114,146,0,0,0,114,5,0,0,0,244,10,0,0, - 0,115,101,116,95,108,111,97,100,101,114,0,2,0,0,115, + 0,115,101,116,95,108,111,97,100,101,114,1,2,0,0,115, 6,0,0,0,0,2,18,5,13,1,114,151,0,0,0,99, 1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, 3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,100, @@ -1003,7 +1003,7 @@ const unsigned char _Py_M__importlib[] = { 108,111,97,100,114,153,0,0,0,40,1,0,0,0,114,146, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,25,0, 0,0,109,111,100,117,108,101,95,102,111,114,95,108,111,97, - 100,101,114,95,119,114,97,112,112,101,114,29,2,0,0,115, + 100,101,114,95,119,114,97,112,112,101,114,30,2,0,0,115, 44,0,0,0,0,1,18,1,12,1,6,4,12,3,9,1, 13,1,9,1,3,1,19,1,19,1,5,2,6,1,12,2, 25,2,9,1,6,2,23,1,3,1,6,1,13,1,12,2, @@ -1014,7 +1014,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,40,2,0,0,0,114,146,0,0,0,114,158,0, 0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0, 0,114,5,0,0,0,244,17,0,0,0,109,111,100,117,108, - 101,95,102,111,114,95,108,111,97,100,101,114,11,2,0,0, + 101,95,102,111,114,95,108,111,97,100,101,114,12,2,0,0, 115,6,0,0,0,0,18,18,33,13,1,114,159,0,0,0, 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, 0,3,0,0,0,115,38,0,0,0,100,1,0,135,0,0, @@ -1051,7 +1051,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,40,1,0,0,0,244,6,0,0,0,109,101,116, 104,111,100,114,4,0,0,0,114,5,0,0,0,244,19,0, 0,0,95,99,104,101,99,107,95,110,97,109,101,95,119,114, - 97,112,112,101,114,74,2,0,0,115,10,0,0,0,0,1, + 97,112,112,101,114,75,2,0,0,115,10,0,0,0,0,1, 12,1,12,1,15,1,25,1,117,40,0,0,0,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,95,110,97,109,101,95,119,114, @@ -1059,7 +1059,7 @@ const unsigned char _Py_M__importlib[] = { 2,0,0,0,114,160,0,0,0,114,161,0,0,0,114,4, 0,0,0,40,1,0,0,0,114,160,0,0,0,114,5,0, 0,0,244,11,0,0,0,95,99,104,101,99,107,95,110,97, - 109,101,66,2,0,0,115,6,0,0,0,0,8,21,6,13, + 109,101,67,2,0,0,115,6,0,0,0,0,8,21,6,13, 1,114,162,0,0,0,99,1,0,0,0,0,0,0,0,2, 0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0, 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125, @@ -1082,7 +1082,7 @@ const unsigned char _Py_M__importlib[] = { 78,0,0,0,114,156,0,0,0,40,1,0,0,0,114,146, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,25,0, 0,0,95,114,101,113,117,105,114,101,115,95,98,117,105,108, - 116,105,110,95,119,114,97,112,112,101,114,86,2,0,0,115, + 116,105,110,95,119,114,97,112,112,101,114,87,2,0,0,115, 8,0,0,0,0,1,15,1,18,1,12,1,117,52,0,0, 0,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116, 105,110,46,60,108,111,99,97,108,115,62,46,95,114,101,113, @@ -1091,7 +1091,7 @@ const unsigned char _Py_M__importlib[] = { 2,0,0,0,114,146,0,0,0,114,164,0,0,0,114,4, 0,0,0,40,1,0,0,0,114,146,0,0,0,114,5,0, 0,0,244,17,0,0,0,95,114,101,113,117,105,114,101,115, - 95,98,117,105,108,116,105,110,84,2,0,0,115,6,0,0, + 95,98,117,105,108,116,105,110,85,2,0,0,115,6,0,0, 0,0,2,18,5,13,1,114,165,0,0,0,99,1,0,0, 0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0, 0,115,35,0,0,0,135,0,0,102,1,0,100,1,0,100, @@ -1114,7 +1114,7 @@ const unsigned char _Py_M__importlib[] = { 40,1,0,0,0,114,146,0,0,0,114,4,0,0,0,114, 5,0,0,0,244,24,0,0,0,95,114,101,113,117,105,114, 101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101, - 114,97,2,0,0,115,8,0,0,0,0,1,15,1,18,1, + 114,98,2,0,0,115,8,0,0,0,0,1,15,1,18,1, 12,1,117,50,0,0,0,95,114,101,113,117,105,114,101,115, 95,102,114,111,122,101,110,46,60,108,111,99,97,108,115,62, 46,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101, @@ -1122,7 +1122,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,40,2,0,0,0,114,146,0,0,0,114,167,0, 0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0, 0,114,5,0,0,0,244,16,0,0,0,95,114,101,113,117, - 105,114,101,115,95,102,114,111,122,101,110,95,2,0,0,115, + 105,114,101,115,95,102,114,111,122,101,110,96,2,0,0,115, 6,0,0,0,0,2,18,5,13,1,114,168,0,0,0,99, 2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, 67,0,0,0,115,87,0,0,0,124,0,0,106,0,0,124, @@ -1150,7 +1150,7 @@ const unsigned char _Py_M__importlib[] = { 114,116,105,111,110,115,244,3,0,0,0,109,115,103,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,17,0, 0,0,95,102,105,110,100,95,109,111,100,117,108,101,95,115, - 104,105,109,106,2,0,0,115,10,0,0,0,0,6,21,1, + 104,105,109,107,2,0,0,115,10,0,0,0,0,6,21,1, 24,1,6,1,32,1,114,176,0,0,0,99,4,0,0,0, 0,0,0,0,11,0,0,0,19,0,0,0,67,0,0,0, 115,243,1,0,0,105,0,0,125,4,0,124,2,0,100,1, @@ -1235,7 +1235,7 @@ const unsigned char _Py_M__importlib[] = { 244,11,0,0,0,115,111,117,114,99,101,95,115,105,122,101, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244, 25,0,0,0,95,118,97,108,105,100,97,116,101,95,98,121, - 116,101,99,111,100,101,95,104,101,97,100,101,114,119,2,0, + 116,101,99,111,100,101,95,104,101,97,100,101,114,120,2,0, 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, 12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1, 18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1, @@ -1269,7 +1269,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,130,0,0,0,244,4,0,0,0,99,111,100,101,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,17, 0,0,0,95,99,111,109,112,105,108,101,95,98,121,116,101, - 99,111,100,101,174,2,0,0,115,16,0,0,0,0,2,15, + 99,111,100,101,175,2,0,0,115,16,0,0,0,0,2,15, 1,15,1,13,1,12,1,19,1,4,2,18,1,114,190,0, 0,0,114,71,0,0,0,99,3,0,0,0,0,0,0,0, 4,0,0,0,3,0,0,0,67,0,0,0,115,76,0,0, @@ -1290,7 +1290,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,189,0,0,0,114,179,0,0,0,114,184,0, 0,0,114,52,0,0,0,114,4,0,0,0,114,4,0,0, 0,114,5,0,0,0,244,17,0,0,0,95,99,111,100,101, - 95,116,111,95,98,121,116,101,99,111,100,101,186,2,0,0, + 95,116,111,95,98,121,116,101,99,111,100,101,187,2,0,0, 115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,114, 193,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, 0,6,0,0,0,66,0,0,0,115,173,0,0,0,124,0, @@ -1324,7 +1324,7 @@ const unsigned char _Py_M__importlib[] = { 114,56,0,0,0,40,2,0,0,0,244,3,0,0,0,99, 108,115,114,145,0,0,0,114,4,0,0,0,114,4,0,0, 0,114,5,0,0,0,244,11,0,0,0,109,111,100,117,108, - 101,95,114,101,112,114,207,2,0,0,115,2,0,0,0,0, + 101,95,114,101,112,114,208,2,0,0,115,2,0,0,0,0, 2,117,27,0,0,0,66,117,105,108,116,105,110,73,109,112, 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, 114,78,99,3,0,0,0,0,0,0,0,3,0,0,0,2, @@ -1343,7 +1343,7 @@ const unsigned char _Py_M__importlib[] = { 95,98,117,105,108,116,105,110,40,3,0,0,0,114,195,0, 0,0,114,156,0,0,0,114,35,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0, - 102,105,110,100,95,109,111,100,117,108,101,211,2,0,0,115, + 102,105,110,100,95,109,111,100,117,108,101,212,2,0,0,115, 6,0,0,0,0,7,12,1,4,1,117,27,0,0,0,66, 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102, 105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0, @@ -1361,7 +1361,7 @@ const unsigned char _Py_M__importlib[] = { 95,98,117,105,108,116,105,110,40,3,0,0,0,114,195,0, 0,0,114,156,0,0,0,114,157,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0, - 108,111,97,100,95,109,111,100,117,108,101,222,2,0,0,115, + 108,111,97,100,95,109,111,100,117,108,101,223,2,0,0,115, 14,0,0,0,0,6,15,1,3,1,20,1,3,1,22,1, 13,1,117,27,0,0,0,66,117,105,108,116,105,110,73,109, 112,111,114,116,101,114,46,108,111,97,100,95,109,111,100,117, @@ -1374,7 +1374,7 @@ const unsigned char _Py_M__importlib[] = { 116,115,46,78,114,4,0,0,0,40,2,0,0,0,114,195, 0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,0, 0,0,114,5,0,0,0,244,8,0,0,0,103,101,116,95, - 99,111,100,101,236,2,0,0,115,2,0,0,0,0,4,117, + 99,111,100,101,237,2,0,0,115,2,0,0,0,0,4,117, 24,0,0,0,66,117,105,108,116,105,110,73,109,112,111,114, 116,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, @@ -1385,7 +1385,7 @@ const unsigned char _Py_M__importlib[] = { 115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0, 0,0,40,2,0,0,0,114,195,0,0,0,114,156,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 244,10,0,0,0,103,101,116,95,115,111,117,114,99,101,242, + 244,10,0,0,0,103,101,116,95,115,111,117,114,99,101,243, 2,0,0,115,2,0,0,0,0,4,117,26,0,0,0,66, 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103, 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, @@ -1396,7 +1396,7 @@ const unsigned char _Py_M__importlib[] = { 115,32,97,114,101,32,110,101,118,101,114,32,112,97,99,107, 97,103,101,115,46,70,114,4,0,0,0,40,2,0,0,0, 114,195,0,0,0,114,156,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,153,0,0,0,248,2, + 4,0,0,0,114,5,0,0,0,114,153,0,0,0,249,2, 0,0,115,2,0,0,0,0,4,117,26,0,0,0,66,117, 105,108,116,105,110,73,109,112,111,114,116,101,114,46,105,115, 95,112,97,99,107,97,103,101,40,14,0,0,0,114,56,0, @@ -1406,7 +1406,7 @@ const unsigned char _Py_M__importlib[] = { 114,151,0,0,0,114,165,0,0,0,114,198,0,0,0,114, 199,0,0,0,114,200,0,0,0,114,153,0,0,0,40,1, 0,0,0,114,69,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,194,0,0,0,198,2,0,0, + 0,0,114,5,0,0,0,114,194,0,0,0,199,2,0,0, 115,28,0,0,0,16,7,6,2,18,4,3,1,18,10,3, 1,3,1,3,1,27,11,3,1,21,5,3,1,21,5,3, 1,114,194,0,0,0,99,1,0,0,0,0,0,0,0,1, @@ -1440,7 +1440,7 @@ const unsigned char _Py_M__importlib[] = { 110,41,62,40,2,0,0,0,114,46,0,0,0,114,56,0, 0,0,40,2,0,0,0,114,195,0,0,0,244,1,0,0, 0,109,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,196,0,0,0,8,3,0,0,115,2,0,0,0,0, + 0,114,196,0,0,0,9,3,0,0,115,2,0,0,0,0, 2,117,26,0,0,0,70,114,111,122,101,110,73,109,112,111, 114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,114, 78,99,3,0,0,0,0,0,0,0,3,0,0,0,2,0, @@ -1451,7 +1451,7 @@ const unsigned char _Py_M__importlib[] = { 46,78,40,2,0,0,0,114,97,0,0,0,114,166,0,0, 0,40,3,0,0,0,114,195,0,0,0,114,156,0,0,0, 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,197,0,0,0,12,3,0,0,115,2,0, + 5,0,0,0,114,197,0,0,0,13,3,0,0,115,2,0, 0,0,0,3,117,26,0,0,0,70,114,111,122,101,110,73, 109,112,111,114,116,101,114,46,102,105,110,100,95,109,111,100, 117,108,101,99,2,0,0,0,0,0,0,0,4,0,0,0, @@ -1470,7 +1470,7 @@ const unsigned char _Py_M__importlib[] = { 95,102,105,108,101,95,95,40,4,0,0,0,114,195,0,0, 0,114,156,0,0,0,114,157,0,0,0,114,203,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 198,0,0,0,17,3,0,0,115,18,0,0,0,0,6,15, + 198,0,0,0,18,3,0,0,115,18,0,0,0,0,6,15, 1,3,1,18,2,6,1,8,1,3,1,22,1,13,1,117, 26,0,0,0,70,114,111,122,101,110,73,109,112,111,114,116, 101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2, @@ -1483,7 +1483,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,97,0,0,0,116,17,0,0,0,103,101,116,95,102, 114,111,122,101,110,95,111,98,106,101,99,116,40,2,0,0, 0,114,195,0,0,0,114,156,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,34, + 114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,35, 3,0,0,115,2,0,0,0,0,4,117,23,0,0,0,70, 114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101, 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,2, @@ -1494,7 +1494,7 @@ const unsigned char _Py_M__importlib[] = { 111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99, 111,100,101,46,78,114,4,0,0,0,40,2,0,0,0,114, 195,0,0,0,114,156,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,200,0,0,0,40,3,0, + 0,0,0,114,5,0,0,0,114,200,0,0,0,41,3,0, 0,115,2,0,0,0,0,4,117,25,0,0,0,70,114,111, 122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95, 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2, @@ -1507,7 +1507,7 @@ const unsigned char _Py_M__importlib[] = { 17,0,0,0,105,115,95,102,114,111,122,101,110,95,112,97, 99,107,97,103,101,40,2,0,0,0,114,195,0,0,0,114, 156,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,153,0,0,0,46,3,0,0,115,2,0,0, + 0,0,0,114,153,0,0,0,47,3,0,0,115,2,0,0, 0,0,4,117,25,0,0,0,70,114,111,122,101,110,73,109, 112,111,114,116,101,114,46,105,115,95,112,97,99,107,97,103, 101,40,14,0,0,0,114,56,0,0,0,114,55,0,0,0, @@ -1516,7 +1516,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,168,0,0,0,114,198,0,0,0,114,199,0, 0,0,114,200,0,0,0,114,153,0,0,0,40,1,0,0, 0,114,69,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,202,0,0,0,255,2,0,0,115,28, + 114,5,0,0,0,114,202,0,0,0,0,3,0,0,115,28, 0,0,0,16,7,6,2,18,4,3,1,18,4,3,1,3, 1,3,1,27,14,3,1,21,5,3,1,21,5,3,1,114, 202,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, @@ -1556,7 +1556,7 @@ const unsigned char _Py_M__importlib[] = { 73,78,69,40,2,0,0,0,114,195,0,0,0,244,3,0, 0,0,107,101,121,114,4,0,0,0,114,4,0,0,0,114, 5,0,0,0,244,14,0,0,0,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,66,3,0,0,115,8,0,0,0, + 101,103,105,115,116,114,121,67,3,0,0,115,8,0,0,0, 0,2,3,1,23,1,13,1,117,36,0,0,0,87,105,110, 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, 101,114,46,95,111,112,101,110,95,114,101,103,105,115,116,114, @@ -1585,7 +1585,7 @@ const unsigned char _Py_M__importlib[] = { 207,0,0,0,116,4,0,0,0,104,107,101,121,244,8,0, 0,0,102,105,108,101,112,97,116,104,114,4,0,0,0,114, 4,0,0,0,114,5,0,0,0,244,16,0,0,0,95,115, - 101,97,114,99,104,95,114,101,103,105,115,116,114,121,73,3, + 101,97,114,99,104,95,114,101,103,105,115,116,114,121,74,3, 0,0,115,22,0,0,0,0,2,9,1,12,2,9,1,15, 1,22,1,3,1,18,1,28,1,13,1,9,1,117,38,0, 0,0,87,105,110,100,111,119,115,82,101,103,105,115,116,114, @@ -1612,7 +1612,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,195,0,0,0,114,156,0,0,0,114,35,0,0,0, 114,213,0,0,0,114,173,0,0,0,114,115,0,0,0,114, 36,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,197,0,0,0,88,3,0,0,115,20,0,0, + 0,0,0,114,197,0,0,0,89,3,0,0,115,20,0,0, 0,0,3,15,1,12,1,4,1,3,1,17,1,13,1,9, 1,25,1,21,1,117,33,0,0,0,87,105,110,100,111,119, 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, @@ -1622,7 +1622,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,201,0,0,0,114,208,0,0,0,114,214,0, 0,0,114,197,0,0,0,40,1,0,0,0,114,69,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,205,0,0,0,53,3,0,0,115,16,0,0,0,16,3, + 114,205,0,0,0,54,3,0,0,115,16,0,0,0,16,3, 6,3,6,3,6,2,6,2,18,7,18,15,3,1,114,205, 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, 5,0,0,0,66,0,0,0,115,62,0,0,0,124,0,0, @@ -1661,7 +1661,7 @@ const unsigned char _Py_M__importlib[] = { 114,119,0,0,0,116,13,0,0,0,102,105,108,101,110,97, 109,101,95,98,97,115,101,116,9,0,0,0,116,97,105,108, 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,153,0,0,0,108,3,0,0,115,8,0, + 5,0,0,0,114,153,0,0,0,109,3,0,0,115,8,0, 0,0,0,3,25,1,22,1,19,1,117,24,0,0,0,95, 76,111,97,100,101,114,66,97,115,105,99,115,46,105,115,95, 112,97,99,107,97,103,101,244,10,0,0,0,115,111,117,114, @@ -1694,7 +1694,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,66,0,0,0,244,11,0,0,0,99,111,100,101, 95,111,98,106,101,99,116,114,4,0,0,0,114,4,0,0, 0,114,5,0,0,0,244,12,0,0,0,95,108,111,97,100, - 95,109,111,100,117,108,101,116,3,0,0,115,26,0,0,0, + 95,109,111,100,117,108,101,117,3,0,0,115,26,0,0,0, 0,4,9,1,15,1,18,1,6,1,3,1,22,1,13,1, 20,2,12,1,15,1,28,2,19,1,117,26,0,0,0,95, 76,111,97,100,101,114,66,97,115,105,99,115,46,95,108,111, @@ -1703,7 +1703,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,153,0,0,0,114,159,0,0,0,114,223,0, 0,0,40,1,0,0,0,114,69,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,114,218,0,0,0, - 103,3,0,0,115,8,0,0,0,16,3,6,2,12,8,6, + 104,3,0,0,115,8,0,0,0,16,3,6,2,12,8,6, 1,114,218,0,0,0,99,1,0,0,0,0,0,0,0,1, 0,0,0,4,0,0,0,66,0,0,0,115,122,0,0,0, 124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,0, @@ -1732,7 +1732,7 @@ const unsigned char _Py_M__importlib[] = { 78,40,1,0,0,0,244,7,0,0,0,73,79,69,114,114, 111,114,40,2,0,0,0,114,78,0,0,0,114,35,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 244,10,0,0,0,112,97,116,104,95,109,116,105,109,101,139, + 244,10,0,0,0,112,97,116,104,95,109,116,105,109,101,140, 3,0,0,115,2,0,0,0,0,6,117,23,0,0,0,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,2, @@ -1769,7 +1769,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,226,0,0,0,40,2,0,0,0,114,78,0,0, 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, 114,5,0,0,0,244,10,0,0,0,112,97,116,104,95,115, - 116,97,116,115,147,3,0,0,115,2,0,0,0,0,11,117, + 116,97,116,115,148,3,0,0,115,2,0,0,0,0,11,117, 23,0,0,0,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,4,0,0,0,3,0,0,0,67,0,0,0, @@ -1794,7 +1794,7 @@ const unsigned char _Py_M__importlib[] = { 130,0,0,0,116,10,0,0,0,99,97,99,104,101,95,112, 97,116,104,114,52,0,0,0,114,4,0,0,0,114,4,0, 0,0,114,5,0,0,0,244,15,0,0,0,95,99,97,99, - 104,101,95,98,121,116,101,99,111,100,101,160,3,0,0,115, + 104,101,95,98,121,116,101,99,111,100,101,161,3,0,0,115, 2,0,0,0,0,8,117,28,0,0,0,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,0,0,0,0, @@ -1812,7 +1812,7 @@ const unsigned char _Py_M__importlib[] = { 32,32,32,32,32,78,114,4,0,0,0,40,3,0,0,0, 114,78,0,0,0,114,35,0,0,0,114,52,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,228, - 0,0,0,170,3,0,0,115,0,0,0,0,117,21,0,0, + 0,0,0,171,3,0,0,115,0,0,0,0,117,21,0,0, 0,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,9, 0,0,0,44,0,0,0,67,0,0,0,115,62,1,0,0, @@ -1865,7 +1865,7 @@ const unsigned char _Py_M__importlib[] = { 117,114,99,101,244,8,0,0,0,101,110,99,111,100,105,110, 103,116,15,0,0,0,110,101,119,108,105,110,101,95,100,101, 99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,200,0,0,0,177,3,0,0,115,38,0, + 5,0,0,0,114,200,0,0,0,178,3,0,0,115,38,0, 0,0,0,2,12,1,15,1,3,1,19,1,18,1,9,1, 31,1,18,1,3,1,19,1,18,1,9,1,31,1,18,1, 3,1,30,1,18,1,9,1,117,23,0,0,0,83,111,117, @@ -1890,7 +1890,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,78,0,0,0,114,52,0,0,0,114,35,0, 0,0,114,238,0,0,0,114,4,0,0,0,114,4,0,0, 0,114,5,0,0,0,244,14,0,0,0,115,111,117,114,99, - 101,95,116,111,95,99,111,100,101,199,3,0,0,115,4,0, + 101,95,116,111,95,99,111,100,101,200,3,0,0,115,4,0, 0,0,0,5,18,1,117,27,0,0,0,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,0,0,0,0,0,0,0,10, @@ -1952,7 +1952,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,129,0,0,0,244,2,0,0,0,115,116,114,52,0, 0,0,244,10,0,0,0,98,121,116,101,115,95,100,97,116, 97,114,235,0,0,0,114,222,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,207, + 114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,208, 3,0,0,115,78,0,0,0,0,7,15,1,6,1,3,1, 16,1,13,1,11,2,3,1,19,1,13,1,5,2,16,1, 3,1,19,1,13,1,5,2,3,1,9,1,12,1,13,1, @@ -1981,7 +1981,7 @@ const unsigned char _Py_M__importlib[] = { 116,101,99,111,100,101,46,10,10,32,32,32,32,32,32,32, 32,40,1,0,0,0,114,223,0,0,0,40,2,0,0,0, 114,78,0,0,0,114,156,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,198,0,0,0,2,4, + 4,0,0,0,114,5,0,0,0,114,198,0,0,0,3,4, 0,0,115,2,0,0,0,0,8,117,24,0,0,0,83,111, 117,114,99,101,76,111,97,100,101,114,46,108,111,97,100,95, 109,111,100,117,108,101,78,114,126,0,0,0,40,11,0,0, @@ -1990,7 +1990,7 @@ const unsigned char _Py_M__importlib[] = { 228,0,0,0,114,200,0,0,0,114,240,0,0,0,114,199, 0,0,0,114,198,0,0,0,40,1,0,0,0,114,69,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,224,0,0,0,137,3,0,0,115,16,0,0,0,16, + 0,114,224,0,0,0,138,3,0,0,115,16,0,0,0,16, 2,12,8,12,13,12,10,12,7,12,22,18,8,12,51,114, 224,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, 0,4,0,0,0,2,0,0,0,115,92,0,0,0,124,0, @@ -2019,7 +2019,7 @@ const unsigned char _Py_M__importlib[] = { 40,2,0,0,0,114,66,0,0,0,114,35,0,0,0,40, 3,0,0,0,114,78,0,0,0,114,156,0,0,0,114,35, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,79,0,0,0,18,4,0,0,115,4,0,0,0, + 0,0,114,79,0,0,0,19,4,0,0,115,4,0,0,0, 0,3,9,1,117,19,0,0,0,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,2,0,0,0,3,0,0,0,3,0,0, @@ -2031,7 +2031,7 @@ const unsigned char _Py_M__importlib[] = { 244,0,0,0,114,198,0,0,0,40,2,0,0,0,114,78, 0,0,0,114,156,0,0,0,40,1,0,0,0,244,9,0, 0,0,95,95,99,108,97,115,115,95,95,114,4,0,0,0, - 114,5,0,0,0,114,198,0,0,0,24,4,0,0,115,2, + 114,5,0,0,0,114,198,0,0,0,25,4,0,0,115,2, 0,0,0,0,5,117,22,0,0,0,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,2,0,0,0,1,0,0, @@ -2043,7 +2043,7 @@ const unsigned char _Py_M__importlib[] = { 110,100,101,114,46,40,1,0,0,0,114,35,0,0,0,40, 2,0,0,0,114,78,0,0,0,114,156,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,0, - 0,0,31,4,0,0,115,2,0,0,0,0,3,117,23,0, + 0,0,32,4,0,0,115,2,0,0,0,0,3,117,23,0, 0,0,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,3,0,0,0,8,0,0,0,67,0,0,0,115,41, @@ -2057,14 +2057,14 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,116,4,0,0,0,114,101,97,100,40,3,0,0, 0,114,78,0,0,0,114,35,0,0,0,114,53,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 231,0,0,0,36,4,0,0,115,4,0,0,0,0,2,21, + 231,0,0,0,37,4,0,0,115,4,0,0,0,0,2,21, 1,117,19,0,0,0,70,105,108,101,76,111,97,100,101,114, 46,103,101,116,95,100,97,116,97,40,9,0,0,0,114,56, 0,0,0,114,55,0,0,0,114,57,0,0,0,114,58,0, 0,0,114,79,0,0,0,114,162,0,0,0,114,198,0,0, 0,114,219,0,0,0,114,231,0,0,0,40,1,0,0,0, 114,69,0,0,0,114,4,0,0,0,40,1,0,0,0,114, - 246,0,0,0,114,5,0,0,0,114,244,0,0,0,13,4, + 246,0,0,0,114,5,0,0,0,114,244,0,0,0,14,4, 0,0,115,10,0,0,0,16,3,6,2,12,6,24,7,18, 5,114,244,0,0,0,99,1,0,0,0,0,0,0,0,1, 0,0,0,4,0,0,0,66,0,0,0,115,68,0,0,0, @@ -2090,7 +2090,7 @@ const unsigned char _Py_M__importlib[] = { 105,109,101,116,7,0,0,0,115,116,95,115,105,122,101,40, 3,0,0,0,114,78,0,0,0,114,35,0,0,0,114,242, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,227,0,0,0,46,4,0,0,115,4,0,0,0, + 0,0,114,227,0,0,0,47,4,0,0,115,4,0,0,0, 0,2,15,1,117,27,0,0,0,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,5,0,0, @@ -2102,7 +2102,7 @@ const unsigned char _Py_M__importlib[] = { 5,0,0,0,114,78,0,0,0,114,130,0,0,0,114,129, 0,0,0,114,52,0,0,0,114,42,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,114,229,0,0, - 0,51,4,0,0,115,4,0,0,0,0,2,12,1,117,32, + 0,52,4,0,0,115,4,0,0,0,0,2,12,1,117,32, 0,0,0,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,250,0,0,0,105,182,1,0,0,99,3,0, @@ -2142,7 +2142,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,244,6,0,0,0,112,97,114,101,110,116,114,119,0, 0,0,114,27,0,0,0,114,23,0,0,0,114,236,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,228,0,0,0,56,4,0,0,115,38,0,0,0,0,2, + 114,228,0,0,0,57,4,0,0,115,38,0,0,0,0,2, 18,1,6,2,22,1,18,1,17,2,19,1,15,1,3,1, 17,1,13,2,7,1,18,3,16,1,27,1,3,1,16,1, 17,1,18,2,117,25,0,0,0,83,111,117,114,99,101,70, @@ -2151,7 +2151,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,57,0,0,0,114,58,0,0,0,114,227,0,0, 0,114,229,0,0,0,114,228,0,0,0,40,1,0,0,0, 114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,248,0,0,0,42,4,0,0,115,8,0, + 5,0,0,0,114,248,0,0,0,43,4,0,0,115,8,0, 0,0,16,2,6,2,12,5,12,5,114,248,0,0,0,99, 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, 66,0,0,0,115,62,0,0,0,124,0,0,69,101,0,0, @@ -2169,7 +2169,7 @@ const unsigned char _Py_M__importlib[] = { 131,1,1,83,40,3,0,0,0,78,114,220,0,0,0,84, 40,1,0,0,0,114,223,0,0,0,40,2,0,0,0,114, 78,0,0,0,114,156,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,198,0,0,0,89,4,0, + 0,0,0,114,5,0,0,0,114,198,0,0,0,90,4,0, 0,115,2,0,0,0,0,1,117,32,0,0,0,83,111,117, 114,99,101,108,101,115,115,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, @@ -2185,7 +2185,7 @@ const unsigned char _Py_M__importlib[] = { 0,40,5,0,0,0,114,78,0,0,0,114,156,0,0,0, 114,35,0,0,0,114,52,0,0,0,114,243,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,199, - 0,0,0,92,4,0,0,115,8,0,0,0,0,1,15,1, + 0,0,0,93,4,0,0,115,8,0,0,0,0,1,15,1, 15,1,24,1,117,29,0,0,0,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,99,111,100,101,99,2,0,0,0,0,0,0,0,2, @@ -2195,7 +2195,7 @@ const unsigned char _Py_M__importlib[] = { 114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,32, 99,111,100,101,46,78,114,4,0,0,0,40,2,0,0,0, 114,78,0,0,0,114,156,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,200,0,0,0,98,4, + 4,0,0,0,114,5,0,0,0,114,200,0,0,0,99,4, 0,0,115,2,0,0,0,0,2,117,31,0,0,0,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,40,7, @@ -2203,7 +2203,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,58,0,0,0,114,198,0,0,0,114,199,0,0, 0,114,200,0,0,0,40,1,0,0,0,114,69,0,0,0, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 254,0,0,0,85,4,0,0,115,8,0,0,0,16,2,6, + 254,0,0,0,86,4,0,0,115,8,0,0,0,16,2,6, 2,12,3,12,6,114,254,0,0,0,99,1,0,0,0,0, 0,0,0,1,0,0,0,5,0,0,0,66,0,0,0,115, 104,0,0,0,124,0,0,69,101,0,0,90,1,0,100,0, @@ -2227,7 +2227,7 @@ const unsigned char _Py_M__importlib[] = { 78,40,2,0,0,0,114,66,0,0,0,114,35,0,0,0, 40,3,0,0,0,114,78,0,0,0,114,66,0,0,0,114, 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,79,0,0,0,115,4,0,0,115,4,0,0, + 0,0,0,114,79,0,0,0,116,4,0,0,115,4,0,0, 0,0,1,9,1,117,28,0,0,0,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,4, @@ -2255,7 +2255,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,38,0,0,0,114,143,0,0,0,40,4,0,0,0, 114,78,0,0,0,114,156,0,0,0,114,157,0,0,0,114, 145,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,198,0,0,0,119,4,0,0,115,24,0,0, + 0,0,0,114,198,0,0,0,120,4,0,0,115,24,0,0, 0,0,5,15,1,3,1,9,1,15,1,16,1,31,1,28, 1,8,1,3,1,22,1,13,1,117,31,0,0,0,69,120, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, @@ -2277,7 +2277,7 @@ const unsigned char _Py_M__importlib[] = { 117,102,102,105,120,40,1,0,0,0,244,9,0,0,0,102, 105,108,101,95,110,97,109,101,114,4,0,0,0,114,5,0, 0,0,245,9,0,0,0,60,103,101,110,101,120,112,114,62, - 140,4,0,0,115,2,0,0,0,6,1,117,49,0,0,0, + 141,4,0,0,115,2,0,0,0,6,1,117,49,0,0,0, 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,60, 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, @@ -2286,7 +2286,7 @@ const unsigned char _Py_M__importlib[] = { 69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,40, 2,0,0,0,114,78,0,0,0,114,156,0,0,0,114,4, 0,0,0,40,1,0,0,0,114,1,1,0,0,114,5,0, - 0,0,114,153,0,0,0,137,4,0,0,115,6,0,0,0, + 0,0,114,153,0,0,0,138,4,0,0,115,6,0,0,0, 0,2,19,1,18,1,117,30,0,0,0,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,0,0,0,0, @@ -2298,7 +2298,7 @@ const unsigned char _Py_M__importlib[] = { 101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46, 78,114,4,0,0,0,40,2,0,0,0,114,78,0,0,0, 114,156,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,199,0,0,0,143,4,0,0,115,2,0, + 5,0,0,0,114,199,0,0,0,144,4,0,0,115,2,0, 0,0,0,2,117,28,0,0,0,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,2,0, @@ -2309,7 +2309,7 @@ const unsigned char _Py_M__importlib[] = { 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, 101,46,78,114,4,0,0,0,40,2,0,0,0,114,78,0, 0,0,114,156,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,200,0,0,0,147,4,0,0,115, + 0,114,5,0,0,0,114,200,0,0,0,148,4,0,0,115, 2,0,0,0,0,2,117,30,0,0,0,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,78,40,12,0,0,0,114, @@ -2318,7 +2318,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,151,0,0,0,114,198,0,0,0,114,153,0,0, 0,114,199,0,0,0,114,200,0,0,0,40,1,0,0,0, 114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,255,0,0,0,107,4,0,0,115,16,0, + 5,0,0,0,114,255,0,0,0,108,4,0,0,115,16,0, 0,0,16,6,6,2,12,4,3,1,3,1,24,16,12,6, 12,4,114,255,0,0,0,99,1,0,0,0,0,0,0,0, 1,0,0,0,2,0,0,0,66,0,0,0,115,134,0,0, @@ -2365,7 +2365,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,66,0,0,0,114,35,0,0,0,244,11,0,0, 0,112,97,116,104,95,102,105,110,100,101,114,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,114,79,0,0,0, - 159,4,0,0,115,8,0,0,0,0,1,9,1,9,1,21, + 160,4,0,0,115,8,0,0,0,0,1,9,1,9,1,21, 1,117,23,0,0,0,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,4,0,0,0,3,0,0,0,67,0, @@ -2385,7 +2385,7 @@ const unsigned char _Py_M__importlib[] = { 0,244,3,0,0,0,100,111,116,114,83,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,23,0, 0,0,95,102,105,110,100,95,112,97,114,101,110,116,95,112, - 97,116,104,95,110,97,109,101,115,165,4,0,0,115,8,0, + 97,116,104,95,110,97,109,101,115,166,4,0,0,115,8,0, 0,0,0,2,27,1,12,2,4,3,117,38,0,0,0,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,95, @@ -2399,7 +2399,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,112,97,114,101,110,116,95,109,111,100,117,108,101, 95,110,97,109,101,116,14,0,0,0,112,97,116,104,95,97, 116,116,114,95,110,97,109,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,8,1,0,0,175,4,0,0, + 0,0,114,5,0,0,0,114,8,1,0,0,176,4,0,0, 115,4,0,0,0,0,1,18,1,117,31,0,0,0,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, @@ -2418,7 +2418,7 @@ const unsigned char _Py_M__importlib[] = { 104,114,173,0,0,0,116,8,0,0,0,110,101,119,95,112, 97,116,104,114,4,0,0,0,114,4,0,0,0,114,5,0, 0,0,244,12,0,0,0,95,114,101,99,97,108,99,117,108, - 97,116,101,179,4,0,0,115,14,0,0,0,0,2,18,1, + 97,116,101,180,4,0,0,115,14,0,0,0,0,2,18,1, 15,1,27,3,12,1,12,1,12,1,117,27,0,0,0,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,114, 101,99,97,108,99,117,108,97,116,101,99,1,0,0,0,0, @@ -2428,7 +2428,7 @@ const unsigned char _Py_M__importlib[] = { 4,0,0,0,105,116,101,114,114,14,1,0,0,40,1,0, 0,0,114,78,0,0,0,114,4,0,0,0,114,4,0,0, 0,114,5,0,0,0,244,8,0,0,0,95,95,105,116,101, - 114,95,95,191,4,0,0,115,2,0,0,0,0,1,117,23, + 114,95,95,192,4,0,0,115,2,0,0,0,0,1,117,23, 0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116, 104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0, 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, @@ -2436,7 +2436,7 @@ const unsigned char _Py_M__importlib[] = { 131,1,0,83,40,1,0,0,0,78,40,2,0,0,0,114, 31,0,0,0,114,14,1,0,0,40,1,0,0,0,114,78, 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,244,7,0,0,0,95,95,108,101,110,95,95,194,4, + 0,0,244,7,0,0,0,95,95,108,101,110,95,95,195,4, 0,0,115,2,0,0,0,0,1,117,22,0,0,0,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,1,0,0, @@ -2446,7 +2446,7 @@ const unsigned char _Py_M__importlib[] = { 97,99,101,80,97,116,104,40,123,33,114,125,41,40,2,0, 0,0,114,46,0,0,0,114,7,1,0,0,40,1,0,0, 0,114,78,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,90,0,0,0,197,4,0,0,115,2, + 114,5,0,0,0,114,90,0,0,0,198,4,0,0,115,2, 0,0,0,0,1,117,23,0,0,0,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,2,0,0,0,2,0, @@ -2455,7 +2455,7 @@ const unsigned char _Py_M__importlib[] = { 78,40,1,0,0,0,114,14,1,0,0,40,2,0,0,0, 114,78,0,0,0,244,4,0,0,0,105,116,101,109,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,12,0, - 0,0,95,95,99,111,110,116,97,105,110,115,95,95,200,4, + 0,0,95,95,99,111,110,116,97,105,110,115,95,95,201,4, 0,0,115,2,0,0,0,0,1,117,27,0,0,0,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, @@ -2464,7 +2464,7 @@ const unsigned char _Py_M__importlib[] = { 1,0,1,100,0,0,83,40,1,0,0,0,78,40,2,0, 0,0,114,7,1,0,0,114,251,0,0,0,40,2,0,0, 0,114,78,0,0,0,114,18,1,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,203, + 114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,204, 4,0,0,115,2,0,0,0,0,1,117,21,0,0,0,95, 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, 112,101,110,100,78,40,13,0,0,0,114,56,0,0,0,114, @@ -2473,7 +2473,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,16,1,0,0,114,17,1,0,0,114,90,0,0, 0,114,19,1,0,0,114,251,0,0,0,40,1,0,0,0, 114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,5,1,0,0,152,4,0,0,115,20,0, + 5,0,0,0,114,5,1,0,0,153,4,0,0,115,20,0, 0,0,16,5,6,2,12,6,12,10,12,4,12,12,12,3, 12,3,12,3,12,3,114,5,1,0,0,99,1,0,0,0, 0,0,0,0,1,0,0,0,3,0,0,0,66,0,0,0, @@ -2490,7 +2490,7 @@ const unsigned char _Py_M__importlib[] = { 114,5,1,0,0,114,7,1,0,0,40,4,0,0,0,114, 78,0,0,0,114,66,0,0,0,114,35,0,0,0,114,11, 1,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,79,0,0,0,208,4,0,0,115,2,0,0,0, + 0,0,114,79,0,0,0,209,4,0,0,115,2,0,0,0, 0,1,117,24,0,0,0,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, 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, @@ -2500,7 +2500,7 @@ const unsigned char _Py_M__importlib[] = { 32,40,110,97,109,101,115,112,97,99,101,41,62,40,2,0, 0,0,114,46,0,0,0,114,56,0,0,0,40,2,0,0, 0,114,195,0,0,0,114,145,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,211, + 114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,212, 4,0,0,115,2,0,0,0,0,2,117,27,0,0,0,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, @@ -2515,7 +2515,7 @@ const unsigned char _Py_M__importlib[] = { 125,40,3,0,0,0,114,141,0,0,0,114,7,1,0,0, 114,143,0,0,0,40,2,0,0,0,114,78,0,0,0,114, 145,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,198,0,0,0,215,4,0,0,115,6,0,0, + 0,0,0,114,198,0,0,0,216,4,0,0,115,6,0,0, 0,0,3,16,1,12,1,117,27,0,0,0,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,78,40,8,0,0,0,114,56,0, @@ -2523,7 +2523,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,201,0,0,0,114,196,0,0,0,114,159,0,0,0, 114,198,0,0,0,40,1,0,0,0,114,69,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,20, - 1,0,0,207,4,0,0,115,6,0,0,0,16,1,12,3, + 1,0,0,208,4,0,0,115,6,0,0,0,16,1,12,3, 18,4,114,20,1,0,0,99,1,0,0,0,0,0,0,0, 1,0,0,0,4,0,0,0,66,0,0,0,115,119,0,0, 0,124,0,0,69,101,0,0,90,1,0,100,0,0,90,2, @@ -2560,7 +2560,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,22,1,0,0,40,2,0,0,0,114,195,0, 0,0,244,6,0,0,0,102,105,110,100,101,114,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,114,22,1,0, - 0,229,4,0,0,115,6,0,0,0,0,4,22,1,15,1, + 0,230,4,0,0,115,6,0,0,0,0,4,22,1,15,1, 117,28,0,0,0,80,97,116,104,70,105,110,100,101,114,46, 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, 115,99,2,0,0,0,0,0,0,0,3,0,0,0,12,0, @@ -2586,7 +2586,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,114,195,0,0,0,114,35,0,0,0,116,4,0, 0,0,104,111,111,107,114,4,0,0,0,114,4,0,0,0, 114,5,0,0,0,244,11,0,0,0,95,112,97,116,104,95, - 104,111,111,107,115,237,4,0,0,115,16,0,0,0,0,7, + 104,111,111,107,115,238,4,0,0,115,16,0,0,0,0,7, 9,1,19,1,16,1,3,1,14,1,13,1,12,2,117,22, 0,0,0,80,97,116,104,70,105,110,100,101,114,46,95,112, 97,116,104,95,104,111,111,107,115,99,2,0,0,0,0,0, @@ -2616,7 +2616,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,195,0,0,0,114,35,0,0,0,114,25,1,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, 244,20,0,0,0,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,254,4,0,0,115,16,0, + 116,101,114,95,99,97,99,104,101,255,4,0,0,115,16,0, 0,0,0,8,12,1,9,1,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,105,109,112,111,114,116,101,114, @@ -2648,7 +2648,7 @@ const unsigned char _Py_M__importlib[] = { 114,121,114,25,1,0,0,114,173,0,0,0,114,174,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, 244,11,0,0,0,95,103,101,116,95,108,111,97,100,101,114, - 15,5,0,0,115,28,0,0,0,0,5,6,1,13,1,21, + 16,5,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,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, @@ -2671,7 +2671,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,40,5,0,0,0,114,195,0,0,0,114,156,0,0, 0,114,35,0,0,0,114,173,0,0,0,114,31,1,0,0, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 197,0,0,0,42,5,0,0,115,16,0,0,0,0,4,12, + 197,0,0,0,43,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,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,40,10,0,0,0,114,56,0, @@ -2679,7 +2679,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,201,0,0,0,114,22,1,0,0,114,27,1,0,0, 114,28,1,0,0,114,32,1,0,0,114,197,0,0,0,40, 1,0,0,0,114,69,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,21,1,0,0,225,4,0, + 0,0,0,114,5,0,0,0,114,21,1,0,0,226,4,0, 0,115,14,0,0,0,16,2,6,2,18,8,18,17,18,17, 18,27,3,1,114,21,1,0,0,99,1,0,0,0,0,0, 0,0,1,0,0,0,3,0,0,0,66,0,0,0,115,110, @@ -2728,7 +2728,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,83,40,1,0,0,0,78,114,4,0,0,0,40,2, 0,0,0,114,22,0,0,0,114,0,1,0,0,40,1,0, 0,0,114,173,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,2,1,0,0,75,5,0,0,115,2,0,0,0,6, + 0,114,2,1,0,0,76,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,95,95,105,110,105,116,95,95,46,60,108,111,99,97,108, 115,62,46,60,103,101,110,101,120,112,114,62,114,104,0,0, @@ -2742,7 +2742,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,114,35,0,0,0,116,7,0,0,0,100,101,116,97, 105,108,115,116,7,0,0,0,108,111,97,100,101,114,115,114, 115,0,0,0,114,4,0,0,0,40,1,0,0,0,114,173, - 0,0,0,114,5,0,0,0,114,79,0,0,0,69,5,0, + 0,0,0,114,5,0,0,0,114,79,0,0,0,70,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,70,105,108,101,70, 105,110,100,101,114,46,95,95,105,110,105,116,95,95,99,1, @@ -2754,7 +2754,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,78,114,126,0,0,0,40,1,0,0,0,114,35, 1,0,0,40,1,0,0,0,114,78,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,114,22,1,0, - 0,83,5,0,0,115,2,0,0,0,0,2,117,28,0,0, + 0,84,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,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,67,0, @@ -2817,7 +2817,7 @@ const unsigned char _Py_M__importlib[] = { 114,173,0,0,0,116,13,0,0,0,105,110,105,116,95,102, 105,108,101,110,97,109,101,116,9,0,0,0,102,117,108,108, 95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,169,0,0,0,89,5,0,0,115,66,0, + 5,0,0,0,114,169,0,0,0,90,5,0,0,115,66,0, 0,0,0,3,6,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,1,22,1,10,1,15,1,12,1,26,4, @@ -2855,7 +2855,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,40,2,0,0,0,114,22,0,0,0,116,2,0,0, 0,102,110,114,4,0,0,0,114,4,0,0,0,114,5,0, 0,0,245,9,0,0,0,60,115,101,116,99,111,109,112,62, - 162,5,0,0,115,2,0,0,0,9,0,117,41,0,0,0, + 163,5,0,0,115,2,0,0,0,9,0,117,41,0,0,0, 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, 95,99,97,99,104,101,46,60,108,111,99,97,108,115,62,46, 60,115,101,116,99,111,109,112,62,78,40,17,0,0,0,114, @@ -2874,7 +2874,7 @@ const unsigned char _Py_M__importlib[] = { 110,116,101,110,116,115,114,18,1,0,0,114,66,0,0,0, 114,12,1,0,0,114,0,1,0,0,116,8,0,0,0,110, 101,119,95,110,97,109,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,39,1,0,0,133,5,0,0,115, + 0,114,5,0,0,0,114,39,1,0,0,134,5,0,0,115, 34,0,0,0,0,2,9,1,3,1,19,1,22,3,11,3, 18,1,18,7,9,1,13,1,24,1,6,1,27,2,6,1, 17,1,9,1,18,1,117,22,0,0,0,70,105,108,101,70, @@ -2916,7 +2916,7 @@ const unsigned char _Py_M__importlib[] = { 0,108,111,97,100,101,114,95,100,101,116,97,105,108,115,114, 4,0,0,0,114,5,0,0,0,244,24,0,0,0,112,97, 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,174,5,0,0,115,6,0,0,0,0, + 70,105,110,100,101,114,175,5,0,0,115,6,0,0,0,0, 2,12,1,21,1,117,54,0,0,0,70,105,108,101,70,105, 110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,60, 108,111,99,97,108,115,62,46,112,97,116,104,95,104,111,111, @@ -2925,7 +2925,7 @@ const unsigned char _Py_M__importlib[] = { 45,1,0,0,114,46,1,0,0,114,4,0,0,0,40,2, 0,0,0,114,195,0,0,0,114,45,1,0,0,114,5,0, 0,0,244,9,0,0,0,112,97,116,104,95,104,111,111,107, - 164,5,0,0,115,4,0,0,0,0,10,21,6,117,20,0, + 165,5,0,0,115,4,0,0,0,0,10,21,6,117,20,0, 0,0,70,105,108,101,70,105,110,100,101,114,46,112,97,116, 104,95,104,111,111,107,99,1,0,0,0,0,0,0,0,1, 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, @@ -2934,7 +2934,7 @@ const unsigned char _Py_M__importlib[] = { 105,110,100,101,114,40,123,33,114,125,41,40,2,0,0,0, 114,46,0,0,0,114,35,0,0,0,40,1,0,0,0,114, 78,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,90,0,0,0,182,5,0,0,115,2,0,0, + 0,0,0,114,90,0,0,0,183,5,0,0,115,2,0,0, 0,0,1,117,19,0,0,0,70,105,108,101,70,105,110,100, 101,114,46,95,95,114,101,112,114,95,95,78,40,13,0,0, 0,114,56,0,0,0,114,55,0,0,0,114,57,0,0,0, @@ -2943,7 +2943,7 @@ const unsigned char _Py_M__importlib[] = { 1,0,0,114,201,0,0,0,114,47,1,0,0,114,90,0, 0,0,40,1,0,0,0,114,69,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,114,33,1,0,0, - 60,5,0,0,115,16,0,0,0,16,7,6,2,12,14,12, + 61,5,0,0,115,16,0,0,0,16,7,6,2,12,14,12, 4,6,2,12,44,12,31,18,18,114,33,1,0,0,99,1, 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,66, 0,0,0,115,50,0,0,0,124,0,0,69,101,0,0,90, @@ -2962,7 +2962,7 @@ const unsigned char _Py_M__importlib[] = { 97,0,0,0,244,12,0,0,0,97,99,113,117,105,114,101, 95,108,111,99,107,40,1,0,0,0,114,78,0,0,0,114, 4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,9, - 0,0,0,95,95,101,110,116,101,114,95,95,192,5,0,0, + 0,0,0,95,95,101,110,116,101,114,95,95,193,5,0,0, 115,2,0,0,0,0,2,117,28,0,0,0,95,73,109,112, 111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95, 95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,0, @@ -2978,14 +2978,14 @@ const unsigned char _Py_M__importlib[] = { 0,0,101,120,99,95,118,97,108,117,101,116,13,0,0,0, 101,120,99,95,116,114,97,99,101,98,97,99,107,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,244,8,0,0, - 0,95,95,101,120,105,116,95,95,196,5,0,0,115,2,0, + 0,95,95,101,120,105,116,95,95,197,5,0,0,115,2,0, 0,0,0,2,117,27,0,0,0,95,73,109,112,111,114,116, 76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,120, 105,116,95,95,78,40,6,0,0,0,114,56,0,0,0,114, 55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,50, 1,0,0,114,51,1,0,0,40,1,0,0,0,114,69,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,48,1,0,0,188,5,0,0,115,6,0,0,0,16, + 0,114,48,1,0,0,189,5,0,0,115,6,0,0,0,16, 2,6,2,12,4,114,48,1,0,0,99,3,0,0,0,0, 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, 91,0,0,0,124,1,0,106,0,0,100,1,0,124,2,0, @@ -3009,7 +3009,7 @@ const unsigned char _Py_M__importlib[] = { 101,118,101,108,116,4,0,0,0,98,105,116,115,116,4,0, 0,0,98,97,115,101,114,4,0,0,0,114,4,0,0,0, 114,5,0,0,0,244,13,0,0,0,95,114,101,115,111,108, - 118,101,95,110,97,109,101,201,5,0,0,115,10,0,0,0, + 118,101,95,110,97,109,101,202,5,0,0,115,10,0,0,0, 0,2,22,1,18,1,15,1,10,1,114,54,1,0,0,99, 2,0,0,0,0,0,0,0,4,0,0,0,11,0,0,0, 67,0,0,0,115,138,0,0,0,116,0,0,106,1,0,115, @@ -3032,7 +3032,7 @@ const unsigned char _Py_M__importlib[] = { 114,66,0,0,0,114,35,0,0,0,114,25,1,0,0,114, 173,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, 0,0,0,244,12,0,0,0,95,102,105,110,100,95,109,111, - 100,117,108,101,210,5,0,0,115,20,0,0,0,0,2,9, + 100,117,108,101,211,5,0,0,115,20,0,0,0,0,2,9, 1,19,1,16,1,10,1,24,1,12,2,15,1,4,2,21, 2,114,56,1,0,0,99,3,0,0,0,0,0,0,0,4, 0,0,0,4,0,0,0,67,0,0,0,115,194,0,0,0, @@ -3070,7 +3070,7 @@ const unsigned char _Py_M__importlib[] = { 114,66,0,0,0,114,52,1,0,0,114,53,1,0,0,114, 175,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, 0,0,0,244,13,0,0,0,95,115,97,110,105,116,121,95, - 99,104,101,99,107,227,5,0,0,115,24,0,0,0,0,2, + 99,104,101,99,107,228,5,0,0,115,24,0,0,0,0,2, 15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1, 6,2,27,1,19,1,114,59,1,0,0,117,20,0,0,0, 78,111,32,109,111,100,117,108,101,32,110,97,109,101,100,32, @@ -3129,7 +3129,7 @@ const unsigned char _Py_M__importlib[] = { 114,236,0,0,0,114,145,0,0,0,114,4,0,0,0,114, 4,0,0,0,114,5,0,0,0,244,23,0,0,0,95,102, 105,110,100,95,97,110,100,95,108,111,97,100,95,117,110,108, - 111,99,107,101,100,246,5,0,0,115,76,0,0,0,0,1, + 111,99,107,101,100,247,5,0,0,115,76,0,0,0,0,1, 6,1,19,1,6,1,15,1,16,2,15,1,11,2,13,1, 3,1,13,1,13,1,22,1,26,1,15,1,12,1,27,3, 9,1,9,1,15,2,13,1,19,2,13,1,6,2,13,1, @@ -3150,7 +3150,7 @@ const unsigned char _Py_M__importlib[] = { 1,0,0,114,87,0,0,0,40,3,0,0,0,114,66,0, 0,0,114,62,1,0,0,114,73,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,244,14,0,0,0, - 95,102,105,110,100,95,97,110,100,95,108,111,97,100,40,6, + 95,102,105,110,100,95,97,110,100,95,108,111,97,100,41,6, 0,0,115,14,0,0,0,0,2,3,1,16,2,11,1,10, 1,3,1,17,2,114,64,1,0,0,99,3,0,0,0,0, 0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115, @@ -3196,7 +3196,7 @@ const unsigned char _Py_M__importlib[] = { 40,5,0,0,0,114,66,0,0,0,114,52,1,0,0,114, 53,1,0,0,114,145,0,0,0,114,140,0,0,0,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,114,65,1, - 0,0,53,6,0,0,115,26,0,0,0,0,9,16,1,12, + 0,0,54,6,0,0,115,26,0,0,0,0,9,16,1,12, 1,21,1,10,1,15,1,13,1,13,1,12,1,10,2,15, 1,21,1,10,1,114,65,1,0,0,99,3,0,0,0,0, 0,0,0,6,0,0,0,17,0,0,0,67,0,0,0,115, @@ -3244,7 +3244,7 @@ const unsigned char _Py_M__importlib[] = { 111,109,95,110,97,109,101,114,236,0,0,0,114,4,0,0, 0,114,4,0,0,0,114,5,0,0,0,244,16,0,0,0, 95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,116, - 77,6,0,0,115,34,0,0,0,0,10,15,1,12,1,12, + 78,6,0,0,115,34,0,0,0,0,10,15,1,12,1,12, 1,13,1,15,1,22,1,13,1,15,1,21,1,3,1,17, 1,18,6,18,1,15,1,9,1,32,1,114,71,1,0,0, 99,1,0,0,0,0,0,0,0,2,0,0,0,2,0,0, @@ -3270,7 +3270,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,40,2,0,0,0,244,7,0,0,0,103,108,111,98, 97,108,115,114,52,1,0,0,114,4,0,0,0,114,4,0, 0,0,114,5,0,0,0,244,17,0,0,0,95,99,97,108, - 99,95,95,95,112,97,99,107,97,103,101,95,95,111,6,0, + 99,95,95,95,112,97,99,107,97,103,101,95,95,112,6,0, 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, 25,1,114,73,1,0,0,99,0,0,0,0,0,0,0,0, 3,0,0,0,3,0,0,0,67,0,0,0,115,55,0,0, @@ -3293,7 +3293,7 @@ const unsigned char _Py_M__importlib[] = { 0,116,10,0,0,0,101,120,116,101,110,115,105,111,110,115, 116,6,0,0,0,115,111,117,114,99,101,116,8,0,0,0, 98,121,116,101,99,111,100,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,215,0,0,0,126,6,0,0, + 0,0,114,5,0,0,0,114,215,0,0,0,127,6,0,0, 115,8,0,0,0,0,5,18,1,12,1,12,1,114,215,0, 0,0,99,5,0,0,0,0,0,0,0,9,0,0,0,5, 0,0,0,67,0,0,0,115,227,0,0,0,124,4,0,100, @@ -3350,7 +3350,7 @@ const unsigned char _Py_M__importlib[] = { 116,8,0,0,0,103,108,111,98,97,108,115,95,114,52,1, 0,0,116,7,0,0,0,99,117,116,95,111,102,102,114,4, 0,0,0,114,4,0,0,0,114,5,0,0,0,244,10,0, - 0,0,95,95,105,109,112,111,114,116,95,95,137,6,0,0, + 0,0,95,95,105,109,112,111,114,116,95,95,138,6,0,0, 115,26,0,0,0,0,11,12,1,15,2,24,1,12,1,18, 1,6,3,12,1,23,1,6,1,4,4,35,3,40,2,114, 77,1,0,0,99,2,0,0,0,0,0,0,0,16,0,0, @@ -3429,7 +3429,7 @@ const unsigned char _Py_M__importlib[] = { 0,0,0,78,40,1,0,0,0,114,31,0,0,0,40,2, 0,0,0,114,22,0,0,0,114,118,0,0,0,114,4,0, 0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,0, - 0,210,6,0,0,115,2,0,0,0,6,0,117,25,0,0, + 0,211,6,0,0,115,2,0,0,0,6,0,117,25,0,0, 0,95,115,101,116,117,112,46,60,108,111,99,97,108,115,62, 46,60,103,101,110,101,120,112,114,62,114,71,0,0,0,117, 30,0,0,0,105,109,112,111,114,116,108,105,98,32,114,101, @@ -3468,7 +3468,7 @@ const unsigned char _Py_M__importlib[] = { 102,95,109,111,100,117,108,101,116,13,0,0,0,119,105,110, 114,101,103,95,109,111,100,117,108,101,114,4,0,0,0,114, 4,0,0,0,114,5,0,0,0,244,6,0,0,0,95,115, - 101,116,117,112,173,6,0,0,115,102,0,0,0,0,9,6, + 101,116,117,112,174,6,0,0,115,102,0,0,0,0,9,6, 1,6,2,12,1,9,2,6,2,12,1,28,1,15,1,24, 1,15,1,12,1,15,1,22,2,13,1,13,1,15,1,18, 2,13,1,20,2,33,1,19,2,31,1,10,1,15,1,13, @@ -3498,7 +3498,7 @@ const unsigned char _Py_M__importlib[] = { 0,114,84,1,0,0,114,85,1,0,0,116,17,0,0,0, 115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114, 115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 244,8,0,0,0,95,105,110,115,116,97,108,108,249,6,0, + 244,8,0,0,0,95,105,110,115,116,97,108,108,250,6,0, 0,115,16,0,0,0,0,2,13,1,9,1,28,1,16,1, 16,1,15,1,19,1,114,87,1,0,0,40,3,0,0,0, 117,3,0,0,0,119,105,110,114,1,0,0,0,114,2,0, @@ -3533,7 +3533,7 @@ const unsigned char _Py_M__importlib[] = { 101,62,8,0,0,0,115,140,0,0,0,6,21,6,3,12, 13,12,10,12,9,12,6,12,12,12,10,12,6,12,7,15, 22,12,8,15,3,12,12,6,2,6,3,22,4,19,68,19, - 23,12,19,12,20,12,109,22,1,18,2,6,2,9,2,9, + 23,12,19,12,20,12,110,22,1,18,2,6,2,9,2,9, 1,9,2,15,27,12,23,12,21,12,12,18,8,12,13,12, 11,12,55,12,18,12,11,12,11,12,13,21,55,21,12,18, 12,19,57,19,54,19,50,19,34,22,132,19,29,25,43,25, diff --git a/Python/symtable.c b/Python/symtable.c index b9ca615721b..056c6c28585 100644 --- a/Python/symtable.c +++ b/Python/symtable.c @@ -77,6 +77,7 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block, ste->ste_child_free = 0; ste->ste_generator = 0; ste->ste_returns_value = 0; + ste->ste_needs_class_closure = 0; if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0) goto fail; @@ -514,13 +515,10 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags, Note that the current block's free variables are included in free. That's safe because no name can be free and local in the same scope. - - The 'restricted' argument may be set to a string to restrict the analysis - to the one variable whose name equals that string (e.g. "__class__"). */ static int -analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) +analyze_cells(PyObject *scopes, PyObject *free) { PyObject *name, *v, *v_cell; int success = 0; @@ -537,9 +535,6 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) continue; if (!PySet_Contains(free, name)) continue; - if (restricted != NULL && - PyUnicode_CompareWithASCIIString(name, restricted)) - continue; /* Replace LOCAL with CELL for this name, and remove from free. It is safe to replace the value of name in the dict, because it will not cause a resize. @@ -555,6 +550,20 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted) return success; } +static int +drop_class_free(PySTEntryObject *ste, PyObject *free) +{ + int res; + if (!GET_IDENTIFIER(__class__)) + return 0; + res = PySet_Discard(free, __class__); + if (res < 0) + return 0; + if (res) + ste->ste_needs_class_closure = 1; + return 1; +} + /* Check for illegal statements in unoptimized namespaces */ static int check_unoptimized(const PySTEntryObject* ste) { @@ -785,7 +794,6 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, /* Special-case __class__ */ if (!GET_IDENTIFIER(__class__)) goto error; - assert(PySet_Contains(local, __class__) == 1); if (PySet_Add(newbound, __class__) < 0) goto error; } @@ -818,11 +826,9 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free, Py_DECREF(temp); /* Check if any local variables must be converted to cell variables */ - if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree, - NULL)) + if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree)) goto error; - else if (ste->ste_type == ClassBlock && !analyze_cells(scopes, newfree, - "__class__")) + else if (ste->ste_type == ClassBlock && !drop_class_free(ste, newfree)) goto error; /* Records the results of the analysis in the symbol table entry */ if (!update_symbols(ste->ste_symbols, scopes, bound, newfree, @@ -1179,9 +1185,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s) if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock, (void *)s, s->lineno, s->col_offset)) VISIT_QUIT(st, 0); - if (!GET_IDENTIFIER(__class__) || - !symtable_add_def(st, __class__, DEF_LOCAL) || - !GET_IDENTIFIER(__locals__) || + if (!GET_IDENTIFIER(__locals__) || !symtable_add_def(st, __locals__, DEF_PARAM)) { symtable_exit_block(st, s); VISIT_QUIT(st, 0);