diff --git a/.efrocachemap b/.efrocachemap
index 78116cb7..82a8a610 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -942,8 +942,8 @@
"assets/build/ba_data/models/zoeUpperArm.bob": "https://files.ballistica.net/cache/ba1/99/38/b7694cae0804260eeb337aa1676a",
"assets/build/ba_data/models/zoeUpperLeg.bob": "https://files.ballistica.net/cache/ba1/83/4f/28b2202d0109fa93272c0b09fa2d",
"assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130",
- "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/27/4d/9039ffb4ca5b8110c8f60ad9f1be",
- "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/1f/8b/c96eb78c4b648a6c64c7f41c4fe7",
+ "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/26/a1/b771d51fc1cc475cf1f44f9d43d2",
+ "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d",
"assets/build/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/3e/aa/d7fcfc4707ad19a6964d72654b82",
"assets/build/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/f4/29/cd8c7f5a2296d8f1715ad49b5797",
"assets/build/ba_data/python-site-packages/yaml/cyaml.py": "https://files.ballistica.net/cache/ba1/b4/98/dcdd4c31e2ff2c7a938170694020",
@@ -955,9 +955,9 @@
"assets/build/ba_data/python-site-packages/yaml/nodes.py": "https://files.ballistica.net/cache/ba1/e5/f1/1d2e0edb5460dff0ebb10a92fe24",
"assets/build/ba_data/python-site-packages/yaml/parser.py": "https://files.ballistica.net/cache/ba1/c0/a6/e94c7a3f8f4f08803f68f9387731",
"assets/build/ba_data/python-site-packages/yaml/reader.py": "https://files.ballistica.net/cache/ba1/0d/58/9196a3104da22ed15afe27f67387",
- "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/95/90/c33c15a683b8d5de614d15031818",
- "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/8c/fc/fe9be1f19e7b648822029c0dc946",
- "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/58/be/e6e039c64bf30d0f13aa4d02e2cb",
+ "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/81/c0/f24b6b2f2c777f9467bd24aa2789",
+ "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/e6/98/e6145dd5cfebbc456fb3881ce523",
+ "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/de/13/75284ee45274f24637d9c79bd0cb",
"assets/build/ba_data/python-site-packages/yaml/serializer.py": "https://files.ballistica.net/cache/ba1/19/a9/f996e312d2ca2d4cb974bcc4f5bc",
"assets/build/ba_data/python-site-packages/yaml/tokens.py": "https://files.ballistica.net/cache/ba1/93/58/d4c7731a1b991391782441f2ba8e",
"assets/build/ba_data/textures/achievementBoxer.dds": "https://files.ballistica.net/cache/ba1/26/16/f3926c9f3aeb22efa0d452daa6c0",
@@ -2566,123 +2566,124 @@
"assets/build/ba_data/textures/zoeIcon_preview.png": "https://files.ballistica.net/cache/ba1/e2/af/ab381c9d7242aedf8535fc90252f",
"assets/build/pylib-android/__future__.py": "https://files.ballistica.net/cache/ba1/80/bf/b80a51b6855fbbc2f19773334c68",
"assets/build/pylib-android/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/18/38/a9706423d7445928a1c07345b100",
+ "assets/build/pylib-android/_aix_support.py": "https://files.ballistica.net/cache/ba1/39/0c/1c9160bcc27e235d50cc1148efee",
"assets/build/pylib-android/_bootlocale.py": "https://files.ballistica.net/cache/ba1/42/c3/38a2d6f5e2467c1cab04a024c2ca",
- "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/5d/e8/8af7f48ff8e0cf88e87339221869",
+ "assets/build/pylib-android/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/bc/ce/d576eeb751cae56049dc067454fa",
+ "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/8c/9f/9e922a064c6191378bdee54f34b3",
"assets/build/pylib-android/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/03/70/f2d2ed965337f8ed80f6fffb37e1",
"assets/build/pylib-android/_compression.py": "https://files.ballistica.net/cache/ba1/93/7f/56c3fd789058399b898c5c527b92",
- "assets/build/pylib-android/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/5b/a5/82c6ed2ef16974f8cfd5ee2e11f6",
"assets/build/pylib-android/_markupbase.py": "https://files.ballistica.net/cache/ba1/a5/5e/6ad43bfbcd054529b852fa9d9919",
- "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/1a/dd/18c02bae9dd4e2b651071dd0e606",
+ "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/19/10/b2eeaf44e153de1cedba97bd5051",
"assets/build/pylib-android/_py_abc.py": "https://files.ballistica.net/cache/ba1/5d/06/d6095f475b0d26f707d3d7484080",
"assets/build/pylib-android/_pydecimal.py": "https://files.ballistica.net/cache/ba1/a5/4c/6fb8db34dfeb6c44bf18d555970d",
- "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/30/f3/9c14ceae8041894ae6914467ba66",
+ "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/47/02/ffbf1575c6b449408f8f42d31333",
"assets/build/pylib-android/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/6d/7a/d76775d8f9d27c45135ca654dfd0",
- "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/2d/6d/ec0a63b650f5c5fdaf7a1b65ae8f",
+ "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/03/b9/20bbd93982e9d620d42cacd1f4a2",
"assets/build/pylib-android/_threading_local.py": "https://files.ballistica.net/cache/ba1/da/4d/144f886b39ebc097fdcea22eecc8",
- "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/5a/9d/765a6159b6db54bbffc249e35833",
- "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/46/99/e17cba0561b17a01327a35cd1aa6",
- "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/8a/d6/25bd39b0581236a85b096ba3fe9d",
- "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/83/cf/9d1698d68e0e260e6bbefec5a516",
- "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/cd/3b/9fdf463eacafdba271d8fe1d9b2d",
- "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/c7/5b/fa7fdcd6fe651e33b42e57ef827d",
- "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/5e/b1/f69db224de08b5e119f5c0f425a8",
- "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/37/de/1740d5e10a554f64af0a2ddc4659",
+ "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/51/e9/e3d953fd714d8b74c65b708529d7",
+ "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/76/7f/fd3c1563b90c10a38a3b928a4561",
+ "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/e4/58/a75af0c597af1ed6a69b0d0408f3",
+ "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/bc/5c/f8951b7abdac55a1a32d74b2fe50",
+ "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/3f/f5/1c9d4af0fc412ddf1bda25f71a83",
+ "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/11/a5/3bb16498856560ba19c04de3f8b7",
+ "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/d6/a8/6fc59418c10885c853214296ed0f",
+ "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/67/2e/d4b9d05e7bcc794891d36d72f374",
"assets/build/pylib-android/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/00/05/038811ebbd5ac847aaf99cd8f2f9",
- "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/80/d1/0975e5cb364d63f1f85136bc4d80",
+ "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/06/81/3de85c867aeb41289899dae318ba",
"assets/build/pylib-android/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/89/ee/3f980b3d7b480c7fe3d34ff876f5",
"assets/build/pylib-android/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/72/c7/ccf47dbfa076fdf5dd38474a18dc",
"assets/build/pylib-android/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/f0/b8/3f75f12f1851216b9a16772dfa63",
"assets/build/pylib-android/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/b6/63/66f781190cbd10a134616e67b516",
"assets/build/pylib-android/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/72/cd/f838323eebe2eeb8f5ea19e5cebe",
- "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/a7/1e/c69f462b1a03515672da486b7a6a",
+ "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/7e/f3/ceda680f5774ed662e390ae921b6",
"assets/build/pylib-android/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/aa/89/66db5cb3f71048a541224585f7fa",
"assets/build/pylib-android/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/ff/c2/2be0f7aa8dc71aa3a7cee83ed5c7",
- "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/f1/da/2eff642e6a966b374b29361dfbb2",
- "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/07/0b/a37203e779cbd3b3fdf825a36849",
+ "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/12/40/3addb145116d4e92d000f98194c9",
+ "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/6e/c9/538a1d250e50f50e55ac69c52e35",
"assets/build/pylib-android/asyncio/log.py": "https://files.ballistica.net/cache/ba1/da/7f/235e1251f8838a239dd3ec9e78c3",
- "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ae/7f/8b19b4c9d52569b3bdd311e8c799",
+ "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/2f/97/dae8fa67cd41720ced451008903d",
"assets/build/pylib-android/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/0d/2f/e3e6c48d73836172a211a6c39e68",
- "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/1c/69/6d73ee2286d3dbce70990a8ff174",
- "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/1b/f3/d9efb6ae310d983d86bb5de9d054",
- "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/d8/21/a266891b38ae68414a3c1b6b3c77",
- "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ce/51/b4dc2c5750d26233aabbbfec3946",
+ "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/87/f8/59d89a44c83648f33bea5bd227de",
+ "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/f1/d0/413dbcfc7ab91c3ae994a9293393",
+ "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/c0/0f/e91ef4410b579485267434c76135",
+ "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ca/7c/7f8716eab3ad1ba5fea281191348",
"assets/build/pylib-android/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/f5/44/45851798434a9265934b4bb83368",
"assets/build/pylib-android/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/92/0c/884950c0c3a32bc5d2b763ca0044",
"assets/build/pylib-android/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/5f/44/b98545e4c3c4c178f8e6d1615413",
- "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/bf/1a/caa31af401c2cc53c5f01b750c80",
+ "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/5d/80/66b7034f9d2251cdb392c2d441f7",
+ "assets/build/pylib-android/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/86/be/92839ce16818b1b99703722fbfb7",
"assets/build/pylib-android/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/58/72/582cdbbc0857f836dc8c4edbf036",
"assets/build/pylib-android/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/52/c8/e4d2abe8aaccd35c8f79d5b77431",
- "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/84/8b/185c2457814e6ca8e8688bca9c32",
- "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/4b/1a/1b264ab96fcca89e3eb8fe2614de",
+ "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7c/3a/6b387c2ccf1cdee0f2e9f70cba5c",
+ "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/7e/62/f3ff97fc2327e3721319f9fed5dc",
"assets/build/pylib-android/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/2d/e4/dbd2379dd123a69aae5aa15ae6c2",
- "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/a7/5c/f528090ab4472aff3c8798cf42c9",
- "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/4f/23/c5419203b2ccd1ae27fd49d2cc56",
- "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/ae/3f/acdf9e655546d96a28c484506fe9",
- "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/f1/dd/52f057bf1cd0eb01f4f7ae65bab7",
- "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/e3/4e/c40a30927372b6b745aec7954d0d",
- "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/8d/d6/d0ff69f6690ab56e45f7277abec0",
- "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/88/c3/5db4369b421e58fd76e20d9d6006",
+ "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/3a/30/852801d56e50eb8542399bb88ddb",
+ "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/00/7f/66fcd92eefbc601aac11a99958a6",
+ "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/a0/58/9e40fcb457a4088bbaa52f1d11f5",
+ "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/4b/e7/63c6bfa21977b4167847714df8f2",
+ "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/5f/7d/0658f581d095e98da05a4e69526d",
+ "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/27/9f/581d95a46fee8d4391e22906e7c4",
+ "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/c2/f9/c4bdc9b8caf07e4f005b01c42187",
"assets/build/pylib-android/calendar.py": "https://files.ballistica.net/cache/ba1/52/59/c3f74ff2b6e664611af5f319f125",
- "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/61/ce/9797194be01655e63ab2bf04db74",
+ "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/37/ed/4b4511a9ba0149265b8e54a8c0c2",
"assets/build/pylib-android/cgitb.py": "https://files.ballistica.net/cache/ba1/44/fd/df9a22db6689da108e526e794e62",
"assets/build/pylib-android/chunk.py": "https://files.ballistica.net/cache/ba1/f6/fe/3c43d1dc84ee74b8a170c61271a3",
"assets/build/pylib-android/cmd.py": "https://files.ballistica.net/cache/ba1/f0/d9/8cec4bcbbfd195d46c3ad637df71",
"assets/build/pylib-android/code.py": "https://files.ballistica.net/cache/ba1/7a/a4/ee660f11ad995354a3b21efbfb1c",
- "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/46/7d/c9abbb72640e0270d05373ca097d",
- "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/4a/36/f4618c8f8239611208f9fa60d677",
- "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/20/79/d937c7f2b0121cda43113792991b",
- "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/29/45/a03469c0f5eb61d823b277d547ce",
+ "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/e0/79/8b6dc0aaec7e5cf8a6a1e4240589",
+ "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/77/32/e76951f85328659e11f528f5c9b1",
+ "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/53/9b/0aea4ac41c020b051cb22e770125",
+ "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/f3/59/731e8f57c99391bcb31da8916e19",
"assets/build/pylib-android/colorsys.py": "https://files.ballistica.net/cache/ba1/d6/3b/b932055a535b017694e91296168c",
- "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/e5/57/2b92b857953e59824989ede82453",
+ "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/0b/80/a5a17eb2090a3cf316bca074ac2d",
"assets/build/pylib-android/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/37/3e/87f9ab4111608e0442bc82ff572f",
"assets/build/pylib-android/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/0a/eb/2954f0e71c4a1e71db5c13548aec",
- "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/fc/07/2434cb1efcfdb8e396d2673d87e3",
- "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/a7/6e/a824dd0ccc5c3358e146fa4a143e",
- "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/b3/8ff0e8ddfd8ef4c2b65789015c0d",
- "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/a2/cb/c077f4497d47011a41fb761da7e6",
- "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/9b/d5/72f4ba522348c8680098a35fed99",
+ "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/b1/82/05c05bd5c9380f474f0cf71226e9",
+ "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/ab/d3/505d91ad1cc1b32e993db80b056a",
+ "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/41/a0/be5b131d8b9637e24c53b3d4d941",
+ "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/9c/f1/4f2aa888868fbedfbb0b1ea69697",
+ "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/46/42/98646a3bef36f2d81c3d19751cf5",
"assets/build/pylib-android/contextvars.py": "https://files.ballistica.net/cache/ba1/ed/ff/2f1089520caf4910564799a71d33",
"assets/build/pylib-android/copy.py": "https://files.ballistica.net/cache/ba1/2a/08/2626c3ca9b69eeea292688b30d87",
- "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/51/04/65c5689a2508a440fac7c453d907",
- "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/a0/da/1dbb9eefae96fdac2bf0f2aed3a9",
+ "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/3b/a6/aace95b2ea3f1a717217f013147a",
+ "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/bf/26/6a8ef29965b7a22c9a5ad042b8b0",
"assets/build/pylib-android/csv.py": "https://files.ballistica.net/cache/ba1/4e/8b/5ec41815afbc80e90562abf06b28",
- "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/e3/e2/3ef58f0ffbf1e44f2290e7afb507",
+ "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/71/ad/62f870b48def255b2904695874b9",
"assets/build/pylib-android/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/7b/ab/15a8d673206dbd15b7803f83ff58",
"assets/build/pylib-android/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/4c/82/46e7f99faf6d1fac55192c5d06e1",
"assets/build/pylib-android/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/44/d7/a915d5da7e8ef1030b43bb9b51ab",
- "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/ac/b9/6cd503c12b34f6e72d90ca811910",
+ "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/f9/66/e601b611dac985d7a89b84e739ba",
"assets/build/pylib-android/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/70/15/1df06874f788afb7b6742a5812a7",
"assets/build/pylib-android/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/86/80/861e32730cec812366d7d06f6185",
"assets/build/pylib-android/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c5/37/5bc64177f2b03f1b240712b330d5",
"assets/build/pylib-android/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/48/c4/069f51da9b065dad73b199acb71b",
- "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/8a/96/a0fc5582125f7ebd8f3df4c15ebb",
+ "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/0e/8e/5e9ad5cbe8d8e09a61e5c186ccfb",
"assets/build/pylib-android/curses/ascii.py": "https://files.ballistica.net/cache/ba1/d9/f8/0a6587dae44d1694145b0dc96bc1",
"assets/build/pylib-android/curses/has_key.py": "https://files.ballistica.net/cache/ba1/a0/10/afbfbd5688090da7ea41e933174b",
"assets/build/pylib-android/curses/panel.py": "https://files.ballistica.net/cache/ba1/42/0f/580d5d6de90a64ade37f0a8e4696",
"assets/build/pylib-android/curses/textpad.py": "https://files.ballistica.net/cache/ba1/a9/3f/ac729e39c1c9fcecd8e3525c7079",
- "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/97/c8/24628bf4207b0ee2e29c1cd63fcf",
- "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/4b/89/2740b22a3597dab5c0330ac7c873",
+ "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/83/99/bcc67a14754749cc642d39501b17",
+ "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/e3/8a/1b743748792565d1f06cc091bdf3",
"assets/build/pylib-android/decimal.py": "https://files.ballistica.net/cache/ba1/92/94/b8be378718b3ede8f05f07aa257b",
- "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/bb/cf/6db21f4ed1982a8ee1337e12a8c1",
+ "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/f9/a1/b70c1219881180dc79b788e0f944",
"assets/build/pylib-android/dis.py": "https://files.ballistica.net/cache/ba1/7a/6d/8e0820eb6e975bc167a722d30b42",
- "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/f7/33/cce48fd34ce6f6054e40c338c3ca",
- "assets/build/pylib-android/dummy_threading.py": "https://files.ballistica.net/cache/ba1/20/2f/ec8e68634908312148b53a5dfd4c",
+ "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/15/e2/3f23edc4eb1292aae2efae3dd23b",
"assets/build/pylib-android/email/__init__.py": "https://files.ballistica.net/cache/ba1/2b/f0/8c85ab15e7cdbdaa0e1705223012",
"assets/build/pylib-android/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/08/fa/de22bc96e1e332bbe1cf76162a1c",
"assets/build/pylib-android/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/2d/c8/cbec982a4900ba1c15ea815624d7",
- "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/e0/b3/b0167200b852c46e60116ba12740",
+ "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/c5/43/98a45ca46ee9948447cfc4a23966",
"assets/build/pylib-android/email/_policybase.py": "https://files.ballistica.net/cache/ba1/19/f9/844a8a848bc5670a810d06f0a6de",
"assets/build/pylib-android/email/base64mime.py": "https://files.ballistica.net/cache/ba1/6b/52/907171fcf7e3baf097a4d503d79c",
"assets/build/pylib-android/email/charset.py": "https://files.ballistica.net/cache/ba1/a0/ba/c0b3f8daa9769adb9ba291937736",
- "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/d6/da/4125ae899a328aa5a3ddccb81cde",
+ "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/de/89/2d4ea4cf8a5de335f1f8cb9336b9",
"assets/build/pylib-android/email/encoders.py": "https://files.ballistica.net/cache/ba1/7a/9c/eca8d9e60fa733457fc32facd2fe",
"assets/build/pylib-android/email/errors.py": "https://files.ballistica.net/cache/ba1/8c/69/09c2e89bad6d5619cd4758db6bdd",
"assets/build/pylib-android/email/feedparser.py": "https://files.ballistica.net/cache/ba1/98/6d/61c614d442ca8451320ca7fe4e86",
"assets/build/pylib-android/email/generator.py": "https://files.ballistica.net/cache/ba1/f6/2c/862c0a2aa12d0e1c0ce1ca305299",
"assets/build/pylib-android/email/header.py": "https://files.ballistica.net/cache/ba1/bb/cb/194570894c14063cd85ea2d8ab6a",
- "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/44/93/a6b7f9a32043296668473e21997e",
+ "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/a7/ba/ff572e4fa01850100bd81c198d7c",
"assets/build/pylib-android/email/iterators.py": "https://files.ballistica.net/cache/ba1/a5/02/2f56787a3fb91547c61284d7facd",
- "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/26/48/c2ba775069f07f9980dd7ba388dc",
+ "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/5d/5f/3a462d2034f763839e73f4286d85",
"assets/build/pylib-android/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/42/fb/835abe12a4e1e72a5d1711d12cde",
"assets/build/pylib-android/email/mime/application.py": "https://files.ballistica.net/cache/ba1/47/49/cb957a7a159b5f2259115b7ea27a",
"assets/build/pylib-android/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/67/1e/7ba0091888a55ada476f1300e686",
@@ -2695,9 +2696,9 @@
"assets/build/pylib-android/email/parser.py": "https://files.ballistica.net/cache/ba1/56/8f/cfad8593bd540c4c2d1b9ab9e133",
"assets/build/pylib-android/email/policy.py": "https://files.ballistica.net/cache/ba1/a9/f3/301e5f1e73bed7a7bfa4a113ab14",
"assets/build/pylib-android/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/aa/32/7c1d81e4b7b757020947292f4031",
- "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/c2/f9/e2479bbc1b5957383614e197daf3",
+ "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/1a/93/a810d9f240ad2bdfff06495cbc6c",
"assets/build/pylib-android/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/dc/1a/1120389aa62a70fd5a669cab1dfc",
- "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/4c/10/6d8dd88e91acce8b8ad99b2f3fdf",
+ "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6e/5c/2f911ed1bbeec1fce518171c32bc",
"assets/build/pylib-android/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/f6/30/d35b4c5d478856f618208177d679",
"assets/build/pylib-android/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/7f/03/88c0997433cffad3d142857389b8",
"assets/build/pylib-android/encodings/big5.py": "https://files.ballistica.net/cache/ba1/3c/a3/0310d813b4a6822b0affdec62f00",
@@ -2784,7 +2785,6 @@
"assets/build/pylib-android/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/0e/48/fc8cea0eb08e128d18afbd21bc40",
"assets/build/pylib-android/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/be/e2/98028955fa7784eabd731554df96",
"assets/build/pylib-android/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/4e/3d/c348df138dd892e764c653a5e3ad",
- "assets/build/pylib-android/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6a/d1/bb0368df7e95ca42a8fc484ca463",
"assets/build/pylib-android/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/1c/2e050fc360dc363d976321d0196b",
"assets/build/pylib-android/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/ce/05/72375c004b9fbce45e1ae2ed9fa3",
"assets/build/pylib-android/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/fb/60/2864afabbe0f4ef2d0da202b40d8",
@@ -2819,283 +2819,290 @@
"assets/build/pylib-android/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/c5/56/c3d98c0cb4cf569fb833ed919cc1",
"assets/build/pylib-android/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/f9/64/0107520eca9130ca870cec675bf0",
"assets/build/pylib-android/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/b4/3f/7369ee7aa1aa36b098c3b33ea31b",
- "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/17/fa/2c2e76ce86357e23a5adffd6139f",
- "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/54/d4/3d6d66bd7d4ee85407851fe986a0",
- "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/87/63/37392fb7eece4f1b010117205438",
- "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/d5/44/0a58d9161ae9d2409ae2477b5948",
+ "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/51/91/dfd36ad44d0d4d8ebd262fe03e7c",
+ "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/1d/e7/575bd68a5f66504bb071c66e0996",
+ "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/23/4f/13f958c4286a2a3cd46aed480572",
+ "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/79/a3/778dda2ff1d92a37aa3709ec141c",
"assets/build/pylib-android/formatter.py": "https://files.ballistica.net/cache/ba1/8d/5e/9b9d7451083fbae7ee678ad8f51e",
- "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/62/07/d18fee429386d6e1f3cfa42884e0",
- "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/ed/58/61631b6f7097f6e06531ba9c4f04",
- "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/e7/0b/2a93172c587fc0f2c71802885221",
+ "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/04/57/9ba7ff09b1829e3f35e681cc1879",
+ "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/15/f9/66c87baf6cd7be154d0b904a131a",
+ "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/51/dc/9da02d6e7f5671d36ad3026f86a3",
"assets/build/pylib-android/genericpath.py": "https://files.ballistica.net/cache/ba1/a4/d1/a132fc4c20d49468d9aee1667a18",
"assets/build/pylib-android/getopt.py": "https://files.ballistica.net/cache/ba1/5c/25/34e54811bd07a3b7a15e60c67094",
- "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/76/37/f0df6882db44ee701aea35e235bb",
- "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/30/f6/0cbdec6984d8bb4de4b8c12d3917",
- "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/9f/bb/02378daab858e94498b995d90e58",
- "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/7c/81/2b86114f572713719b00eebc4fe7",
- "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/ae/a3/4bffbb609e9da7c1dab02c9d1bc0",
+ "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/7f/27/2225631bb706fa77edbb0870f96d",
+ "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/06/75/330b5daf8b0c62599c1cb5d39e74",
+ "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/f2/af/eb70cb1127dcd41fb1a72e6a37e6",
+ "assets/build/pylib-android/graphlib.py": "https://files.ballistica.net/cache/ba1/3a/73/e3081c9d6aba74076485e9bb12a6",
+ "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/b9/97/e91d82e66b6cad3a263f040fe788",
+ "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/68/33/c264fd78e6abc89ad39ff884bcde",
"assets/build/pylib-android/heapq.py": "https://files.ballistica.net/cache/ba1/63/79/bb9abc2fb3665fffc59e588aba1f",
- "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/ce/4e/595b1539b0a8ea65e8c79afa6506",
+ "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/50/c9/441934e594015710288e7a9a9103",
"assets/build/pylib-android/html/__init__.py": "https://files.ballistica.net/cache/ba1/63/0b/9695269a02f0ec6d8b2b928d1f3f",
"assets/build/pylib-android/html/entities.py": "https://files.ballistica.net/cache/ba1/02/4d/e42a17593176e35ff5da8d720cf9",
- "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/c7/87/628a5a87855afbac3ebbd858e9a1",
- "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/04/78/a177368f7a363b832b7aa700a24e",
- "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/36/59/f5c4c2dfc97ef6a25e87791eb486",
+ "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/53/ef/baf9f793260ab1fd8064b7f76322",
+ "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/35/33/f3ec6b02d141465c75471b1915c1",
+ "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/32/58/b0ef08f75b43d8b9e89906272e63",
"assets/build/pylib-android/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/b1/a9/bf2b9d50cca20d3929dcd69a193f",
- "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/b8/30/39a0e0ea03150efeb9fdd0c4f0f1",
- "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/04/68/05482a7906eb8a4537fb591f2df9",
+ "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/d3/8d/e6c3a78a0d420510ff0d88980dc0",
+ "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/48/05/a2f8b738f09635f6840593a4f852",
"assets/build/pylib-android/imghdr.py": "https://files.ballistica.net/cache/ba1/3d/d0/4f7452be4865bbf2e54e67fff577",
"assets/build/pylib-android/imp.py": "https://files.ballistica.net/cache/ba1/76/c5/f35c903e1dd97bf22c1085a8284e",
"assets/build/pylib-android/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/5e/ae/5efb7ab469b5d17c2ea79c50fcdf",
- "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/58/27/ef34e53df05321778b4a1d64f233",
- "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/f0/7d/66c18cd0ead3730530d9b02ae718",
- "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/35/91/138b805ba19131c83fb9fa8cd5ae",
+ "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/81/bf/bde9153f3f8c6487be86396eaf9a",
+ "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/47/df/9f880b6e968711aaa8d40e21805c",
+ "assets/build/pylib-android/importlib/_common.py": "https://files.ballistica.net/cache/ba1/c2/5c/a3957f3a09bc359cce95465f7eb8",
+ "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/1c/46/bb9c26318a11269343f7053e3677",
"assets/build/pylib-android/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/8f/18e6ff954af6e29a2c06701e426d",
- "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/00/c2/b14ed2a7c144df47409a73626f28",
- "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/15/8c/53a8c444a47e76dde81052a0c41d",
- "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/74/6c/cf680cfd666f5e08fc17e1e02e21",
- "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/70/fe/b4fb9bfb0218a1baf681c3dd3493",
+ "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/fb/e9/91a341b9f8b7c7cfde71ce9d9d10",
+ "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/e5/52/7e6950753abc4e4a63c35483a61d",
+ "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/34/fe/dd13e9e4bda634aed3d9c24405f5",
+ "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/e6/fb/b8a26a8d469f12c0b9d1caa9f87a",
"assets/build/pylib-android/io.py": "https://files.ballistica.net/cache/ba1/04/bf/435c1cef465b5f9f8b3a0e58aac2",
- "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/e5/dc/a915c13e827b0f8f5c3d0339a365",
- "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/ab/61/7360b1e8e05eae96ecc2614bc666",
+ "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/83/00/cfaa2e98187bdfd870f368e1bff4",
+ "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/4a/a4/a2ca81c8b1fc5159d7ee27cf8961",
"assets/build/pylib-android/json/decoder.py": "https://files.ballistica.net/cache/ba1/3f/bf/6fd2a01d31cd85e4c21cf2c0a5c8",
"assets/build/pylib-android/json/encoder.py": "https://files.ballistica.net/cache/ba1/91/e6/28d5bc7693037562877ff0ea08c5",
"assets/build/pylib-android/json/scanner.py": "https://files.ballistica.net/cache/ba1/c8/4b/bcc458a5047e9ac8064a607ee231",
- "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/d6/38/c65fcd6b76a399d0fb209e9e1130",
- "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/7b/0d/514f7c437ade5881b923228db78d",
- "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/01/91/9aecf23d41972edd3bcb7927b1fe",
- "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/ab/cf/da9a211a39662f631b6869e1c28b",
- "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/d1/75/8e5a4a91941e362805dc7d43b7a0",
- "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/59/8b/cf4357716a774981a06b369e2074",
- "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/be/37/4c3f3e2385e8e6d61d8ef76c5dc4",
- "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/9c/2e/978f3aa52af60fce9a819dc7de7c",
- "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/c7/5e/f3325f2bd78dcbffbfea6d9770fd",
- "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/50/16/e34e153745925b34ce9038e3ea7f",
- "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/49/c3/d46e03dd6ba50e8e2282ab22839a",
- "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/84/08/24b4e6c420fec10ec3c2ea8c47da",
+ "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/f6/89/d06bf3cfc47de60c557183929c37",
+ "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/34/f0/9b535759f451719a14e5eaf7e5a0",
+ "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/40/66/bfc4023c1853ee085d7f32691874",
+ "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/a6/59/1321269f13ad79ba6636c665959f",
+ "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a2/f1/558bfebba043ccc058d9d8cca51b",
+ "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/5d/25/15806eb35054964b4c0dbd253d8d",
+ "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/84/e6/6c7e1f823242d3ecfebeb2079282",
+ "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/c8/5b/c1f8b0cad7db967d5aac0dc93cf3",
+ "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/e2/5b/852981ddeb6c208455146b9d65df",
+ "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/4a/a2/61dfae45beaf22c9696d069ee06c",
+ "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/55/b0/c42a5accd40cf739d51627fd7726",
+ "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/bd/bb/c27cf6cf4d87fd4557f19c549ab6",
"assets/build/pylib-android/netrc.py": "https://files.ballistica.net/cache/ba1/8f/80/36bb48bf9d57e4e5d2840bbc39ed",
- "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/ed/e9/4fdac3b585199c036ca9e89b7f90",
+ "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/e9/97/b8c183562190b711e14163b213d8",
"assets/build/pylib-android/ntpath.py": "https://files.ballistica.net/cache/ba1/86/46/129e6c4c896c2a48abc5294f3fb4",
- "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/b4/46/c374747761328b745d54c20fb2d4",
- "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/b3/ec/5cbca4da9a176673ac3502dfe3ce",
- "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/65/7b/65f902a9c4e4ba7713e2af3fde5e",
- "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/f4/ff/f544ac0872105e67239d869102f5",
+ "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/a9/59/0611204983d7eeed580ab3c56e4d",
+ "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/9e/75/45a922718c7dfcd1b68948fb74a3",
+ "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/d2/02/8e90c9b100ed89495c0dede5aab2",
+ "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/c7/e1/faab3be799d4a4bfd844c2425b04",
"assets/build/pylib-android/optparse.py": "https://files.ballistica.net/cache/ba1/0f/08/ec8ce5e48392a3f9bdc3c07f49cc",
- "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/ae/a6/b92e148a97c42f68600fd8f5ff0a",
- "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/e7/18/74b1980b45e9b0d7aedd6e43f64c",
- "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/fc/24/6860b302ac45445af755cf451711",
- "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/d4/29/46efdd6acdab82b4ae4810522947",
+ "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/b3/44/d04af8c52a023a1d339c0b1311ad",
+ "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/04/018a8adbd4b49bf89ecdd4b905d6",
+ "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/80/59/d1ff69bb0219c1a870c1d8966070",
+ "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/3a/e1/2e3171acf42a36be590e4a37126d",
"assets/build/pylib-android/pickletools.py": "https://files.ballistica.net/cache/ba1/72/c5/182517538ac4e0c1b7d25bde80e4",
"assets/build/pylib-android/pipes.py": "https://files.ballistica.net/cache/ba1/ed/d3/9e08e7ece839c58d885223c57adb",
- "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/3f/27/1c376bf997f3ee3a09c9ffdb58d6",
- "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/2a/65/f358d875e6356bab841348b2a2c1",
- "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/d8/c1/eaa9ec920838ec9742eaba62032a",
- "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/07/e9/bd3185ee7e11fae8a93350f3c8ef",
- "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/4e/e0/74802bfb4ce50bf23b1fe082476f",
- "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/c7/3d/79915a2f9a52402ad0165749f8a1",
- "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/66/da/92943b022e8e4c32ffa45190e6e3",
- "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/7a/1e/6651495416e0e70900b036ac1b4f",
+ "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/98/62/24a1465cb2b43458e1d271d2ff19",
+ "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/48/f0/9e426fea97794447c4b6984be741",
+ "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/e4/b4/c991bcd1812d6ba77181a37a4cd9",
+ "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/45/2e/413a448cee745616d9b2a3be1678",
+ "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/df/7c/3af6fc68bda43718dce4275071ef",
+ "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/db/db/3d2fff41d48707ec1dfe45fd44ae",
+ "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/2c/5f/fe19381e5041a1bc781b35aeb5e8",
+ "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/9f/9c/4b003a13a13f588bfee2c1427f79",
"assets/build/pylib-android/pty.py": "https://files.ballistica.net/cache/ba1/24/e7/674146721384259bfbbc196a59e6",
"assets/build/pylib-android/py_compile.py": "https://files.ballistica.net/cache/ba1/4f/4f/41b5756b4248c19b3cc6401b616f",
"assets/build/pylib-android/pyclbr.py": "https://files.ballistica.net/cache/ba1/8a/0e/2fc7f524cbc1101d488c1a0c570f",
- "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/9e/1d/1c472858412cfa24f33d5228154a",
- "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/12/26/24837026ac4db0a65d099dfefc69",
- "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/f3/08/1d7b3e0f7ce1ad649b1abf08f8ac",
- "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/64/96/9262809205b823d80a1d3200cb94",
+ "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/95/05/e698d3f627ebff0656070f0d4655",
+ "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/3a/2f/3f5f8f97d6aea42bff93351b960a",
+ "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/0f/ad/93ff84558a4d8ca0607ab2c35df2",
+ "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/f2/51/e8e53a7db0d2fd381ff801ef31b2",
"assets/build/pylib-android/re.py": "https://files.ballistica.net/cache/ba1/59/e4/9022fc5507d9f81c023489d12bea",
"assets/build/pylib-android/reprlib.py": "https://files.ballistica.net/cache/ba1/81/66/44ee9dceee6943006c4500ee3303",
- "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fe/06/6f06102f9f6c8c0e73a33714c25a",
- "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/b2/76/1bf2d61d8494da2aeb4280144b2f",
+ "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/38/9a/cd94bf30476e906823ceefcf9cd5",
+ "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/de/50/40037954e30bcda859f78d9facb2",
"assets/build/pylib-android/sched.py": "https://files.ballistica.net/cache/ba1/c7/c2/12fe5b57f846e1c9d4c75ee89d91",
- "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/b2/b0/b1a5252c6b75183471c11a4dbfb6",
- "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/77/2d/f195a32136d7aee6e17169e88b50",
+ "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/e2/1b/ffc4c1422b6ac0eda4924d2f241a",
+ "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/ba/53/3b7515983548e5de15ccd7d37fb7",
"assets/build/pylib-android/shelve.py": "https://files.ballistica.net/cache/ba1/8b/de/eca086cf73d1c9c823472de06a4c",
- "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/d1/90/427ebd18132790c4b80ca7f0062a",
- "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/d4/85/7a836681a4a43361886127d9a5c6",
+ "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/bf/d2/45bdf01bfb2a8d468d6ff0534fb6",
+ "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/2f/70/fc4e5267e0df968280861897c4ca",
"assets/build/pylib-android/signal.py": "https://files.ballistica.net/cache/ba1/c1/e6/42f7446c4290ebf789e9d5d572e9",
- "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/99/99/9f9631f0dcbe462ea076f63ea87a",
- "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/ca/b1/59cd5236b8614b142c1c30f3d826",
- "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/89/dd/17edc05b630cb0bfdea9f0070356",
+ "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/4b/05/ae253d4728ca8a7f796f4bf38d72",
+ "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/1b/96/d9b9c960b17a701f81102bcf8ef5",
+ "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/a8/d9/714d70951821c007019f14b60bd2",
"assets/build/pylib-android/sndhdr.py": "https://files.ballistica.net/cache/ba1/d8/db/7f9e8c520cd68d3cf3308e3a9923",
- "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/1a/9e/d4ab190486a0e5fde8c165d76537",
- "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/ee/5d/ff8d1e8000d294430919d854bfd4",
+ "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/da/90/e8f1c0529425c43c439c113f09cb",
+ "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/0f/54/a474bf8ddc82d8155de1344e1318",
"assets/build/pylib-android/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/59/0c/ad2f1115231791e81b99f42bde59",
"assets/build/pylib-android/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/ba/45/70cc4fba245a1394b832240cd706",
"assets/build/pylib-android/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/1c/d8/dc3fb256cbb05c8fffb52c52404a",
"assets/build/pylib-android/sre_compile.py": "https://files.ballistica.net/cache/ba1/96/3a/830deabdb104a1d219f88ad9c090",
"assets/build/pylib-android/sre_constants.py": "https://files.ballistica.net/cache/ba1/87/9d/78b7e287798d388ac700586308ce",
"assets/build/pylib-android/sre_parse.py": "https://files.ballistica.net/cache/ba1/43/8a/41140a5502c31bbf238181ccf581",
- "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b8/4f/0a8be5651fd60986028dc9e60215",
+ "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b9/a3/93c6326cbed12bd38ddff0442b8f",
"assets/build/pylib-android/stat.py": "https://files.ballistica.net/cache/ba1/03/1d/acbfa83d8d94d8a483c6a884b589",
- "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/75/f2/4ce33352d4242c35554604908f43",
- "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/52/bb/04d8688ce0acb53fef74b1cedaa4",
+ "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/62/7a/057495d08851ec32872bcd69b007",
+ "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/71/7f/8d19b04aea3ea1fc6bb49534d244",
"assets/build/pylib-android/stringprep.py": "https://files.ballistica.net/cache/ba1/20/41/fcfc5f510286ead5f7f4678ac9ec",
"assets/build/pylib-android/struct.py": "https://files.ballistica.net/cache/ba1/37/67/74dea8e8f3831e802c3b5288e901",
- "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/39/92/11fe2953e9ae13120ebaebea19d1",
- "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/ff/0e/1a6c5fd41803511cad28595dc248",
- "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/47/71/61a7a88103ae16c177bf03953f5f",
- "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/3b/0e/73b187b644f5d861893306db1d11",
- "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/05/e9/16513caa8a4d9eb20fa67c7a02f1",
+ "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/3b/0a/1f1927f2064cd5be6952c800191e",
+ "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/e5/20/6b38eb6fd8a07086d219d9ab269b",
+ "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/f1/d0/2c87723b1afb110667a9b77fe0e3",
+ "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/99/1b/2a657c8fb80a527f7900be74c92f",
+ "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/d2/e4/3f1dfd58d0bc055718563a8116f2",
"assets/build/pylib-android/tabnanny.py": "https://files.ballistica.net/cache/ba1/f3/7e/b463d5f4ead23d34a36d0e559447",
- "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/72/ab/e5dfc47c753d7cbb63934aac8fd9",
+ "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/f2/6c/85bb42b559a27fb0bcd2dbeb1616",
"assets/build/pylib-android/telnetlib.py": "https://files.ballistica.net/cache/ba1/a5/81/6133a7707e3de363ddc642944e52",
- "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/ca/58/e0b1706b032958c6364e7f88adb5",
+ "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/98/02/88d06634078ab0cdb5bb94036140",
"assets/build/pylib-android/textwrap.py": "https://files.ballistica.net/cache/ba1/4c/4b/c743c5e7427b00f428c318a9673b",
"assets/build/pylib-android/this.py": "https://files.ballistica.net/cache/ba1/a8/fa/4d1152b689d75bc1a997ff34b799",
- "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/77/4f/e025ea812a09965cdc395e86ceb9",
+ "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/70/eb/9151c4484807f6ba87a513964b4f",
"assets/build/pylib-android/timeit.py": "https://files.ballistica.net/cache/ba1/55/7b/f7ef83f08ac5cb36ddaff03ac6ab",
"assets/build/pylib-android/token.py": "https://files.ballistica.net/cache/ba1/1e/2e/d0c88f9d6ae92bb1fae7167aaba7",
- "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/72/3b/51cb704606f892e099c2e350e346",
- "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/2f/da/847f827b3e048f2b96d6c657bbe4",
- "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/89/42/8bf4333174a7fbfe27552743d5af",
- "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/46/49/5683d0d9e0e342392361adb6e9a3",
+ "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/ae/51/55e4236aa6d5718520086c68e818",
+ "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/d0/71/2094be597c5d8396d869cf4d0089",
+ "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/0b/1d/044152a32b34fcaa538ae2c9a918",
+ "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/2c/4a/ea13ebd9c04d1db131d62880b2c6",
"assets/build/pylib-android/tty.py": "https://files.ballistica.net/cache/ba1/ad/19/a6ad29b8958fa9f5acc3cf71d3b2",
- "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/15/8d/824df2b7a8d28811d23ee5dcbc9f",
- "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/6e/cc/a870fe92cab98b1d7740da28213c",
+ "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/14/58/e6a4aecb3c48a708a4abee7ed347",
+ "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/54/f9/e31a593bd8daffba950449ab8ad5",
"assets/build/pylib-android/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/b0/56/87601ed47a5181d1e6a40eb4ea40",
"assets/build/pylib-android/urllib/error.py": "https://files.ballistica.net/cache/ba1/07/8c/573897fc3bdc6d3e2e8d449f17c7",
- "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/ab/9d/cfcebb340b37e3d58ebbfb2fcd23",
- "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/07/6d/58f034637b48922ec51e7d71b0c1",
- "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/c4/d5/676a8e9fc4f7bd21ac2f555fc3fc",
+ "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/b0/6f/fcf889e56d319e1ab4721e2d699b",
+ "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/27/f6/c23c9e61fc063e4ba90d6d096ff8",
+ "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/ac/f3/2d5bd4fe5cfcf640e8be71dec9a4",
"assets/build/pylib-android/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/a4/52/f0d03835bb08e08195aeebd05e04",
"assets/build/pylib-android/uu.py": "https://files.ballistica.net/cache/ba1/a1/89/070ed8553858a75fcafae4b7bd37",
- "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/df/2a/cf8755bc0063f6a0d01dee6ac0a3",
+ "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/6c/3b/c018c6e9883e5218175592ec3343",
"assets/build/pylib-android/warnings.py": "https://files.ballistica.net/cache/ba1/23/25/0ed7968cb91c285e031fa93614db",
- "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/f8/72/9e060ca777991ea45d71eed336ca",
- "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/14/4e/fbb121e9cfb74cdb2084e1fbb8d5",
+ "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/bf/f7/89182d61e9f3eb100e5efbff4243",
+ "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/3a/34/42234c435d2e753407b0c068a271",
"assets/build/pylib-android/webbrowser.py": "https://files.ballistica.net/cache/ba1/25/95/2b773a140d7d8cfe4e51d23d9ee2",
"assets/build/pylib-android/xdrlib.py": "https://files.ballistica.net/cache/ba1/ec/bf/84d830dca1231ec1a67d8ccbb21f",
"assets/build/pylib-android/xml/__init__.py": "https://files.ballistica.net/cache/ba1/ba/67/bbd97e53f3db5ebc3abd3fef2275",
"assets/build/pylib-android/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/36/76/2a47e7bc727db1c44d157b23d2c3",
"assets/build/pylib-android/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/4b/7b/185f8e04797815876d9a16210af7",
"assets/build/pylib-android/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/db/f3/81553e1167748f7d22152ac83eba",
- "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/18/79/cd302655dc15d49e3617a71966dc",
+ "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/8e/f0/26f7a8d646c051dc29134411e5a3",
"assets/build/pylib-android/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/27/a6/6caea719e99063ca274ba3dd9883",
- "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/69/e1/4ca8a5cd1c35dc93873b5d7f89c5",
+ "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/53/8e/fa86c93dc783f50139a6df679f70",
"assets/build/pylib-android/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/69/93/695baf453ca1030e7f6a62eb977b",
- "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/6a/80/e9447455e3df06a8dea4ca762c05",
- "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/2d/1f/dfb4d40f1edca9a6c4547946258b",
- "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/7f/ee/475112162331092c87710dde95ac",
- "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/2c/44/ee7c7ac5086086a64acdbbf2ebd9",
- "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/98/0c/80c528bd3fe3e658da076d08071e",
+ "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/e2/28/cb659e6d308904b5b8349b2fff52",
+ "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/bf/14/b35813d60c28bb05f1528c80f062",
+ "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/46/fa/5086aea6de2e6bc282d73b0808c4",
+ "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d6/e7/33912cef283deaee04484e2ccd0b",
+ "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/38/44/1792ae5542c1ae5248568ef5abbd",
"assets/build/pylib-android/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/6f/39/4c840e5eb0e09f709569154159ba",
"assets/build/pylib-android/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/db/92/7283051e5e1c7426985835f506b9",
"assets/build/pylib-android/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/39/6c/fac98453c28f626916837c8a1e6b",
- "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/d5/5d/6631d2cabb6d5d3de794a1cf8f30",
+ "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/91/57/68039f41084d369567cdad6f02f1",
"assets/build/pylib-android/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/2c/42/ba99070cafd736b165b825f1df53",
- "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/8f/58/dce938bf4dcf1e240206c88e903e",
+ "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/84/07/34199c53cc1f9d91c835af86b47c",
"assets/build/pylib-android/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/3c/9a/d4295144949f697e57545aff741b",
"assets/build/pylib-android/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/13/27/66fe0ad3aa764ba65643f5fcbc37",
"assets/build/pylib-android/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/0d/90/edc37e1a4f436d853c6d90263ae3",
"assets/build/pylib-android/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/fd/fd/acc2dbaec2abc4a76071ce7ed7ab",
- "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/da/48/e65c0e5eb49e3e5087866339f7e3",
- "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/bd/3d/3771b879aad270172509a740aa80",
+ "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/4a/62/c061195196f787531ef5bc2b4d61",
+ "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/eb/1a/fae274a8e90aa97ade20712bfe2e",
"assets/build/pylib-android/zipapp.py": "https://files.ballistica.net/cache/ba1/40/ae/178305c27d72cc46ad2220b504ec",
- "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/88/73/901cfb9f23cc0bc0a7ba17eebe40",
+ "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/69/86/a59f4fb6a301ab3682af282d6af4",
"assets/build/pylib-android/zipimport.py": "https://files.ballistica.net/cache/ba1/99/2a/462d3c6a266d9e4ebdb887a99ae6",
+ "assets/build/pylib-android/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/b7/4e/bea553b4c2a2e63902c5cb446579",
+ "assets/build/pylib-android/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/ed/e5/0f7502cc1ef46212fcb15c7ada89",
+ "assets/build/pylib-android/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/64/69/98dfdf2ecf82fa172ac717c2e8f0",
+ "assets/build/pylib-android/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/26/a7/11f6ab33ede54f35282c70e51984",
"assets/build/pylib-apple/__future__.py": "https://files.ballistica.net/cache/ba1/c3/2a/95c24fd76d3dcf796f5aa714cf0b",
"assets/build/pylib-apple/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/c1/42/8c4e5889af4acd69a6e866ea360f",
+ "assets/build/pylib-apple/_aix_support.py": "https://files.ballistica.net/cache/ba1/af/15/a9be2e91d3f12212738760bec685",
"assets/build/pylib-apple/_bootlocale.py": "https://files.ballistica.net/cache/ba1/15/7e/07e0a6fcaf9fca6354453f7d09fa",
- "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/fc/ba/022abfd65bf601ad4094eb051c62",
+ "assets/build/pylib-apple/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/e8/c2/bd1aeca19799926a926a2f5ba3fd",
+ "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/de/99/73757a2868d45502d6716354c8b9",
"assets/build/pylib-apple/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/5a/19/9dbf1e881a6483e3a268e5f8ea7d",
"assets/build/pylib-apple/_compression.py": "https://files.ballistica.net/cache/ba1/c6/06/a4e9cc0e17800d71f6536d27976d",
- "assets/build/pylib-apple/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/ca/6b/94c4270a794a3dd9144eac36ba70",
"assets/build/pylib-apple/_markupbase.py": "https://files.ballistica.net/cache/ba1/06/64/d7715998bc60bfd5235f96b1a779",
- "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/4d/3c/5a86fa537a2101d34076a72d0460",
+ "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/e2/a2/5732e53a09c179a2e1e5d372b386",
"assets/build/pylib-apple/_py_abc.py": "https://files.ballistica.net/cache/ba1/be/e3/d1030ff81e5440dc12c13a6730f7",
"assets/build/pylib-apple/_pydecimal.py": "https://files.ballistica.net/cache/ba1/c2/6b/9fb0fb2b25247a6d68939f5d6ed5",
- "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/41/de/afbd4243267e690fe1588b49db4c",
+ "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/9e/59/a40cba37ce7db26726fc966c2b5d",
"assets/build/pylib-apple/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/3b/91/55e882376c694fefc106067d0b3b",
- "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/7f/b5/8867817306aea16b94f613a26b93",
+ "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/47/5a/feef7100cfb5a7c285130e2b18f2",
"assets/build/pylib-apple/_threading_local.py": "https://files.ballistica.net/cache/ba1/94/a6/3e202c4309c356baf71a34e9325e",
- "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/2a/9c/f9cca37dc1131dd602c5b96a2312",
- "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/dd/25/65dc23811a08b2445492e9f9d8e3",
- "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/a3/50/aab369de7f1c182e54878faabd6a",
- "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/72/dc/84c9bb5f53db3ffbb81fac16b5be",
- "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/0a/c2/5cdf93f738b653523e371e91013f",
- "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/dc/7c/1b0ad2f77d1e0f66f87af801c866",
- "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/af/53/8002843655550b707f97b0aef513",
- "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/b1/da/6206890af9505a246cc7a20d5d66",
+ "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/70/fe/9c92a7a96cdb6b1e00e26aa98fca",
+ "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/f2/ec/c492154fca5b0a765895eaa5885a",
+ "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/13/f1/c7846c59f3a3a3f5ac2bfcb5c29a",
+ "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/6f/c8/f009e5a528fadaa1d92edd2b117d",
+ "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/f4/95/c4c481c556c7a6de0491eeb2305c",
+ "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/1e/f6/01830bff652757d9752b02ffabc4",
+ "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/ab/34/9ebc49afe08d87a195f7ad309f19",
+ "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/9d/6e/3c238acb7356a8f28a872e133cbe",
"assets/build/pylib-apple/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/10/db/493c9bfaae1f8953435bf7aed8d2",
- "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/eb/d3/3a958257fa4133116c01aa1bfd6f",
+ "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/3a/b9/9b76e7998ff30c55f33c355c107b",
"assets/build/pylib-apple/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/59/67/37e8f4938af7ebdea7da3fdef34c",
"assets/build/pylib-apple/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/88/cc/f422549995be43e7b17d9830ee38",
"assets/build/pylib-apple/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/c5/8f/0a5cbd7b5a6f2c8531af87a09469",
"assets/build/pylib-apple/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/bc/0e/b8a63e47d3d3d73b198bf52019e5",
"assets/build/pylib-apple/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/c3/d7/e58784180e8e61785d455f7e3679",
- "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/f0/18/e35781df09df31bca6aa14621d71",
+ "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/9a/6d/dceb42b5846a4f3bf7d09481898f",
"assets/build/pylib-apple/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/e1/81/9fcc3367d8ebba74819157777a25",
"assets/build/pylib-apple/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/2d/0c/03cf213d7bc7bcc0a6ee0e7310dc",
- "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/ef/69/ab54b22da528d7146cab1a00c2c1",
- "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/ea/3c/7ac33a578ac25ca376a60bb59603",
+ "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/60/76/d98fd62af525430f90573b769925",
+ "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/1a/b2/3fd1917f489b608be4b33e256201",
"assets/build/pylib-apple/asyncio/log.py": "https://files.ballistica.net/cache/ba1/0f/5a/f419c17cbe08eddfa90f314b8a6c",
- "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/39/fd/2f6814cc54d475252da101fbba37",
+ "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/e7/95/1e4217bfe8a0afa14a9e5b75472b",
"assets/build/pylib-apple/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/ea/73/2b77a852d18c2fe98e291552efca",
- "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/c4/17/7336ec7c6b3c65724008ebd96b0a",
- "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/e3/60/b4663ff9e8fa00a097e8b360ff29",
- "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/e3/c4/d8a03bf572ad495a51250dc6a19b",
- "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/2d/c1/29a029f52f3b8049eea1d3f86b35",
+ "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/7f/b5/0f0ba0747453bcbe177708e70b2e",
+ "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/33/75/a7cf5f0e47834b852b370eb69dd5",
+ "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/8f/8b/5911fee9252df333b5a17e42ed37",
+ "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/c9/ea/bb021562e53450698ceb51bae575",
"assets/build/pylib-apple/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/92/3a/0de93c93afe7311a68a615fb2b97",
"assets/build/pylib-apple/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/0c/e6/e52c7358eaa4a30fd6d8bbde94b8",
"assets/build/pylib-apple/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/98/e4/5b002decc44112664cf6526da71a",
- "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/a1/a8/22d7a8d58241353a5e288b40759f",
+ "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/3b/8c/d683b44a74c3f23636eb515f1c05",
+ "assets/build/pylib-apple/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/1e/4c/d4de9a8086f5bd56041bd52a7fc9",
"assets/build/pylib-apple/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/3a/34/f3cc4d7abb02461d148faf8ef19f",
"assets/build/pylib-apple/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/19/74/be437ee7d795f7c6106ef8fbf2db",
- "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/28/6e/301cee24873c77c336504addd197",
- "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/59/d9/96f8e8e2324dd0400362ff05bd4f",
+ "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/ac/31/b63e452f91b9ee3a8c8da36b5d24",
+ "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/f5/85/78a7a30c951b5b9992e40a30e7e7",
"assets/build/pylib-apple/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/c3/9a/4bc6c5e7ffe8c0298bbae63157c0",
- "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/f0/6a/4573904ec9cac4fd3155e80d5959",
- "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/fc/aa/394cb22a0c927c575758eacd5d3c",
- "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/51/50/2e05640cfc2c0a4b61ee3fa028d2",
- "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/51/d9/72daaed73460e29cbf10a63bb7f5",
- "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/61/e8/bbdb541d16a6fa002a0fd395c73b",
- "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/4c/3d/878a1e93876d64136fa253176b50",
- "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/5a/59/5bc5210e1fb224b2942453595609",
+ "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/67/d8/ec498cdfaa71a51b7cb9f11541fa",
+ "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/5f/a8/78c13d54e9c864c42198fa3cac81",
+ "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/be/77/d307f03f678483487451a2dc4df9",
+ "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/55/2a/cd97de9d7e92a69ea9fd26be5498",
+ "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/e0/53/4c86151ca143696408b16f54e687",
+ "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/ff/13/955800a917e23238dd071cae85ca",
+ "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/d9/b8/bd483641d5eb3292a4ef38771c04",
"assets/build/pylib-apple/calendar.py": "https://files.ballistica.net/cache/ba1/59/9c/2b0a13658c958a9995ade122ae00",
- "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/a2/53/87021ed914efdc55b636a828f8a0",
+ "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/4f/53/efcf1aa5ac4c4ff124de0e8ce501",
"assets/build/pylib-apple/cgitb.py": "https://files.ballistica.net/cache/ba1/9a/2d/70325a99eeaff8701540d2304d80",
"assets/build/pylib-apple/chunk.py": "https://files.ballistica.net/cache/ba1/e0/4d/8609a028d890841ff867e97f0869",
"assets/build/pylib-apple/cmd.py": "https://files.ballistica.net/cache/ba1/33/25/43fd9394378dd3db266dd35af46e",
"assets/build/pylib-apple/code.py": "https://files.ballistica.net/cache/ba1/18/fc/d667016222e466707ec5d0991810",
- "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/34/82/17d21cdb1a3a8e740629b5720b5b",
- "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/95/e2/6ba7d680c393e7ddcf72425a9731",
- "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/2f/ec/36668a1b0f8ffedd3a1fa1ddb276",
- "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/78/dd/38815f6fb41c45822afef8fb1b71",
+ "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/b5/29/a03b1f3dee0d9e2472ef6f9e0cb4",
+ "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/41/29/d34bf4a5e7ca2fc47a2595cf2f1e",
+ "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/c5/04/742da41b4f964e41427b944d5d64",
+ "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/63/ca/9d22346f8750ef62088de3c25c0a",
"assets/build/pylib-apple/colorsys.py": "https://files.ballistica.net/cache/ba1/ae/99/594631454b09ad4d5c34ec54a344",
- "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/1f/d7/80c8a9cb297994b001f766f96ca7",
+ "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/b0/10/10ea577b4b7cd27aea2b86b744ad",
"assets/build/pylib-apple/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/f8/0b/346441ef94908fb806338d0510b6",
"assets/build/pylib-apple/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/6b/26/78ac686a2335efb18fa8ed0e5d6a",
- "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/e4/da/c5f51a895dbd067d6571a8f1e979",
- "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/34/ba/b02bf14621a6b888a29c1a3bb11f",
- "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/10/e24a0ea083991df41a0301a22b94",
- "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/06/36/09b61a5e5de8234b37fd3f476493",
- "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/e3/b7/1cfb5689e277e48c8c347f6ba36e",
+ "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/30/85/3db73e4fd0be60ad09eaf5dde94e",
+ "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/51/3f/bec0554d1aa041ac88375f6e0ab0",
+ "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/0b/0c/c8315a0b957c916ccc39b1e5dd3d",
+ "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/5e/5d/289f318a747d76d68a2bff077c8f",
+ "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/a6/a7/6e93480a1647ba9d4f40f8644fb1",
"assets/build/pylib-apple/contextvars.py": "https://files.ballistica.net/cache/ba1/02/52/e520b59b10124c813468252fee2a",
"assets/build/pylib-apple/copy.py": "https://files.ballistica.net/cache/ba1/d9/f7/6d68526a34fd56e358cc920f723c",
- "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/0c/5a/c21a2c6000ad2947861fbd711834",
- "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/1e/e7/a5d7cc52a39b600ea554534a75de",
+ "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/45/0e/7ea7c2f999ef934f25706abf0670",
+ "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/a8/21/905bf832e4a54f0efde53d431f2f",
"assets/build/pylib-apple/csv.py": "https://files.ballistica.net/cache/ba1/02/21/503374208b50d8cffa21e5aad48a",
- "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1f/87/6aeddc887fcb3d346849b4dcab80",
+ "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/68/b7/87f1ceae16da8b248a771145e8e4",
"assets/build/pylib-apple/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/f4/e3/d0d2b2809d80ad7cd813477be797",
"assets/build/pylib-apple/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/f7/ff/297cd3308735876b3d7ac54172e0",
"assets/build/pylib-apple/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/cd/67/df2ef87d5f3411077030882bcae3",
- "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cb/c0/d8e7e17b9b3122e1a0fc5ba805cc",
+ "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/26/85/489db3f032a47813958e08c687d9",
"assets/build/pylib-apple/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/bd/b1/b431a9e977498c9c5945a3f63da9",
"assets/build/pylib-apple/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/97/8b/19a7d679d50c0983f9c4b2f37d5e",
"assets/build/pylib-apple/ctypes/util.py": "https://files.ballistica.net/cache/ba1/80/95/f30336080c30fcb7d5db549ef68b",
"assets/build/pylib-apple/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/09/43/f7e315d732918308ea4e4c197c5a",
- "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/43/5a/c242200e965ec30f3922cf9f73b5",
+ "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/02/0b/75d9b2291f8ce6b7c06003397aba",
"assets/build/pylib-apple/curses/ascii.py": "https://files.ballistica.net/cache/ba1/97/27/94584e1dcd1637dfdce80efa78eb",
"assets/build/pylib-apple/curses/has_key.py": "https://files.ballistica.net/cache/ba1/60/17/fde8d2bfabfe53298f936ebdec88",
"assets/build/pylib-apple/curses/panel.py": "https://files.ballistica.net/cache/ba1/41/42/ef63abf4b18669a22ab9141bcb88",
"assets/build/pylib-apple/curses/textpad.py": "https://files.ballistica.net/cache/ba1/34/78/bc5c856e5f1d8439d4e191bc4f75",
- "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/85/e7/aaa5f74230b93068c7bc6df9a645",
- "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/e1/32/e063935d59bbc2d0383228dc93a6",
+ "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/45/58/a588aebb8cdfc7de8672707af32f",
+ "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/2e/98/cc69b8e574fd63662ee0c3abbb90",
"assets/build/pylib-apple/decimal.py": "https://files.ballistica.net/cache/ba1/dd/5d/8d0f90ec4e20c613b6ce2a88bc60",
- "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/63/ca/23738df60b6b3ffe279a617df1bf",
+ "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/83/23/5a8f85ded63f438f11a87c15efc8",
"assets/build/pylib-apple/dis.py": "https://files.ballistica.net/cache/ba1/52/8c/c990047191c2cad1f2ce978b146d",
- "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/2e/e7/7821f5346e5e5f1b228d8a4a0d00",
- "assets/build/pylib-apple/dummy_threading.py": "https://files.ballistica.net/cache/ba1/5b/60/6a2a69960c1c982fa667f3fd8051",
+ "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/1c/3f/dd4e6d27965460ca8ffb6cba98b4",
"assets/build/pylib-apple/email/__init__.py": "https://files.ballistica.net/cache/ba1/2f/8e/c14225900357ac302213f5b4d674",
"assets/build/pylib-apple/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/c6/3d/d686aa9a7ddbee790ad558b25661",
"assets/build/pylib-apple/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/fb/2a/efe05a41d7fda3cba1d9a68b31b2",
@@ -3109,9 +3116,9 @@
"assets/build/pylib-apple/email/feedparser.py": "https://files.ballistica.net/cache/ba1/5e/34/32eb942596826dd2cb845e9d2a2e",
"assets/build/pylib-apple/email/generator.py": "https://files.ballistica.net/cache/ba1/09/86/f9ebd02a5a8a21bd66927b50fffe",
"assets/build/pylib-apple/email/header.py": "https://files.ballistica.net/cache/ba1/21/e7/9bb3af5ad0b37941d9c73020cccf",
- "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/42/92/988e418cd7b901e8fefe1bd98358",
+ "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/22/69/f2b2aac8d956079f0833030b5f8d",
"assets/build/pylib-apple/email/iterators.py": "https://files.ballistica.net/cache/ba1/2f/8c/6a1dc186422beb8546721f22b72b",
- "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/53/6f/c22ef21e58ccc9496cdf08d003dc",
+ "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/8d/1f/5ef489963e364dbd49228156a6e3",
"assets/build/pylib-apple/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/e0/cb/20c79c7faa724bdfeebae99795aa",
"assets/build/pylib-apple/email/mime/application.py": "https://files.ballistica.net/cache/ba1/45/a9/97edc07b0a7c7e3e004422b674c2",
"assets/build/pylib-apple/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/c8/25/9973c555726af5e265c0f459e8b2",
@@ -3124,9 +3131,9 @@
"assets/build/pylib-apple/email/parser.py": "https://files.ballistica.net/cache/ba1/86/8c/8030eb141d7713a36befee9736ef",
"assets/build/pylib-apple/email/policy.py": "https://files.ballistica.net/cache/ba1/a5/64/8c59670fdf565988c72f21040ed5",
"assets/build/pylib-apple/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/4a/85/aa0a24ec3a4f407d18aadf357bad",
- "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/07/04/1a8a3e3d77eb4b3b31f434514012",
+ "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/92/e5/20f2c37647f2fcdb586b78a340e5",
"assets/build/pylib-apple/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/b8/61/d28f98d3527e5e7285265ef03f7f",
- "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/3a/72/a855c1e63bc3510a87099b87770f",
+ "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/d8/a9/a7cd663238f58ba364d163ab0caf",
"assets/build/pylib-apple/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/ae/eb/d4efe1172c154ed19f3ed9c3e0d8",
"assets/build/pylib-apple/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/ac/9d/63f89df311a1a5cfb3c0e8cedcce",
"assets/build/pylib-apple/encodings/big5.py": "https://files.ballistica.net/cache/ba1/78/ea/960502c422e3c224c8ad449fd429",
@@ -3213,7 +3220,6 @@
"assets/build/pylib-apple/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/f5/2a/2b0dcc29c907c6a518497c7f48c7",
"assets/build/pylib-apple/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/59/fe/91ae90c6e9dd63531cb3d312100b",
"assets/build/pylib-apple/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/68/fe/d6a7084555b675b9c484ce28b0b7",
- "assets/build/pylib-apple/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/0b/79/3f05d1194270249651c838df01f2",
"assets/build/pylib-apple/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/55/5934baacacdbab3fc78aab842577",
"assets/build/pylib-apple/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/4a/4a/56eb674ccc125d9f75c14283d979",
"assets/build/pylib-apple/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/f1/d3/6f3a3bc64f3dee0db82072cd1578",
@@ -3248,363 +3254,380 @@
"assets/build/pylib-apple/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/1b/c8/1ffa26b3c2a650efae206d27b6f3",
"assets/build/pylib-apple/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/40/6c/279145a291f59642952ea9880b9d",
"assets/build/pylib-apple/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/1f/c9/57406baceeabe0a0e201a81833d5",
- "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/68/87/a3fbd9a4a710a06e03625e870b37",
- "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/4f/1a/2d6576fd5bc7722af46820164d58",
- "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/6b/04/bdebb1257b328a98f109e23eadfc",
- "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/00/11/7533d94880452cc0ab88f9373642",
+ "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/0a/93/a93daaeb9d8ed4bf372e75d8cedd",
+ "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/b9/69/6137a2d0a2c31a7e08891ee56c35",
+ "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/16/3d/b40632ab99df5c645db182c82023",
+ "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/c7/a6/5036cd268eee8504116945ea8d02",
"assets/build/pylib-apple/formatter.py": "https://files.ballistica.net/cache/ba1/b3/5f/58445670edaf8bb748c745197fa7",
- "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/df/db/61be6d9b79cbce6bb29fae2aa9fb",
- "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/42/ef/b31f8d12adfe82836b95a930b26f",
- "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/20/35/bec93f7b040908eb4b87f30d2fa0",
+ "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/64/fc/75a465ea7bd286c6c0006ff6f9dc",
+ "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/6c/7f/c59704a4093cecace0737ff19134",
+ "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/a5/dd/c2f7f8be4be52671041268842bc8",
"assets/build/pylib-apple/genericpath.py": "https://files.ballistica.net/cache/ba1/b3/cd/0b7bb99d3aa5a41b69a4b62cd3cf",
"assets/build/pylib-apple/getopt.py": "https://files.ballistica.net/cache/ba1/46/47/d33382d447d398923f4c0c0f87c1",
- "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/02/a1/d4249edfdf76656945cda335490b",
- "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f8/e0/8ad913d8eac5ad9d2f34973cbc77",
- "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/9c/8c/5db3f5435168ff5270ae2dbd7977",
- "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/1e/e9/669c96cbbc701643459c26e0ce87",
- "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/a1/51/6234b8612e60917ecea82b8a7f3a",
+ "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/4e/67/45234cbaae5e74cdd50bab4423bd",
+ "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f7/39/95601dd0780dd07609592b57dda6",
+ "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/81/c2/fa7c53bfb8ab2b5bd8a07ae4c0ba",
+ "assets/build/pylib-apple/graphlib.py": "https://files.ballistica.net/cache/ba1/fc/d4/ee610106a558e0bd3a67ea75418a",
+ "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/64/05/5ec0ddcf87b51b3d372df9b7e740",
+ "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/5c/c0/cf70700130b4bdd0a09f06c3006b",
"assets/build/pylib-apple/heapq.py": "https://files.ballistica.net/cache/ba1/cf/ff/e3aa597a8669e6030a2b8ab06228",
- "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b8/43/24176dd09b4a346c5d2fb23b2489",
+ "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b3/46/08335f3fac6c64dae75d20e07283",
"assets/build/pylib-apple/html/__init__.py": "https://files.ballistica.net/cache/ba1/cd/32/56a082769e4cd6fb8de604e0a1aa",
"assets/build/pylib-apple/html/entities.py": "https://files.ballistica.net/cache/ba1/98/95/6e96db7b66edc0178c1680bbd561",
- "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/53/49/7e66623bcf32ec74f3b91806e36e",
- "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/0c/4b/fd4d41d4614d30fbbc8a29804306",
- "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/ce/d8/87e20752d130bbd5dd5e232247c9",
+ "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/64/af/83c193c1f479a9cc705b86c0422c",
+ "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/ac/29/61d2120b0900162a941b89c9773f",
+ "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/fd/6e/f396816c9a45b7e5d906ada54c60",
"assets/build/pylib-apple/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/ca/58/434a958d4f8372b96b4cfa87a4a2",
- "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/3f/7e/a86ac95ad155cd1e7469437ce570",
- "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/30/83/9001b9601fc4c335ba19384c7996",
+ "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/4f/b7/ec4c23a01fb3b7a7a8c88239fb17",
+ "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/0c/d0/b49e4c5a61de64a23b2c326cd6c3",
"assets/build/pylib-apple/imghdr.py": "https://files.ballistica.net/cache/ba1/58/22/50ad8d061dc8e6c9d59e96bf04fe",
"assets/build/pylib-apple/imp.py": "https://files.ballistica.net/cache/ba1/ee/bf/d6a2ec2413b54a6be3a02cfa00ba",
"assets/build/pylib-apple/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/4e/6f/8d7a262ab97963fdd5b9ce8efe8b",
- "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/26/7f/65d2f08e6894232a4fcc3f070f8b",
- "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/19/fe/c77419d8c6dd79a483b62652fe46",
- "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3f/bf/f3caab2fcf18ed1ae3ba1e9adaad",
+ "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/b8/22/e3b7a728bcaa4d1cc8e8211d3ed5",
+ "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/99/92/f7940cdd17b84552d2823ac3059c",
+ "assets/build/pylib-apple/importlib/_common.py": "https://files.ballistica.net/cache/ba1/83/f1/92265a70ba9137bef49793fb4963",
+ "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3c/1a/c59f8ffca97eb2bbd043566279b3",
"assets/build/pylib-apple/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/1f/fe/2a27ae49f0c0db298c9eac2d6fa4",
- "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/23/3d/9aa84052261a4f0a19d06413ceee",
- "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/88/45/4484c3e601fb26761c9f300d2866",
- "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/28/14/519fd434e756d3e630d96cbc4d4f",
- "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/e0/5f/793c8e2af7674d58c5da7ed8c6a5",
+ "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/dd/26/14b3863c2caa3f146a4220c16894",
+ "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/50/16/38c4b66d58318baf727603ed74c0",
+ "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/ca/bb/3a4156656f9b1f1037d2429a72f5",
+ "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/5f/5b/33e01ea6246c532b749ff56c713b",
"assets/build/pylib-apple/io.py": "https://files.ballistica.net/cache/ba1/f9/ed/07dba0ecf1e81d4cd816bce9542b",
- "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/4b/33/905d7110b8f1bdce47d9ca897302",
- "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/72/b2/49cbdedf6ad5c411bb444377ec4f",
+ "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/7a/3f/e87514b33ba1527edb5701932554",
+ "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/25/90/8a5205e19cc65824ea1055a736f3",
"assets/build/pylib-apple/json/decoder.py": "https://files.ballistica.net/cache/ba1/6f/c8/ddcd524fd23ec4c64a11c80905da",
"assets/build/pylib-apple/json/encoder.py": "https://files.ballistica.net/cache/ba1/ec/bd/e78407bc99409c0fd4a6ff25c112",
"assets/build/pylib-apple/json/scanner.py": "https://files.ballistica.net/cache/ba1/81/7c/03b7f8d8f18de6a1b12debd594db",
- "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/14/15/f9f6e36235068667cb79b18fae84",
- "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/58/77/7d22ba844f36174fcbf10e362d44",
- "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/50/52/03cee68f3d0a5959db0fb4746e6c",
- "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/90/f9/938e5408764ae6a0fc378cc301bb",
- "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a4/3a/d8719b6afe0790133bb09d168438",
- "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/47/7d/30abadf91ca12fe6e68fdc38b239",
- "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/6a/26/5e31888d46fc1f0616c2cc5cfc78",
- "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/8d/4c/6289a712439521bf99a154d316ab",
- "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/bc/95/77de0c6aaad3819b09abe0eed612",
- "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/c8/fc/03aaee28a480c60b9465c8358df2",
- "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/9b/50/39e619d3ea0dbda304627f859782",
- "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/f5/26/0d92ec3a03d7f933cf157572f375",
+ "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/64/eb/8e43da0d2e57b7b1b866baf76c7d",
+ "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/10/71/8b7f301021ebf02b37d116fffcac",
+ "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/70/6b/18924560575dc071af05ff1c23d9",
+ "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/be/38/d3f3510ad98468a398af864ca48b",
+ "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/bb/ab/f8ffb9fde815b8956983e7038e78",
+ "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/61/02/0138edd72b73cc8d2e3f7a112d65",
+ "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/86/95/c2c5c4f53cc2f9fef929145dbc93",
+ "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/a9/90/2cedbc63be303fd2e4fe9ad9293d",
+ "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/e3/28/f0d20f21f0858b3e730ebebdfef3",
+ "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/4d/23/f74089a34cbd2edc6c11ebb790aa",
+ "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/0c/ce/895933f8a07f7c21b500fa66a2c1",
+ "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/88/34/e12f85d48d954a45ecf42c243c21",
+ "assets/build/pylib-apple/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/aa/ff/356e0db47c4c1c06f8e37bcd38a7",
+ "assets/build/pylib-apple/msilib/schema.py": "https://files.ballistica.net/cache/ba1/bd/15/7ee47f77149296542aaf883e58f2",
+ "assets/build/pylib-apple/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/94/25/0e90328d0fb33814334a3ec64472",
+ "assets/build/pylib-apple/msilib/text.py": "https://files.ballistica.net/cache/ba1/39/0a/1a182e532d3f0574298120dad765",
"assets/build/pylib-apple/netrc.py": "https://files.ballistica.net/cache/ba1/35/a9/0a1e1c8ecab734c09a5f8d64b51a",
- "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/37/d0/25c88f817de5a6705d1c227bbd0d",
+ "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/fa/d5/e0f012ba98a3069ced1c5115c043",
"assets/build/pylib-apple/ntpath.py": "https://files.ballistica.net/cache/ba1/2c/fd/c8b71d3d5efdf44556c68df02d30",
- "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/d8/fa/0d625b59939d483cafa553790235",
- "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/92/16/807de1550920d485c87f3d587d5d",
- "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/7a/a8/3be6796ad635043eee8ba6ee031e",
+ "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/cc/79/e930bdf392702ad2da57f10c8a7a",
+ "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/45/40/fe6afa3e354c7bc5a9a8c3700659",
+ "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/e2/15/1f3f5e8e6a3c24b455f71a055249",
"assets/build/pylib-apple/operator.py": "https://files.ballistica.net/cache/ba1/c5/02/51e774eacc0e70d60420010749f4",
"assets/build/pylib-apple/optparse.py": "https://files.ballistica.net/cache/ba1/a0/0b/202b321b2eddb9b62f30d58fd1f6",
- "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/65/88/d7823716fea104e4e65665b35f27",
- "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/76/0b/2f2ac6ea5e2f56031de310e493da",
- "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/f9/7c/9da21258e7103d43019a8b121957",
- "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/f9/4b/0757ea3efc5c3bd10c325817b5e1",
+ "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/57/6f/960711faa73f4114c7e2b473330f",
+ "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/20/fd5951ff8c7f243dc49f13b6ebcf",
+ "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/6d/14/23ebc1d637aad4a34eaa42bc52e7",
+ "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/3f/5e/40fa7bfa971312a1a108610878a6",
"assets/build/pylib-apple/pickletools.py": "https://files.ballistica.net/cache/ba1/b0/a2/0655f9bef1f950e8f678be867bec",
"assets/build/pylib-apple/pipes.py": "https://files.ballistica.net/cache/ba1/95/86/92cb2b19dc776bd8d7dc459eccc3",
- "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/38/b0/3e59ab18a07c9f4f6995b855a7c4",
- "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/bb/d4/06918fb7382d0f898f0f33bbd83c",
- "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/db/bc/c8db0b8789383efeb714744754da",
- "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/92/a9/b8f8a4449c41b913cd0471a29703",
+ "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/e7/20/8f854914afa27fb4574720e5b9ba",
+ "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/01/b3/05c486dd9e13f7c8152ba1e5ca7f",
+ "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/e0/71/58498a0c336ab3a26bfe82db1c37",
+ "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/50/c6/d2c55762b3e2e06754cdec4aad0b",
"assets/build/pylib-apple/posixpath.py": "https://files.ballistica.net/cache/ba1/e1/06/e298802e053842f6d101326ae76c",
- "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/04/96/6c34676c08e631ded6416c14866d",
- "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/6f/e5/b1348f0c118f508d94d24f0a1133",
- "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/94/fb/1e30f0b143965be031f2c3fa4121",
+ "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/1e/80/4e9ac7adef0ffbf04946645782f5",
+ "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/87/07/7fc7d9607ba2dd3eace3de730d5a",
+ "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/90/cd/9f43fa464fdfc86a1c817cefb0cf",
"assets/build/pylib-apple/pty.py": "https://files.ballistica.net/cache/ba1/33/56/32146736331945537902f3771ffb",
"assets/build/pylib-apple/py_compile.py": "https://files.ballistica.net/cache/ba1/3c/04/8cb4b45ddb65e3d8c30521dc3166",
"assets/build/pylib-apple/pyclbr.py": "https://files.ballistica.net/cache/ba1/1a/e2/76bb863e9c510078b5e0828caf56",
- "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/c7/39/322ac2338f1737dfa217f3645609",
- "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/b6/2a/db3c0a47ad2bf43b3df8a2b4ebac",
- "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/34/a2/7e15c991e3a6ba75d988323117e8",
- "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/d1/55/4fddea355c8156b287408489b579",
+ "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/0c/fa/ed033fd11ded2014e69d07fa2f0e",
+ "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/bc/12/ad8745f4cd033dce64b4169d4998",
+ "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/71/23/921fa527149e18b7dd43d408f104",
+ "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/31/f0/de5e326b1e6ca1afeb1dd806b68e",
"assets/build/pylib-apple/re.py": "https://files.ballistica.net/cache/ba1/49/00/196fc6e98b9c244526b2d773c71f",
"assets/build/pylib-apple/reprlib.py": "https://files.ballistica.net/cache/ba1/25/3c/b07febf734908722d45da1ea6c57",
"assets/build/pylib-apple/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fd/6f/0d94c6ff1d295c4381fff0042842",
- "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a8/01/35faaa35a3f951aca147d1863f11",
+ "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a2/94/1a3796437765db0b1506744cda8d",
"assets/build/pylib-apple/sched.py": "https://files.ballistica.net/cache/ba1/6f/18/dd390ca79c5429626c7e4d3f52e8",
- "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/5e/a5/be60578ed41fe83eb1cd9124a2c4",
- "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/d0/d3/46fb0c3bd78b1a38c58f7823365a",
+ "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/fb/3f/59ef3e01440f29a2d3eb193cb873",
+ "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/4e/d1/ceb7bbee7484d8a49e8a3619766c",
"assets/build/pylib-apple/shelve.py": "https://files.ballistica.net/cache/ba1/9b/7b/ae49077c735a6347f0711d0ecbb9",
- "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/7f/24/3dd0f393ff5d88dba1eef618e3cf",
- "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/0b/3f/191461e95650816203174656fb58",
+ "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/9c/99/a93fe9fb09dbba3272bb202aa7eb",
+ "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/48/92/1894bd52237ac84f9c3b0449d825",
"assets/build/pylib-apple/signal.py": "https://files.ballistica.net/cache/ba1/1d/94/28fcd21e46fd2df5d11fd36b8a16",
- "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/b7/95/4d84e3aaf5c2bd15dfba3fb492e2",
- "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/74/25/b2a885dc3ec86528497fa22b44d2",
- "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/2c/cc/55e63d5083abe53feaa60b28ad9d",
+ "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/81/4e/031e216c8c1f87051d623ff84905",
+ "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/5c/e8/9a963624c83a1954ee852bf9c789",
+ "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/14/83/9acf640b895fd35c6e342f2f5025",
"assets/build/pylib-apple/sndhdr.py": "https://files.ballistica.net/cache/ba1/14/6a/c95a945f5f442e33567069ff95bd",
- "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/38/33/369517fa47cab8bf4bc020986108",
- "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/4b/d2/913b77ec0f800ec101e82e9e9721",
+ "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/88/b3/f0c30602772d32d5a2b05bb8448c",
+ "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/e4/81/ae642b90684451a011e516f74241",
"assets/build/pylib-apple/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/3e/dc/91b84dad3702e9ae8d915e3bd379",
"assets/build/pylib-apple/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/cd/c9/8ba4cb1adcb533d433e96af9f624",
"assets/build/pylib-apple/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/cb/c9/2ea904e0824aefc3d9524174fd29",
"assets/build/pylib-apple/sre_compile.py": "https://files.ballistica.net/cache/ba1/7d/b1/e88453af530e58284561945056c4",
"assets/build/pylib-apple/sre_constants.py": "https://files.ballistica.net/cache/ba1/95/ef/a427cef2c7463b6906f53e8811b8",
"assets/build/pylib-apple/sre_parse.py": "https://files.ballistica.net/cache/ba1/f7/67/2db2e1e8de620039831f008beb29",
- "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/7c/4a/5a2cd77e1d3b56e280ab08d8a03d",
+ "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/70/cc/18a939e2d26071e9f5242ad0082b",
"assets/build/pylib-apple/stat.py": "https://files.ballistica.net/cache/ba1/9b/79/01acd372faf539e10c6f87803eae",
- "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/4f/f9/ba5d026d82071429b4ed353b348c",
- "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/47/17/7792b18e4d5862d9269c3f2901ef",
+ "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/8d/b8/19267f0ccef11b191b210fe24e31",
+ "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/26/91/1f4fa0849214246a5befd79ffa18",
"assets/build/pylib-apple/stringprep.py": "https://files.ballistica.net/cache/ba1/f0/9b/77cc5580b139f527ee84fff812fc",
"assets/build/pylib-apple/struct.py": "https://files.ballistica.net/cache/ba1/10/6d/7a6c0fbac83b2680bbeda8585f8f",
- "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fc/86/c516d8f9c386967ae1c34998cb4c",
- "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/99/de/eb56408801fec20de1d7c4a745c8",
- "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/39/4b/212a37298559a013d6cb6ff84516",
- "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1e/1d/a678654eac2ee7df2ebb3f5974fb",
- "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/9e/4a/d4f9f5af2ec717c5a1882df63657",
+ "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fe/f0/6fa6c930a862d192b5050552768d",
+ "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/e0/49/c14a20e198761c7dfa423f09941e",
+ "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/98/87/854211c000e9ab3b9cf8c782c8c6",
+ "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1c/fa/cd6d53bd38fc81041492017c2f3c",
+ "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/7d/68/79a91d965f85c8612cfe8f0a941f",
"assets/build/pylib-apple/tabnanny.py": "https://files.ballistica.net/cache/ba1/f7/ba/da1e12d53ebdf326581c99c7d29b",
- "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/2a/52/c64343bf4355d5f2f50a31a55480",
+ "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/0f/24/af09379912cf5cd831945b6964a6",
"assets/build/pylib-apple/telnetlib.py": "https://files.ballistica.net/cache/ba1/48/28/786c9600155c60407fe91045d587",
- "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/80/78/bea27cd8dbca1d14733b18a7f971",
+ "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/86/ae/9ce115d11e51c9fc4fee7df23d6f",
"assets/build/pylib-apple/textwrap.py": "https://files.ballistica.net/cache/ba1/a9/d4/996c224bb06520a10b7bd86f8ee0",
"assets/build/pylib-apple/this.py": "https://files.ballistica.net/cache/ba1/ae/6a/c4cfb10d365db8ca16afef89958e",
- "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/ba/31/8a5be4b90aa2654e0c14fd8fe1ae",
+ "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/86/1d/12d419997981a3940c5881e253cc",
"assets/build/pylib-apple/timeit.py": "https://files.ballistica.net/cache/ba1/70/2a/4dc25a032c4975b059f972c76e0f",
"assets/build/pylib-apple/token.py": "https://files.ballistica.net/cache/ba1/da/77/a96be5a40982cc622f9812ee96e1",
"assets/build/pylib-apple/tokenize.py": "https://files.ballistica.net/cache/ba1/49/2d/09c9c18b942346de0a1eb5932d39",
- "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/42/50/c1163bfb4597bfe650d4b9116ca8",
- "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/ca/e6/b80536014c91b58078f251e535fa",
- "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/b5/1e/62e69ad7c2181e30fac478d4f936",
+ "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/c0/03/35378c9447884cf4bb71f6425c20",
+ "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/85/12/83105f24c37a9d989c13a698807e",
+ "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/77/0e/a83629cfbc0a9560ace295d5c403",
"assets/build/pylib-apple/tty.py": "https://files.ballistica.net/cache/ba1/ec/ea/2421fecb0e38e38d55cf0ce2b0e2",
- "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/21/89/94447b44682aa438ea205a7e4a06",
- "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/2a/c9/32965347ba5fa4b4fc0fab4d83c7",
+ "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/f2/15/b89887617276a3df5d4d465627f1",
+ "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/0f/15/91d405d301764affaad6cb2d9ad3",
"assets/build/pylib-apple/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/a2/c9/6d1cda1b043897ad0b5b043e7112",
"assets/build/pylib-apple/urllib/error.py": "https://files.ballistica.net/cache/ba1/09/dd/15e4e9e675bd3242b0d5fb0f2707",
- "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/62/f9/b69b5ca52b8b5951b946243b4adb",
- "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/14/9d/63afd0699904a811bc6fb993d514",
- "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/03/b2/ec9cd1798de4004d98d213362713",
+ "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/cd/33/817e945bd2ebb157c5949cd2108d",
+ "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/70/be/44b33af87064de4e5e387d213764",
+ "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/80/27/642b1adb216af47e5401647276e7",
"assets/build/pylib-apple/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ba/83/b9c99d5b11514b827d64f9fd6d33",
"assets/build/pylib-apple/uu.py": "https://files.ballistica.net/cache/ba1/02/7a/d6fed645dcff0d4aff84e3cea58e",
- "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/02/79/8cb316b2206be3cca67e6680036a",
+ "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/f1/2a/9e44739fed968c3b750184ff1b65",
"assets/build/pylib-apple/warnings.py": "https://files.ballistica.net/cache/ba1/65/5c/5e6cf7bf573f4fae2344c68bed04",
- "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/4d/a0/b093aa87d58ab11be45e1e8dd05a",
- "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/2a/74/9f4d631ef9a7e998ec9fa040fea9",
+ "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/fe/5d/63cca128c210230749e7ab44d94c",
+ "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/63/6c/284c757222502999672ca59f008b",
"assets/build/pylib-apple/webbrowser.py": "https://files.ballistica.net/cache/ba1/a1/e0/c43c65b7330f037c51ee10009ba7",
"assets/build/pylib-apple/xdrlib.py": "https://files.ballistica.net/cache/ba1/b7/83/ac6e63a15cead601475a09350849",
"assets/build/pylib-apple/xml/__init__.py": "https://files.ballistica.net/cache/ba1/3f/bd/6072ff48fc04c3af1dcbb8005adf",
"assets/build/pylib-apple/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/97/e8/e3ea178b500cab89a64c7e5d3d81",
"assets/build/pylib-apple/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/31/12/a48c1565e682174e10bbbcf5b819",
"assets/build/pylib-apple/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/7b/7d/a7cea1700813d14a0909085369b0",
- "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/a1/36/34d0eea18937a0e2ae01a817cb72",
+ "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/91/0e/e275bf104b202bf61654bd70d525",
"assets/build/pylib-apple/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/97/0c/a28bca0a0bd221a70cb6377f1bef",
- "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/15/c2/a7bb9dbeebf7e3082b9fc932b008",
+ "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/cb/1c/c49400fc90343e994e3fcf2363d0",
"assets/build/pylib-apple/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/bc/df/46a7e10fac8b5dd6c0361aaef6a2",
- "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/03/bc/e639a0fd394cf537f9c29993179b",
- "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/e9/83/50f2fae2edafbaacfd9e278d9d7b",
+ "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/40/f2/d8f3279b82679d625fc279e557f3",
+ "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/64/34/862bd6db5b788e67e6d97cdfffcc",
"assets/build/pylib-apple/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/73/a6/0633b38a4c9db85b021447c9457c",
- "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/24/b4/16f98ca0ce1d018ef86c370bba72",
+ "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/a7/be/4b2fa18753ae4f83215c2271918f",
"assets/build/pylib-apple/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/87/76/e8e68d23559ff4b14e010dad2a32",
"assets/build/pylib-apple/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/ec/0cd835d512fa5ca9bcada07c27ab",
"assets/build/pylib-apple/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/2c/3e/7f79fe325f250709ab2c01bedada",
"assets/build/pylib-apple/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/58/65/6ea61e8a28312897baa67deeac2e",
- "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/9c/f8/3660a1de69e4e8c18a99ee85ad07",
+ "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/7c/a4/ee44447f0bf4dab1fdaa5401a41c",
"assets/build/pylib-apple/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/82/3b/a63de9807fe5698ad1283e70e261",
- "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/1a/ac/411c7140a4dc1f075acad11a899f",
+ "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c1/7b/bffc2cc52335fab24863a87692a9",
"assets/build/pylib-apple/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/1c/69/1ebd1278f335c1f6283bded9e89b",
"assets/build/pylib-apple/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/2f/a5/38f2998b6ed24c674aa04a32d899",
"assets/build/pylib-apple/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/41/e7/9fcf670b326880d5452a7cc4cc7c",
"assets/build/pylib-apple/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/7a/ee/61deeb7b264890b54b1cbb894cf8",
- "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/64/07/7249de27571c45a051572d3e5f3d",
- "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/0b/6d/4d9c74b62db0068856f63ad0f29e",
+ "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/2f/a8/99cffeaf4f101014916d3415cdbd",
+ "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/8e/29/b94fdc590de0d74331e523cd2eae",
"assets/build/pylib-apple/zipapp.py": "https://files.ballistica.net/cache/ba1/bc/39/2d745b00133cddd197c3a4ee400e",
- "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/f2/7b/5614676b914cfbed897919046f1c",
+ "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/c3/1f/d3ed0dbc84826a76cf7d4fe32283",
"assets/build/pylib-apple/zipimport.py": "https://files.ballistica.net/cache/ba1/1f/fa/e11a7b5e9b1191a74bb80f48dc9f",
- "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/8d/de/800e3c97af2ce219a02b684e477c",
- "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/e3/4d/ef2b666ed2c1dce82f73407caf68",
- "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/19/76/d5f179d480b26ffe56308415d28b",
- "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/c8/84/01422f9047df7c561eb7478643bc",
- "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/4e/b2/30cb4f1924fe6ae528d2757ddf32",
- "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/4f/14/d3564fabfce0e2a079e5d911f35a",
- "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/51/d8/730d55a2ce2e2a1b5a1b738a4472",
- "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/95/17/04dee43b02b0a026d763cc07954b",
- "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/b4/c7/522ae34b6b5f22f92b4ad3b4ceb2",
- "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/38/9d/6d790cb3eb0b896b4821a0ff8e6f",
- "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/b8/82/4ee93baae05d17c96d0ffc45430d",
- "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/35/63/1ffc72d11aa065b98fa10f1a42e7",
- "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/c8/80/83f110f0afd6cd6e8a856ca860b4",
- "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/de/b9/666391fb24c5d179bd3950a89e73",
- "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/1b/85/a4d05514f2e04858415a4d38741f",
- "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/b3/9c/34a5681ae0f2f473003c41598145",
- "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/c8/e4/b4652214320f087102b1a3419fd4",
- "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/2e/90/98ac82df2ae5e46bec283f5d9a9b",
- "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/8c/8f/316765421523e677d5941258c651",
- "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/87/cf/4ea7db642edd5e03a46af41576aa",
- "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/24/d8/f17662d3c56ff611683657ddd2c5",
- "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/d7/68/2852343867a48ca04f2bbd0abed0",
- "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/f7/e3/45f3091b672acccbf3578b4bfe39",
- "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/4d/38/7ead86d7ccf1914bcfbb6582fb5e",
- "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/ed/68/e8042e91668ad33eb36561c6b629",
- "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/27/a0/49e56fe84dc098f72ff6b12f0408",
- "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/30/07/effc3f8a77e3938440146755f087",
- "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/c8/a2/ccdcef00ada2b993938928f29a66",
- "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/fd/a9/0564bf549953a848b725dcd1ec8a",
- "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/10/1f/985bb1cb8d65a055554bccd1ed7c",
- "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/33/11/5a33331b18e47f49acb46a14a02b",
- "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/85/8d/6b43a04ea1324aafb8c8306a7264",
- "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/08/6a/8e74bff951fdf6f20f0e2feed891",
- "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/a6/a1/c8375b852ec72779bcfc13ef1d3b",
- "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/1e/d6/bfbbd4179c10779da86bce93db27",
- "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/dd/52/1437c93c7ae7adec7dcd020a0a69",
- "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/be/93/d94a12ed9a2fb4a4fe30c7bc1d14",
- "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/d7/71/e781ddfbc40f9946bec4e587847f",
- "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/27/e6/b72e931d1cc112bc6172509afe8b",
- "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/c2/d6/482bda4e439a5d7cb339528c59fb",
- "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/a2/ae/8f0117dacefaf1518a508e4f84f1",
- "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/91/b9/efde15bd959340cfe6235dd8aeb5",
- "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/fb/4d/98a28fe2109ffc2373bc4071eed0",
- "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/22/74/724cad55596b66aca60c4a6722ea",
+ "assets/build/pylib-apple/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/0d/98/0cf009982c33ab3cfec1cd201628",
+ "assets/build/pylib-apple/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/86/c5/8825cb59916a302b81a0b540e6ec",
+ "assets/build/pylib-apple/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/23/43/a1f97306955413a1100b70e04d10",
+ "assets/build/pylib-apple/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/1a/99/08ccb8b87d05018a64b84d53ef30",
+ "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/22/52/ad23d03bc2e3fc4dfde1f89e197d",
+ "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/4c/5a/941b11f15c5fe3c685885bc19908",
+ "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/60/0e/6d1e3c3e82f081976e61c6d1efe4",
+ "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/bb/cf/e717d28ffef8f6c2648271961aa6",
+ "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/d2/42/376535f2b5ea4c6e987702456494",
+ "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/e0/d1/188181bd1440d3d6b17d9cc430a6",
+ "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/37/ce/338c5f51f465972a4495e8bf10fc",
+ "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/fb/5e/f3252c380be87ac072cf1c29d7d0",
+ "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/29/fe/20e8c5d844f30f341253c679d565",
+ "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/a1/db/6f8ea21df65f20d9309f63938af6",
+ "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/9c/86/3f39e211d1067e8483a657c368b2",
+ "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/cc/a7/2fa7de781454cc7ab0416b0bee88",
+ "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/0c/8e/5abee214051dd1b87d4309a136c9",
+ "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/9f/fd/0fd9bac57aa9f94d2209e60f2546",
+ "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/0a/c1/067ffaf2a3bbea4c51ccb76acd1f",
+ "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/df/b8/d21ef8ca37220c949d85e5ea874c",
+ "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/d2/66/e9e950e59e659d4542d75e12f54e",
+ "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/ae/5f/bfdf8227e62166423249d63e56d3",
+ "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/37/1b/98a07c79caea8d8998f3e07a5f9f",
+ "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/78/63/316ff1e334e1fd24ffe2b643f8d8",
+ "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/7e/9e/f8eaeb281e028b5a78e4de2f0268",
+ "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/b4/d8/853dda49597b0a8783ed14c7bbb8",
+ "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/a6/56/42f28a2d1809c749cb7e56cb1cf0",
+ "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ea/2196a613d1682e75c9e712fc7aa7",
+ "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/5a/1c/e64b2a89f4df0c962fa2cb17234e",
+ "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/da/f4/f1f1b9f069f9f7b251a38cb3fe55",
+ "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/7e/86/26168e1e46e318234b888e88e844",
+ "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/e4/12/18fc7db11be959305c49809851b3",
+ "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/ce/8a/abc5bc6c360e7de2664a286207ed",
+ "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/2c/d7/25b290950abfdea9d1b94ad417fd",
+ "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/b6/24/13068ed8e795ab35ceabae97e2a3",
+ "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/9e/9a/cc172f66b18c77b92cf783bcc6ed",
+ "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/2e/9e/3a1ed361d7c4f8db175fd8026334",
+ "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/78/79/08eb4093f32721be1a3e354c3606",
+ "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/25/93/1c067e2954da7ac347035d97aa3f",
+ "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/d8/eb/3e0e733d974f900a8ab62d97ebcd",
+ "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/a9/84/5552aa6b0b0a595db7c2683079b9",
+ "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/1d/c3/92e78838956fe374163bae5608b5",
+ "assets/build/windows/Win32/DLLs/_testinternalcapi.pyd": "https://files.ballistica.net/cache/ba1/a0/36/a82fefcc8b835249363dbb1efd42",
+ "assets/build/windows/Win32/DLLs/_testinternalcapi_d.pyd": "https://files.ballistica.net/cache/ba1/50/9b/87d58f57ef02c4f7652d5c396676",
+ "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/59/79/7547cccb4168b1647ecc29155a30",
+ "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/b5/1b/c9091db3b0ca4d7beb759ef5abd5",
+ "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/bb/80/3298b565d570542b206322d986f7",
+ "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/7a/4b/2036e3ffd4e3f29c37d05262c687",
+ "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/4a/e9/c65557c813db399f548ec90cb33d",
+ "assets/build/windows/Win32/DLLs/_uuid.pyd": "https://files.ballistica.net/cache/ba1/99/21/527dbc767bd0db38bc7bdf81a5d3",
+ "assets/build/windows/Win32/DLLs/_uuid_d.pyd": "https://files.ballistica.net/cache/ba1/b7/41/54b21a07edad343b2c65ea37368d",
+ "assets/build/windows/Win32/DLLs/_zoneinfo.pyd": "https://files.ballistica.net/cache/ba1/fd/54/86755ec70a6681438dd3793d6e94",
+ "assets/build/windows/Win32/DLLs/_zoneinfo_d.pyd": "https://files.ballistica.net/cache/ba1/e7/46/21aefbc51dc3f062bf3b44484a0f",
+ "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/4f/2a/9cf37a97aae4b567ded5236de431",
"assets/build/windows/Win32/DLLs/libffi-7.dll": "https://files.ballistica.net/cache/ba1/0a/62/9908b69e4aace0659b7ba62772bf",
- "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/51/de/d89dfbf61686f9f7c37f1bcba5ef",
- "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/c0/f5/9724a4694a3c9ecc879408c115bc",
- "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/c2/41/51027410073a6238a056263b5450",
- "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/ca/22/1f7cddb73b48ffd50f08081c27c3",
- "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/2b/33/f32faece43ae5a1b58951800355a",
- "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/54/83/e80947d5ed0a46e68312773653fb",
- "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/af/db/13085b111321d3a4fdd843ffcf54",
- "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/d2/23/82ec454973363b65f92440e4d967",
- "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/60/2f/ff01f24a6876e8f9e821c3851664",
+ "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/ec/da/2587760334af1ca1f641c68af262",
+ "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/f1/9d/46f667c13fd18325fab26f88f4fb",
+ "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ac/36f6761a81383223574327c15a84",
+ "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/70/9b/fc186dc7eb3e8842429fad8782cd",
+ "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/41/ef/7fb20d50587028ae9174b5e33cc7",
+ "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/96/86/c175242f93f83ceb65afc2f58038",
+ "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/12/a5/b2981a81fd12e34a51e87e413f96",
+ "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/f8/bc/7bde605127c7885bc8e333a9a6a1",
+ "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/57/08/f35bd104a0b19ad84a049baaa0f5",
"assets/build/windows/Win32/DLLs/tcl86t.dll": "https://files.ballistica.net/cache/ba1/45/33/a98580a5a3794c22b8d487a256db",
"assets/build/windows/Win32/DLLs/tk86t.dll": "https://files.ballistica.net/cache/ba1/84/35/2bfd12b142f4fe1ff277e9ce3940",
- "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/5c/47/0d7b57ae78def60ca263f35b97ca",
- "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/fe/20/1d7bde0812563ab4b585e03a698a",
- "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/50/ea/951f98c6f187f25757dae10b8337",
- "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/28/13/8857b36063d66e952434a3973853",
- "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/3d/b8/861d93720bc3cbcfaaae4b83b244",
+ "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/96/c3/5bb5f4529d89652d21d3230a76a3",
+ "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/91/00/5716068772dfde8b63a045b692c3",
+ "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/e4/0b/5ad587d3f0169b050bdbfc8d9432",
+ "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/af/8f/e7da8fbcf5db9a28d4ccadf493ce",
+ "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/28/b0/3c7d3d3cfabd14056c5955905de9",
"assets/build/windows/Win32/Lib/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/3b/8b/939d78ee0764fdf52f3098127d6c",
+ "assets/build/windows/Win32/Lib/_aix_support.py": "https://files.ballistica.net/cache/ba1/bc/4c/8e5bf871e7543e51896cdee31412",
"assets/build/windows/Win32/Lib/_bootlocale.py": "https://files.ballistica.net/cache/ba1/09/0e/9293a47b0ed243fc7482ab56b330",
- "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/00/3b/57aa68a37cfe29103b6c1f23d59b",
+ "assets/build/windows/Win32/Lib/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/7b/c0/88d4a649d94551456dc8702f3739",
+ "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/50/5b/8687e8abc95677bb91b9bd156bd9",
"assets/build/windows/Win32/Lib/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/46/06/1015248f3c4416edb60e7830aecb",
"assets/build/windows/Win32/Lib/_compression.py": "https://files.ballistica.net/cache/ba1/db/90/20ab62fe1558d9ec656e5ed43d0f",
- "assets/build/windows/Win32/Lib/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/41/7b/e6e2723be021e2c4a5ca9de01ea5",
"assets/build/windows/Win32/Lib/_markupbase.py": "https://files.ballistica.net/cache/ba1/0b/b4/b2b374394442d3ceac5659174306",
- "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/08/7d/966879d8875ca07403db2f0ccb6b",
+ "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/2b/fd/127d8cfeb2d06d9bde24d25d2ec8",
"assets/build/windows/Win32/Lib/_py_abc.py": "https://files.ballistica.net/cache/ba1/ad/d8/684169061fcf843ea3541d4a27a6",
"assets/build/windows/Win32/Lib/_pydecimal.py": "https://files.ballistica.net/cache/ba1/1d/27/479bf918f1c1d21e41a793adfcf1",
- "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/ad/1d/2c6c4bb1acb9184f47a50df117f1",
+ "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/95/c4/f1bf6ca088ede4e86edb8413c399",
"assets/build/windows/Win32/Lib/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/f9/0d/fb8aa34c3c72f100ea0de27b6891",
- "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/bb/b0/9a4289fffa3a74dd5fdab6128bf0",
+ "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/1f/d3/d9d48711d7c2f8272d85172bc142",
"assets/build/windows/Win32/Lib/_threading_local.py": "https://files.ballistica.net/cache/ba1/6c/8a/9ac70e582f8ec4da33694a8a2409",
- "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/d3/e3/ff1d4002e752d1410a3167c00642",
- "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/c1/db/33e9537d855bd8c0e34660099463",
- "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/f0/05/54f64f43dd8a1269b42495106a8b",
- "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/fe/66/fc51a4ead5b55dbf09bad7dee9cf",
- "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/46/34/8dc5b7f13686ed4f3f996effeca1",
- "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/86/d1/93d66a0c3eca891bcba343c6ed71",
- "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/6d/8d/403f343399d118de9e3c42bf15ae",
- "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/23/99/3a675e89dbd967a1ae1f9b58df2b",
+ "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/98/8f/0eefe23bddf158278317f3c713a9",
+ "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/27/ec/e418babd57b0f811976a6736f269",
+ "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/c8/7e/7a303b0e1b32c42dc2878e80c931",
+ "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/06/68/e45f30bcc009d8e4647b2d881cf8",
+ "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/42/fd/ca8f9760542715ea59ca7f8f6fe7",
+ "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/a4/26/cbfec43c646695dde17b01429d13",
+ "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/65/35/92f80618fb7959c1df4c945c4d28",
+ "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/47/e8/0aeb647d8a81881454fd46596290",
"assets/build/windows/Win32/Lib/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/fb/f0/a4fad40aea4845a907af269fa159",
- "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/8d/61/9aabcbec5e16b10b60d9816bf168",
- "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/11/55/a6611b2c4f69b7aec0256fac7c04",
+ "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/44/88/2ab54dda65f1c6f7fc735ea3ed8a",
+ "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/c8/13/786974d187c40e2b50174f73f040",
"assets/build/windows/Win32/Lib/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/0e/c0/3384fbba49486643e507a49770ee",
"assets/build/windows/Win32/Lib/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/28/9d/b3adf943122909eb73dd216ef179",
"assets/build/windows/Win32/Lib/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/28/3e/49ec61050acc59c2bb5761d5332e",
"assets/build/windows/Win32/Lib/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/22/0f/65ce7b4328dbdf3a300616755b5f",
- "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/b1/05/2e1dd073cc595bcc07f6eb4a42dc",
- "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/00/70/1a9e71b51410e1d7a674201c5956",
+ "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/67/3f/4debf11f78e291da31b6db00d533",
+ "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/8e/d5/3836a190b2e188ab2889cfd572b9",
"assets/build/windows/Win32/Lib/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/40/98/952c80350fd35c81680c0d565aa1",
- "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/9f/f7/f1b103c12bfec7aff8fc17d2b730",
- "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/10/f8/b21927b7d94ce1db0643d50ef4a2",
+ "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/a3/ea/88fb555361525076067b5bf5fd9a",
+ "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/e4/74/15884a54a0096b9aa3e60ac6f348",
"assets/build/windows/Win32/Lib/asyncio/log.py": "https://files.ballistica.net/cache/ba1/d6/d3/380f88b21d3b8ef14f758f283af0",
- "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/c5/f7/4442452b93b5c09747219e6a2713",
+ "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ed/84/84d50b1c795e686d8049f5ba3efd",
"assets/build/windows/Win32/Lib/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/95/49/8df484a9d8a0fb3259f90ef5c96c",
- "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/61/ba/dbf2d71075f7a5bc7633261c9c3b",
- "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/7b/41/4f6c78ebc75f4ed41d97d9289554",
- "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/18/2a/70a2893571a2af3092fef753b57f",
- "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/47/7a/942926b07057203c2e7288f59815",
+ "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/9d/89/0b6df7636a9293a332a94ef026d3",
+ "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/6c/49/d7b9de6bdcf033dd1ef88d74791b",
+ "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/97/93/65ddcf1af3cd4d63d76432f283ad",
+ "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/84/10/cbc702706139eb7301d56b9dbeff",
"assets/build/windows/Win32/Lib/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/9f/52/01396863292b0b31dfbc92c03907",
"assets/build/windows/Win32/Lib/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/23/a6/917ae117a4057839242a360c1fd5",
"assets/build/windows/Win32/Lib/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/7d/47/eeed1a313027e5ee77acfaa0dc0a",
- "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/ce/d2/5a2220b412f1942e7580bbf942de",
- "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/c4/85/42d04f243299aeb34e7df9aca184",
+ "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/09/3c/85845d812f4d76ed858ae4a5337a",
+ "assets/build/windows/Win32/Lib/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/8b/ec/747fd095b73a211ce132a135270d",
+ "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/69/90/f354c7899dfc7c116f3ea56d4a93",
"assets/build/windows/Win32/Lib/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/46/88/ab7c4a2f09e5a3b9f675d5f89b2e",
- "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7d/a1/000d2bec4813db2295c888991800",
- "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/e2/32/e5093d00d060bf24a02335ba6d36",
+ "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/92/68/9fe73e30046c65c126771abf5361",
+ "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/76/e5/194c508e2540f13df818a9c5fd2c",
"assets/build/windows/Win32/Lib/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/bd/ed/ddb1d357625e17352ed9928cb9e5",
- "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/7c/9e/3da840852d4b2389cb7c286d016b",
- "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/d2/54/a6f18991ae74f56b4779e881a199",
- "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/f1/db/04f5a5f69b53227b2cea2a9ed417",
- "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ff/de/25906a6ac05fb00f147442afb165",
- "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/ab/40/e561035a5c9d84d0346e2a1b4ba1",
- "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/61/15/adef78493f0e2509db7590ea293c",
- "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/56/8e/02e250e073deb65c6c6d0c81fb4f",
+ "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/eb/9f/ac2902b088827a0bb1983dda3ad2",
+ "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/2f/bb/c8b49dbb0e7bac27e0f17c4b9a8b",
+ "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/2d/fa/6414bc4afadb24af4379a4ea3e7f",
+ "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ea/3b/4934f59948cd40a4d47462ae8a7f",
+ "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/89/bc/f8684bfc3fb49a15695e005dfcc5",
+ "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/51/ab/2a9647445ad2d7aa9889a4b35d28",
+ "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/c3/00/d6ba42740a6a153aa1c5bf6e15e5",
"assets/build/windows/Win32/Lib/calendar.py": "https://files.ballistica.net/cache/ba1/19/df/5fcc786979f9697a113d8ba9363f",
- "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/13/3b/49301cdd99d04c2cb027dc8bf954",
+ "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/aa/6e/4a622920aa2e19446482077506c5",
"assets/build/windows/Win32/Lib/cgitb.py": "https://files.ballistica.net/cache/ba1/77/44/358b17a4fc4b06db2d69d51bb1ff",
"assets/build/windows/Win32/Lib/chunk.py": "https://files.ballistica.net/cache/ba1/16/08/2708ae495aab5e54fe27da06f633",
"assets/build/windows/Win32/Lib/cmd.py": "https://files.ballistica.net/cache/ba1/cc/83/f3046ec22ee06c45649da6add0c7",
"assets/build/windows/Win32/Lib/code.py": "https://files.ballistica.net/cache/ba1/61/31/f1ff9d938a5f29efe83838362b52",
- "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/1f/64/412ff1b173e741fec018e4013213",
- "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/07/8a/5015a1453f0645dd58f5befa8fbc",
- "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/89/aa/c75b4a114fb7caf9554f7e0030ea",
- "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/ee/9e/1b14e35345f9208b897b8db40100",
+ "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/e1/ab/8cc272e5925ec1129d176c15c81a",
+ "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/6d/b0/f7f92e64ca371e9c307e637d472a",
+ "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/a7/a4/c979a01d557a822c3a3c4cd47be2",
+ "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/47/0c/2287da3638e7910fecb7b32504a0",
"assets/build/windows/Win32/Lib/colorsys.py": "https://files.ballistica.net/cache/ba1/e8/1f/297a0b5e14be06d3f3f554c9725e",
- "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/60/d6/1d1435455b13730345ed85a54cd3",
+ "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/df/16/82206d2b01cc4a0bf6d6f2ec52af",
"assets/build/windows/Win32/Lib/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/5b/ec/08df2761a442b8ff6fe7d52fcc89",
"assets/build/windows/Win32/Lib/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/c7/46/341d04b8d611753ebc06780081ea",
- "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/85/fc/0d7d7cca61f766b4409d6fbe513f",
- "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/7b/d9/5cb645d05a0bfa6fc3c023c09884",
- "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/ce/6c/1e79d68a25a3f0e69cf3433264cd",
- "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/d9/cf/771c2ae14dd33a948e16a784a48f",
- "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/0a/d0/ee6f3432112f85ec1efd7253e728",
+ "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/81/36/21912471515ec8e94fcef7a54767",
+ "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/c2/eb/631cc0bc19c522e583ec52d300b3",
+ "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/dd/54/4017d80fe7f52897d60f4fef9d91",
+ "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/5f/07/f39cf85883b16140c38745db8571",
+ "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/16/7e/e8ca4b4e2a997b0fdf59fb7c2197",
"assets/build/windows/Win32/Lib/contextvars.py": "https://files.ballistica.net/cache/ba1/97/a6/19610cddd01bb44cc6f9d3a21293",
"assets/build/windows/Win32/Lib/copy.py": "https://files.ballistica.net/cache/ba1/28/95/d923a86e884501194d65f2646de8",
- "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/98/b3/d832dad3f6c073d6efcb14da53ce",
- "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/ae/cc/e39c20e40e3388095e186b6aa3b9",
+ "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/b4/e5/7796afa4c52102760e81854d581d",
+ "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/cb/33/c3831d873f0e168596fe6d6d0a6a",
"assets/build/windows/Win32/Lib/csv.py": "https://files.ballistica.net/cache/ba1/61/84/ece8a5a1edd77dfd481a0029bcc8",
- "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/b5/3d/9e5225131d6b60d12eda1f11e058",
+ "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1b/69/8e9072eb16430d7ac77bb3065d8c",
"assets/build/windows/Win32/Lib/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/30/2d/3ad91a485f58eb3690c863e7a961",
"assets/build/windows/Win32/Lib/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/04/c7/1775ac390854c9015be8e834ff50",
"assets/build/windows/Win32/Lib/ctypes/macholib/README.ctypes": "https://files.ballistica.net/cache/ba1/90/bf/d7c620c1dec8a9219b27e1cfa6f4",
"assets/build/windows/Win32/Lib/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/a7/68/4d72c2a8db47c671575650daa0e6",
- "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cc/29/9eb47bbb4519ff41fd593917a78b",
+ "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/5a/b0/dbb8fe9518edf3a514f5fcdf7d09",
"assets/build/windows/Win32/Lib/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/c2/c2/547efc609d150143701b892bc5ae",
"assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib": "https://files.ballistica.net/cache/ba1/4d/fb/26d07e6522338f7fc233734f8807",
"assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib.bat": "https://files.ballistica.net/cache/ba1/ab/58/c056f07d65b7abf4ac2fc3598947",
"assets/build/windows/Win32/Lib/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/fb/23/90116831cb2f6d105bc3cd65559c",
- "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c9/92/b71e0b1afdffde4b91ce0ad71cc8",
+ "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/8b/ca/74691e74841c822d74843c8cb1fe",
"assets/build/windows/Win32/Lib/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/25/1d/9a7dfb9d5c76744c30ffcde3b6eb",
- "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/d4/7a/94f01cec089c4c7b3a058954d1a0",
+ "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/83/2b/9028d278d47bc11d9ad0326f68a9",
"assets/build/windows/Win32/Lib/curses/ascii.py": "https://files.ballistica.net/cache/ba1/fd/14/86316d73c170437831841f44f410",
"assets/build/windows/Win32/Lib/curses/has_key.py": "https://files.ballistica.net/cache/ba1/39/59/8a09c722d5a9c762fe51d6bf827a",
"assets/build/windows/Win32/Lib/curses/panel.py": "https://files.ballistica.net/cache/ba1/48/9c/133d9a244f62e3739cb392d1a096",
"assets/build/windows/Win32/Lib/curses/textpad.py": "https://files.ballistica.net/cache/ba1/ea/c0/e047229f762662427d6c64dd3c61",
- "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/1d/0a/d2ae7b3e8d6db1a24afed5549455",
- "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/09/bd/bd6fd74b8cd885b5032ffe2d2718",
+ "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/e9/9c/827ff1be7ab63af4842d26747f15",
+ "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/34/e1/f8c7052b4702a8715328be059132",
"assets/build/windows/Win32/Lib/decimal.py": "https://files.ballistica.net/cache/ba1/d5/55/9ae7a36d41bfe37b2d67ce3599d0",
- "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/20/25/50f6e9a63e9660b451ccbd9f8d86",
- "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/31/e7/b3775d40bca4e0b4810fbb312260",
- "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/35/31/60314b37cfc4ef8e06b9c512a129",
- "assets/build/windows/Win32/Lib/dummy_threading.py": "https://files.ballistica.net/cache/ba1/08/5a/e7d834d6197d9b58a075b05c4be6",
+ "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/fc/ce/dc021d207553e253bf5f4f3ef8d5",
+ "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/2d/e0/0d23d642882feca62642623b1925",
+ "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/59/0c/c7495e1f68cd0e217c2d1a6aeaaf",
"assets/build/windows/Win32/Lib/email/__init__.py": "https://files.ballistica.net/cache/ba1/ed/7d/64247a9b90f5c7b3f577b0e28ca0",
"assets/build/windows/Win32/Lib/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/05/81/408bbbd16a07d3c6473ff0ce523b",
"assets/build/windows/Win32/Lib/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/79/74/8b39d9278c30a5113a6285f68c13",
- "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/ed/d2/06c5127141292bc913caee80137b",
+ "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/07/39/929a44451e24380aebd685d081ba",
"assets/build/windows/Win32/Lib/email/_policybase.py": "https://files.ballistica.net/cache/ba1/06/37/302137642525762bee6ce4a09cf1",
"assets/build/windows/Win32/Lib/email/architecture.rst": "https://files.ballistica.net/cache/ba1/78/7c/c4274166d5aa06c20c2c0d391104",
"assets/build/windows/Win32/Lib/email/base64mime.py": "https://files.ballistica.net/cache/ba1/92/3c/d5b71a0457e0715462a700c52e78",
"assets/build/windows/Win32/Lib/email/charset.py": "https://files.ballistica.net/cache/ba1/85/85/2e724aa519d670805839deb3415f",
- "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/32/ed/b0372aa11be4a30fbd1820b57bb1",
+ "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/60/a3/969ab2b942387eaac59a53312f7c",
"assets/build/windows/Win32/Lib/email/encoders.py": "https://files.ballistica.net/cache/ba1/05/5e/1da72e6b33454bc00ccc75bae468",
"assets/build/windows/Win32/Lib/email/errors.py": "https://files.ballistica.net/cache/ba1/53/1a/246d8f67140256975ac7ae97d1e5",
"assets/build/windows/Win32/Lib/email/feedparser.py": "https://files.ballistica.net/cache/ba1/aa/d0/f54e9f077a1a3a69295932c21353",
- "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/92/60/db86790637e373e2a198c89619a7",
+ "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/ee/1e/0cd02341e34d798770b3ac88d9d4",
"assets/build/windows/Win32/Lib/email/header.py": "https://files.ballistica.net/cache/ba1/d8/53/2ad4aea28a0f2fb1dcdbaca1d8e8",
- "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/89/87/3e0601839389ab46421c1325608e",
+ "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/be/5d/d42e0fa956f6785fb22b8c958e19",
"assets/build/windows/Win32/Lib/email/iterators.py": "https://files.ballistica.net/cache/ba1/90/09/e8c04371be81b7ab0a11be68784d",
- "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/13/eb/1359fed9fd0ba38797bcd98a45d9",
+ "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/37/dd/436fd62061b38bfdd6279d235bae",
"assets/build/windows/Win32/Lib/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/b5/ea/80f195a1c0d100480897a83a4da4",
"assets/build/windows/Win32/Lib/email/mime/application.py": "https://files.ballistica.net/cache/ba1/a6/b1/f129c2517c74d85f48087f80824d",
"assets/build/windows/Win32/Lib/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/29/39/306f35115c997946975ac7c0191b",
@@ -3617,9 +3640,9 @@
"assets/build/windows/Win32/Lib/email/parser.py": "https://files.ballistica.net/cache/ba1/4f/06/6bf636bb70433a9a62c41bca8406",
"assets/build/windows/Win32/Lib/email/policy.py": "https://files.ballistica.net/cache/ba1/77/b1/8a70ba209a24931675bff0a345cd",
"assets/build/windows/Win32/Lib/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/76/74/92b4640edaa325ff338c5affb245",
- "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/eb/d6/bb1e792fc83161264525c914cc46",
+ "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/99/d7/af0fd7db83f90594c82066c49d21",
"assets/build/windows/Win32/Lib/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/6f/a4/bb19f2225934af92392ef32b5096",
- "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/7a/7b/9e1451e88044c5c16cf671d207b8",
+ "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6b/e8/e4a9550b7bba748fef8f65526066",
"assets/build/windows/Win32/Lib/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/41/44/3c51a65e96fdbbdfc71983863cf5",
"assets/build/windows/Win32/Lib/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/f8/5d/78e448a54324be27c57960c3ef8f",
"assets/build/windows/Win32/Lib/encodings/big5.py": "https://files.ballistica.net/cache/ba1/59/23/27486e3ee84ed7e8f3dfcba5497d",
@@ -3706,7 +3729,6 @@
"assets/build/windows/Win32/Lib/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/d3/5b/422fa8a73c17bb05fdff6f663827",
"assets/build/windows/Win32/Lib/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/41/45/1c7f9d33cc7a8febf0a0071808cc",
"assets/build/windows/Win32/Lib/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/0a/8a/ab8900ad1b09cd5faeeb6eb6b5c6",
- "assets/build/windows/Win32/Lib/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6c/27/ad832c0664490a0783439df01a7f",
"assets/build/windows/Win32/Lib/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/a5/01/ae139e112718536de88fe63f5bbf",
"assets/build/windows/Win32/Lib/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/01/84/40472ce95eaf2c04d3387a021eeb",
"assets/build/windows/Win32/Lib/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/04/9c/0b1bfb3fa6b4580cbc0c95f05f3d",
@@ -3741,246 +3763,252 @@
"assets/build/windows/Win32/Lib/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/02/57/abf1662be43acd806d712d09ad92",
"assets/build/windows/Win32/Lib/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/ca/1c/8b4574b02be8387d5b8818d1399d",
"assets/build/windows/Win32/Lib/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/ca/b7/a919c6be178102f90d97879e61ec",
- "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/bb/c9/3118d618dc2c7a6c11e4336e7b2d",
- "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/20/32/e1aa0ebff27033ec554330288554",
- "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/9c/59/041f2cde1b129359ae61dfa9816c",
- "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/50/d8/be1bfccd23262714b368a87efcfe",
+ "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/c4/f3/60d3296bbfadcc6941b4e0d3b324",
+ "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/d7/a9/8bda33ae3ccb35a4f8fb8e58d5c7",
+ "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/4e/af/c6223e6830124b4705ea655a1a78",
+ "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/e9/b4/9afa7e0e63d5fc0cba43ee03189b",
"assets/build/windows/Win32/Lib/formatter.py": "https://files.ballistica.net/cache/ba1/94/4e/c1f6b9a2f088571d5faa0f323dca",
- "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/d3/66/5942f4e9b9ea2f05fb7de136f2f3",
- "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/09/0e/05e3fa3fc16419c3f5be08c5d3fe",
- "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/bb/24/12c61dcec09c98ad01b56801db9f",
+ "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/00/ef/ad0286aae0aa2f66ea28206fbc44",
+ "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/cd/ab/0156861df1e160c17b79454c7b72",
+ "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/a5/54/2fdee10300ef21de3e7ce0e58880",
"assets/build/windows/Win32/Lib/genericpath.py": "https://files.ballistica.net/cache/ba1/51/fc/1a323017e8b06cdc6327c524fe66",
"assets/build/windows/Win32/Lib/getopt.py": "https://files.ballistica.net/cache/ba1/c8/63/dfdbb68d2e67c3bae4f9dcc3f0f5",
- "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/be/e6/71f0a41074219d94d7e5f4d4dd77",
- "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/11/6b/c1e62ac780490c34659934a6ab38",
- "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/36/6c/b8ce0cc27f4cb3b86db3c7d9347a",
- "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/b8/da/b458a9670a4fa0d99a4835489a95",
- "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/58/22/5813b858f7b0c5f6bd3c08b5e270",
+ "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/72/31/d1e384b10905ca750c1ed8c0b84a",
+ "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/0e/42/9e44277c3e9347fa5401959e3705",
+ "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/0d/68/f6f02a463d42eb1321a440b7d351",
+ "assets/build/windows/Win32/Lib/graphlib.py": "https://files.ballistica.net/cache/ba1/15/35/2836d5b4fd3bd165e36c08019ace",
+ "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/bc/11/1ae05369d31b657cc555500510b3",
+ "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/76/99/f4b0dfa9bd74c599168245ada448",
"assets/build/windows/Win32/Lib/heapq.py": "https://files.ballistica.net/cache/ba1/34/2f/f8ff15aedf39c36b2f6412af45fe",
- "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/30/f4/e91fda1efa524172eb6aac3d326d",
+ "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/97/9f/ced773ee6db266ea49ce9484d878",
"assets/build/windows/Win32/Lib/html/__init__.py": "https://files.ballistica.net/cache/ba1/8c/08/c638db74e5e5979dea109da1f68b",
"assets/build/windows/Win32/Lib/html/entities.py": "https://files.ballistica.net/cache/ba1/52/69/e7311caea2fbfdfef9c05515de4b",
- "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/93/8c/7e6734f43521e484eff3265c3b2f",
- "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/00/9a/8db3eba06a3e0e739cf2da0c8996",
- "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/9b/b3/823a9620582a4310880c99b9013b",
+ "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/6a/60/b90c31b1f1474741106d3da6de25",
+ "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/bb/b0/88199e7610b1ad70587c5472753e",
+ "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/0f/84/59222e132a3410d380fb217e3f52",
"assets/build/windows/Win32/Lib/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/08/00/0b45e485fbbf70dc705d41216abd",
- "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/d1/96/f86c64ac27b1aec761087d1fc55a",
- "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/30/7e/5e90c701918e966c0a10fe2b3d88",
+ "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/4a/49/a309c5a835f284a508f1a621ba61",
+ "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/08/f6/9b039097180d2129109230798b52",
"assets/build/windows/Win32/Lib/imghdr.py": "https://files.ballistica.net/cache/ba1/a8/49/6afa9e88ee446fadd95254fc159d",
"assets/build/windows/Win32/Lib/imp.py": "https://files.ballistica.net/cache/ba1/27/49/796442c2ad99d661778789ccb6b9",
"assets/build/windows/Win32/Lib/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/34/ab/d855c97aa3f1707dc083d3812422",
- "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/e0/b8/fd3a491af05bab27fffee4711b36",
- "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/d6/44/8e9fecfa85afede694eb06298034",
- "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/e1/ce/cf8dfb21a116a8bf87f757ddb332",
+ "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/54/da/bedb5154306c441ba28992682943",
+ "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/da/ad/ef5fd84e9b073e4699c7ecc7f426",
+ "assets/build/windows/Win32/Lib/importlib/_common.py": "https://files.ballistica.net/cache/ba1/df/62/59cfe843dacc4a7101bc56d6bfc9",
+ "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/48/fe/414f06478ec0a25b7b09cdd619e5",
"assets/build/windows/Win32/Lib/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/ac/b97d16285d94f0b18406366d803b",
- "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/50/b7/1e091864ef2342eb9f7627a5ad85",
- "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/13/da/3bc2fe81fddcb89589d4f5129d2b",
- "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/5e/96/a3d35aecec8ff9e6f2158f56c27c",
- "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/3e/76/764dd66ccb9ad74292d6e07ee3ff",
+ "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/c2/f6/a6dbb83c45260a78749204f60ac7",
+ "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/1b/36/101f113c9f9d6dcb0458d1a560ee",
+ "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/21/12/936c7ba9b3fe6b59497219398d3f",
+ "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/c4/43/1f26250c090a9d17a4da97f8ba91",
"assets/build/windows/Win32/Lib/io.py": "https://files.ballistica.net/cache/ba1/ee/a7/27e33a9728a22a8228628782bfe7",
- "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/7d/3c/b71af3f7f5d381bfaa1e200eb2ac",
- "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/a0/b3/9179fcad487ca6edf2c5a96f2f5e",
+ "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/d0/d1/74396deb2ba83c112e540f973ce4",
+ "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/d4/01/1826c398aa475558640288fbf8da",
"assets/build/windows/Win32/Lib/json/decoder.py": "https://files.ballistica.net/cache/ba1/f5/44/19f6e70ef50bed1f318027bbf9aa",
"assets/build/windows/Win32/Lib/json/encoder.py": "https://files.ballistica.net/cache/ba1/65/87/ea5c0cd241ce16750147c2b113da",
"assets/build/windows/Win32/Lib/json/scanner.py": "https://files.ballistica.net/cache/ba1/a7/9e/0fdf34c72293733a58f0dd2677fa",
- "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/70/80/f06ec89a4cfe38fabfeae3a9b1e4",
- "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/b6/c9/6fe1ba0c2f3df0a7cff398a69c75",
- "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/a5/e9/a9af76d79b1d6295749ea12a9590",
- "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/ff/49/64c2836f6f9a4a9b7613ae4bbe68",
- "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/78/e7/c93caee9b78214381dff14d0a645",
- "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/af/72/51a97504cd5fda5bdfe7c9f966f6",
- "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/8a/b9/7a237a423b8377a2b76be0e80f8e",
- "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/88/58/5eb2ce7457b4084010d40fa35609",
- "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/c9/02/4033e7308dd093bfb8dd15d58ea0",
- "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/cd/ef/d43f7e1f692a91246149348186f8",
- "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/25/a2/01e55fef8b57f4fcf5c92eebef4a",
- "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/55/6d/bd1b7ea0bc6b584d15bdde04c210",
- "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/32/b4/3d542fb6efb60c95af4e1edbe102",
+ "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/e0/66/6134206a819f737f2abdb391b4f5",
+ "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/d0/4e/b6720a564842cc99f0bcf4cab00d",
+ "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/dc/cf/cff04c33ac67207c1be857e69bd7",
+ "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/41/71/90e27a75d1f633ffcbff231b6d76",
+ "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/16/7f/9b8b634f9c4d6bb463b92160e993",
+ "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/13/92/d341d9e2b725228791c3ae0f6544",
+ "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/e2/60/696cffa3c43a257d1658f80a1757",
+ "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/42/22/997edcab36ca24d6652197b43946",
+ "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/f5/47/ec4fe120a31bc22ee4160ee2b628",
+ "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/39/3c/ba855852479d4b38bff59e22f7c9",
+ "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/51/db/b358cd7eab9cee99dda417ea977f",
+ "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/63/85/9cd35229337868fce8bd0456d505",
+ "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/54/95/b1f45d5d58bdb568be4fb1c9d7ad",
"assets/build/windows/Win32/Lib/msilib/schema.py": "https://files.ballistica.net/cache/ba1/65/dd/95b460cf2c95a6caf4bdbb1a3d51",
"assets/build/windows/Win32/Lib/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/5e/c4/a7a6140c298325ee69a8958b40d6",
"assets/build/windows/Win32/Lib/msilib/text.py": "https://files.ballistica.net/cache/ba1/49/b2/15871bd0d47d347c9371490eb35f",
"assets/build/windows/Win32/Lib/netrc.py": "https://files.ballistica.net/cache/ba1/6e/c7/c912c856c06d61ce362403506c58",
- "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/3f/6c/124eb82ca929cdbcbb7c8cb4628a",
+ "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/84/ff/9ca203896a4c7f75d09bbbb49f23",
"assets/build/windows/Win32/Lib/ntpath.py": "https://files.ballistica.net/cache/ba1/d0/16/d4d8d088994e890714a11dc15434",
- "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/05/77/b863ff2e727259dac90f77bdcbfb",
- "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/19/02/57245f310345adfc574565c19471",
- "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/ad/4a/0d449831129669c0b9f800754322",
- "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/fe/a1/433be97456e193c9a2e600ff84aa",
+ "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/6c/d4/b0ad03a05c03e8a672239a8d3c22",
+ "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/4c/14/0c9d8a9af8c19d9639c4bf46470f",
+ "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/48/18/e49f9bde356defaf57931b719db6",
+ "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/62/02/2ae2e6306970768ece225d61e8f6",
"assets/build/windows/Win32/Lib/optparse.py": "https://files.ballistica.net/cache/ba1/08/d8/10bbc27b50836a1329ca9a8c76d9",
- "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/f7/b0/7795b8038c42d6c812be0b62d42c",
- "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/f9/66/3f0aea2a0518289bc4286b4bda8d",
- "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/75/66/b6b61ea0471e82da55f7b95e47b1",
- "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/23/de/8cea763cb47bd1d8dcde05876c23",
+ "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/5c/dd/579c24efb5c00df2976f332cf186",
+ "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/94/ed/7aeed103f4f6911c2bf47987a77c",
+ "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/1f/cc/e2615b40a6cb1a3eddcbd406df40",
+ "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/b6/46/f767feb20108a62448d0fdc7602f",
"assets/build/windows/Win32/Lib/pickletools.py": "https://files.ballistica.net/cache/ba1/2e/45/eddff9ff648e35265541ce3296aa",
"assets/build/windows/Win32/Lib/pipes.py": "https://files.ballistica.net/cache/ba1/4f/e3/798b7a258f1747aa6c5abb437149",
- "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/71/ec/ef12b9e970cdd6519387ad7168bc",
- "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/e4/ce/7ff2a305f977646d16e9bd3f8520",
- "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/4a/5c/e2974e9a8d629f5bdea197989c4c",
- "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/0b/3f/ebe15eb5e0aed0f623fb371d1e6c",
- "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/0e/d9/4afdfd1c5d247b2184c9da8ce58d",
- "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/d7/a9/1c512abc7fa9626b3d4b8032aceb",
- "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/df/aa/5f646a01fbbf11278346627ad967",
- "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/d8/83/57c8604d5383e3a1a72730c5ccbe",
+ "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/e4/b8/79a14ad4cb6ee46377ec45d6df74",
+ "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/0b/52/0bb8a0560bced25c8728c6c7a0a4",
+ "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/6a/e8/4d5c747e45f582db11ffa511d651",
+ "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/68/71/845ce32e039b1d7c9fe9dc07e059",
+ "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/f4/aa/897b0ebd640cc2538b4125fe8ead",
+ "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/85/6e/57f702f42a1023f506084172699c",
+ "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/27/f7/fecf77603def6be7e272ecf879b1",
+ "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/8e/3e/2e0ba82e95a5ea276ade31824e46",
"assets/build/windows/Win32/Lib/pty.py": "https://files.ballistica.net/cache/ba1/01/fa/73d52f1e8ad3e8fba58a8fd67d60",
- "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/b3/4a/825bf33162ad633f02c93f05fa3a",
+ "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/1d/c5/05bbfe3acd92bddb0ecb22bb56b5",
"assets/build/windows/Win32/Lib/pyclbr.py": "https://files.ballistica.net/cache/ba1/15/53/68c8a9df2a80480b6fc458352687",
- "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/e5/ff/e8d985a8dbd62f018c02f6651e5f",
- "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/f9/33/4ae8645dcd0a9d8b73d14a1b71c7",
- "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/2c/58/ad0d88ce4f54696b2e3b77229b6f",
- "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/b6/d9/b95dd3d9250d459233f6b5315a3b",
+ "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/56/1f/6fb68934b6045e93a0e0ad866f7d",
+ "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/ad/d9/dccb193c1f5b918c874573949a7c",
+ "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/01/61/77a2bd9e234c35d4e5e3dca41474",
+ "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/9e/46/3bf62f305b77fd0b952d6ab47475",
"assets/build/windows/Win32/Lib/re.py": "https://files.ballistica.net/cache/ba1/92/ef/6bfc4cf4278e1d656a339af3a4fb",
"assets/build/windows/Win32/Lib/reprlib.py": "https://files.ballistica.net/cache/ba1/a8/ba/d93d9b48a6c8e84421dc29a7a356",
- "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/07/36/8d1de8a69e6b5b1cc73d0216948a",
- "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/33/bb/94fdb22005971a029ec79aea277f",
+ "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/3b/fd/4ebf4b35da2f173ed151b87056aa",
+ "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/13/05/2bdddfbff67d94f98d0710c807d5",
"assets/build/windows/Win32/Lib/sched.py": "https://files.ballistica.net/cache/ba1/c6/60/916d287001a20a6a9b10edec7eab",
- "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/56/3e/95bb97b0783468cfc2d3334daa98",
- "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/af/9a/2ffd2e47c2bfd9318aaf126ee6af",
+ "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/3a/08/35ad5fa7b2674b557d6877856e57",
+ "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/e7/e0/5974f4d22db37ed06a4a88c3982f",
"assets/build/windows/Win32/Lib/shelve.py": "https://files.ballistica.net/cache/ba1/78/b5/9bc76a4facc8d27398b939bc074b",
- "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/ea/f0/c13f433acca4bee87831401e5846",
- "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/48/6c/ab9181bbd7675b275280defc0a25",
+ "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/8b/f0/0626cd9774fc74dbdd57171b6bd0",
+ "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/bc/18/296bd7c481b225dcc4708695d05f",
"assets/build/windows/Win32/Lib/signal.py": "https://files.ballistica.net/cache/ba1/01/09/a4a4e1ca8c41d84e831555752222",
- "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/f1/8c/e38cbf5f63a710111788414c07c6",
- "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/63/b6/77d11c42ae0775a49ed76818bffb",
- "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ee/88/b917a2d5a11d3b3f4ac874fd5510",
+ "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/63/2c/fb3429d2bc8173f4556c95c12a27",
+ "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/43/9a/1bde22068149fd37cb82a3ca52ae",
+ "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ce/db/a86932841fc9db4ce62254cfbe3c",
"assets/build/windows/Win32/Lib/sndhdr.py": "https://files.ballistica.net/cache/ba1/48/bd/cf83c27bc7f72e2c5b5d5497aeb3",
- "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/f4/f6/c4a07d6f6a135b22f9a5d0df4eb4",
- "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/8e/6e/62997e4b94b1360849b5476014d5",
+ "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/b0/4a/883940df01c2a2743b394b65eb6d",
+ "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/c6/b6/45fd1ececd3b4272f1f0674ce05c",
"assets/build/windows/Win32/Lib/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/4b/1b/be86116df24d067bf7aaa9dc690b",
"assets/build/windows/Win32/Lib/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/12/ce/e004498a9d51b893c10a613c7c56",
"assets/build/windows/Win32/Lib/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/25/0e/52f5b1972488978dae3361460bec",
"assets/build/windows/Win32/Lib/sre_compile.py": "https://files.ballistica.net/cache/ba1/ad/7b/8ab12949ef2e5f8da457fac53624",
"assets/build/windows/Win32/Lib/sre_constants.py": "https://files.ballistica.net/cache/ba1/5e/cd/1e06950ce526150b57e13943b117",
"assets/build/windows/Win32/Lib/sre_parse.py": "https://files.ballistica.net/cache/ba1/ff/9f/a8bbd40431420f03a24cbaa958c0",
- "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/66/fa/d4499fb567d9c2fd5ab28070773e",
+ "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/1a/9a/b24634a4cfff16c3137011677d57",
"assets/build/windows/Win32/Lib/stat.py": "https://files.ballistica.net/cache/ba1/f5/ba/9a795715bfa80417f6b90fc4d5eb",
- "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/59/68/14bc90c9ca05a8c167f7e9361ea0",
- "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/55/cf/9b2286ef41a546b8e83dafb4c21f",
+ "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/54/8a/4b1365441f1f5362ad5133207069",
+ "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/e7/b7/56d0ff953973eb37ef38328f75e2",
"assets/build/windows/Win32/Lib/stringprep.py": "https://files.ballistica.net/cache/ba1/5b/42/39b8e69a2979e4f553bb6908b545",
"assets/build/windows/Win32/Lib/struct.py": "https://files.ballistica.net/cache/ba1/8e/da/3a3bdc58e197050b1906c1c86266",
- "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/92/51/d899b4d325e933590218fcfb81b3",
- "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/83/4a/58133fd86ce134568f30cfa21b9c",
- "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/db/33/0e3b5b52110cacc345203fd9d328",
- "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/32/ab/b015cae4110d38b37cc64251d89f",
- "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/d5/84/72778fc541502325d17fbb1f7f07",
+ "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/8c/3d/26e2e0cc5e1b4d1ee55cae7ee354",
+ "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/c5/ea/8efd34c174ebbf6e721eb2c4854b",
+ "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/6e/6e/4fd99765d7e29749d2f192f06080",
+ "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/9b/da/da5402613a6207fbc1d7ebf596d1",
+ "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/a5/ba/97a70e33602056e924ba8883c88f",
"assets/build/windows/Win32/Lib/tabnanny.py": "https://files.ballistica.net/cache/ba1/f0/6a/00c300ad5404f3bbbe4fe723a466",
- "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/01/d4/bddbb7c9d8fe0d28a5f11aa4da6b",
+ "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/8f/c8/354a7969bc41efdaebc71bba2217",
"assets/build/windows/Win32/Lib/telnetlib.py": "https://files.ballistica.net/cache/ba1/29/35/bdff1814c1cdba6b4ae5cb2f8675",
- "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/b8/f2/59d8cc47a08868c5467a00c1d85c",
+ "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/29/72/75cb6dcbdd31bf1553a07b4dabb5",
"assets/build/windows/Win32/Lib/textwrap.py": "https://files.ballistica.net/cache/ba1/c0/4a/3c5af4ba3f0440874cdb4dc61ecd",
"assets/build/windows/Win32/Lib/this.py": "https://files.ballistica.net/cache/ba1/b0/f9/1eb227ba1d4d069da408b12e8312",
- "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/5b/a8/61c3511e8e103bdfd7825958b540",
+ "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/44/94/ff6041fa68af794cbc6afab2e4ff",
"assets/build/windows/Win32/Lib/timeit.py": "https://files.ballistica.net/cache/ba1/10/08/1e351bf532a328eb7e2e23a25b44",
"assets/build/windows/Win32/Lib/token.py": "https://files.ballistica.net/cache/ba1/64/7c/121b22af2f56ace6019d0e2b3819",
- "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/9d/01/b7ddea4fbc9401b71734d68e7500",
- "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/61/e2/4f8a48fa03a1f49dd363204db6ed",
- "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/58/fe/040d4b32aab47ce1bd5920739394",
- "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/91/0a/fcb0e16864c9ffe49e4eb9cc122c",
+ "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/de/b5/e9a154cd250aafb928b498a9b43e",
+ "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/a5/a9/6db347dcb89c09b8a8c6c2203f97",
+ "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/8d/78/94708c92ece3d42f76c20ed38b9d",
+ "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/18/0d/5faf4c360c505d08b7613f5417d7",
"assets/build/windows/Win32/Lib/tty.py": "https://files.ballistica.net/cache/ba1/66/b3/bb1684cec763502fdf418909eedc",
- "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/e0/c8/31f459e0c2f7bac2d0ebbfa00a59",
- "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/b6/e4/03cad30b8be21630d987122692a4",
+ "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/ed/48/072f2eb7e4e25fcd60a2081648a3",
+ "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/fc/94/e7bea2c7035490d1f88157ad13ac",
"assets/build/windows/Win32/Lib/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/48/ca/f840c02dd0e7222236a872a7f278",
"assets/build/windows/Win32/Lib/urllib/error.py": "https://files.ballistica.net/cache/ba1/c9/c8/9d133fc217803023dff6faed8681",
- "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/d7/fc/813689937d353eb8274116634140",
- "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/18/bf/a212326081a46262ca47520401bd",
- "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/bb/87/38040a39e87e422ad8afe64bf2a7",
+ "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/9d/e2/353bc23d88dac888052fb73f654c",
+ "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/a9/75/0e6096cd359e3732ffefb4f69c0c",
+ "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/30/32/b589f1002cf402e632315e473447",
"assets/build/windows/Win32/Lib/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ef/f6/c7fd5ad82a88e56463f9d1c1b8d1",
"assets/build/windows/Win32/Lib/uu.py": "https://files.ballistica.net/cache/ba1/40/20/7ae03397a7bf1f182a9e5463047f",
- "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/80/65/da9c089c4ccf0cc172827fcd024d",
+ "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/15/d4/3cbe0a49dbc49c4579f174635806",
"assets/build/windows/Win32/Lib/warnings.py": "https://files.ballistica.net/cache/ba1/4f/c2/55e364e63a35cfada42a1c0b9504",
- "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/95/6b/02b4ea1ee3a929a5c3e706b59e2f",
- "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/71/b9/26e68828f98cf71c5e9802a24709",
- "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/9b/7d/4c8e1c024746aaa32427db9d3e08",
+ "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/86/67/3fc7f739b871c1d3f9e479a8c4f5",
+ "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/ea/d2/894a2e873428b59c4fba411773e4",
+ "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/6d/e0/67a3eefd03d673ebc207738efb7e",
"assets/build/windows/Win32/Lib/xdrlib.py": "https://files.ballistica.net/cache/ba1/35/a6/f6e14e4fb6beae1f68ec2a4be852",
"assets/build/windows/Win32/Lib/xml/__init__.py": "https://files.ballistica.net/cache/ba1/02/9f/a002b4cb540d2e1c2b68edb44b3c",
"assets/build/windows/Win32/Lib/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/70/fb/e0e98f50e21c494e53869d4d7d32",
"assets/build/windows/Win32/Lib/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/da/c6/e03fc8651c8453f97f28b59c39e6",
"assets/build/windows/Win32/Lib/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/24/0b/7c0c234f022ab835c9de2ebeae0b",
- "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/00/f0/624de9ff458a0086a9287a4eca60",
+ "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/b7/72/a2efe64e9d3d6d69be97b30e7bff",
"assets/build/windows/Win32/Lib/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/00/0c/03191b6f36ce83e51030448fae74",
- "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/85/60/e39fb6f48bb279485b37e5174ef0",
+ "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/c3/90/41746421ae51e1a26eb6c6baac49",
"assets/build/windows/Win32/Lib/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/de/17/036dd0486e71bd9257e4d083b21b",
- "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/b6/5f/e121c4c15d59af737b1040acc649",
- "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/b5/91/29e1f927a81c897f265ba6f4d070",
- "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/e9/75/85145b2539056a6b666cf091339e",
- "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d1/3b/0b4abfc25ad2245f7409b716570e",
- "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/ad/6d/fa6c976589d990e355cce61c4c96",
+ "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/ec/9e/09de652d2787b926de856d50485e",
+ "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/f7/70/75a58d2a3125230578bc521d3994",
+ "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/6e/0b/69e9a05eb2a06140b122e5ccae4a",
+ "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/ae/44/69859f1e835d4025b63b131b1c6b",
+ "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/27/f3/261a335507cb7fee52f2afb65af3",
"assets/build/windows/Win32/Lib/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/3c/23d2072448e974423bb11e396ab6",
"assets/build/windows/Win32/Lib/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/19/bf/5493270c481d02ed233d2119653c",
"assets/build/windows/Win32/Lib/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/6e/f1/a6aad9b9297dd20b5c24a224eb87",
- "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/12/eb/ce78b2effa256a82dcd1192db74f",
+ "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/5d/e2/7b4012ae334633fd73e6f15735a8",
"assets/build/windows/Win32/Lib/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/47/64/9b8c6da80774cf676c116c42c779",
- "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c7/16/42cb40d7afcde4ce825abf5bfbf3",
+ "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/75/23/e1f38824e9a56ce646de9ccc92a2",
"assets/build/windows/Win32/Lib/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/84/cb/83d1e4735c125aee0b686c26f9d0",
"assets/build/windows/Win32/Lib/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/b8/1c/2ca4b0f80078729b5e76b6d0250b",
"assets/build/windows/Win32/Lib/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/05/f9/eeb1c32818d63991e806451dad45",
"assets/build/windows/Win32/Lib/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/84/79/19c277eda21caa83389ff1c2258f",
- "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/1c/07/4679e4429a5da03ebb39b3c219cd",
- "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/1f/03/3ec486442d39392933c7bab3d00d",
+ "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/36/81/6e1abfb7940c5580d2835f904c95",
+ "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/25/9c/bb429d6083ec5e53cfe18d7eb955",
"assets/build/windows/Win32/Lib/zipapp.py": "https://files.ballistica.net/cache/ba1/92/65/287c3d27f14ea2956622e136f71b",
- "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/a4/5d/baf60589ec6877de04ded39e9993",
+ "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/4c/c2/fc4526c5fff3ecbb2283d8a206a9",
"assets/build/windows/Win32/Lib/zipimport.py": "https://files.ballistica.net/cache/ba1/73/9f/d089ac24f8277925d6938ab1fe1f",
+ "assets/build/windows/Win32/Lib/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/2d/ff/48364d3203172aef5248f5645e6f",
+ "assets/build/windows/Win32/Lib/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/87/11/2b839574860329712c70bd11e8f3",
+ "assets/build/windows/Win32/Lib/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/d3/be/2eed03b48558c92499af86cd48a8",
+ "assets/build/windows/Win32/Lib/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/10/ed/a6ce9682c54a329853f6f79567a1",
"assets/build/windows/Win32/OpenAL32.dll": "https://files.ballistica.net/cache/ba1/7b/0f/4349781f2e7ea0ced321fd0b9c45",
"assets/build/windows/Win32/SDL2.dll": "https://files.ballistica.net/cache/ba1/c5/7d/e8943b5eda2472a308b63f938b1c",
"assets/build/windows/Win32/libvorbis.dll": "https://files.ballistica.net/cache/ba1/1b/d1/75cc9eb21373659c8baacbdeb080",
"assets/build/windows/Win32/libvorbisfile.dll": "https://files.ballistica.net/cache/ba1/c6/e1/f52f5d6c78f0ba497f0c8cd1c630",
"assets/build/windows/Win32/msvcp140d.dll": "https://files.ballistica.net/cache/ba1/4e/48/54d72587b4bd07abcad311523685",
"assets/build/windows/Win32/ogg.dll": "https://files.ballistica.net/cache/ba1/f2/0c/469bdc2148ad7d94232023da2cc6",
- "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/61/1e/8b300ef4a3c46652ac1f7d01ed53",
- "assets/build/windows/Win32/python38.dll": "https://files.ballistica.net/cache/ba1/1f/39/e314c3e7846ecddbd946c08aac04",
- "assets/build/windows/Win32/python38_d.dll": "https://files.ballistica.net/cache/ba1/e1/1e/9dd3909f6a7d14ef3f5c95bceb73",
- "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/57/2f/7cda5f442a832f8f92fc76e8370d",
- "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/3b/01/7819c084c81c84562a2dab70033e",
- "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/4b/df/7ebb1be3e018abc04660d932a7b2",
+ "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/bc/a9/370cfdb8a868380c0588453bd24e",
+ "assets/build/windows/Win32/python39.dll": "https://files.ballistica.net/cache/ba1/31/af/fd6a1905ec58a7000558c00d0c9c",
+ "assets/build/windows/Win32/python39_d.dll": "https://files.ballistica.net/cache/ba1/b8/ab/f7b684f6e58d09028941ca67f2cf",
+ "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/aa/47/11ca3dcba15bcdc71ca99a8ca526",
+ "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/ea/9a/73a64c5bbf95bbb198c9da833f26",
+ "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/b0/bc/470220ed546759f105442c48315a",
"assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/f5/8b/14895df9caf46f326a3c939b34a4",
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
"assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e",
"assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/72/82/86956fae909ac2fe2a1abd84a361",
"ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a",
- "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/70/e0/d1f6e02c19b18f3d02b474e9d9c0",
+ "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ad/1b/13d2e47149d4804419bbc2d97145",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/f5/83c7bb76dc79020ded2e53f25e09",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/fb/51437a1f97e5cf466595e9b433c5",
- "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/af/a4/09ce2c2cd53f46338e838958c58d",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/40/83/5514e4fc477d23dd035e4dbf441a",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4b/de/c54388a6e7c64c917c8b4a7c2ba5",
+ "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/28/e9/19563067a48a3a779d66bf19b606",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9c/4f/9b9276e8e2bf0d222ad1ee63a181",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f5/80/5c0ddcd973674081a7d7abf71069",
- "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/0c/6e/5910f4a9fd3cfab4464ddcc88557",
- "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/6f/d83b7dccd42e270e4e5cca582906",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b7/19/c2ac8cc74bbde244b762f6390757",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/64/3009cfea9985b63982bee437144b",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/bf/d299472cdbe1778fc6bc6f6ca3cf",
- "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/86/ec/8b92f4db81024cc3ba44ef6b8070",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/01/a3/7dd46627ff5606234eafa4cb37b8",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/85/73/eba334a349abc12cb873e1a45909",
- "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f2/92/d170f89127ce918ba89a8dfcde22",
- "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f5/f3/bc57353da277776fc7a923b27ae5",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b7/c5/8e0d736ecd4eb1ca6a18e2b5bff4",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/84/de/d90837982093b0b5b2dd5a71e304",
- "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/ae/d0dac8641dd0cddaf7eeb0c6d6bb",
- "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/e9/31e77a3d8ccf147372b30ca2005c",
- "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/86/edc44ed5f9206a9d538eaa39bb5e",
- "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ba/ca/4726eca2dc89e1f1faf08f34b635",
- "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6d/46/1860beb33402ee3463e5870ffc6d",
- "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/17/1d6af884c0a77e339a888015fccd",
- "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fb/5e/f71252314b595fa089a70e84ae7d",
- "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5f/af/4029a33987647c355e8ea16ac327",
- "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/bf/7feceed4f45860593f5abd547ef5",
- "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/ac/c9ab19889af2af351c35bbcc2ca6",
- "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bb/6d/3f795483eecf3b02b175d4e3ae95",
- "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/59/5d/6c2a2faf66ce5cd37efbbd4ee531",
- "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3b/73/083f29cf270f3701aee5d27fea70",
- "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/51/21/ec73bfd77df70ff4d06ca2892505",
- "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/dd/c4/76f367fa1cea9c720e79056afd20",
- "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/58/90/dedfb364379229d8c64848b9435c",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/2b/50/7719ce17c926c2e77cfd86227b8f",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/4d/6e/07d81f2ecd4c6681d12f02bc4260",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/d5/dc/2b96b0f2dfaba1d9ff028105c2d6",
- "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6d/1c/b0965cabbdd209b35d24ceef4a31",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/37/86/b69055de8eb73e66505869ceec01",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d6/07/430dbb5c7138fd972923bd495ae4",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/81/ba/ab192931bda7f54f09d4c4ab5ca1",
- "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/65/d4/2ee62ace0f8b6b362fb1f4570af8",
- "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/6c/63/2b8cbb65a0e1daa45d59e9f87e9a",
- "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/c0/2f/a8b50faad086fba4fe936e863c20"
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/10/2f/8b02f5434fd232a7cdfeab2701d4",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/78/b289ab113be66c697ce64795193a",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/17/54/7efe5b99d8588162ee757dea3348",
+ "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/23/17/f1d541a3c9c3b5790e96828b7598",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/57/9f/d1bf09f5e0a2a15d730d9bb3c5cb",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d4/65/7a5e2941745c3036d89dbe3872de",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5b/d6/d740cfe4e8bbe21a5345df389454",
+ "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b1/ee/ea946bcdb77305710c59e9c6d128",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/70/f3/c4b89730342623be82e38f5f6ded",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/f5/7ab6560338d20424f553ee33a940",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/26/59/dfde2e6ce41ddfd89fa2e853db5c",
+ "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/60/51/71851a9986828e22489227aee1ec",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d8/b5/4bb7dfc057da66009868677f4131",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/5b/57/1d23e447aa72ee3e812171baa8df",
+ "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e2/a9/6a5da77052000da6b35560120cd8",
+ "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/e4/199222439f5c1a9f4926aba0241b",
+ "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/69/bb/aabd8fa544c44831574d5b017ae7",
+ "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f1/de/15cedd9462ef271415e9abccd06b",
+ "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/ee/290a65b39125abbb015415dc8b59",
+ "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e8/0f/a6993b7e38a2d48e2a4938f4c4fd",
+ "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0b/93/5db13716ee4610ec88d409e3379d",
+ "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/34/1cda12f81c46067e7d6f9b74806e",
+ "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4e/1e/a67f47468493a564f95f3218b999",
+ "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/f0/41c098f285a9e5c76907c9547983",
+ "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/6e/e29738131f523b42168293c68d0d",
+ "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/89/4af8bd76d718c306fd4cabe9b0b6",
+ "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/62/c739869c92c06e35b8fd782a4fbc",
+ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/90/53/c85bbfe89b765829b27c0d28617a",
+ "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/09/5a4922d34e314ef9ca8d4c90329d",
+ "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8d/de/025bb526c5a126636dffb011d5f4",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b8/e0/2277efb063810deba2967cb7c7e5",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/98/32/72471c2f70116898b0dd01469951",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/8f/24/8ca657c6df34919463278294fdcf",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/31/ba/ceb77656d6670d6fa10ea45803f4",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e3/72/e5b82a0d6fafa4726784d0b4e950",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/14/52/4c4d8e05d55133d6f144372fbb4c",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ef/ad/f9cda01f91ad9920324054cff7e7",
+ "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/a7/1ade386c868f6ef453eecbebacb7",
+ "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/f2/6c/5a0a4695dcc2a11e7941b8777e80",
+ "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881"
}
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e8c690e1..720ecf12 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -20,7 +20,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v1
with:
- python-version: 3.8
+ python-version: 3.9
- name: Install dependencies
run: tools/pcommand install_pip_reqs
- name: Run checks and tests
@@ -35,7 +35,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v1
with:
- python-version: 3.8
+ python-version: 3.9
- name: Compile binary
run: make _cmake-simple-ci-server-build
@@ -51,7 +51,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v1
with:
- python-version: 3.8
+ python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
diff --git a/.idea/ballisticacore.iml b/.idea/ballisticacore.iml
index a385081f..096ed03a 100644
--- a/.idea/ballisticacore.iml
+++ b/.idea/ballisticacore.iml
@@ -64,7 +64,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index b388fb62..9a416d60 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -14,6 +14,7 @@
aaak
aarch
abcdefghijklmnopqrstuvwxyz
+ abcdefghjkmnpqrtuvwxy
abeb
abishort
abot
@@ -81,6 +82,7 @@
apichanges
apis
apks
+ apost
appath
appathout
appcfg
@@ -235,6 +237,7 @@
bombsquadgame
bools
bootlocale
+ bootsubprocess
borhani
bot's
botdist
@@ -394,10 +397,12 @@
clrred
cmakelists
cmakeserver
+ cmath
cmathmodule
cmds
cmembers
cmodel
+ cmodules
cmpf
cnode
codecsmodule
@@ -564,6 +569,7 @@
distroot
distros
dline
+ dliwk
dlldir
dlls
dmake
@@ -710,6 +716,7 @@
eventid
ewww
ewwww
+ exargs
excludepowerups
excludetypes
excstr
@@ -745,6 +752,7 @@
fbase
fclose
fcmd
+ fcntl
fcntlmodule
fcode
fcontents
@@ -977,6 +985,7 @@
gpsui
gradlepath
gradlew
+ graphlib
gravis
grpentry
grpkey
@@ -1202,6 +1211,7 @@
lbits
lbld
lbval
+ lbzip
lcfg
lcolor
lcrypto
@@ -1217,6 +1227,8 @@
lfull
lfval
libballisticacore
+ libbz
+ libbzip
libcrypto
libdir
libegl
@@ -1235,6 +1247,7 @@
libsdl
libsqlite
libssl
+ libuuid
libvorbi
libvorbis
libvorbisfile
@@ -1313,6 +1326,7 @@
ltex
ltypes
lubyte
+ luuid
lzma
lzmamodule
macappstore
@@ -1580,6 +1594,7 @@
ortho
osascript
osmusic
+ ossaudiodev
ostype
osval
otherplayer
@@ -1695,6 +1710,7 @@
pogotron
pointpos
policybase
+ popd
popen
poplib
popupcolor
@@ -2294,6 +2310,7 @@
testfull
testhelpers
testimportmultiple
+ testinternalcapi
testm
testmagicmethods
testmock
@@ -2405,6 +2422,7 @@
typestr
tzdiff
tzinfos
+ tzpath
uadfc
uber
ucrtbased
@@ -2463,6 +2481,7 @@
userfunctions
utcnow
utimensat
+ uuidmodule
uval
valanntype
validpgpkeys
@@ -2521,6 +2540,7 @@
webbrowser
webpage
webpages
+ weeeird
whatevs
wheee
whos
@@ -2593,7 +2613,10 @@
xval
xxdiff
xxhdpi
+ xxlimited
+ xxsubinterpreters
xxsubtype
+ xxtestfuzz
xxxhdpi
yach
yapf
@@ -2610,6 +2633,7 @@
zipapp
zlib
zlibmodule
+ zoneinfo
zoomtext
zpos
zval
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2a75f480..bfd101b1 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e5b7d87..ae1cf302 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
-### 1.6.5 (20388)
+### 1.6.5 (20394)
- Added co-op support to server builds (thanks Dliwk!)
+- Updated everything from Python 3.8 to Python 3.9. The biggest immediate impact to our code is that basic types such as list, dict, and tuple can be used in annotations, eliminating the need to import typing.Dict, typing.List, etc. See python.org for more changes.
+- Note: accessing mods on external storage on Android will not work in this release. This functionality has not been working in recent versions of Android due to increased security features anyway and I am in the process of replacing it with a cloud based system for installing mods. More on this soon.
### 1.6.4 (20382)
- Some cleanups in the Favorites tab of the gather window.
diff --git a/assets/.asset_manifest_private.json b/assets/.asset_manifest_private.json
index f0f2231f..5c0ccf46 100644
--- a/assets/.asset_manifest_private.json
+++ b/assets/.asset_manifest_private.json
@@ -941,28 +941,28 @@
"ba_data/models/zoeTorso.bob",
"ba_data/models/zoeUpperArm.bob",
"ba_data/models/zoeUpperLeg.bob",
- "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc",
+ "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc",
"ba_data/python-site-packages/_yaml/__init__.py",
- "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc",
"ba_data/python-site-packages/typing_extensions.py",
"ba_data/python-site-packages/yaml/__init__.py",
- "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc",
- "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc",
+ "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc",
"ba_data/python-site-packages/yaml/composer.py",
"ba_data/python-site-packages/yaml/constructor.py",
"ba_data/python-site-packages/yaml/cyaml.py",
@@ -2585,180 +2585,182 @@
"ba_data/textures/zoeIcon_preview.png",
"pylib-android/__future__.py",
"pylib-android/__phello__.foo.py",
- "pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/abc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/ast.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/base64.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/code.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/copy.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/csv.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/dis.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/enum.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/functools.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/glob.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/imp.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/io.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/locale.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/operator.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/os.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/platform.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/profile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pty.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/queue.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/random.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/re.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sched.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/signal.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/site.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/socket.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/stat.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/string.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/struct.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/this.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/threading.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/token.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/trace.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/tty.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/types.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/typing.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/uu.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/wave.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc",
- "pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc",
+ "pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/abc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/ast.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/base64.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/code.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/copy.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/csv.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/dis.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/enum.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/functools.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/glob.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/imp.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/io.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/locale.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/operator.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/os.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/platform.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/profile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pty.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/queue.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/random.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/re.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sched.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/signal.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/site.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/socket.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/stat.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/string.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/struct.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/this.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/threading.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/token.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/trace.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/tty.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/types.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/typing.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/uu.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/wave.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc",
+ "pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc",
+ "pylib-android/_aix_support.py",
"pylib-android/_bootlocale.py",
+ "pylib-android/_bootsubprocess.py",
"pylib-android/_collections_abc.py",
"pylib-android/_compat_pickle.py",
"pylib-android/_compression.py",
- "pylib-android/_dummy_thread.py",
"pylib-android/_markupbase.py",
"pylib-android/_osx_support.py",
"pylib-android/_py_abc.py",
@@ -2776,35 +2778,36 @@
"pylib-android/asynchat.py",
"pylib-android/asyncio/__init__.py",
"pylib-android/asyncio/__main__.py",
- "pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc",
- "pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc",
+ "pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc",
"pylib-android/asyncio/base_events.py",
"pylib-android/asyncio/base_futures.py",
"pylib-android/asyncio/base_subprocess.py",
@@ -2827,6 +2830,7 @@
"pylib-android/asyncio/streams.py",
"pylib-android/asyncio/subprocess.py",
"pylib-android/asyncio/tasks.py",
+ "pylib-android/asyncio/threads.py",
"pylib-android/asyncio/transports.py",
"pylib-android/asyncio/trsock.py",
"pylib-android/asyncio/unix_events.py",
@@ -2848,18 +2852,18 @@
"pylib-android/codecs.py",
"pylib-android/codeop.py",
"pylib-android/collections/__init__.py",
- "pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc",
+ "pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc",
"pylib-android/collections/abc.py",
"pylib-android/colorsys.py",
"pylib-android/compileall.py",
"pylib-android/concurrent/__init__.py",
- "pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc",
"pylib-android/concurrent/futures/__init__.py",
- "pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc",
- "pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc",
- "pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc",
+ "pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc",
+ "pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc",
+ "pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc",
"pylib-android/concurrent/futures/_base.py",
"pylib-android/concurrent/futures/process.py",
"pylib-android/concurrent/futures/thread.py",
@@ -2871,29 +2875,29 @@
"pylib-android/crypt.py",
"pylib-android/csv.py",
"pylib-android/ctypes/__init__.py",
- "pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc",
+ "pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc",
"pylib-android/ctypes/_aix.py",
"pylib-android/ctypes/_endian.py",
"pylib-android/ctypes/macholib/__init__.py",
- "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc",
- "pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc",
+ "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc",
+ "pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc",
"pylib-android/ctypes/macholib/dyld.py",
"pylib-android/ctypes/macholib/dylib.py",
"pylib-android/ctypes/macholib/framework.py",
"pylib-android/ctypes/util.py",
"pylib-android/ctypes/wintypes.py",
"pylib-android/curses/__init__.py",
- "pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc",
- "pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc",
- "pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc",
- "pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc",
+ "pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc",
+ "pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc",
+ "pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc",
"pylib-android/curses/ascii.py",
"pylib-android/curses/has_key.py",
"pylib-android/curses/panel.py",
@@ -2904,28 +2908,27 @@
"pylib-android/difflib.py",
"pylib-android/dis.py",
"pylib-android/doctest.py",
- "pylib-android/dummy_threading.py",
"pylib-android/email/__init__.py",
- "pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc",
- "pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc",
+ "pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc",
+ "pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc",
"pylib-android/email/_encoded_words.py",
"pylib-android/email/_header_value_parser.py",
"pylib-android/email/_parseaddr.py",
@@ -2942,15 +2945,15 @@
"pylib-android/email/iterators.py",
"pylib-android/email/message.py",
"pylib-android/email/mime/__init__.py",
- "pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc",
- "pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc",
+ "pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc",
"pylib-android/email/mime/application.py",
"pylib-android/email/mime/audio.py",
"pylib-android/email/mime/base.py",
@@ -2964,129 +2967,128 @@
"pylib-android/email/quoprimime.py",
"pylib-android/email/utils.py",
"pylib-android/encodings/__init__.py",
- "pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc",
- "pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc",
+ "pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc",
"pylib-android/encodings/aliases.py",
"pylib-android/encodings/ascii.py",
"pylib-android/encodings/base64_codec.py",
@@ -3174,7 +3176,6 @@
"pylib-android/encodings/kz1048.py",
"pylib-android/encodings/latin_1.py",
"pylib-android/encodings/mac_arabic.py",
- "pylib-android/encodings/mac_centeuro.py",
"pylib-android/encodings/mac_croatian.py",
"pylib-android/encodings/mac_cyrillic.py",
"pylib-android/encodings/mac_farsi.py",
@@ -3222,22 +3223,23 @@
"pylib-android/getpass.py",
"pylib-android/gettext.py",
"pylib-android/glob.py",
+ "pylib-android/graphlib.py",
"pylib-android/gzip.py",
"pylib-android/hashlib.py",
"pylib-android/heapq.py",
"pylib-android/hmac.py",
"pylib-android/html/__init__.py",
- "pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc",
- "pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc",
+ "pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc",
+ "pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc",
"pylib-android/html/entities.py",
"pylib-android/html/parser.py",
"pylib-android/http/__init__.py",
- "pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc",
- "pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc",
- "pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc",
- "pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc",
+ "pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc",
+ "pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc",
+ "pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc",
+ "pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc",
"pylib-android/http/client.py",
"pylib-android/http/cookiejar.py",
"pylib-android/http/cookies.py",
@@ -3245,16 +3247,18 @@
"pylib-android/imghdr.py",
"pylib-android/imp.py",
"pylib-android/importlib/__init__.py",
- "pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc",
- "pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc",
+ "pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc",
"pylib-android/importlib/_bootstrap.py",
"pylib-android/importlib/_bootstrap_external.py",
+ "pylib-android/importlib/_common.py",
"pylib-android/importlib/abc.py",
"pylib-android/importlib/machinery.py",
"pylib-android/importlib/metadata.py",
@@ -3264,11 +3268,11 @@
"pylib-android/io.py",
"pylib-android/ipaddress.py",
"pylib-android/json/__init__.py",
- "pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc",
- "pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc",
- "pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc",
- "pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc",
+ "pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc",
+ "pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc",
+ "pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc",
+ "pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc",
"pylib-android/json/decoder.py",
"pylib-android/json/encoder.py",
"pylib-android/json/scanner.py",
@@ -3277,9 +3281,9 @@
"pylib-android/linecache.py",
"pylib-android/locale.py",
"pylib-android/logging/__init__.py",
- "pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc",
- "pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc",
+ "pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc",
+ "pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc",
"pylib-android/logging/config.py",
"pylib-android/logging/handlers.py",
"pylib-android/lzma.py",
@@ -3334,9 +3338,9 @@
"pylib-android/socket.py",
"pylib-android/socketserver.py",
"pylib-android/sqlite3/__init__.py",
- "pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc",
- "pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc",
+ "pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc",
+ "pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc",
"pylib-android/sqlite3/dbapi2.py",
"pylib-android/sqlite3/dump.py",
"pylib-android/sre_compile.py",
@@ -3370,12 +3374,12 @@
"pylib-android/types.py",
"pylib-android/typing.py",
"pylib-android/urllib/__init__.py",
- "pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc",
- "pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc",
- "pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc",
- "pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc",
- "pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc",
+ "pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc",
"pylib-android/urllib/error.py",
"pylib-android/urllib/parse.py",
"pylib-android/urllib/request.py",
@@ -3389,17 +3393,17 @@
"pylib-android/webbrowser.py",
"pylib-android/xdrlib.py",
"pylib-android/xml/__init__.py",
- "pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc",
"pylib-android/xml/dom/NodeFilter.py",
"pylib-android/xml/dom/__init__.py",
- "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc",
- "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc",
+ "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc",
"pylib-android/xml/dom/domreg.py",
"pylib-android/xml/dom/expatbuilder.py",
"pylib-android/xml/dom/minicompat.py",
@@ -3410,213 +3414,223 @@
"pylib-android/xml/etree/ElementPath.py",
"pylib-android/xml/etree/ElementTree.py",
"pylib-android/xml/etree/__init__.py",
- "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc",
- "pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc",
- "pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc",
- "pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc",
+ "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc",
+ "pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc",
+ "pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc",
+ "pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc",
"pylib-android/xml/etree/cElementTree.py",
"pylib-android/xml/parsers/__init__.py",
- "pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc",
+ "pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc",
"pylib-android/xml/parsers/expat.py",
"pylib-android/xml/sax/__init__.py",
- "pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc",
- "pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc",
- "pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc",
- "pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc",
- "pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc",
+ "pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc",
"pylib-android/xml/sax/_exceptions.py",
"pylib-android/xml/sax/expatreader.py",
"pylib-android/xml/sax/handler.py",
"pylib-android/xml/sax/saxutils.py",
"pylib-android/xml/sax/xmlreader.py",
"pylib-android/xmlrpc/__init__.py",
- "pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc",
- "pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc",
+ "pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc",
+ "pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc",
"pylib-android/xmlrpc/client.py",
"pylib-android/xmlrpc/server.py",
"pylib-android/zipapp.py",
"pylib-android/zipfile.py",
"pylib-android/zipimport.py",
+ "pylib-android/zoneinfo/__init__.py",
+ "pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc",
+ "pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc",
+ "pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc",
+ "pylib-android/zoneinfo/_common.py",
+ "pylib-android/zoneinfo/_tzpath.py",
+ "pylib-android/zoneinfo/_zoneinfo.py",
"pylib-apple/__future__.py",
"pylib-apple/__phello__.foo.py",
- "pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/code.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/io.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/os.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/random.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/re.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/site.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/string.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/this.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/token.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/types.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc",
- "pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc",
+ "pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/code.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/io.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/os.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/random.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/re.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/site.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/string.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/this.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/token.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/types.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc",
+ "pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc",
+ "pylib-apple/_aix_support.py",
"pylib-apple/_bootlocale.py",
+ "pylib-apple/_bootsubprocess.py",
"pylib-apple/_collections_abc.py",
"pylib-apple/_compat_pickle.py",
"pylib-apple/_compression.py",
- "pylib-apple/_dummy_thread.py",
"pylib-apple/_markupbase.py",
"pylib-apple/_osx_support.py",
"pylib-apple/_py_abc.py",
@@ -3634,35 +3648,36 @@
"pylib-apple/asynchat.py",
"pylib-apple/asyncio/__init__.py",
"pylib-apple/asyncio/__main__.py",
- "pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc",
- "pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc",
+ "pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc",
"pylib-apple/asyncio/base_events.py",
"pylib-apple/asyncio/base_futures.py",
"pylib-apple/asyncio/base_subprocess.py",
@@ -3685,6 +3700,7 @@
"pylib-apple/asyncio/streams.py",
"pylib-apple/asyncio/subprocess.py",
"pylib-apple/asyncio/tasks.py",
+ "pylib-apple/asyncio/threads.py",
"pylib-apple/asyncio/transports.py",
"pylib-apple/asyncio/trsock.py",
"pylib-apple/asyncio/unix_events.py",
@@ -3706,18 +3722,18 @@
"pylib-apple/codecs.py",
"pylib-apple/codeop.py",
"pylib-apple/collections/__init__.py",
- "pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc",
+ "pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc",
"pylib-apple/collections/abc.py",
"pylib-apple/colorsys.py",
"pylib-apple/compileall.py",
"pylib-apple/concurrent/__init__.py",
- "pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc",
"pylib-apple/concurrent/futures/__init__.py",
- "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc",
- "pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc",
- "pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc",
+ "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc",
+ "pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc",
+ "pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc",
"pylib-apple/concurrent/futures/_base.py",
"pylib-apple/concurrent/futures/process.py",
"pylib-apple/concurrent/futures/thread.py",
@@ -3729,29 +3745,29 @@
"pylib-apple/crypt.py",
"pylib-apple/csv.py",
"pylib-apple/ctypes/__init__.py",
- "pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc",
+ "pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc",
"pylib-apple/ctypes/_aix.py",
"pylib-apple/ctypes/_endian.py",
"pylib-apple/ctypes/macholib/__init__.py",
- "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc",
- "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc",
+ "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc",
+ "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc",
"pylib-apple/ctypes/macholib/dyld.py",
"pylib-apple/ctypes/macholib/dylib.py",
"pylib-apple/ctypes/macholib/framework.py",
"pylib-apple/ctypes/util.py",
"pylib-apple/ctypes/wintypes.py",
"pylib-apple/curses/__init__.py",
- "pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc",
- "pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc",
- "pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc",
- "pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc",
+ "pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc",
+ "pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc",
+ "pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc",
"pylib-apple/curses/ascii.py",
"pylib-apple/curses/has_key.py",
"pylib-apple/curses/panel.py",
@@ -3762,28 +3778,27 @@
"pylib-apple/difflib.py",
"pylib-apple/dis.py",
"pylib-apple/doctest.py",
- "pylib-apple/dummy_threading.py",
"pylib-apple/email/__init__.py",
- "pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc",
- "pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc",
+ "pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc",
+ "pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc",
"pylib-apple/email/_encoded_words.py",
"pylib-apple/email/_header_value_parser.py",
"pylib-apple/email/_parseaddr.py",
@@ -3800,15 +3815,15 @@
"pylib-apple/email/iterators.py",
"pylib-apple/email/message.py",
"pylib-apple/email/mime/__init__.py",
- "pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc",
- "pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc",
+ "pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc",
"pylib-apple/email/mime/application.py",
"pylib-apple/email/mime/audio.py",
"pylib-apple/email/mime/base.py",
@@ -3822,129 +3837,128 @@
"pylib-apple/email/quoprimime.py",
"pylib-apple/email/utils.py",
"pylib-apple/encodings/__init__.py",
- "pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc",
- "pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc",
+ "pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc",
"pylib-apple/encodings/aliases.py",
"pylib-apple/encodings/ascii.py",
"pylib-apple/encodings/base64_codec.py",
@@ -4032,7 +4046,6 @@
"pylib-apple/encodings/kz1048.py",
"pylib-apple/encodings/latin_1.py",
"pylib-apple/encodings/mac_arabic.py",
- "pylib-apple/encodings/mac_centeuro.py",
"pylib-apple/encodings/mac_croatian.py",
"pylib-apple/encodings/mac_cyrillic.py",
"pylib-apple/encodings/mac_farsi.py",
@@ -4080,22 +4093,23 @@
"pylib-apple/getpass.py",
"pylib-apple/gettext.py",
"pylib-apple/glob.py",
+ "pylib-apple/graphlib.py",
"pylib-apple/gzip.py",
"pylib-apple/hashlib.py",
"pylib-apple/heapq.py",
"pylib-apple/hmac.py",
"pylib-apple/html/__init__.py",
- "pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc",
- "pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc",
+ "pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc",
+ "pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc",
"pylib-apple/html/entities.py",
"pylib-apple/html/parser.py",
"pylib-apple/http/__init__.py",
- "pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc",
- "pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc",
- "pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc",
- "pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc",
+ "pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc",
+ "pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc",
+ "pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc",
+ "pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc",
"pylib-apple/http/client.py",
"pylib-apple/http/cookiejar.py",
"pylib-apple/http/cookies.py",
@@ -4103,16 +4117,18 @@
"pylib-apple/imghdr.py",
"pylib-apple/imp.py",
"pylib-apple/importlib/__init__.py",
- "pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc",
- "pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc",
+ "pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc",
"pylib-apple/importlib/_bootstrap.py",
"pylib-apple/importlib/_bootstrap_external.py",
+ "pylib-apple/importlib/_common.py",
"pylib-apple/importlib/abc.py",
"pylib-apple/importlib/machinery.py",
"pylib-apple/importlib/metadata.py",
@@ -4122,11 +4138,11 @@
"pylib-apple/io.py",
"pylib-apple/ipaddress.py",
"pylib-apple/json/__init__.py",
- "pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc",
- "pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc",
- "pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc",
- "pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc",
+ "pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc",
+ "pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc",
+ "pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc",
+ "pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc",
"pylib-apple/json/decoder.py",
"pylib-apple/json/encoder.py",
"pylib-apple/json/scanner.py",
@@ -4135,9 +4151,9 @@
"pylib-apple/linecache.py",
"pylib-apple/locale.py",
"pylib-apple/logging/__init__.py",
- "pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc",
- "pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc",
+ "pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc",
+ "pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc",
"pylib-apple/logging/config.py",
"pylib-apple/logging/handlers.py",
"pylib-apple/lzma.py",
@@ -4145,6 +4161,14 @@
"pylib-apple/mailcap.py",
"pylib-apple/mimetypes.py",
"pylib-apple/modulefinder.py",
+ "pylib-apple/msilib/__init__.py",
+ "pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc",
+ "pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc",
+ "pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc",
+ "pylib-apple/msilib/schema.py",
+ "pylib-apple/msilib/sequence.py",
+ "pylib-apple/msilib/text.py",
"pylib-apple/netrc.py",
"pylib-apple/nntplib.py",
"pylib-apple/ntpath.py",
@@ -4192,9 +4216,9 @@
"pylib-apple/socket.py",
"pylib-apple/socketserver.py",
"pylib-apple/sqlite3/__init__.py",
- "pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc",
- "pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc",
+ "pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc",
+ "pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc",
"pylib-apple/sqlite3/dbapi2.py",
"pylib-apple/sqlite3/dump.py",
"pylib-apple/sre_compile.py",
@@ -4228,12 +4252,12 @@
"pylib-apple/types.py",
"pylib-apple/typing.py",
"pylib-apple/urllib/__init__.py",
- "pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc",
- "pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc",
- "pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc",
- "pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc",
- "pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc",
+ "pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc",
"pylib-apple/urllib/error.py",
"pylib-apple/urllib/parse.py",
"pylib-apple/urllib/request.py",
@@ -4247,17 +4271,17 @@
"pylib-apple/webbrowser.py",
"pylib-apple/xdrlib.py",
"pylib-apple/xml/__init__.py",
- "pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc",
"pylib-apple/xml/dom/NodeFilter.py",
"pylib-apple/xml/dom/__init__.py",
- "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc",
- "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc",
"pylib-apple/xml/dom/domreg.py",
"pylib-apple/xml/dom/expatbuilder.py",
"pylib-apple/xml/dom/minicompat.py",
@@ -4268,37 +4292,45 @@
"pylib-apple/xml/etree/ElementPath.py",
"pylib-apple/xml/etree/ElementTree.py",
"pylib-apple/xml/etree/__init__.py",
- "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc",
- "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc",
- "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc",
- "pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc",
+ "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc",
"pylib-apple/xml/etree/cElementTree.py",
"pylib-apple/xml/parsers/__init__.py",
- "pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc",
+ "pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc",
"pylib-apple/xml/parsers/expat.py",
"pylib-apple/xml/sax/__init__.py",
- "pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc",
- "pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc",
- "pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc",
- "pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc",
- "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc",
+ "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc",
"pylib-apple/xml/sax/_exceptions.py",
"pylib-apple/xml/sax/expatreader.py",
"pylib-apple/xml/sax/handler.py",
"pylib-apple/xml/sax/saxutils.py",
"pylib-apple/xml/sax/xmlreader.py",
"pylib-apple/xmlrpc/__init__.py",
- "pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc",
- "pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc",
- "pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc",
+ "pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc",
+ "pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc",
"pylib-apple/xmlrpc/client.py",
"pylib-apple/xmlrpc/server.py",
"pylib-apple/zipapp.py",
"pylib-apple/zipfile.py",
"pylib-apple/zipimport.py",
+ "pylib-apple/zoneinfo/__init__.py",
+ "pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc",
+ "pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc",
+ "pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc",
+ "pylib-apple/zoneinfo/_common.py",
+ "pylib-apple/zoneinfo/_tzpath.py",
+ "pylib-apple/zoneinfo/_zoneinfo.py",
"windows/Win32/DLLs/_asyncio.pyd",
"windows/Win32/DLLs/_asyncio_d.pyd",
"windows/Win32/DLLs/_bz2.pyd",
@@ -4337,11 +4369,17 @@
"windows/Win32/DLLs/_testconsole_d.pyd",
"windows/Win32/DLLs/_testimportmultiple.pyd",
"windows/Win32/DLLs/_testimportmultiple_d.pyd",
+ "windows/Win32/DLLs/_testinternalcapi.pyd",
+ "windows/Win32/DLLs/_testinternalcapi_d.pyd",
"windows/Win32/DLLs/_testmultiphase.pyd",
"windows/Win32/DLLs/_testmultiphase_d.pyd",
"windows/Win32/DLLs/_tkinter.pyd",
"windows/Win32/DLLs/_tkinter_d.lib",
"windows/Win32/DLLs/_tkinter_d.pyd",
+ "windows/Win32/DLLs/_uuid.pyd",
+ "windows/Win32/DLLs/_uuid_d.pyd",
+ "windows/Win32/DLLs/_zoneinfo.pyd",
+ "windows/Win32/DLLs/_zoneinfo_d.pyd",
"windows/Win32/DLLs/libcrypto-1_1.dll",
"windows/Win32/DLLs/libffi-7.dll",
"windows/Win32/DLLs/libssl-1_1.dll",
@@ -4361,180 +4399,182 @@
"windows/Win32/DLLs/winsound_d.pyd",
"windows/Win32/Lib/__future__.py",
"windows/Win32/Lib/__phello__.foo.py",
- "windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/_aix_support.py",
"windows/Win32/Lib/_bootlocale.py",
+ "windows/Win32/Lib/_bootsubprocess.py",
"windows/Win32/Lib/_collections_abc.py",
"windows/Win32/Lib/_compat_pickle.py",
"windows/Win32/Lib/_compression.py",
- "windows/Win32/Lib/_dummy_thread.py",
"windows/Win32/Lib/_markupbase.py",
"windows/Win32/Lib/_osx_support.py",
"windows/Win32/Lib/_py_abc.py",
@@ -4552,35 +4592,36 @@
"windows/Win32/Lib/asynchat.py",
"windows/Win32/Lib/asyncio/__init__.py",
"windows/Win32/Lib/asyncio/__main__.py",
- "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc",
"windows/Win32/Lib/asyncio/base_events.py",
"windows/Win32/Lib/asyncio/base_futures.py",
"windows/Win32/Lib/asyncio/base_subprocess.py",
@@ -4603,6 +4644,7 @@
"windows/Win32/Lib/asyncio/streams.py",
"windows/Win32/Lib/asyncio/subprocess.py",
"windows/Win32/Lib/asyncio/tasks.py",
+ "windows/Win32/Lib/asyncio/threads.py",
"windows/Win32/Lib/asyncio/transports.py",
"windows/Win32/Lib/asyncio/trsock.py",
"windows/Win32/Lib/asyncio/unix_events.py",
@@ -4624,18 +4666,18 @@
"windows/Win32/Lib/codecs.py",
"windows/Win32/Lib/codeop.py",
"windows/Win32/Lib/collections/__init__.py",
- "windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc",
"windows/Win32/Lib/collections/abc.py",
"windows/Win32/Lib/colorsys.py",
"windows/Win32/Lib/compileall.py",
"windows/Win32/Lib/concurrent/__init__.py",
- "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc",
"windows/Win32/Lib/concurrent/futures/__init__.py",
- "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc",
"windows/Win32/Lib/concurrent/futures/_base.py",
"windows/Win32/Lib/concurrent/futures/process.py",
"windows/Win32/Lib/concurrent/futures/thread.py",
@@ -4647,19 +4689,19 @@
"windows/Win32/Lib/crypt.py",
"windows/Win32/Lib/csv.py",
"windows/Win32/Lib/ctypes/__init__.py",
- "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc",
"windows/Win32/Lib/ctypes/_aix.py",
"windows/Win32/Lib/ctypes/_endian.py",
"windows/Win32/Lib/ctypes/macholib/README.ctypes",
"windows/Win32/Lib/ctypes/macholib/__init__.py",
- "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc",
"windows/Win32/Lib/ctypes/macholib/dyld.py",
"windows/Win32/Lib/ctypes/macholib/dylib.py",
"windows/Win32/Lib/ctypes/macholib/fetch_macholib",
@@ -4668,11 +4710,11 @@
"windows/Win32/Lib/ctypes/util.py",
"windows/Win32/Lib/ctypes/wintypes.py",
"windows/Win32/Lib/curses/__init__.py",
- "windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc",
"windows/Win32/Lib/curses/ascii.py",
"windows/Win32/Lib/curses/has_key.py",
"windows/Win32/Lib/curses/panel.py",
@@ -4683,28 +4725,27 @@
"windows/Win32/Lib/difflib.py",
"windows/Win32/Lib/dis.py",
"windows/Win32/Lib/doctest.py",
- "windows/Win32/Lib/dummy_threading.py",
"windows/Win32/Lib/email/__init__.py",
- "windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc",
"windows/Win32/Lib/email/_encoded_words.py",
"windows/Win32/Lib/email/_header_value_parser.py",
"windows/Win32/Lib/email/_parseaddr.py",
@@ -4722,15 +4763,15 @@
"windows/Win32/Lib/email/iterators.py",
"windows/Win32/Lib/email/message.py",
"windows/Win32/Lib/email/mime/__init__.py",
- "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc",
"windows/Win32/Lib/email/mime/application.py",
"windows/Win32/Lib/email/mime/audio.py",
"windows/Win32/Lib/email/mime/base.py",
@@ -4744,129 +4785,128 @@
"windows/Win32/Lib/email/quoprimime.py",
"windows/Win32/Lib/email/utils.py",
"windows/Win32/Lib/encodings/__init__.py",
- "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc",
"windows/Win32/Lib/encodings/aliases.py",
"windows/Win32/Lib/encodings/ascii.py",
"windows/Win32/Lib/encodings/base64_codec.py",
@@ -4954,7 +4994,6 @@
"windows/Win32/Lib/encodings/kz1048.py",
"windows/Win32/Lib/encodings/latin_1.py",
"windows/Win32/Lib/encodings/mac_arabic.py",
- "windows/Win32/Lib/encodings/mac_centeuro.py",
"windows/Win32/Lib/encodings/mac_croatian.py",
"windows/Win32/Lib/encodings/mac_cyrillic.py",
"windows/Win32/Lib/encodings/mac_farsi.py",
@@ -5002,22 +5041,23 @@
"windows/Win32/Lib/getpass.py",
"windows/Win32/Lib/gettext.py",
"windows/Win32/Lib/glob.py",
+ "windows/Win32/Lib/graphlib.py",
"windows/Win32/Lib/gzip.py",
"windows/Win32/Lib/hashlib.py",
"windows/Win32/Lib/heapq.py",
"windows/Win32/Lib/hmac.py",
"windows/Win32/Lib/html/__init__.py",
- "windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc",
"windows/Win32/Lib/html/entities.py",
"windows/Win32/Lib/html/parser.py",
"windows/Win32/Lib/http/__init__.py",
- "windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc",
"windows/Win32/Lib/http/client.py",
"windows/Win32/Lib/http/cookiejar.py",
"windows/Win32/Lib/http/cookies.py",
@@ -5025,16 +5065,18 @@
"windows/Win32/Lib/imghdr.py",
"windows/Win32/Lib/imp.py",
"windows/Win32/Lib/importlib/__init__.py",
- "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc",
"windows/Win32/Lib/importlib/_bootstrap.py",
"windows/Win32/Lib/importlib/_bootstrap_external.py",
+ "windows/Win32/Lib/importlib/_common.py",
"windows/Win32/Lib/importlib/abc.py",
"windows/Win32/Lib/importlib/machinery.py",
"windows/Win32/Lib/importlib/metadata.py",
@@ -5044,11 +5086,11 @@
"windows/Win32/Lib/io.py",
"windows/Win32/Lib/ipaddress.py",
"windows/Win32/Lib/json/__init__.py",
- "windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc",
"windows/Win32/Lib/json/decoder.py",
"windows/Win32/Lib/json/encoder.py",
"windows/Win32/Lib/json/scanner.py",
@@ -5057,9 +5099,9 @@
"windows/Win32/Lib/linecache.py",
"windows/Win32/Lib/locale.py",
"windows/Win32/Lib/logging/__init__.py",
- "windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc",
"windows/Win32/Lib/logging/config.py",
"windows/Win32/Lib/logging/handlers.py",
"windows/Win32/Lib/lzma.py",
@@ -5068,10 +5110,10 @@
"windows/Win32/Lib/mimetypes.py",
"windows/Win32/Lib/modulefinder.py",
"windows/Win32/Lib/msilib/__init__.py",
- "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc",
"windows/Win32/Lib/msilib/schema.py",
"windows/Win32/Lib/msilib/sequence.py",
"windows/Win32/Lib/msilib/text.py",
@@ -5122,9 +5164,9 @@
"windows/Win32/Lib/socket.py",
"windows/Win32/Lib/socketserver.py",
"windows/Win32/Lib/sqlite3/__init__.py",
- "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc",
"windows/Win32/Lib/sqlite3/dbapi2.py",
"windows/Win32/Lib/sqlite3/dump.py",
"windows/Win32/Lib/sre_compile.py",
@@ -5158,12 +5200,12 @@
"windows/Win32/Lib/types.py",
"windows/Win32/Lib/typing.py",
"windows/Win32/Lib/urllib/__init__.py",
- "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc",
"windows/Win32/Lib/urllib/error.py",
"windows/Win32/Lib/urllib/parse.py",
"windows/Win32/Lib/urllib/request.py",
@@ -5177,17 +5219,17 @@
"windows/Win32/Lib/webbrowser.py",
"windows/Win32/Lib/xdrlib.py",
"windows/Win32/Lib/xml/__init__.py",
- "windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xml/dom/NodeFilter.py",
"windows/Win32/Lib/xml/dom/__init__.py",
- "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xml/dom/domreg.py",
"windows/Win32/Lib/xml/dom/expatbuilder.py",
"windows/Win32/Lib/xml/dom/minicompat.py",
@@ -5198,37 +5240,45 @@
"windows/Win32/Lib/xml/etree/ElementPath.py",
"windows/Win32/Lib/xml/etree/ElementTree.py",
"windows/Win32/Lib/xml/etree/__init__.py",
- "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xml/etree/cElementTree.py",
"windows/Win32/Lib/xml/parsers/__init__.py",
- "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xml/parsers/expat.py",
"windows/Win32/Lib/xml/sax/__init__.py",
- "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xml/sax/_exceptions.py",
"windows/Win32/Lib/xml/sax/expatreader.py",
"windows/Win32/Lib/xml/sax/handler.py",
"windows/Win32/Lib/xml/sax/saxutils.py",
"windows/Win32/Lib/xml/sax/xmlreader.py",
"windows/Win32/Lib/xmlrpc/__init__.py",
- "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc",
- "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc",
+ "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc",
"windows/Win32/Lib/xmlrpc/client.py",
"windows/Win32/Lib/xmlrpc/server.py",
"windows/Win32/Lib/zipapp.py",
"windows/Win32/Lib/zipfile.py",
"windows/Win32/Lib/zipimport.py",
+ "windows/Win32/Lib/zoneinfo/__init__.py",
+ "windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc",
+ "windows/Win32/Lib/zoneinfo/_common.py",
+ "windows/Win32/Lib/zoneinfo/_tzpath.py",
+ "windows/Win32/Lib/zoneinfo/_zoneinfo.py",
"windows/Win32/OpenAL32.dll",
"windows/Win32/SDL2.dll",
"windows/Win32/libvorbis.dll",
@@ -5236,8 +5286,8 @@
"windows/Win32/msvcp140d.dll",
"windows/Win32/ogg.dll",
"windows/Win32/python.exe",
- "windows/Win32/python38.dll",
- "windows/Win32/python38_d.dll",
+ "windows/Win32/python39.dll",
+ "windows/Win32/python39_d.dll",
"windows/Win32/python_d.exe",
"windows/Win32/pythonw.exe",
"windows/Win32/pythonw_d.exe",
@@ -5282,11 +5332,17 @@
"windows/x64/DLLs/_testconsole_d.pyd",
"windows/x64/DLLs/_testimportmultiple.pyd",
"windows/x64/DLLs/_testimportmultiple_d.pyd",
+ "windows/x64/DLLs/_testinternalcapi.pyd",
+ "windows/x64/DLLs/_testinternalcapi_d.pyd",
"windows/x64/DLLs/_testmultiphase.pyd",
"windows/x64/DLLs/_testmultiphase_d.pyd",
"windows/x64/DLLs/_tkinter.pyd",
"windows/x64/DLLs/_tkinter_d.lib",
"windows/x64/DLLs/_tkinter_d.pyd",
+ "windows/x64/DLLs/_uuid.pyd",
+ "windows/x64/DLLs/_uuid_d.pyd",
+ "windows/x64/DLLs/_zoneinfo.pyd",
+ "windows/x64/DLLs/_zoneinfo_d.pyd",
"windows/x64/DLLs/libcrypto-1_1.dll",
"windows/x64/DLLs/libffi-7.dll",
"windows/x64/DLLs/libssl-1_1.dll",
@@ -5306,180 +5362,182 @@
"windows/x64/DLLs/winsound_d.pyd",
"windows/x64/Lib/__future__.py",
"windows/x64/Lib/__phello__.foo.py",
- "windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc",
- "windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/_aix_support.py",
"windows/x64/Lib/_bootlocale.py",
+ "windows/x64/Lib/_bootsubprocess.py",
"windows/x64/Lib/_collections_abc.py",
"windows/x64/Lib/_compat_pickle.py",
"windows/x64/Lib/_compression.py",
- "windows/x64/Lib/_dummy_thread.py",
"windows/x64/Lib/_markupbase.py",
"windows/x64/Lib/_osx_support.py",
"windows/x64/Lib/_py_abc.py",
@@ -5497,35 +5555,36 @@
"windows/x64/Lib/asynchat.py",
"windows/x64/Lib/asyncio/__init__.py",
"windows/x64/Lib/asyncio/__main__.py",
- "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc",
- "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc",
"windows/x64/Lib/asyncio/base_events.py",
"windows/x64/Lib/asyncio/base_futures.py",
"windows/x64/Lib/asyncio/base_subprocess.py",
@@ -5548,6 +5607,7 @@
"windows/x64/Lib/asyncio/streams.py",
"windows/x64/Lib/asyncio/subprocess.py",
"windows/x64/Lib/asyncio/tasks.py",
+ "windows/x64/Lib/asyncio/threads.py",
"windows/x64/Lib/asyncio/transports.py",
"windows/x64/Lib/asyncio/trsock.py",
"windows/x64/Lib/asyncio/unix_events.py",
@@ -5569,18 +5629,18 @@
"windows/x64/Lib/codecs.py",
"windows/x64/Lib/codeop.py",
"windows/x64/Lib/collections/__init__.py",
- "windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc",
"windows/x64/Lib/collections/abc.py",
"windows/x64/Lib/colorsys.py",
"windows/x64/Lib/compileall.py",
"windows/x64/Lib/concurrent/__init__.py",
- "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc",
"windows/x64/Lib/concurrent/futures/__init__.py",
- "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc",
- "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc",
- "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc",
"windows/x64/Lib/concurrent/futures/_base.py",
"windows/x64/Lib/concurrent/futures/process.py",
"windows/x64/Lib/concurrent/futures/thread.py",
@@ -5592,19 +5652,19 @@
"windows/x64/Lib/crypt.py",
"windows/x64/Lib/csv.py",
"windows/x64/Lib/ctypes/__init__.py",
- "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc",
"windows/x64/Lib/ctypes/_aix.py",
"windows/x64/Lib/ctypes/_endian.py",
"windows/x64/Lib/ctypes/macholib/README.ctypes",
"windows/x64/Lib/ctypes/macholib/__init__.py",
- "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc",
- "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc",
"windows/x64/Lib/ctypes/macholib/dyld.py",
"windows/x64/Lib/ctypes/macholib/dylib.py",
"windows/x64/Lib/ctypes/macholib/fetch_macholib",
@@ -5613,11 +5673,11 @@
"windows/x64/Lib/ctypes/util.py",
"windows/x64/Lib/ctypes/wintypes.py",
"windows/x64/Lib/curses/__init__.py",
- "windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc",
- "windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc",
- "windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc",
- "windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc",
"windows/x64/Lib/curses/ascii.py",
"windows/x64/Lib/curses/has_key.py",
"windows/x64/Lib/curses/panel.py",
@@ -5628,28 +5688,27 @@
"windows/x64/Lib/difflib.py",
"windows/x64/Lib/dis.py",
"windows/x64/Lib/doctest.py",
- "windows/x64/Lib/dummy_threading.py",
"windows/x64/Lib/email/__init__.py",
- "windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc",
"windows/x64/Lib/email/_encoded_words.py",
"windows/x64/Lib/email/_header_value_parser.py",
"windows/x64/Lib/email/_parseaddr.py",
@@ -5667,15 +5726,15 @@
"windows/x64/Lib/email/iterators.py",
"windows/x64/Lib/email/message.py",
"windows/x64/Lib/email/mime/__init__.py",
- "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc",
- "windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc",
"windows/x64/Lib/email/mime/application.py",
"windows/x64/Lib/email/mime/audio.py",
"windows/x64/Lib/email/mime/base.py",
@@ -5689,129 +5748,128 @@
"windows/x64/Lib/email/quoprimime.py",
"windows/x64/Lib/email/utils.py",
"windows/x64/Lib/encodings/__init__.py",
- "windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc",
- "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc",
"windows/x64/Lib/encodings/aliases.py",
"windows/x64/Lib/encodings/ascii.py",
"windows/x64/Lib/encodings/base64_codec.py",
@@ -5899,7 +5957,6 @@
"windows/x64/Lib/encodings/kz1048.py",
"windows/x64/Lib/encodings/latin_1.py",
"windows/x64/Lib/encodings/mac_arabic.py",
- "windows/x64/Lib/encodings/mac_centeuro.py",
"windows/x64/Lib/encodings/mac_croatian.py",
"windows/x64/Lib/encodings/mac_cyrillic.py",
"windows/x64/Lib/encodings/mac_farsi.py",
@@ -5947,22 +6004,23 @@
"windows/x64/Lib/getpass.py",
"windows/x64/Lib/gettext.py",
"windows/x64/Lib/glob.py",
+ "windows/x64/Lib/graphlib.py",
"windows/x64/Lib/gzip.py",
"windows/x64/Lib/hashlib.py",
"windows/x64/Lib/heapq.py",
"windows/x64/Lib/hmac.py",
"windows/x64/Lib/html/__init__.py",
- "windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc",
- "windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc",
"windows/x64/Lib/html/entities.py",
"windows/x64/Lib/html/parser.py",
"windows/x64/Lib/http/__init__.py",
- "windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc",
- "windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc",
- "windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc",
- "windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc",
"windows/x64/Lib/http/client.py",
"windows/x64/Lib/http/cookiejar.py",
"windows/x64/Lib/http/cookies.py",
@@ -5970,16 +6028,18 @@
"windows/x64/Lib/imghdr.py",
"windows/x64/Lib/imp.py",
"windows/x64/Lib/importlib/__init__.py",
- "windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc",
- "windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc",
"windows/x64/Lib/importlib/_bootstrap.py",
"windows/x64/Lib/importlib/_bootstrap_external.py",
+ "windows/x64/Lib/importlib/_common.py",
"windows/x64/Lib/importlib/abc.py",
"windows/x64/Lib/importlib/machinery.py",
"windows/x64/Lib/importlib/metadata.py",
@@ -5989,11 +6049,11 @@
"windows/x64/Lib/io.py",
"windows/x64/Lib/ipaddress.py",
"windows/x64/Lib/json/__init__.py",
- "windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc",
- "windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc",
- "windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc",
- "windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc",
"windows/x64/Lib/json/decoder.py",
"windows/x64/Lib/json/encoder.py",
"windows/x64/Lib/json/scanner.py",
@@ -6002,9 +6062,9 @@
"windows/x64/Lib/linecache.py",
"windows/x64/Lib/locale.py",
"windows/x64/Lib/logging/__init__.py",
- "windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc",
- "windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc",
"windows/x64/Lib/logging/config.py",
"windows/x64/Lib/logging/handlers.py",
"windows/x64/Lib/lzma.py",
@@ -6013,10 +6073,10 @@
"windows/x64/Lib/mimetypes.py",
"windows/x64/Lib/modulefinder.py",
"windows/x64/Lib/msilib/__init__.py",
- "windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc",
- "windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc",
- "windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc",
"windows/x64/Lib/msilib/schema.py",
"windows/x64/Lib/msilib/sequence.py",
"windows/x64/Lib/msilib/text.py",
@@ -6067,9 +6127,9 @@
"windows/x64/Lib/socket.py",
"windows/x64/Lib/socketserver.py",
"windows/x64/Lib/sqlite3/__init__.py",
- "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc",
- "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc",
"windows/x64/Lib/sqlite3/dbapi2.py",
"windows/x64/Lib/sqlite3/dump.py",
"windows/x64/Lib/sre_compile.py",
@@ -6103,12 +6163,12 @@
"windows/x64/Lib/types.py",
"windows/x64/Lib/typing.py",
"windows/x64/Lib/urllib/__init__.py",
- "windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc",
- "windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc",
- "windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc",
- "windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc",
- "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc",
"windows/x64/Lib/urllib/error.py",
"windows/x64/Lib/urllib/parse.py",
"windows/x64/Lib/urllib/request.py",
@@ -6122,17 +6182,17 @@
"windows/x64/Lib/webbrowser.py",
"windows/x64/Lib/xdrlib.py",
"windows/x64/Lib/xml/__init__.py",
- "windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc",
"windows/x64/Lib/xml/dom/NodeFilter.py",
"windows/x64/Lib/xml/dom/__init__.py",
- "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc",
"windows/x64/Lib/xml/dom/domreg.py",
"windows/x64/Lib/xml/dom/expatbuilder.py",
"windows/x64/Lib/xml/dom/minicompat.py",
@@ -6143,37 +6203,45 @@
"windows/x64/Lib/xml/etree/ElementPath.py",
"windows/x64/Lib/xml/etree/ElementTree.py",
"windows/x64/Lib/xml/etree/__init__.py",
- "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc",
"windows/x64/Lib/xml/etree/cElementTree.py",
"windows/x64/Lib/xml/parsers/__init__.py",
- "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc",
"windows/x64/Lib/xml/parsers/expat.py",
"windows/x64/Lib/xml/sax/__init__.py",
- "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc",
"windows/x64/Lib/xml/sax/_exceptions.py",
"windows/x64/Lib/xml/sax/expatreader.py",
"windows/x64/Lib/xml/sax/handler.py",
"windows/x64/Lib/xml/sax/saxutils.py",
"windows/x64/Lib/xml/sax/xmlreader.py",
"windows/x64/Lib/xmlrpc/__init__.py",
- "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc",
- "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc",
+ "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc",
"windows/x64/Lib/xmlrpc/client.py",
"windows/x64/Lib/xmlrpc/server.py",
"windows/x64/Lib/zipapp.py",
"windows/x64/Lib/zipfile.py",
"windows/x64/Lib/zipimport.py",
+ "windows/x64/Lib/zoneinfo/__init__.py",
+ "windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc",
+ "windows/x64/Lib/zoneinfo/_common.py",
+ "windows/x64/Lib/zoneinfo/_tzpath.py",
+ "windows/x64/Lib/zoneinfo/_zoneinfo.py",
"windows/x64/OpenAL32.dll",
"windows/x64/SDL2.dll",
"windows/x64/libvorbis.dll",
@@ -6181,8 +6249,8 @@
"windows/x64/msvcp140d.dll",
"windows/x64/ogg.dll",
"windows/x64/python.exe",
- "windows/x64/python38.dll",
- "windows/x64/python38_d.dll",
+ "windows/x64/python39.dll",
+ "windows/x64/python39_d.dll",
"windows/x64/python_d.exe",
"windows/x64/pythonw.exe",
"windows/x64/pythonw_d.exe",
diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json
index 056941fb..2fe16361 100644
--- a/assets/.asset_manifest_public.json
+++ b/assets/.asset_manifest_public.json
@@ -1,68 +1,68 @@
[
"ba_data/python/ba/__init__.py",
- "ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc",
- "ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc",
"ba_data/python/ba/_account.py",
"ba_data/python/ba/_achievement.py",
"ba_data/python/ba/_activity.py",
@@ -91,8 +91,8 @@
"ba_data/python/ba/_gameutils.py",
"ba_data/python/ba/_general.py",
"ba_data/python/ba/_generated/__init__.py",
- "ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc",
+ "ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc",
"ba_data/python/ba/_generated/enums.py",
"ba_data/python/ba/_hooks.py",
"ba_data/python/ba/_input.py",
@@ -130,33 +130,33 @@
"ba_data/python/ba/modutils.py",
"ba_data/python/ba/osmusic.py",
"ba_data/python/ba/ui/__init__.py",
- "ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc",
"ba_data/python/bacommon/__init__.py",
- "ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc",
- "ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc",
- "ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc",
+ "ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc",
+ "ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc",
+ "ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc",
"ba_data/python/bacommon/assets.py",
"ba_data/python/bacommon/net.py",
"ba_data/python/bacommon/servermanager.py",
"ba_data/python/bastd/__init__.py",
- "ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc",
"ba_data/python/bastd/activity/__init__.py",
- "ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc",
"ba_data/python/bastd/activity/coopjoin.py",
"ba_data/python/bastd/activity/coopscore.py",
"ba_data/python/bastd/activity/drawscore.py",
@@ -166,27 +166,27 @@
"ba_data/python/bastd/activity/multiteamscore.py",
"ba_data/python/bastd/activity/multiteamvictory.py",
"ba_data/python/bastd/actor/__init__.py",
- "ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc",
"ba_data/python/bastd/actor/background.py",
"ba_data/python/bastd/actor/bomb.py",
"ba_data/python/bastd/actor/controlsguide.py",
@@ -209,25 +209,25 @@
"ba_data/python/bastd/actor/zoomtext.py",
"ba_data/python/bastd/appdelegate.py",
"ba_data/python/bastd/game/__init__.py",
- "ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc",
"ba_data/python/bastd/game/assault.py",
"ba_data/python/bastd/game/capturetheflag.py",
"ba_data/python/bastd/game/chosenone.py",
@@ -248,29 +248,29 @@
"ba_data/python/bastd/game/thelaststand.py",
"ba_data/python/bastd/gameutils.py",
"ba_data/python/bastd/keyboard/__init__.py",
- "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc",
"ba_data/python/bastd/keyboard/englishkeyboard.py",
"ba_data/python/bastd/mainmenu.py",
"ba_data/python/bastd/mapdata/__init__.py",
- "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc",
"ba_data/python/bastd/mapdata/big_g.py",
"ba_data/python/bastd/mapdata/bridgit.py",
"ba_data/python/bastd/mapdata/courtyard.py",
@@ -290,57 +290,57 @@
"ba_data/python/bastd/mapdata/zig_zag.py",
"ba_data/python/bastd/maps.py",
"ba_data/python/bastd/session/__init__.py",
- "ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc",
"ba_data/python/bastd/stdmap.py",
"ba_data/python/bastd/tutorial.py",
"ba_data/python/bastd/ui/__init__.py",
- "ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/__init__.py",
- "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/account/link.py",
"ba_data/python/bastd/ui/account/settings.py",
"ba_data/python/bastd/ui/account/unlink.py",
@@ -354,10 +354,10 @@
"ba_data/python/bastd/ui/confirm.py",
"ba_data/python/bastd/ui/continues.py",
"ba_data/python/bastd/ui/coop/__init__.py",
- "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/coop/browser.py",
"ba_data/python/bastd/ui/coop/gamebutton.py",
"ba_data/python/bastd/ui/coop/level.py",
@@ -366,12 +366,12 @@
"ba_data/python/bastd/ui/feedback.py",
"ba_data/python/bastd/ui/fileselector.py",
"ba_data/python/bastd/ui/gather/__init__.py",
- "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/gather/abouttab.py",
"ba_data/python/bastd/ui/gather/manualtab.py",
"ba_data/python/bastd/ui/gather/nearbytab.py",
@@ -383,9 +383,9 @@
"ba_data/python/bastd/ui/iconpicker.py",
"ba_data/python/bastd/ui/kiosk.py",
"ba_data/python/bastd/ui/league/__init__.py",
- "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/league/rankbutton.py",
"ba_data/python/bastd/ui/league/rankwindow.py",
"ba_data/python/bastd/ui/mainmenu.py",
@@ -394,15 +394,15 @@
"ba_data/python/bastd/ui/partyqueue.py",
"ba_data/python/bastd/ui/play.py",
"ba_data/python/bastd/ui/playlist/__init__.py",
- "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/playlist/addgame.py",
"ba_data/python/bastd/ui/playlist/browser.py",
"ba_data/python/bastd/ui/playlist/customizebrowser.py",
@@ -414,10 +414,10 @@
"ba_data/python/bastd/ui/playoptions.py",
"ba_data/python/bastd/ui/popup.py",
"ba_data/python/bastd/ui/profile/__init__.py",
- "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/profile/browser.py",
"ba_data/python/bastd/ui/profile/edit.py",
"ba_data/python/bastd/ui/profile/upgrade.py",
@@ -429,25 +429,25 @@
"ba_data/python/bastd/ui/resourcetypeinfo.py",
"ba_data/python/bastd/ui/serverdialog.py",
"ba_data/python/bastd/ui/settings/__init__.py",
- "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/settings/advanced.py",
"ba_data/python/bastd/ui/settings/allsettings.py",
"ba_data/python/bastd/ui/settings/audio.py",
@@ -467,21 +467,21 @@
"ba_data/python/bastd/ui/settings/wiimote.py",
"ba_data/python/bastd/ui/settings/xbox360controller.py",
"ba_data/python/bastd/ui/soundtrack/__init__.py",
- "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/soundtrack/browser.py",
"ba_data/python/bastd/ui/soundtrack/edit.py",
"ba_data/python/bastd/ui/soundtrack/entrytypeselect.py",
"ba_data/python/bastd/ui/soundtrack/macmusicapp.py",
"ba_data/python/bastd/ui/specialoffer.py",
"ba_data/python/bastd/ui/store/__init__.py",
- "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc",
- "ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc",
+ "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc",
+ "ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc",
"ba_data/python/bastd/ui/store/browser.py",
"ba_data/python/bastd/ui/store/button.py",
"ba_data/python/bastd/ui/store/item.py",
@@ -494,21 +494,21 @@
"ba_data/python/bastd/ui/url.py",
"ba_data/python/bastd/ui/watch.py",
"ba_data/python/efro/__init__.py",
- "ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc",
- "ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc",
- "ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc",
- "ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc",
- "ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc",
"ba_data/python/efro/call.py",
"ba_data/python/efro/dataclassio/__init__.py",
- "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc",
- "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc",
+ "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc",
"ba_data/python/efro/dataclassio/_base.py",
"ba_data/python/efro/dataclassio/_inputter.py",
"ba_data/python/efro/dataclassio/_outputter.py",
@@ -519,6 +519,6 @@
"ba_data/python/efro/message.py",
"ba_data/python/efro/terminal.py",
"ba_data/python/efro/util.py",
- "server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc",
+ "server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc",
"server/ballisticacore_server.py"
]
\ No newline at end of file
diff --git a/assets/Makefile b/assets/Makefile
index 6f9441cf..8ddb1a47 100644
--- a/assets/Makefile
+++ b/assets/Makefile
@@ -122,7 +122,7 @@ ASSET_TARGETS_WIN_WIN32 += $(EXTRAS_TARGETS_WIN_WIN32)
ASSET_TARGETS_WIN_X64 += $(EXTRAS_TARGETS_WIN_X64)
define make-opt-pyc-target
-$1: $$(subst /__pycache__,,$$(subst .cpython-38.opt-1.pyc,.py,$1))
+$1: $$(subst /__pycache__,,$$(subst .cpython-39.opt-1.pyc,.py,$1))
@echo Compiling script: $$^
@rm -rf $$@ && PYTHONHASHSEED=1 \
$$(TOOLS_DIR)/pcommand compile_python_files $$^ && chmod 444 $$@
@@ -377,250 +377,250 @@ SCRIPT_TARGETS_PY_PUBLIC = \
build/server/ballisticacore_server.py
SCRIPT_TARGETS_PYC_PUBLIC = \
- build/ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc \
- build/ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc \
- build/ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc \
- build/server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc
+ build/ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc \
+ build/ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc \
+ build/ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc \
+ build/server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -656,23 +656,23 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \
build/ba_data/python/efro/util.py
SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \
- build/ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc \
- build/ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc \
- build/ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc \
- build/ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc
+ build/ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc \
+ build/ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc \
+ build/ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc \
+ build/ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -694,11 +694,12 @@ $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/__future__.py \
build/pylib-apple/__phello__.foo.py \
+ build/pylib-apple/_aix_support.py \
build/pylib-apple/_bootlocale.py \
+ build/pylib-apple/_bootsubprocess.py \
build/pylib-apple/_collections_abc.py \
build/pylib-apple/_compat_pickle.py \
build/pylib-apple/_compression.py \
- build/pylib-apple/_dummy_thread.py \
build/pylib-apple/_markupbase.py \
build/pylib-apple/_osx_support.py \
build/pylib-apple/_py_abc.py \
@@ -738,6 +739,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/asyncio/streams.py \
build/pylib-apple/asyncio/subprocess.py \
build/pylib-apple/asyncio/tasks.py \
+ build/pylib-apple/asyncio/threads.py \
build/pylib-apple/asyncio/transports.py \
build/pylib-apple/asyncio/trsock.py \
build/pylib-apple/asyncio/unix_events.py \
@@ -794,7 +796,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/difflib.py \
build/pylib-apple/dis.py \
build/pylib-apple/doctest.py \
- build/pylib-apple/dummy_threading.py \
build/pylib-apple/email/__init__.py \
build/pylib-apple/email/_encoded_words.py \
build/pylib-apple/email/_header_value_parser.py \
@@ -912,7 +913,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/encodings/kz1048.py \
build/pylib-apple/encodings/latin_1.py \
build/pylib-apple/encodings/mac_arabic.py \
- build/pylib-apple/encodings/mac_centeuro.py \
build/pylib-apple/encodings/mac_croatian.py \
build/pylib-apple/encodings/mac_cyrillic.py \
build/pylib-apple/encodings/mac_farsi.py \
@@ -960,6 +960,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/getpass.py \
build/pylib-apple/gettext.py \
build/pylib-apple/glob.py \
+ build/pylib-apple/graphlib.py \
build/pylib-apple/gzip.py \
build/pylib-apple/hashlib.py \
build/pylib-apple/heapq.py \
@@ -977,6 +978,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/importlib/__init__.py \
build/pylib-apple/importlib/_bootstrap.py \
build/pylib-apple/importlib/_bootstrap_external.py \
+ build/pylib-apple/importlib/_common.py \
build/pylib-apple/importlib/abc.py \
build/pylib-apple/importlib/machinery.py \
build/pylib-apple/importlib/metadata.py \
@@ -1001,6 +1003,10 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/mailcap.py \
build/pylib-apple/mimetypes.py \
build/pylib-apple/modulefinder.py \
+ build/pylib-apple/msilib/__init__.py \
+ build/pylib-apple/msilib/schema.py \
+ build/pylib-apple/msilib/sequence.py \
+ build/pylib-apple/msilib/text.py \
build/pylib-apple/netrc.py \
build/pylib-apple/nntplib.py \
build/pylib-apple/ntpath.py \
@@ -1120,438 +1126,452 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \
build/pylib-apple/xmlrpc/server.py \
build/pylib-apple/zipapp.py \
build/pylib-apple/zipfile.py \
- build/pylib-apple/zipimport.py
+ build/pylib-apple/zipimport.py \
+ build/pylib-apple/zoneinfo/__init__.py \
+ build/pylib-apple/zoneinfo/_common.py \
+ build/pylib-apple/zoneinfo/_tzpath.py \
+ build/pylib-apple/zoneinfo/_zoneinfo.py
SCRIPT_TARGETS_PYC_PRIVATE_APPLE = \
- build/pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \
- build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/code.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc \
- build/pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc \
- build/pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \
- build/pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \
- build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc \
- build/pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \
- build/pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc \
- build/pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc \
- build/pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \
- build/pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \
- build/pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc \
- build/pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc \
- build/pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc \
- build/pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc \
- build/pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \
- build/pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc \
- build/pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc \
- build/pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/io.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc \
- build/pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc \
- build/pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc \
- build/pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc \
- build/pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc \
- build/pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc \
- build/pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/os.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/random.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/re.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/site.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc \
- build/pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \
- build/pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/string.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/this.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/token.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/types.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc \
- build/pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \
- build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \
- build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \
- build/pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc \
- build/pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc
+ build/pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \
+ build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/code.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc \
+ build/pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc \
+ build/pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \
+ build/pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \
+ build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc \
+ build/pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \
+ build/pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc \
+ build/pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc \
+ build/pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \
+ build/pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc \
+ build/pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc \
+ build/pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc \
+ build/pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \
+ build/pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc \
+ build/pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc \
+ build/pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/io.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc \
+ build/pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc \
+ build/pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc \
+ build/pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc \
+ build/pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc \
+ build/pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc \
+ build/pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc \
+ build/pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc \
+ build/pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \
+ build/pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/os.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/random.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/re.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/site.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc \
+ build/pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \
+ build/pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/string.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/this.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/token.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/types.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc \
+ build/pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \
+ build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \
+ build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \
+ build/pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc \
+ build/pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc \
+ build/pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \
+ build/pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -1566,11 +1586,12 @@ $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/__future__.py \
build/pylib-android/__phello__.foo.py \
+ build/pylib-android/_aix_support.py \
build/pylib-android/_bootlocale.py \
+ build/pylib-android/_bootsubprocess.py \
build/pylib-android/_collections_abc.py \
build/pylib-android/_compat_pickle.py \
build/pylib-android/_compression.py \
- build/pylib-android/_dummy_thread.py \
build/pylib-android/_markupbase.py \
build/pylib-android/_osx_support.py \
build/pylib-android/_py_abc.py \
@@ -1610,6 +1631,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/asyncio/streams.py \
build/pylib-android/asyncio/subprocess.py \
build/pylib-android/asyncio/tasks.py \
+ build/pylib-android/asyncio/threads.py \
build/pylib-android/asyncio/transports.py \
build/pylib-android/asyncio/trsock.py \
build/pylib-android/asyncio/unix_events.py \
@@ -1666,7 +1688,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/difflib.py \
build/pylib-android/dis.py \
build/pylib-android/doctest.py \
- build/pylib-android/dummy_threading.py \
build/pylib-android/email/__init__.py \
build/pylib-android/email/_encoded_words.py \
build/pylib-android/email/_header_value_parser.py \
@@ -1784,7 +1805,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/encodings/kz1048.py \
build/pylib-android/encodings/latin_1.py \
build/pylib-android/encodings/mac_arabic.py \
- build/pylib-android/encodings/mac_centeuro.py \
build/pylib-android/encodings/mac_croatian.py \
build/pylib-android/encodings/mac_cyrillic.py \
build/pylib-android/encodings/mac_farsi.py \
@@ -1832,6 +1852,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/getpass.py \
build/pylib-android/gettext.py \
build/pylib-android/glob.py \
+ build/pylib-android/graphlib.py \
build/pylib-android/gzip.py \
build/pylib-android/hashlib.py \
build/pylib-android/heapq.py \
@@ -1849,6 +1870,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/importlib/__init__.py \
build/pylib-android/importlib/_bootstrap.py \
build/pylib-android/importlib/_bootstrap_external.py \
+ build/pylib-android/importlib/_common.py \
build/pylib-android/importlib/abc.py \
build/pylib-android/importlib/machinery.py \
build/pylib-android/importlib/metadata.py \
@@ -1992,438 +2014,448 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \
build/pylib-android/xmlrpc/server.py \
build/pylib-android/zipapp.py \
build/pylib-android/zipfile.py \
- build/pylib-android/zipimport.py
+ build/pylib-android/zipimport.py \
+ build/pylib-android/zoneinfo/__init__.py \
+ build/pylib-android/zoneinfo/_common.py \
+ build/pylib-android/zoneinfo/_tzpath.py \
+ build/pylib-android/zoneinfo/_zoneinfo.py
SCRIPT_TARGETS_PYC_PRIVATE_ANDROID = \
- build/pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/ast.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \
- build/pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/base64.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/code.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc \
- build/pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc \
- build/pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \
- build/pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \
- build/pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/copy.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/csv.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc \
- build/pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \
- build/pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc \
- build/pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc \
- build/pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/dis.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \
- build/pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \
- build/pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \
- build/pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/enum.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/functools.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/glob.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc \
- build/pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc \
- build/pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc \
- build/pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc \
- build/pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \
- build/pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc \
- build/pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/imp.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc \
- build/pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/io.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc \
- build/pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc \
- build/pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc \
- build/pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc \
- build/pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/locale.cpython-38.opt-1.pyc \
- build/pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc \
- build/pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/operator.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/os.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/platform.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/profile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pty.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/queue.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/random.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/re.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sched.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/signal.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/site.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/socket.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc \
- build/pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \
- build/pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/stat.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/string.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/struct.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/this.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/threading.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/token.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/trace.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/tty.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/types.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/typing.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc \
- build/pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/uu.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/wave.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc \
- build/pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \
- build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \
- build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \
- build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \
- build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \
- build/pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \
- build/pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \
- build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \
- build/pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \
- build/pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc \
- build/pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc
+ build/pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/ast.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \
+ build/pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/base64.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/code.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc \
+ build/pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc \
+ build/pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \
+ build/pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \
+ build/pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/copy.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/csv.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc \
+ build/pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \
+ build/pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc \
+ build/pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc \
+ build/pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/dis.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \
+ build/pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \
+ build/pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/enum.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/functools.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/glob.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc \
+ build/pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc \
+ build/pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc \
+ build/pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \
+ build/pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc \
+ build/pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/imp.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc \
+ build/pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/io.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc \
+ build/pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc \
+ build/pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc \
+ build/pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc \
+ build/pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/locale.cpython-39.opt-1.pyc \
+ build/pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc \
+ build/pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/operator.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/os.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/platform.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/profile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pty.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/queue.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/random.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/re.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sched.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/signal.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/site.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/socket.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc \
+ build/pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \
+ build/pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/stat.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/string.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/struct.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/this.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/threading.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/token.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/trace.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/tty.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/types.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/typing.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc \
+ build/pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/uu.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/wave.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \
+ build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \
+ build/pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \
+ build/pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc \
+ build/pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc \
+ build/pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \
+ build/pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -2457,25 +2489,25 @@ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \
build/ba_data/python-site-packages/yaml/tokens.py
SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \
- build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc \
- build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc
+ build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc \
+ build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -2490,11 +2522,12 @@ $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/__future__.py \
build/windows/Win32/Lib/__phello__.foo.py \
+ build/windows/Win32/Lib/_aix_support.py \
build/windows/Win32/Lib/_bootlocale.py \
+ build/windows/Win32/Lib/_bootsubprocess.py \
build/windows/Win32/Lib/_collections_abc.py \
build/windows/Win32/Lib/_compat_pickle.py \
build/windows/Win32/Lib/_compression.py \
- build/windows/Win32/Lib/_dummy_thread.py \
build/windows/Win32/Lib/_markupbase.py \
build/windows/Win32/Lib/_osx_support.py \
build/windows/Win32/Lib/_py_abc.py \
@@ -2534,6 +2567,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/asyncio/streams.py \
build/windows/Win32/Lib/asyncio/subprocess.py \
build/windows/Win32/Lib/asyncio/tasks.py \
+ build/windows/Win32/Lib/asyncio/threads.py \
build/windows/Win32/Lib/asyncio/transports.py \
build/windows/Win32/Lib/asyncio/trsock.py \
build/windows/Win32/Lib/asyncio/unix_events.py \
@@ -2590,7 +2624,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/difflib.py \
build/windows/Win32/Lib/dis.py \
build/windows/Win32/Lib/doctest.py \
- build/windows/Win32/Lib/dummy_threading.py \
build/windows/Win32/Lib/email/__init__.py \
build/windows/Win32/Lib/email/_encoded_words.py \
build/windows/Win32/Lib/email/_header_value_parser.py \
@@ -2708,7 +2741,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/encodings/kz1048.py \
build/windows/Win32/Lib/encodings/latin_1.py \
build/windows/Win32/Lib/encodings/mac_arabic.py \
- build/windows/Win32/Lib/encodings/mac_centeuro.py \
build/windows/Win32/Lib/encodings/mac_croatian.py \
build/windows/Win32/Lib/encodings/mac_cyrillic.py \
build/windows/Win32/Lib/encodings/mac_farsi.py \
@@ -2756,6 +2788,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/getpass.py \
build/windows/Win32/Lib/gettext.py \
build/windows/Win32/Lib/glob.py \
+ build/windows/Win32/Lib/graphlib.py \
build/windows/Win32/Lib/gzip.py \
build/windows/Win32/Lib/hashlib.py \
build/windows/Win32/Lib/heapq.py \
@@ -2773,6 +2806,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/importlib/__init__.py \
build/windows/Win32/Lib/importlib/_bootstrap.py \
build/windows/Win32/Lib/importlib/_bootstrap_external.py \
+ build/windows/Win32/Lib/importlib/_common.py \
build/windows/Win32/Lib/importlib/abc.py \
build/windows/Win32/Lib/importlib/machinery.py \
build/windows/Win32/Lib/importlib/metadata.py \
@@ -2920,442 +2954,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \
build/windows/Win32/Lib/xmlrpc/server.py \
build/windows/Win32/Lib/zipapp.py \
build/windows/Win32/Lib/zipfile.py \
- build/windows/Win32/Lib/zipimport.py
+ build/windows/Win32/Lib/zipimport.py \
+ build/windows/Win32/Lib/zoneinfo/__init__.py \
+ build/windows/Win32/Lib/zoneinfo/_common.py \
+ build/windows/Win32/Lib/zoneinfo/_tzpath.py \
+ build/windows/Win32/Lib/zoneinfo/_zoneinfo.py
SCRIPT_TARGETS_PYC_PRIVATE_WIN_WIN32 = \
- build/windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \
- build/windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc
+ build/windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \
+ build/windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -3370,11 +3414,12 @@ $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/__future__.py \
build/windows/x64/Lib/__phello__.foo.py \
+ build/windows/x64/Lib/_aix_support.py \
build/windows/x64/Lib/_bootlocale.py \
+ build/windows/x64/Lib/_bootsubprocess.py \
build/windows/x64/Lib/_collections_abc.py \
build/windows/x64/Lib/_compat_pickle.py \
build/windows/x64/Lib/_compression.py \
- build/windows/x64/Lib/_dummy_thread.py \
build/windows/x64/Lib/_markupbase.py \
build/windows/x64/Lib/_osx_support.py \
build/windows/x64/Lib/_py_abc.py \
@@ -3414,6 +3459,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/asyncio/streams.py \
build/windows/x64/Lib/asyncio/subprocess.py \
build/windows/x64/Lib/asyncio/tasks.py \
+ build/windows/x64/Lib/asyncio/threads.py \
build/windows/x64/Lib/asyncio/transports.py \
build/windows/x64/Lib/asyncio/trsock.py \
build/windows/x64/Lib/asyncio/unix_events.py \
@@ -3470,7 +3516,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/difflib.py \
build/windows/x64/Lib/dis.py \
build/windows/x64/Lib/doctest.py \
- build/windows/x64/Lib/dummy_threading.py \
build/windows/x64/Lib/email/__init__.py \
build/windows/x64/Lib/email/_encoded_words.py \
build/windows/x64/Lib/email/_header_value_parser.py \
@@ -3588,7 +3633,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/encodings/kz1048.py \
build/windows/x64/Lib/encodings/latin_1.py \
build/windows/x64/Lib/encodings/mac_arabic.py \
- build/windows/x64/Lib/encodings/mac_centeuro.py \
build/windows/x64/Lib/encodings/mac_croatian.py \
build/windows/x64/Lib/encodings/mac_cyrillic.py \
build/windows/x64/Lib/encodings/mac_farsi.py \
@@ -3636,6 +3680,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/getpass.py \
build/windows/x64/Lib/gettext.py \
build/windows/x64/Lib/glob.py \
+ build/windows/x64/Lib/graphlib.py \
build/windows/x64/Lib/gzip.py \
build/windows/x64/Lib/hashlib.py \
build/windows/x64/Lib/heapq.py \
@@ -3653,6 +3698,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/importlib/__init__.py \
build/windows/x64/Lib/importlib/_bootstrap.py \
build/windows/x64/Lib/importlib/_bootstrap_external.py \
+ build/windows/x64/Lib/importlib/_common.py \
build/windows/x64/Lib/importlib/abc.py \
build/windows/x64/Lib/importlib/machinery.py \
build/windows/x64/Lib/importlib/metadata.py \
@@ -3800,442 +3846,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \
build/windows/x64/Lib/xmlrpc/server.py \
build/windows/x64/Lib/zipapp.py \
build/windows/x64/Lib/zipfile.py \
- build/windows/x64/Lib/zipimport.py
+ build/windows/x64/Lib/zipimport.py \
+ build/windows/x64/Lib/zoneinfo/__init__.py \
+ build/windows/x64/Lib/zoneinfo/_common.py \
+ build/windows/x64/Lib/zoneinfo/_tzpath.py \
+ build/windows/x64/Lib/zoneinfo/_zoneinfo.py
SCRIPT_TARGETS_PYC_PRIVATE_WIN_X64 = \
- build/windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \
- build/windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc
+ build/windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \
+ build/windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc
# Rule to copy src asset scripts to dst.
# (and make non-writable so I'm less likely to accidentally edit them there)
@@ -6850,11 +6906,17 @@ EXTRAS_TARGETS_WIN_WIN32 = \
build/windows/Win32/DLLs/_testconsole_d.pyd \
build/windows/Win32/DLLs/_testimportmultiple.pyd \
build/windows/Win32/DLLs/_testimportmultiple_d.pyd \
+ build/windows/Win32/DLLs/_testinternalcapi.pyd \
+ build/windows/Win32/DLLs/_testinternalcapi_d.pyd \
build/windows/Win32/DLLs/_testmultiphase.pyd \
build/windows/Win32/DLLs/_testmultiphase_d.pyd \
build/windows/Win32/DLLs/_tkinter.pyd \
build/windows/Win32/DLLs/_tkinter_d.lib \
build/windows/Win32/DLLs/_tkinter_d.pyd \
+ build/windows/Win32/DLLs/_uuid.pyd \
+ build/windows/Win32/DLLs/_uuid_d.pyd \
+ build/windows/Win32/DLLs/_zoneinfo.pyd \
+ build/windows/Win32/DLLs/_zoneinfo_d.pyd \
build/windows/Win32/DLLs/libcrypto-1_1.dll \
build/windows/Win32/DLLs/libffi-7.dll \
build/windows/Win32/DLLs/libssl-1_1.dll \
@@ -6883,8 +6945,8 @@ EXTRAS_TARGETS_WIN_WIN32 = \
build/windows/Win32/msvcp140d.dll \
build/windows/Win32/ogg.dll \
build/windows/Win32/python.exe \
- build/windows/Win32/python38.dll \
- build/windows/Win32/python38_d.dll \
+ build/windows/Win32/python39.dll \
+ build/windows/Win32/python39_d.dll \
build/windows/Win32/python_d.exe \
build/windows/Win32/pythonw.exe \
build/windows/Win32/pythonw_d.exe \
@@ -6936,11 +6998,17 @@ EXTRAS_TARGETS_WIN_X64 = \
build/windows/x64/DLLs/_testconsole_d.pyd \
build/windows/x64/DLLs/_testimportmultiple.pyd \
build/windows/x64/DLLs/_testimportmultiple_d.pyd \
+ build/windows/x64/DLLs/_testinternalcapi.pyd \
+ build/windows/x64/DLLs/_testinternalcapi_d.pyd \
build/windows/x64/DLLs/_testmultiphase.pyd \
build/windows/x64/DLLs/_testmultiphase_d.pyd \
build/windows/x64/DLLs/_tkinter.pyd \
build/windows/x64/DLLs/_tkinter_d.lib \
build/windows/x64/DLLs/_tkinter_d.pyd \
+ build/windows/x64/DLLs/_uuid.pyd \
+ build/windows/x64/DLLs/_uuid_d.pyd \
+ build/windows/x64/DLLs/_zoneinfo.pyd \
+ build/windows/x64/DLLs/_zoneinfo_d.pyd \
build/windows/x64/DLLs/libcrypto-1_1.dll \
build/windows/x64/DLLs/libffi-7.dll \
build/windows/x64/DLLs/libssl-1_1.dll \
@@ -6969,8 +7037,8 @@ EXTRAS_TARGETS_WIN_X64 = \
build/windows/x64/msvcp140d.dll \
build/windows/x64/ogg.dll \
build/windows/x64/python.exe \
- build/windows/x64/python38.dll \
- build/windows/x64/python38_d.dll \
+ build/windows/x64/python39.dll \
+ build/windows/x64/python39_d.dll \
build/windows/x64/python_d.exe \
build/windows/x64/pythonw.exe \
build/windows/x64/pythonw_d.exe \
diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash
index 3b11222c..e4b6e04e 100644
--- a/assets/src/ba_data/python/._ba_sources_hash
+++ b/assets/src/ba_data/python/._ba_sources_hash
@@ -1 +1 @@
-67151430861016518839485378649631062235
\ No newline at end of file
+291441930138756424684870937756526517762
\ No newline at end of file
diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py
index 74a5f289..b8620a00 100644
--- a/assets/src/ba_data/python/_ba.py
+++ b/assets/src/ba_data/python/_ba.py
@@ -37,8 +37,7 @@ from typing import TYPE_CHECKING, overload, Sequence, TypeVar
from ba._generated.enums import TimeFormat, TimeType
if TYPE_CHECKING:
- from typing import (Any, Dict, Callable, Tuple, List, Optional, Union,
- List, Type, Literal)
+ from typing import Any, Callable, Optional, Union, Literal
from ba._app import App
import ba
@@ -386,9 +385,9 @@ class Material:
label: str
def add_actions(self,
- actions: Tuple,
- conditions: Optional[Tuple] = None) -> None:
- """add_actions(actions: Tuple, conditions: Optional[Tuple] = None)
+ actions: tuple,
+ conditions: Optional[tuple] = None) -> None:
+ """add_actions(actions: tuple, conditions: Optional[tuple] = None)
-> None
Add one or more actions to the material, optionally with conditions.
@@ -724,16 +723,16 @@ class Node:
# Show that ur return type varies based on "doraise" value:
@overload
def getdelegate(self,
- type: Type[_T],
+ type: type[_T],
doraise: Literal[False] = False) -> Optional[_T]:
...
@overload
- def getdelegate(self, type: Type[_T], doraise: Literal[True]) -> _T:
+ def getdelegate(self, type: type[_T], doraise: Literal[True]) -> _T:
...
def getdelegate(self, type: Any, doraise: bool = False) -> Any:
- """getdelegate(type: Type, doraise: bool = False) ->
+ """getdelegate(type: type, doraise: bool = False) ->
Return the node's current delegate object if it matches a certain type.
@@ -849,9 +848,9 @@ class SessionPlayer:
character: str
activityplayer: Optional[ba.Player]
- def assigninput(self, type: Union[ba.InputType, Tuple[ba.InputType, ...]],
+ def assigninput(self, type: Union[ba.InputType, tuple[ba.InputType, ...]],
call: Callable) -> None:
- """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
+ """assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]],
call: Callable) -> None
Set the python callable to be run for one or more types of input.
@@ -877,15 +876,15 @@ class SessionPlayer:
"""
return str()
- def get_icon(self) -> Dict[str, Any]:
- """get_icon() -> Dict[str, Any]
+ def get_icon(self) -> dict[str, Any]:
+ """get_icon() -> dict[str, Any]
Returns the character's icon (images, colors, etc contained in a dict)
"""
return {'foo': 'bar'}
- def get_icon_info(self) -> Dict[str, Any]:
- """get_icon_info() -> Dict[str, Any]
+ def get_icon_info(self) -> dict[str, Any]:
+ """get_icon_info() -> dict[str, Any]
(internal)
"""
@@ -1203,15 +1202,15 @@ class Widget:
"""
return bool()
- def get_children(self) -> List[ba.Widget]:
- """get_children() -> List[ba.Widget]
+ def get_children(self) -> list[ba.Widget]:
+ """get_children() -> list[ba.Widget]
Returns any child Widgets of this Widget.
"""
return [Widget()]
- def get_screen_space_center(self) -> Tuple[float, float]:
- """get_screen_space_center() -> Tuple[float, float]
+ def get_screen_space_center(self) -> tuple[float, float]:
+ """get_screen_space_center() -> tuple[float, float]
Returns the coords of the Widget center relative to the center of the
screen. This can be useful for placing pop-up windows and other special
@@ -1993,8 +1992,8 @@ def get_account_type() -> str:
return str()
-def get_appconfig_builtin_keys() -> List[str]:
- """get_appconfig_builtin_keys() -> List[str]
+def get_appconfig_builtin_keys() -> list[str]:
+ """get_appconfig_builtin_keys() -> list[str]
(internal)
"""
@@ -2009,8 +2008,8 @@ def get_appconfig_default_value(key: str) -> Any:
return _uninferrable()
-def get_chat_messages() -> List[str]:
- """get_chat_messages() -> List[str]
+def get_chat_messages() -> list[str]:
+ """get_chat_messages() -> list[str]
(internal)
"""
@@ -2050,8 +2049,8 @@ def get_connection_to_host_info() -> dict:
return dict()
-def get_display_resolution() -> Optional[Tuple[int, int]]:
- """get_display_resolution() -> Optional[Tuple[int, int]]
+def get_display_resolution() -> Optional[tuple[int, int]]:
+ """get_display_resolution() -> Optional[tuple[int, int]]
(internal)
@@ -2095,8 +2094,8 @@ def get_game_port() -> int:
return int()
-def get_game_roster() -> List[Dict[str, Any]]:
- """get_game_roster() -> List[Dict[str, Any]]
+def get_game_roster() -> list[dict[str, Any]]:
+ """get_game_roster() -> list[dict[str, Any]]
(internal)
"""
@@ -2895,8 +2894,8 @@ def mac_music_app_get_library_source() -> None:
return None
-def mac_music_app_get_playlists() -> List[str]:
- """mac_music_app_get_playlists() -> List[str]
+def mac_music_app_get_playlists() -> list[str]:
+ """mac_music_app_get_playlists() -> list[str]
(internal)
"""
@@ -3001,9 +3000,9 @@ def music_player_stop() -> None:
return None
-def new_host_session(sessiontype: Type[ba.Session],
+def new_host_session(sessiontype: type[ba.Session],
benchmark_type: str = None) -> None:
- """new_host_session(sessiontype: Type[ba.Session],
+ """new_host_session(sessiontype: type[ba.Session],
benchmark_type: str = None) -> None
(internal)
@@ -3019,9 +3018,9 @@ def new_replay_session(file_name: str) -> None:
return None
-def newactivity(activity_type: Type[ba.Activity],
+def newactivity(activity_type: type[ba.Activity],
settings: dict = None) -> ba.Activity:
- """newactivity(activity_type: Type[ba.Activity],
+ """newactivity(activity_type: type[ba.Activity],
settings: dict = None) -> ba.Activity
Instantiates a ba.Activity given a type object.
@@ -3370,9 +3369,9 @@ def run_transactions() -> None:
def safecolor(color: Sequence[float],
- target_intensity: float = 0.6) -> Tuple[float, ...]:
+ target_intensity: float = 0.6) -> tuple[float, ...]:
"""safecolor(color: Sequence[float], target_intensity: float = 0.6)
- -> Tuple[float, ...]
+ -> tuple[float, ...]
Given a color tuple, return a color safe to display as text.
@@ -3387,13 +3386,13 @@ def safecolor(color: Sequence[float],
def screenmessage(message: Union[str, ba.Lstr],
color: Sequence[float] = None,
top: bool = False,
- image: Dict[str, Any] = None,
+ image: dict[str, Any] = None,
log: bool = False,
clients: Sequence[int] = None,
transient: bool = False) -> None:
"""screenmessage(message: Union[str, ba.Lstr],
color: Sequence[float] = None, top: bool = False,
- image: Dict[str, Any] = None, log: bool = False,
+ image: dict[str, Any] = None, log: bool = False,
clients: Sequence[int] = None, transient: bool = False) -> None
Print a message to the local client's screen, in a given color.
@@ -3456,8 +3455,8 @@ def scrollwidget(edit: ba.Widget = None,
return ba.Widget()
-def set_admins(admins: List[str]) -> None:
- """set_admins(admins: List[str]) -> None
+def set_admins(admins: list[str]) -> None:
+ """set_admins(admins: list[str]) -> None
(internal)
"""
@@ -3513,10 +3512,10 @@ def set_have_mods(have_mods: bool) -> None:
def set_internal_language_keys(
- listobj: List[Tuple[str, str]],
- random_names_list: List[Tuple[str, str]]) -> None:
- """set_internal_language_keys(listobj: List[Tuple[str, str]],
- random_names_list: List[Tuple[str, str]]) -> None
+ listobj: list[tuple[str, str]],
+ random_names_list: list[tuple[str, str]]) -> None:
+ """set_internal_language_keys(listobj: list[tuple[str, str]],
+ random_names_list: list[tuple[str, str]]) -> None
(internal)
"""
@@ -3532,8 +3531,8 @@ def set_low_level_config_value(key: str, value: int) -> None:
def set_map_bounds(
- bounds: Tuple[float, float, float, float, float, float]) -> None:
- """set_map_bounds(bounds: Tuple[float, float, float, float, float, float])
+ bounds: tuple[float, float, float, float, float, float]) -> None:
+ """set_map_bounds(bounds: tuple[float, float, float, float, float, float])
-> None
(internal)
@@ -4020,18 +4019,18 @@ def timer(time: float,
return None
-def tournament_query(callback: Callable[[Optional[Dict]], None],
- args: Dict) -> None:
- """tournament_query(callback: Callable[[Optional[Dict]], None],
- args: Dict) -> None
+def tournament_query(callback: Callable[[Optional[dict]], None],
+ args: dict) -> None:
+ """tournament_query(callback: Callable[[Optional[dict]], None],
+ args: dict) -> None
(internal)
"""
return None
-def uibounds() -> Tuple[float, float, float, float]:
- """uibounds() -> Tuple[float, float, float, float]
+def uibounds() -> tuple[float, float, float, float]:
+ """uibounds() -> tuple[float, float, float, float]
(internal)
diff --git a/assets/src/ba_data/python/ba/_account.py b/assets/src/ba_data/python/ba/_account.py
index 4ef02aaf..a072ae63 100644
--- a/assets/src/ba_data/python/ba/_account.py
+++ b/assets/src/ba_data/python/ba/_account.py
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, Optional, Dict, List, Tuple
+ from typing import Any, Optional
import ba
@@ -24,16 +24,16 @@ class AccountSubsystem:
"""
def __init__(self) -> None:
- self.account_tournament_list: Optional[Tuple[int, List[str]]] = None
+ self.account_tournament_list: Optional[tuple[int, list[str]]] = None
# FIXME: should abstract/structure these.
- self.tournament_info: Dict = {}
- self.league_rank_cache: Dict = {}
+ self.tournament_info: dict = {}
+ self.league_rank_cache: dict = {}
self.last_post_purchase_message_time: Optional[float] = None
# If we try to run promo-codes due to launch-args/etc we might
# not be signed in yet; go ahead and queue them up in that case.
- self.pending_promo_codes: List[str] = []
+ self.pending_promo_codes: list[str] = []
def on_app_launch(self) -> None:
"""Called when the app is done bootstrapping."""
@@ -74,7 +74,7 @@ class AccountSubsystem:
return self.league_rank_cache.get('info', None)
def get_league_rank_points(self,
- data: Optional[Dict[str, Any]],
+ data: Optional[dict[str, Any]],
subset: str = None) -> int:
"""(internal)"""
if data is None:
@@ -132,7 +132,7 @@ class AccountSubsystem:
TimeFormat.MILLISECONDS)
cache_entry['valid'] = True
- def get_purchased_icons(self) -> List[str]:
+ def get_purchased_icons(self) -> list[str]:
"""(internal)"""
# pylint: disable=cyclic-import
from ba import _store
diff --git a/assets/src/ba_data/python/ba/_achievement.py b/assets/src/ba_data/python/ba/_achievement.py
index a00e530f..13634cfc 100644
--- a/assets/src/ba_data/python/ba/_achievement.py
+++ b/assets/src/ba_data/python/ba/_achievement.py
@@ -9,7 +9,7 @@ import _ba
from ba._error import print_exception
if TYPE_CHECKING:
- from typing import Any, Sequence, List, Dict, Union, Optional, Tuple, Set
+ from typing import Any, Sequence, Union, Optional
import ba
# This could use some cleanup.
@@ -71,11 +71,11 @@ class AchievementSubsystem:
"""
def __init__(self) -> None:
- self.achievements: List[Achievement] = []
- self.achievements_to_display: (List[Tuple[ba.Achievement, bool]]) = []
+ self.achievements: list[Achievement] = []
+ self.achievements_to_display: (list[tuple[ba.Achievement, bool]]) = []
self.achievement_display_timer: Optional[_ba.Timer] = None
self.last_achievement_display_time: float = 0.0
- self.achievement_completion_banner_slots: Set[int] = set()
+ self.achievement_completion_banner_slots: set[int] = set()
self._init_achievements()
def _init_achievements(self) -> None:
@@ -374,7 +374,7 @@ class AchievementSubsystem:
return achs[0]
def achievements_for_coop_level(self,
- level_name: str) -> List[Achievement]:
+ level_name: str) -> list[Achievement]:
"""Given a level name, return achievements available for it."""
# For the Easy campaign we return achievements for the Default
@@ -612,7 +612,7 @@ class Achievement:
delay: float,
outdelay: float = None,
color: Sequence[float] = None,
- style: str = 'post_game') -> List[ba.Actor]:
+ style: str = 'post_game') -> list[ba.Actor]:
"""Create a display for the Achievement.
Shows the Achievement icon, name, and description.
@@ -663,7 +663,7 @@ class Achievement:
print_exception('Error determining campaign.')
hmo = False
- objs: List[ba.Actor]
+ objs: list[ba.Actor]
if in_game_colors:
objs = []
@@ -898,12 +898,12 @@ class Achievement:
transition_out_delay=None).autoretain())
return objs
- def _getconfig(self) -> Dict[str, Any]:
+ def _getconfig(self) -> dict[str, Any]:
"""
Return the sub-dict in settings where this achievement's
state is stored, creating it if need be.
"""
- val: Dict[str, Any] = (_ba.app.config.setdefault(
+ val: dict[str, Any] = (_ba.app.config.setdefault(
'Achievements', {}).setdefault(self._name, {'Complete': False}))
assert isinstance(val, dict)
return val
@@ -971,7 +971,7 @@ class Achievement:
i += 1
assert self._completion_banner_slot is not None
y_offs = 110 * self._completion_banner_slot
- objs: List[ba.Actor] = []
+ objs: list[ba.Actor] = []
obj = Image(_ba.gettexture('shadow'),
position=(-30, 30 + y_offs),
front=True,
diff --git a/assets/src/ba_data/python/ba/_activity.py b/assets/src/ba_data/python/ba/_activity.py
index 4c9190ba..701de8e1 100644
--- a/assets/src/ba_data/python/ba/_activity.py
+++ b/assets/src/ba_data/python/ba/_activity.py
@@ -16,8 +16,7 @@ from ba._general import Call, verify_object_death
from ba._messages import UNHANDLED
if TYPE_CHECKING:
- from weakref import ReferenceType
- from typing import Optional, Type, Any, Dict, List
+ from typing import Optional, Any
import ba
from bastd.actor.respawnicon import RespawnIcon
@@ -58,9 +57,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
# pylint: disable=too-many-public-methods
# Annotating attr types at the class level lets us introspect at runtime.
- settings_raw: Dict[str, Any]
- teams: List[TeamType]
- players: List[PlayerType]
+ settings_raw: dict[str, Any]
+ teams: list[TeamType]
+ players: list[PlayerType]
# Whether to print every time a player dies. This can be pertinent
# in games such as Death-Match but can be annoying in games where it
@@ -150,8 +149,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
# Player/Team types should have been specified as type args;
# grab those.
- self._playertype: Type[PlayerType]
- self._teamtype: Type[TeamType]
+ self._playertype: type[PlayerType]
+ self._teamtype: type[TeamType]
self._setup_player_and_team_types()
# FIXME: Relocate or remove the need for this stuff.
@@ -160,7 +159,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
self._session = weakref.ref(_ba.getsession())
# Preloaded data for actors, maps, etc; indexed by type.
- self.preloads: Dict[Type, Any] = {}
+ self.preloads: dict[type, Any] = {}
# Hopefully can eventually kill this; activities should
# validate/store whatever settings they need at init time
@@ -172,17 +171,17 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
self._has_ended = False
self._activity_death_check_timer: Optional[ba.Timer] = None
self._expired = False
- self._delay_delete_players: List[PlayerType] = []
- self._delay_delete_teams: List[TeamType] = []
- self._players_that_left: List[ReferenceType[PlayerType]] = []
- self._teams_that_left: List[ReferenceType[TeamType]] = []
+ self._delay_delete_players: list[PlayerType] = []
+ self._delay_delete_teams: list[TeamType] = []
+ self._players_that_left: list[weakref.ref[PlayerType]] = []
+ self._teams_that_left: list[weakref.ref[TeamType]] = []
self._transitioning_out = False
# A handy place to put most actors; this list is pruned of dead
# actors regularly and these actors are insta-killed as the activity
# is dying.
- self._actor_refs: List[ba.Actor] = []
- self._actor_weak_refs: List[ReferenceType[ba.Actor]] = []
+ self._actor_refs: list[ba.Actor] = []
+ self._actor_weak_refs: list[weakref.ref[ba.Actor]] = []
self._last_prune_dead_actors_time = _ba.time()
self._prune_dead_actors_timer: Optional[ba.Timer] = None
@@ -262,12 +261,12 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
return self._expired
@property
- def playertype(self) -> Type[PlayerType]:
+ def playertype(self) -> type[PlayerType]:
"""The type of ba.Player this Activity is using."""
return self._playertype
@property
- def teamtype(self) -> Type[TeamType]:
+ def teamtype(self) -> type[TeamType]:
"""The type of ba.Team this Activity is using."""
return self._teamtype
@@ -709,8 +708,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]):
assert issubclass(self._teamtype, Team)
@classmethod
- def _check_activity_death(cls, activity_ref: ReferenceType[Activity],
- counter: List[int]) -> None:
+ def _check_activity_death(cls, activity_ref: weakref.ref[Activity],
+ counter: list[int]) -> None:
"""Sanity check to make sure an Activity was destroyed properly.
Receives a weakref to a ba.Activity which should have torn itself
diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py
index 9c64ad90..8007130a 100644
--- a/assets/src/ba_data/python/ba/_activitytypes.py
+++ b/assets/src/ba_data/python/ba/_activitytypes.py
@@ -14,7 +14,7 @@ from ba._player import EmptyPlayer # pylint: disable=W0611
from ba._team import EmptyTeam # pylint: disable=W0611
if TYPE_CHECKING:
- from typing import Any, Dict, Optional
+ from typing import Optional
import ba
from ba._lobby import JoinInfo
diff --git a/assets/src/ba_data/python/ba/_app.py b/assets/src/ba_data/python/ba/_app.py
index 7e5c2e61..2ae720f6 100644
--- a/assets/src/ba_data/python/ba/_app.py
+++ b/assets/src/ba_data/python/ba/_app.py
@@ -21,7 +21,7 @@ from ba._net import NetworkSubsystem
if TYPE_CHECKING:
import ba
from bastd.actor import spazappearance
- from typing import Optional, Dict, Set, Any, Type, Tuple, Callable, List
+ from typing import Optional, Any, Callable
class App:
@@ -167,7 +167,7 @@ class App:
return self._env['vr_mode']
@property
- def ui_bounds(self) -> Tuple[float, float, float, float]:
+ def ui_bounds(self) -> tuple[float, float, float, float]:
"""Bounds of the 'safe' screen area in ui space.
This tuple contains: (x-min, x-max, y-min, y-max)
@@ -208,7 +208,7 @@ class App:
self.allow_ticket_purchases: bool = not self.iircade_mode
# Misc.
- self.tips: List[str] = []
+ self.tips: list[str] = []
self.stress_test_reset_timer: Optional[ba.Timer] = None
self.did_weak_call_warning = False
@@ -225,7 +225,7 @@ class App:
self.input_map_hash: Optional[str] = None
# Co-op Campaigns.
- self.campaigns: Dict[str, ba.Campaign] = {}
+ self.campaigns: dict[str, ba.Campaign] = {}
# Server Mode.
self.server: Optional[ba.ServerController] = None
@@ -250,27 +250,27 @@ class App:
self.main_menu_last_news_fetch_time: Optional[float] = None
# Spaz.
- self.spaz_appearances: Dict[str, spazappearance.Appearance] = {}
+ self.spaz_appearances: dict[str, spazappearance.Appearance] = {}
self.last_spaz_turbo_warn_time: float = -99999.0
# Maps.
- self.maps: Dict[str, Type[ba.Map]] = {}
+ self.maps: dict[str, type[ba.Map]] = {}
# Gameplay.
self.teams_series_length = 7
self.ffa_series_length = 24
- self.coop_session_args: Dict = {}
+ self.coop_session_args: dict = {}
self.value_test_defaults: dict = {}
self.first_main_menu = True # FIXME: Move to mainmenu class.
self.did_menu_intro = False # FIXME: Move to mainmenu class.
self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu.
self.main_menu_resume_callbacks: list = [] # Can probably go away.
- self.special_offer: Optional[Dict] = None
+ self.special_offer: Optional[dict] = None
self.ping_thread_count = 0
- self.invite_confirm_windows: List[Any] = [] # FIXME: Don't use Any.
- self.store_layout: Optional[Dict[str, List[Dict[str, Any]]]] = None
- self.store_items: Optional[Dict[str, Dict]] = None
+ self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any.
+ self.store_layout: Optional[dict[str, list[dict[str, Any]]]] = None
+ self.store_items: Optional[dict[str, dict]] = None
self.pro_sale_start_time: Optional[int] = None
self.pro_sale_start_val: Optional[int] = None
@@ -518,7 +518,7 @@ class App:
def launch_coop_game(self,
game: str,
force: bool = False,
- args: Dict = None) -> bool:
+ args: dict = None) -> bool:
"""High level way to launch a local co-op session."""
# pylint: disable=cyclic-import
from ba._campaign import getcampaign
diff --git a/assets/src/ba_data/python/ba/_appconfig.py b/assets/src/ba_data/python/ba/_appconfig.py
index c60c01cd..611483e8 100644
--- a/assets/src/ba_data/python/ba/_appconfig.py
+++ b/assets/src/ba_data/python/ba/_appconfig.py
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, List, Tuple
+ from typing import Any
class AppConfig(dict):
@@ -57,7 +57,7 @@ class AppConfig(dict):
"""
return _ba.get_appconfig_default_value(key)
- def builtin_keys(self) -> List[str]:
+ def builtin_keys(self) -> list[str]:
"""Return the list of valid key names recognized by ba.AppConfig.
This set of keys can be used with resolve(), default_value(), etc.
@@ -93,7 +93,7 @@ class AppConfig(dict):
self.commit()
-def read_config() -> Tuple[AppConfig, bool]:
+def read_config() -> tuple[AppConfig, bool]:
"""Read the game config."""
import os
import json
diff --git a/assets/src/ba_data/python/ba/_appdelegate.py b/assets/src/ba_data/python/ba/_appdelegate.py
index f6282bec..12628701 100644
--- a/assets/src/ba_data/python/ba/_appdelegate.py
+++ b/assets/src/ba_data/python/ba/_appdelegate.py
@@ -6,7 +6,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Type, Optional, Any, Dict, Callable
+ from typing import Optional, Callable
import ba
@@ -17,8 +17,8 @@ class AppDelegate:
"""
def create_default_game_settings_ui(
- self, gameclass: Type[ba.GameActivity],
- sessiontype: Type[ba.Session], settings: Optional[dict],
+ self, gameclass: type[ba.GameActivity],
+ sessiontype: type[ba.Session], settings: Optional[dict],
completion_call: Callable[[Optional[dict]], None]) -> None:
"""Launch a UI to configure the given game config.
diff --git a/assets/src/ba_data/python/ba/_apputils.py b/assets/src/ba_data/python/ba/_apputils.py
index 9146b0f4..ea888907 100644
--- a/assets/src/ba_data/python/ba/_apputils.py
+++ b/assets/src/ba_data/python/ba/_apputils.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import List, Any, Callable, Optional
+ from typing import Any
import ba
@@ -186,9 +186,9 @@ def print_live_object_warnings(when: Any,
from ba._actor import Actor
from ba._activity import Activity
- sessions: List[ba.Session] = []
- activities: List[ba.Activity] = []
- actors: List[ba.Actor] = []
+ sessions: list[ba.Session] = []
+ activities: list[ba.Activity] = []
+ actors: list[ba.Actor] = []
# Once we come across leaked stuff, printing again is probably
# redundant.
diff --git a/assets/src/ba_data/python/ba/_assetmanager.py b/assets/src/ba_data/python/ba/_assetmanager.py
index 33645183..c12f96db 100644
--- a/assets/src/ba_data/python/ba/_assetmanager.py
+++ b/assets/src/ba_data/python/ba/_assetmanager.py
@@ -4,7 +4,7 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Dict
+from typing import TYPE_CHECKING, Annotated
from dataclasses import dataclass, field
from pathlib import Path
import threading
@@ -15,14 +15,11 @@ import time
import os
import sys
-from typing_extensions import Annotated
-
from efro.dataclassio import (ioprepped, IOAttrs, dataclass_from_json,
dataclass_to_json)
if TYPE_CHECKING:
from bacommon.assets import AssetPackageFlavor
- from typing import List
@ioprepped
@@ -36,7 +33,7 @@ class FileValue:
class State:
"""Holds all persistent state for the asset-manager."""
- files: Annotated[Dict[str, FileValue],
+ files: Annotated[dict[str, FileValue],
IOAttrs('files')] = field(default_factory=dict)
@@ -63,7 +60,7 @@ class AssetManager:
def launch_gather(
self,
- packages: List[str],
+ packages: list[str],
flavor: AssetPackageFlavor,
account_token: str,
) -> AssetGather:
diff --git a/assets/src/ba_data/python/ba/_benchmark.py b/assets/src/ba_data/python/ba/_benchmark.py
index 9a4d1035..119296c9 100644
--- a/assets/src/ba_data/python/ba/_benchmark.py
+++ b/assets/src/ba_data/python/ba/_benchmark.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Dict, Any, Sequence
+ from typing import Any, Sequence
import ba
@@ -88,7 +88,7 @@ def stop_stress_test() -> None:
_ba.app.stress_test_reset_timer = None
-def start_stress_test(args: Dict[str, Any]) -> None:
+def start_stress_test(args: dict[str, Any]) -> None:
"""(internal)"""
from ba._general import Call
from ba._dualteamsession import DualTeamSession
@@ -125,7 +125,7 @@ def start_stress_test(args: Dict[str, Any]) -> None:
timeformat=TimeFormat.MILLISECONDS)
-def _reset_stress_test(args: Dict[str, Any]) -> None:
+def _reset_stress_test(args: dict[str, Any]) -> None:
from ba._general import Call
from ba._generated.enums import TimeType
_ba.set_stress_testing(False, args['player_count'])
diff --git a/assets/src/ba_data/python/ba/_campaign.py b/assets/src/ba_data/python/ba/_campaign.py
index 77f4ce92..e7f53153 100644
--- a/assets/src/ba_data/python/ba/_campaign.py
+++ b/assets/src/ba_data/python/ba/_campaign.py
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, List, Dict
+ from typing import Any
import ba
@@ -30,7 +30,7 @@ class Campaign:
def __init__(self, name: str, sequential: bool = True):
self._name = name
- self._levels: List[ba.Level] = []
+ self._levels: list[ba.Level] = []
self._sequential = sequential
@property
@@ -51,7 +51,7 @@ class Campaign:
self._levels.append(level)
@property
- def levels(self) -> List[ba.Level]:
+ def levels(self) -> list[ba.Level]:
"""The list of ba.Levels in the Campaign."""
return self._levels
@@ -80,9 +80,9 @@ class Campaign:
return self.configdict.get('Selection', self._levels[0].name)
@property
- def configdict(self) -> Dict[str, Any]:
+ def configdict(self) -> dict[str, Any]:
"""Return the live config dict for this campaign."""
- val: Dict[str, Any] = (_ba.app.config.setdefault('Campaigns',
+ val: dict[str, Any] = (_ba.app.config.setdefault('Campaigns',
{}).setdefault(
self._name, {}))
assert isinstance(val, dict)
diff --git a/assets/src/ba_data/python/ba/_coopgame.py b/assets/src/ba_data/python/ba/_coopgame.py
index 1811bb05..1d771b5e 100644
--- a/assets/src/ba_data/python/ba/_coopgame.py
+++ b/assets/src/ba_data/python/ba/_coopgame.py
@@ -10,7 +10,7 @@ from ba._gameactivity import GameActivity
from ba._general import WeakCall
if TYPE_CHECKING:
- from typing import Type, Dict, Any, Set, List, Sequence, Optional
+ from typing import Any, Sequence, Optional
from bastd.actor.playerspaz import PlayerSpaz
import ba
@@ -28,7 +28,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
session: ba.CoopSession
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
from ba._coopsession import CoopSession
return issubclass(sessiontype, CoopSession)
@@ -36,7 +36,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
super().__init__(settings)
# Cache these for efficiency.
- self._achievements_awarded: Set[str] = set()
+ self._achievements_awarded: set[str] = set()
self._life_warning_beep: Optional[ba.Actor] = None
self._life_warning_beep_timer: Optional[ba.Timer] = None
@@ -62,11 +62,11 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]):
_ba.get_scores_to_beat(levelname, config_str,
WeakCall(self._on_got_scores_to_beat))
- def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
+ def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
pass
def _show_standard_scores_to_beat_ui(self,
- scores: List[Dict[str, Any]]) -> None:
+ scores: list[dict[str, Any]]) -> None:
from efro.util import asserttype
from ba._gameutils import timestring, animate
from ba._nodeactor import NodeActor
diff --git a/assets/src/ba_data/python/ba/_coopsession.py b/assets/src/ba_data/python/ba/_coopsession.py
index 021142a9..1dab1e1b 100644
--- a/assets/src/ba_data/python/ba/_coopsession.py
+++ b/assets/src/ba_data/python/ba/_coopsession.py
@@ -9,7 +9,7 @@ import _ba
from ba._session import Session
if TYPE_CHECKING:
- from typing import Any, List, Dict, Optional, Callable, Sequence
+ from typing import Any, Optional, Callable, Sequence
import ba
TEAM_COLORS = [(0.2, 0.4, 1.6)]
@@ -77,7 +77,7 @@ class CoopSession(Session):
self._ran_tutorial_activity = False
self._tutorial_activity: Optional[ba.Activity] = None
- self._custom_menu_ui: List[Dict[str, Any]] = []
+ self._custom_menu_ui: list[dict[str, Any]] = []
# Start our joining screen.
self.setactivity(_ba.newactivity(CoopJoinActivity))
@@ -159,7 +159,7 @@ class CoopSession(Session):
from bastd.tutorial import TutorialActivity
self._tutorial_activity = _ba.newactivity(TutorialActivity)
- def get_custom_menu_entries(self) -> List[Dict[str, Any]]:
+ def get_custom_menu_entries(self) -> list[dict[str, Any]]:
return self._custom_menu_ui
def on_player_leave(self, sessionplayer: ba.SessionPlayer) -> None:
@@ -341,7 +341,7 @@ class CoopSession(Session):
self.setactivity(_ba.newactivity(TransitionActivity))
else:
- playerinfos: List[ba.PlayerInfo]
+ playerinfos: list[ba.PlayerInfo]
# Generic team games.
if isinstance(results, GameResults):
diff --git a/assets/src/ba_data/python/ba/_dependency.py b/assets/src/ba_data/python/ba/_dependency.py
index 6cb43e8b..b6663a0f 100644
--- a/assets/src/ba_data/python/ba/_dependency.py
+++ b/assets/src/ba_data/python/ba/_dependency.py
@@ -10,8 +10,7 @@ from typing import (Generic, TypeVar, TYPE_CHECKING)
import _ba
if TYPE_CHECKING:
- from typing import Optional, Any, Dict, List, Set, Type
- from weakref import ReferenceType
+ from typing import Optional, Any
import ba
T = TypeVar('T', bound='DependencyComponent')
@@ -32,13 +31,13 @@ class Dependency(Generic[T]):
methods via self.floofcls().
"""
- def __init__(self, cls: Type[T], config: Any = None):
+ def __init__(self, cls: type[T], config: Any = None):
"""Instantiate a Dependency given a ba.DependencyComponent type.
Optionally, an arbitrary object can be passed as 'config' to
influence dependency calculation for the target class.
"""
- self.cls: Type[T] = cls
+ self.cls: type[T] = cls
self.config = config
self._hash: Optional[int] = None
@@ -91,7 +90,7 @@ class DependencyComponent:
category: Dependency Classes
"""
- _dep_entry: ReferenceType[DependencyEntry]
+ _dep_entry: weakref.ref[DependencyEntry]
def __init__(self) -> None:
"""Instantiate a DependencyComponent."""
@@ -110,7 +109,7 @@ class DependencyComponent:
return True
@classmethod
- def get_dynamic_deps(cls, config: Any = None) -> List[Dependency]:
+ def get_dynamic_deps(cls, config: Any = None) -> list[Dependency]:
"""Return any dynamically-calculated deps for this component/config.
Deps declared statically as part of the class do not need to be
@@ -180,7 +179,7 @@ class DependencySet(Generic[T]):
self._loaded = False
# Dependency data indexed by hash.
- self.entries: Dict[int, DependencyEntry] = {}
+ self.entries: dict[int, DependencyEntry] = {}
# def __del__(self) -> None:
# print("~DepSet()")
@@ -220,12 +219,12 @@ class DependencySet(Generic[T]):
"""Whether this set has been successfully resolved."""
return self._resolved
- def get_asset_package_ids(self) -> Set[str]:
+ def get_asset_package_ids(self) -> set[str]:
"""Return the set of asset-package-ids required by this dep-set.
Must be called on a resolved dep-set.
"""
- ids: Set[str] = set()
+ ids: set[str] = set()
if not self._resolved:
raise Exception('Must be called on a resolved dep-set.')
for entry in self.entries.values():
diff --git a/assets/src/ba_data/python/ba/_error.py b/assets/src/ba_data/python/ba/_error.py
index ea98f3f3..c9e75fcb 100644
--- a/assets/src/ba_data/python/ba/_error.py
+++ b/assets/src/ba_data/python/ba/_error.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, List
+ from typing import Any
import ba
@@ -21,12 +21,12 @@ class DependencyError(Exception):
(this will generally be missing assets).
"""
- def __init__(self, deps: List[ba.Dependency]):
+ def __init__(self, deps: list[ba.Dependency]):
super().__init__()
self._deps = deps
@property
- def deps(self) -> List[ba.Dependency]:
+ def deps(self) -> list[ba.Dependency]:
"""The list of missing dependencies causing this error."""
return self._deps
diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py
index e81eb47d..c0ceee99 100644
--- a/assets/src/ba_data/python/ba/_freeforallsession.py
+++ b/assets/src/ba_data/python/ba/_freeforallsession.py
@@ -10,7 +10,6 @@ import _ba
from ba._multiteamsession import MultiTeamSession
if TYPE_CHECKING:
- from typing import Dict
import ba
@@ -25,12 +24,12 @@ class FreeForAllSession(MultiTeamSession):
_playlist_randomize_var = 'Free-for-All Playlist Randomize'
_playlists_var = 'Free-for-All Playlists'
- def get_ffa_point_awards(self) -> Dict[int, int]:
+ def get_ffa_point_awards(self) -> dict[int, int]:
"""Return the number of points awarded for different rankings.
This is based on the current number of players.
"""
- point_awards: Dict[int, int]
+ point_awards: dict[int, int]
if len(self.sessionplayers) == 1:
point_awards = {}
elif len(self.sessionplayers) == 2:
diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py
index 6b299082..c7d633e0 100644
--- a/assets/src/ba_data/python/ba/_gameactivity.py
+++ b/assets/src/ba_data/python/ba/_gameactivity.py
@@ -19,8 +19,7 @@ from ba._player import PlayerInfo
from ba import _map
if TYPE_CHECKING:
- from typing import (List, Optional, Dict, Type, Any, Callable, Sequence,
- Tuple, Union)
+ from typing import Optional, Any, Callable, Sequence, Union
from bastd.actor.playerspaz import PlayerSpaz
from bastd.actor.bomb import TNTSpawner
import ba
@@ -37,7 +36,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
# pylint: disable=too-many-public-methods
# Tips to be presented to the user at the start of the game.
- tips: List[Union[str, ba.GameTip]] = []
+ tips: list[Union[str, ba.GameTip]] = []
# Default getname() will return this if not None.
name: Optional[str] = None
@@ -46,7 +45,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
description: Optional[str] = None
# Default get_available_settings() will return this if not None.
- available_settings: Optional[List[ba.Setting]] = None
+ available_settings: Optional[list[ba.Setting]] = None
# Default getscoreconfig() will return this if not None.
scoreconfig: Optional[ba.ScoreConfig] = None
@@ -65,7 +64,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
@classmethod
def create_settings_ui(
cls,
- sessiontype: Type[ba.Session],
+ sessiontype: type[ba.Session],
settings: Optional[dict],
completion_call: Callable[[Optional[dict]], None],
) -> None:
@@ -104,7 +103,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
return cls.name if cls.name is not None else 'Untitled Game'
@classmethod
- def get_display_string(cls, settings: Optional[Dict] = None) -> ba.Lstr:
+ def get_display_string(cls, settings: Optional[dict] = None) -> ba.Lstr:
"""Return a descriptive name for this game/settings combo.
Subclasses should override getname(); not this.
@@ -130,7 +129,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
return Lstr(translate=('teamNames', name))
@classmethod
- def get_description(cls, sessiontype: Type[ba.Session]) -> str:
+ def get_description(cls, sessiontype: type[ba.Session]) -> str:
"""Get a str description of this game type.
The default implementation simply returns the 'description' class var.
@@ -142,7 +141,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
@classmethod
def get_description_display_string(
- cls, sessiontype: Type[ba.Session]) -> ba.Lstr:
+ cls, sessiontype: type[ba.Session]) -> ba.Lstr:
"""Return a translated version of get_description().
Sub-classes should override get_description(); not this.
@@ -152,7 +151,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
@classmethod
def get_available_settings(
- cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
+ cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
"""Return a list of settings relevant to this game type when
running under the provided session type.
"""
@@ -160,7 +159,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
return [] if cls.available_settings is None else cls.available_settings
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
"""
Called by the default ba.GameActivity.create_settings_ui()
implementation; should return a list of map names valid
@@ -170,7 +169,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
return _map.getmaps('melee')
@classmethod
- def get_settings_display_string(cls, config: Dict[str, Any]) -> ba.Lstr:
+ def get_settings_display_string(cls, config: dict[str, Any]) -> ba.Lstr:
"""Given a game config dict, return a short description for it.
This is used when viewing game-lists or showing what game
@@ -200,7 +199,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
return sval
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
"""Return whether this game supports the provided Session type."""
from ba._multiteamsession import MultiTeamSession
@@ -213,7 +212,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
# Holds some flattened info about the player set at the point
# when on_begin() is called.
- self.initialplayerinfos: Optional[List[ba.PlayerInfo]] = None
+ self.initialplayerinfos: Optional[list[ba.PlayerInfo]] = None
# Go ahead and get our map loading.
self._map_type = _map.get_map_class(self._calc_map_name(settings))
@@ -222,7 +221,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
self._map_type.preload()
self._map: Optional[ba.Map] = None
self._powerup_drop_timer: Optional[ba.Timer] = None
- self._tnt_spawners: Optional[Dict[int, TNTSpawner]] = None
+ self._tnt_spawners: Optional[dict[int, TNTSpawner]] = None
self._tnt_drop_timer: Optional[ba.Timer] = None
self._game_scoreboard_name_text: Optional[ba.Actor] = None
self._game_scoreboard_description_text: Optional[ba.Actor] = None
@@ -235,7 +234,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
self._tournament_time_limit_title_text: Optional[ba.NodeActor] = None
self._tournament_time_limit_text: Optional[ba.NodeActor] = None
self._tournament_time_limit_text_input: Optional[ba.NodeActor] = None
- self._zoom_message_times: Dict[int, float] = {}
+ self._zoom_message_times: dict[int, float] = {}
self._is_waiting_for_continue = False
self._continue_cost = _ba.get_account_misc_read_val(
@@ -459,7 +458,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
callback=WeakCall(self._on_tournament_query_response),
)
- def _on_tournament_query_response(self, data: Optional[Dict[str,
+ def _on_tournament_query_response(self, data: Optional[dict[str,
Any]]) -> None:
if data is not None:
data_t = data['t'] # This used to be the whole payload.
@@ -1154,7 +1153,7 @@ class GameActivity(Activity[PlayerType, TeamType]):
# If settings doesn't specify a map, pick a random one from the
# list of supported ones.
unowned_maps = _map.get_unowned_maps()
- valid_maps: List[str] = [
+ valid_maps: list[str] = [
m for m in self.get_supported_maps(type(self.session))
if m not in unowned_maps
]
diff --git a/assets/src/ba_data/python/ba/_gameresults.py b/assets/src/ba_data/python/ba/_gameresults.py
index 146e2241..f4b3ebd1 100644
--- a/assets/src/ba_data/python/ba/_gameresults.py
+++ b/assets/src/ba_data/python/ba/_gameresults.py
@@ -12,8 +12,7 @@ from efro.util import asserttype
from ba._team import Team, SessionTeam
if TYPE_CHECKING:
- from weakref import ReferenceType
- from typing import Sequence, Tuple, Any, Optional, Dict, List, Union
+ from typing import Sequence, Optional
import ba
@@ -36,11 +35,10 @@ class GameResults:
def __init__(self) -> None:
self._game_set = False
- self._scores: Dict[int, Tuple[ReferenceType[ba.SessionTeam],
+ self._scores: dict[int, tuple[weakref.ref[ba.SessionTeam],
Optional[int]]] = {}
- self._sessionteams: Optional[List[ReferenceType[
- ba.SessionTeam]]] = None
- self._playerinfos: Optional[List[ba.PlayerInfo]] = None
+ self._sessionteams: Optional[list[weakref.ref[ba.SessionTeam]]] = None
+ self._playerinfos: Optional[list[ba.PlayerInfo]] = None
self._lower_is_better: Optional[bool] = None
self._score_label: Optional[str] = None
self._none_is_winner: Optional[bool] = None
@@ -83,7 +81,7 @@ class GameResults:
return None
@property
- def sessionteams(self) -> List[ba.SessionTeam]:
+ def sessionteams(self) -> list[ba.SessionTeam]:
"""Return all ba.SessionTeams in the results."""
if not self._game_set:
raise RuntimeError("Can't get teams until game is set.")
@@ -127,7 +125,7 @@ class GameResults:
return Lstr(value='-')
@property
- def playerinfos(self) -> List[ba.PlayerInfo]:
+ def playerinfos(self) -> list[ba.PlayerInfo]:
"""Get info about the players represented by the results."""
if not self._game_set:
raise RuntimeError("Can't get player-info until game is set.")
@@ -169,13 +167,13 @@ class GameResults:
return None
@property
- def winnergroups(self) -> List[WinnerGroup]:
+ def winnergroups(self) -> list[WinnerGroup]:
"""Get an ordered list of winner groups."""
if not self._game_set:
raise RuntimeError("Can't get winners until game is set.")
# Group by best scoring teams.
- winners: Dict[int, List[ba.SessionTeam]] = {}
+ winners: dict[int, list[ba.SessionTeam]] = {}
scores = [
score for score in self._scores.values()
if score[0]() is not None and score[1] is not None
@@ -186,13 +184,13 @@ class GameResults:
team = score[0]()
assert team is not None
sval.append(team)
- results: List[Tuple[Optional[int],
- List[ba.SessionTeam]]] = list(winners.items())
+ results: list[tuple[Optional[int],
+ list[ba.SessionTeam]]] = list(winners.items())
results.sort(reverse=not self._lower_is_better,
key=lambda x: asserttype(x[0], int))
# Also group the 'None' scores.
- none_sessionteams: List[ba.SessionTeam] = []
+ none_sessionteams: list[ba.SessionTeam] = []
for score in self._scores.values():
scoreteam = score[0]()
if scoreteam is not None and score[1] is None:
@@ -201,7 +199,7 @@ class GameResults:
# Add the Nones to the list (either as winners or losers
# depending on the rules).
if none_sessionteams:
- nones: List[Tuple[Optional[int], List[ba.SessionTeam]]] = [
+ nones: list[tuple[Optional[int], list[ba.SessionTeam]]] = [
(None, none_sessionteams)
]
if self._none_is_winner:
diff --git a/assets/src/ba_data/python/ba/_gameutils.py b/assets/src/ba_data/python/ba/_gameutils.py
index 43901d2c..d337f3df 100644
--- a/assets/src/ba_data/python/ba/_gameutils.py
+++ b/assets/src/ba_data/python/ba/_gameutils.py
@@ -12,7 +12,7 @@ from ba._generated.enums import TimeType, TimeFormat, SpecialChar, UIScale
from ba._error import ActivityNotFoundError
if TYPE_CHECKING:
- from typing import Any, Dict, Sequence, Optional
+ from typing import Sequence, Optional
import ba
TROPHY_CHARS = {
@@ -45,7 +45,7 @@ def get_trophy_string(trophy_id: str) -> str:
def animate(node: ba.Node,
attr: str,
- keys: Dict[float, float],
+ keys: dict[float, float],
loop: bool = False,
offset: float = 0,
timetype: ba.TimeType = TimeType.SIM,
@@ -119,7 +119,7 @@ def animate(node: ba.Node,
def animate_array(node: ba.Node,
attr: str,
size: int,
- keys: Dict[float, Sequence[float]],
+ keys: dict[float, Sequence[float]],
loop: bool = False,
offset: float = 0,
timetype: ba.TimeType = TimeType.SIM,
diff --git a/assets/src/ba_data/python/ba/_general.py b/assets/src/ba_data/python/ba/_general.py
index 0a4ba2fe..e919138a 100644
--- a/assets/src/ba_data/python/ba/_general.py
+++ b/assets/src/ba_data/python/ba/_general.py
@@ -17,9 +17,8 @@ from ba._generated.enums import TimeType
if TYPE_CHECKING:
from types import FrameType
- from typing import Any, Type, Optional
+ from typing import Any, Optional
from efro.call import Call as Call # 'as Call' so we re-export.
- from weakref import ReferenceType
class Existable(Protocol):
@@ -57,7 +56,7 @@ def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]:
return obj if obj is not None and obj.exists() else None
-def getclass(name: str, subclassof: Type[T]) -> Type[T]:
+def getclass(name: str, subclassof: type[T]) -> type[T]:
"""Given a full class name such as foo.bar.MyClass, return the class.
Category: General Utility Functions
@@ -70,7 +69,7 @@ def getclass(name: str, subclassof: Type[T]) -> Type[T]:
modulename = '.'.join(splits[:-1])
classname = splits[-1]
module = importlib.import_module(modulename)
- cls: Type = getattr(module, classname)
+ cls: type = getattr(module, classname)
if not issubclass(cls, subclassof):
raise TypeError(f'{name} is not a subclass of {subclassof}.')
@@ -133,7 +132,7 @@ def print_refs(obj: Any) -> None:
i += 1
-def get_type_name(cls: Type) -> str:
+def get_type_name(cls: type) -> str:
"""Return a full type name including module for a class."""
return cls.__module__ + '.' + cls.__name__
@@ -343,7 +342,7 @@ def print_active_refs(obj: Any) -> None:
f' {ref4}{Clr.RST}')
-def _verify_object_death(wref: ReferenceType) -> None:
+def _verify_object_death(wref: weakref.ref) -> None:
obj = wref()
if obj is None:
return
diff --git a/assets/src/ba_data/python/ba/_hooks.py b/assets/src/ba_data/python/ba/_hooks.py
index 44afb7c9..7860d1e5 100644
--- a/assets/src/ba_data/python/ba/_hooks.py
+++ b/assets/src/ba_data/python/ba/_hooks.py
@@ -18,7 +18,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import List, Sequence, Optional, Dict, Any
+ from typing import Sequence, Optional, Any
import ba
@@ -339,7 +339,7 @@ def local_chat_message(msg: str) -> None:
_ba.app.ui.party_window().on_chat_message(msg)
-def get_player_icon(sessionplayer: ba.SessionPlayer) -> Dict[str, Any]:
+def get_player_icon(sessionplayer: ba.SessionPlayer) -> dict[str, Any]:
info = sessionplayer.get_icon_info()
return {
'texture': _ba.gettexture(info['texture']),
diff --git a/assets/src/ba_data/python/ba/_input.py b/assets/src/ba_data/python/ba/_input.py
index bd318cac..fcf96ef5 100644
--- a/assets/src/ba_data/python/ba/_input.py
+++ b/assets/src/ba_data/python/ba/_input.py
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, Dict, Tuple
+ from typing import Any
import ba
@@ -601,14 +601,14 @@ def get_input_map_hash(inputdevice: ba.InputDevice) -> str:
def get_input_device_config(device: ba.InputDevice,
- default: bool) -> Tuple[Dict, str]:
+ default: bool) -> tuple[dict, str]:
"""Given an input device, return its config dict in the app config.
The dict will be created if it does not exist.
"""
cfg = _ba.app.config
name = device.name
- ccfgs: Dict[str, Any] = cfg.setdefault('Controllers', {})
+ ccfgs: dict[str, Any] = cfg.setdefault('Controllers', {})
ccfgs.setdefault(name, {})
unique_id = device.unique_identifier
if default:
diff --git a/assets/src/ba_data/python/ba/_keyboard.py b/assets/src/ba_data/python/ba/_keyboard.py
index 258125f5..245cbea3 100644
--- a/assets/src/ba_data/python/ba/_keyboard.py
+++ b/assets/src/ba_data/python/ba/_keyboard.py
@@ -7,7 +7,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import List, Tuple, Dict
+ pass
class Keyboard:
@@ -30,6 +30,6 @@ class Keyboard:
"""
name: str
- chars: List[Tuple[str, ...]]
- pages: Dict[str, Tuple[str, ...]]
- nums: Tuple[str, ...]
+ chars: list[tuple[str, ...]]
+ pages: dict[str, tuple[str, ...]]
+ nums: tuple[str, ...]
diff --git a/assets/src/ba_data/python/ba/_language.py b/assets/src/ba_data/python/ba/_language.py
index 51ac7cbd..61d481a5 100644
--- a/assets/src/ba_data/python/ba/_language.py
+++ b/assets/src/ba_data/python/ba/_language.py
@@ -11,7 +11,7 @@ import _ba
if TYPE_CHECKING:
import ba
- from typing import Any, Dict, List, Optional, Tuple, Union, Sequence
+ from typing import Any, Optional, Union, Sequence
class LanguageSubsystem:
@@ -109,7 +109,7 @@ class LanguageSubsystem:
return _ba.app.config.get('Lang', self.default_language)
@property
- def available_languages(self) -> List[str]:
+ def available_languages(self) -> list[str]:
"""A list of all available languages.
Note that languages that may be present in game assets but which
@@ -402,7 +402,7 @@ class Lstr:
resource: str,
fallback_resource: str = '',
fallback_value: str = '',
- subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
+ subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
"""Create an Lstr from a string resource."""
...
@@ -410,8 +410,8 @@ class Lstr:
@overload
def __init__(self,
*,
- translate: Tuple[str, str],
- subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
+ translate: tuple[str, str],
+ subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
"""Create an Lstr by translating a string in a category."""
...
@@ -420,7 +420,7 @@ class Lstr:
def __init__(self,
*,
value: str,
- subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None:
+ subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None:
"""Create an Lstr from a raw string value."""
...
@@ -531,7 +531,7 @@ class Lstr:
return lstr
-def _add_to_attr_dict(dst: AttrDict, src: Dict) -> None:
+def _add_to_attr_dict(dst: AttrDict, src: dict) -> None:
for key, value in list(src.items()):
if isinstance(value, dict):
try:
diff --git a/assets/src/ba_data/python/ba/_level.py b/assets/src/ba_data/python/ba/_level.py
index ad764b15..53e67f1d 100644
--- a/assets/src/ba_data/python/ba/_level.py
+++ b/assets/src/ba_data/python/ba/_level.py
@@ -10,8 +10,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from weakref import ReferenceType
- from typing import Type, Any, Dict, Optional
+ from typing import Any, Optional
import ba
@@ -23,7 +22,7 @@ class Level:
def __init__(self,
name: str,
- gametype: Type[ba.GameActivity],
+ gametype: type[ba.GameActivity],
settings: dict,
preview_texture_name: str,
displayname: str = None):
@@ -32,7 +31,7 @@ class Level:
self._settings = settings
self._preview_texture_name = preview_texture_name
self._displayname = displayname
- self._campaign: Optional[ReferenceType[ba.Campaign]] = None
+ self._campaign: Optional[weakref.ref[ba.Campaign]] = None
self._index: Optional[int] = None
self._score_version_string: Optional[str] = None
@@ -45,7 +44,7 @@ class Level:
"""The unique name for this Level."""
return self._name
- def get_settings(self) -> Dict[str, Any]:
+ def get_settings(self) -> dict[str, Any]:
"""Returns the settings for this Level."""
settings = copy.deepcopy(self._settings)
@@ -74,7 +73,7 @@ class Level:
self._gametype.get_display_string(self._settings))])
@property
- def gametype(self) -> Type[ba.GameActivity]:
+ def gametype(self) -> type[ba.GameActivity]:
"""The type of game used for this Level."""
return self._gametype
@@ -117,7 +116,7 @@ class Level:
return {}
return copy.deepcopy(config[high_scores_key])
- def set_high_scores(self, high_scores: Dict) -> None:
+ def set_high_scores(self, high_scores: dict) -> None:
"""Set high scores for this level."""
config = self._get_config_dict()
high_scores_key = 'High Scores' + self.get_score_version_string()
@@ -148,7 +147,7 @@ class Level:
config = self._get_config_dict()
config['Rating'] = max(old_rating, rating)
- def _get_config_dict(self) -> Dict[str, Any]:
+ def _get_config_dict(self) -> dict[str, Any]:
"""Return/create the persistent state dict for this level.
The referenced dict exists under the game's config dict and
@@ -157,7 +156,7 @@ class Level:
if campaign is None:
raise RuntimeError('Level is not in a campaign.')
configdict = campaign.configdict
- val: Dict[str, Any] = configdict.setdefault(self._name, {
+ val: dict[str, Any] = configdict.setdefault(self._name, {
'Rating': 0.0,
'Complete': False
})
diff --git a/assets/src/ba_data/python/ba/_lobby.py b/assets/src/ba_data/python/ba/_lobby.py
index 21355512..f063f533 100644
--- a/assets/src/ba_data/python/ba/_lobby.py
+++ b/assets/src/ba_data/python/ba/_lobby.py
@@ -16,7 +16,7 @@ from ba._generated.enums import SpecialChar, InputType
from ba._profile import get_player_profile_colors
if TYPE_CHECKING:
- from typing import Optional, List, Dict, Any, Sequence, Union
+ from typing import Optional, Any, Sequence, Union
import ba
MAX_QUICK_CHANGE_COUNT = 30
@@ -152,11 +152,11 @@ class Chooser:
self._dead = False
self._text_node: Optional[ba.Node] = None
self._profilename = ''
- self._profilenames: List[str] = []
+ self._profilenames: list[str] = []
self._ready: bool = False
- self._character_names: List[str] = []
+ self._character_names: list[str] = []
self._last_change: Sequence[Union[float, int]] = (0, 0)
- self._profiles: Dict[str, Dict[str, Any]] = {}
+ self._profiles: dict[str, dict[str, Any]] = {}
app = _ba.app
@@ -835,11 +835,11 @@ class Lobby:
self._dummy_teams = SessionTeam()
self._sessionteams = [weakref.ref(self._dummy_teams)]
v_offset = (-150 if isinstance(session, CoopSession) else -50)
- self.choosers: List[Chooser] = []
+ self.choosers: list[Chooser] = []
self.base_v_offset = v_offset
self.update_positions()
self._next_add_team = 0
- self.character_names_local_unlocked: List[str] = []
+ self.character_names_local_unlocked: list[str] = []
self._vpos = 0
# Grab available profiles.
@@ -861,7 +861,7 @@ class Lobby:
return self._use_team_colors
@property
- def sessionteams(self) -> List[ba.SessionTeam]:
+ def sessionteams(self) -> list[ba.SessionTeam]:
"""ba.SessionTeams available in this lobby."""
allteams = []
for tref in self._sessionteams:
@@ -870,7 +870,7 @@ class Lobby:
allteams.append(team)
return allteams
- def get_choosers(self) -> List[Chooser]:
+ def get_choosers(self) -> list[Chooser]:
"""Return the lobby's current choosers."""
return self.choosers
diff --git a/assets/src/ba_data/python/ba/_map.py b/assets/src/ba_data/python/ba/_map.py
index 6f8919b5..c5adf977 100644
--- a/assets/src/ba_data/python/ba/_map.py
+++ b/assets/src/ba_data/python/ba/_map.py
@@ -11,7 +11,7 @@ from ba import _math
from ba._actor import Actor
if TYPE_CHECKING:
- from typing import Set, List, Type, Optional, Sequence, Any, Tuple
+ from typing import Optional, Sequence, Any
import ba
@@ -52,7 +52,7 @@ def get_map_display_string(name: str) -> ba.Lstr:
return _language.Lstr(translate=('mapsNames', name))
-def getmaps(playtype: str) -> List[str]:
+def getmaps(playtype: str) -> list[str]:
"""Return a list of ba.Map types supporting a playtype str.
Category: Asset Functions
@@ -101,13 +101,13 @@ def getmaps(playtype: str) -> List[str]:
if playtype in val.get_play_types())
-def get_unowned_maps() -> List[str]:
+def get_unowned_maps() -> list[str]:
"""Return the list of local maps not owned by the current account.
Category: Asset Functions
"""
from ba import _store
- unowned_maps: Set[str] = set()
+ unowned_maps: set[str] = set()
if not _ba.app.headless_mode:
for map_section in _store.get_store_layout()['maps']:
for mapitem in map_section['items']:
@@ -117,7 +117,7 @@ def get_unowned_maps() -> List[str]:
return sorted(unowned_maps)
-def get_map_class(name: str) -> Type[ba.Map]:
+def get_map_class(name: str) -> type[ba.Map]:
"""Return a map type given a name.
Category: Asset Functions
@@ -140,7 +140,7 @@ class Map(Actor):
"""
defs: Any = None
name = 'Map'
- _playtypes: List[str] = []
+ _playtypes: list[str] = []
@classmethod
def preload(cls) -> None:
@@ -156,7 +156,7 @@ class Map(Actor):
activity.preloads[cls] = cls.on_preload()
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return []
@@ -296,7 +296,7 @@ class Map(Actor):
def get_def_bound_box(
self, name: str
- ) -> Optional[Tuple[float, float, float, float, float, float]]:
+ ) -> Optional[tuple[float, float, float, float, float, float]]:
"""Return a 6 member bounds tuple or None if it is not defined."""
try:
box = self.defs.boxes[name]
@@ -312,7 +312,7 @@ class Map(Actor):
return (None if val is None else
_math.vec3validate(val) if __debug__ else val)
- def get_def_points(self, name: str) -> List[Sequence[float]]:
+ def get_def_points(self, name: str) -> list[Sequence[float]]:
"""Return a list of named points.
Return as many sequential ones are defined (flag1, flag2, flag3), etc.
@@ -408,7 +408,7 @@ class Map(Actor):
return None
-def register_map(maptype: Type[Map]) -> None:
+def register_map(maptype: type[Map]) -> None:
"""Register a map class with the game."""
if maptype.name in _ba.app.maps:
raise RuntimeError('map "' + maptype.name + '" already registered')
diff --git a/assets/src/ba_data/python/ba/_math.py b/assets/src/ba_data/python/ba/_math.py
index 98834ee9..856d4268 100644
--- a/assets/src/ba_data/python/ba/_math.py
+++ b/assets/src/ba_data/python/ba/_math.py
@@ -8,7 +8,7 @@ from collections import abc
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Tuple, Sequence
+ from typing import Sequence
def vec3validate(value: Sequence[float]) -> Sequence[float]:
@@ -45,7 +45,7 @@ def is_point_in_box(pnt: Sequence[float], box: Sequence[float]) -> bool:
and (abs(pnt[2] - box[2]) <= box[8] * 0.5))
-def normalized_color(color: Sequence[float]) -> Tuple[float, ...]:
+def normalized_color(color: Sequence[float]) -> tuple[float, ...]:
"""Scale a color so its largest value is 1; useful for coloring lights.
category: General Utility Functions
diff --git a/assets/src/ba_data/python/ba/_messages.py b/assets/src/ba_data/python/ba/_messages.py
index c57ea556..a871d4bd 100644
--- a/assets/src/ba_data/python/ba/_messages.py
+++ b/assets/src/ba_data/python/ba/_messages.py
@@ -11,7 +11,7 @@ from enum import Enum
import _ba
if TYPE_CHECKING:
- from typing import Sequence, Optional, Type, Any
+ from typing import Sequence, Optional, Any
import ba
@@ -105,7 +105,7 @@ class PlayerDiedMessage:
self.how = how
def getkillerplayer(self,
- playertype: Type[PlayerType]) -> Optional[PlayerType]:
+ playertype: type[PlayerType]) -> Optional[PlayerType]:
"""Return the ba.Player responsible for the killing, if any.
Pass the Player type being used by the current game.
@@ -113,7 +113,7 @@ class PlayerDiedMessage:
assert isinstance(self._killerplayer, (playertype, type(None)))
return self._killerplayer
- def getplayer(self, playertype: Type[PlayerType]) -> PlayerType:
+ def getplayer(self, playertype: type[PlayerType]) -> PlayerType:
"""Return the ba.Player that died.
The type of player for the current activity should be passed so that
@@ -294,7 +294,7 @@ class HitMessage:
if force_direction is not None else velocity)
def get_source_player(
- self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
+ self, playertype: type[PlayerType]) -> Optional[PlayerType]:
"""Return the source-player if one exists and is the provided type."""
player: Any = self._source_player
diff --git a/assets/src/ba_data/python/ba/_meta.py b/assets/src/ba_data/python/ba/_meta.py
index d3e7f4f1..7776a5b3 100644
--- a/assets/src/ba_data/python/ba/_meta.py
+++ b/assets/src/ba_data/python/ba/_meta.py
@@ -14,7 +14,7 @@ from dataclasses import dataclass, field
import _ba
if TYPE_CHECKING:
- from typing import Dict, List, Tuple, Union, Optional, Type, Set
+ from typing import Union, Optional
import ba
# The meta api version of this build of the game.
@@ -27,9 +27,9 @@ CURRENT_API_VERSION = 6
@dataclass
class ScanResults:
"""Final results from a metadata scan."""
- games: List[str] = field(default_factory=list)
- plugins: List[str] = field(default_factory=list)
- keyboards: List[str] = field(default_factory=list)
+ games: list[str] = field(default_factory=list)
+ plugins: list[str] = field(default_factory=list)
+ keyboards: list[str] = field(default_factory=list)
errors: str = ''
warnings: str = ''
@@ -89,7 +89,7 @@ class MetadataSubsystem:
plugs = _ba.app.plugins
config_changed = False
found_new = False
- plugstates: Dict[str, Dict] = _ba.app.config.setdefault('Plugins', {})
+ plugstates: dict[str, dict] = _ba.app.config.setdefault('Plugins', {})
assert isinstance(plugstates, dict)
# Create a potential-plugin for each class we found in the scan.
@@ -151,7 +151,7 @@ class MetadataSubsystem:
'timeout waiting for meta scan to complete.')
return self.metascan
- def get_game_types(self) -> List[Type[ba.GameActivity]]:
+ def get_game_types(self) -> list[type[ba.GameActivity]]:
"""Return available game types."""
from ba._general import getclass
from ba._gameactivity import GameActivity
@@ -167,11 +167,11 @@ class MetadataSubsystem:
unowned = self.get_unowned_game_types()
return [cls for cls in gameclasses if cls not in unowned]
- def get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]:
+ def get_unowned_game_types(self) -> set[type[ba.GameActivity]]:
"""Return present game types not owned by the current account."""
try:
from ba import _store
- unowned_games: Set[Type[ba.GameActivity]] = set()
+ unowned_games: set[type[ba.GameActivity]] = set()
if not _ba.app.headless_mode:
for section in _store.get_store_layout()['minigames']:
for mname in section['items']:
@@ -188,7 +188,7 @@ class MetadataSubsystem:
class ScanThread(threading.Thread):
"""Thread to scan script dirs for metadata."""
- def __init__(self, dirs: List[str]):
+ def __init__(self, dirs: list[str]):
super().__init__()
self._dirs = dirs
@@ -215,7 +215,7 @@ class ScanThread(threading.Thread):
class DirectoryScan:
"""Handles scanning directories for metadata."""
- def __init__(self, paths: List[str]):
+ def __init__(self, paths: list[str]):
"""Given one or more paths, parses available meta information.
It is assumed that these paths are also in PYTHONPATH.
@@ -228,7 +228,7 @@ class DirectoryScan:
def _get_path_module_entries(
self, path: pathlib.Path, subpath: Union[str, pathlib.Path],
- modules: List[Tuple[pathlib.Path, pathlib.Path]]) -> None:
+ modules: list[tuple[pathlib.Path, pathlib.Path]]) -> None:
"""Scan provided path and add module entries to provided list."""
try:
# Special case: let's save some time and skip the whole 'ba'
@@ -254,7 +254,7 @@ class DirectoryScan:
def scan(self) -> None:
"""Scan provided paths."""
- modules: List[Tuple[pathlib.Path, pathlib.Path]] = []
+ modules: list[tuple[pathlib.Path, pathlib.Path]] = []
for path in self.paths:
self._get_path_module_entries(path, '', modules)
for moduledir, subpath in modules:
@@ -305,7 +305,7 @@ class DirectoryScan:
# If its a package, recurse into its subpackages.
if ispackage:
try:
- submodules: List[Tuple[pathlib.Path, pathlib.Path]] = []
+ submodules: list[tuple[pathlib.Path, pathlib.Path]] = []
self._get_path_module_entries(moduledir, subpath, submodules)
for submodule in submodules:
if submodule[1].name != '__init__.py':
@@ -316,8 +316,8 @@ class DirectoryScan:
f"Error scanning '{subpath}': {traceback.format_exc()}\n")
def _process_module_meta_tags(self, subpath: pathlib.Path,
- flines: List[str],
- meta_lines: Dict[int, List[str]]) -> None:
+ flines: list[str],
+ meta_lines: dict[int, list[str]]) -> None:
"""Pull data from a module based on its ba_meta tags."""
for lindex, mline in meta_lines.items():
# meta_lines is just anything containing '# ba_meta '; make sure
@@ -360,7 +360,7 @@ class DirectoryScan:
': unrecognized export type "' + exporttype +
'" on line ' + str(lindex + 1) + '.\n')
- def _get_export_class_name(self, subpath: pathlib.Path, lines: List[str],
+ def _get_export_class_name(self, subpath: pathlib.Path, lines: list[str],
lindex: int) -> Optional[str]:
"""Given line num of an export tag, returns its operand class name."""
lindexorig = lindex
@@ -387,7 +387,7 @@ class DirectoryScan:
return classname
def get_api_requirement(self, subpath: pathlib.Path,
- meta_lines: Dict[int, List[str]],
+ meta_lines: dict[int, list[str]],
toplevel: bool) -> Optional[int]:
"""Return an API requirement integer or None if none present.
diff --git a/assets/src/ba_data/python/ba/_multiteamsession.py b/assets/src/ba_data/python/ba/_multiteamsession.py
index 910b72e1..683ddde9 100644
--- a/assets/src/ba_data/python/ba/_multiteamsession.py
+++ b/assets/src/ba_data/python/ba/_multiteamsession.py
@@ -12,7 +12,7 @@ from ba._session import Session
from ba._error import NotFoundError, print_error
if TYPE_CHECKING:
- from typing import Optional, Any, Dict, List, Type, Sequence
+ from typing import Optional, Any, Sequence
import ba
DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))
@@ -105,9 +105,9 @@ class MultiTeamSession(Session):
shuffle=self._playlist_randomize)
# Get a game on deck ready to go.
- self._current_game_spec: Optional[Dict[str, Any]] = None
- self._next_game_spec: Dict[str, Any] = self._playlist.pull_next()
- self._next_game: Type[ba.GameActivity] = (
+ self._current_game_spec: Optional[dict[str, Any]] = None
+ self._next_game_spec: dict[str, Any] = self._playlist.pull_next()
+ self._next_game: type[ba.GameActivity] = (
self._next_game_spec['resolved_type'])
# Go ahead and instantiate the next game we'll
@@ -129,7 +129,7 @@ class MultiTeamSession(Session):
"""Returns a description of the next game on deck."""
# pylint: disable=cyclic-import
from ba._gameactivity import GameActivity
- gametype: Type[GameActivity] = self._next_game_spec['resolved_type']
+ gametype: type[GameActivity] = self._next_game_spec['resolved_type']
assert issubclass(gametype, GameActivity)
return gametype.get_settings_display_string(self._next_game_spec)
@@ -274,13 +274,13 @@ class ShuffleList:
(avoids repeats in maps or game types)
"""
- def __init__(self, items: List[Dict[str, Any]], shuffle: bool = True):
+ def __init__(self, items: list[dict[str, Any]], shuffle: bool = True):
self.source_list = items
self.shuffle = shuffle
- self.shuffle_list: List[Dict[str, Any]] = []
- self.last_gotten: Optional[Dict[str, Any]] = None
+ self.shuffle_list: list[dict[str, Any]] = []
+ self.last_gotten: Optional[dict[str, Any]] = None
- def pull_next(self) -> Dict[str, Any]:
+ def pull_next(self) -> dict[str, Any]:
"""Pull and return the next item on the shuffle-list."""
# Refill our list if its empty.
diff --git a/assets/src/ba_data/python/ba/_music.py b/assets/src/ba_data/python/ba/_music.py
index c2f92d99..7cf3815f 100644
--- a/assets/src/ba_data/python/ba/_music.py
+++ b/assets/src/ba_data/python/ba/_music.py
@@ -11,7 +11,7 @@ from enum import Enum
import _ba
if TYPE_CHECKING:
- from typing import Callable, Any, Optional, Dict, Union, Type
+ from typing import Callable, Any, Optional, Union
import ba
@@ -69,7 +69,7 @@ class AssetSoundtrackEntry:
# What gets played by default for our different music types:
-ASSET_SOUNDTRACK_ENTRIES: Dict[MusicType, AssetSoundtrackEntry] = {
+ASSET_SOUNDTRACK_ENTRIES: dict[MusicType, AssetSoundtrackEntry] = {
MusicType.MENU:
AssetSoundtrackEntry('menuMusic'),
MusicType.VICTORY:
@@ -130,8 +130,8 @@ class MusicSubsystem:
self._music_node: Optional[_ba.Node] = None
self._music_mode: MusicPlayMode = MusicPlayMode.REGULAR
self._music_player: Optional[MusicPlayer] = None
- self._music_player_type: Optional[Type[MusicPlayer]] = None
- self.music_types: Dict[MusicPlayMode, Optional[MusicType]] = {
+ self._music_player_type: Optional[type[MusicPlayer]] = None
+ self.music_types: dict[MusicPlayMode, Optional[MusicType]] = {
MusicPlayMode.REGULAR: None,
MusicPlayMode.TEST: None
}
@@ -273,7 +273,7 @@ class MusicSubsystem:
musictype: Union[MusicType, str, None],
continuous: bool = False,
mode: MusicPlayMode = MusicPlayMode.REGULAR,
- testsoundtrack: Dict[str, Any] = None) -> None:
+ testsoundtrack: dict[str, Any] = None) -> None:
"""Plays the requested music type/mode.
For most cases, setmusic() is the proper call to use, which itself
@@ -329,10 +329,10 @@ class MusicSubsystem:
else:
self._play_internal_music(musictype)
- def _get_user_soundtrack(self) -> Dict[str, Any]:
+ def _get_user_soundtrack(self) -> dict[str, Any]:
"""Return current user soundtrack or empty dict otherwise."""
cfg = _ba.app.config
- soundtrack: Dict[str, Any] = {}
+ soundtrack: dict[str, Any] = {}
soundtrackname = cfg.get('Soundtrack')
if soundtrackname is not None and soundtrackname != '__default__':
try:
diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py
index 7ffb2a99..c27f3dbb 100644
--- a/assets/src/ba_data/python/ba/_net.py
+++ b/assets/src/ba_data/python/ba/_net.py
@@ -12,10 +12,10 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, Dict, Union, Callable, Optional
+ from typing import Any, Union, Callable, Optional
import socket
import ba
- MasterServerCallback = Callable[[Union[None, Dict[str, Any]]], None]
+ MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None]
# Timeout for standard functions talking to the master-server/etc.
DEFAULT_REQUEST_TIMEOUT_SECONDS = 60
@@ -25,7 +25,7 @@ class NetworkSubsystem:
"""Network related app subsystem."""
def __init__(self) -> None:
- self.region_pings: Dict[str, float] = {}
+ self.region_pings: dict[str, float] = {}
def get_ip_address_type(addr: str) -> socket.AddressFamily:
@@ -61,7 +61,7 @@ class MasterServerCallThread(threading.Thread):
"""Thread to communicate with the master-server."""
def __init__(self, request: str, request_type: str,
- data: Optional[Dict[str, Any]],
+ data: Optional[dict[str, Any]],
callback: Optional[MasterServerCallback],
response_type: MasterServerResponseType):
super().__init__()
@@ -79,7 +79,7 @@ class MasterServerCallThread(threading.Thread):
self._activity = weakref.ref(
activity) if activity is not None else None
- def _run_callback(self, arg: Union[None, Dict[str, Any]]) -> None:
+ def _run_callback(self, arg: Union[None, dict[str, Any]]) -> None:
# If we were created in an activity context and that activity has
# since died, do nothing.
# FIXME: Should we just be using a ContextCall instead of doing
@@ -170,7 +170,7 @@ class MasterServerCallThread(threading.Thread):
def master_server_get(
request: str,
- data: Dict[str, Any],
+ data: dict[str, Any],
callback: Optional[MasterServerCallback] = None,
response_type: MasterServerResponseType = MasterServerResponseType.JSON
) -> None:
@@ -181,7 +181,7 @@ def master_server_get(
def master_server_post(
request: str,
- data: Dict[str, Any],
+ data: dict[str, Any],
callback: Optional[MasterServerCallback] = None,
response_type: MasterServerResponseType = MasterServerResponseType.JSON
) -> None:
diff --git a/assets/src/ba_data/python/ba/_player.py b/assets/src/ba_data/python/ba/_player.py
index f0592a6f..a4728537 100644
--- a/assets/src/ba_data/python/ba/_player.py
+++ b/assets/src/ba_data/python/ba/_player.py
@@ -13,8 +13,7 @@ from ba._error import (SessionPlayerNotFoundError, print_exception,
from ba._messages import DeathType, DieMessage
if TYPE_CHECKING:
- from typing import (Type, Optional, Sequence, Dict, Any, Union, Tuple,
- Callable)
+ from typing import Optional, Sequence, Any, Union, Callable
import ba
PlayerType = TypeVar('PlayerType', bound='ba.Player')
@@ -245,8 +244,8 @@ class Player(Generic[TeamType]):
assert not self._expired
return self.actor is not None and self.actor.is_alive()
- def get_icon(self) -> Dict[str, Any]:
- """get_icon() -> Dict[str, Any]
+ def get_icon(self) -> dict[str, Any]:
+ """get_icon() -> dict[str, Any]
Returns the character's icon (images, colors, etc contained in a dict)
"""
@@ -254,7 +253,7 @@ class Player(Generic[TeamType]):
assert not self._expired
return self._sessionplayer.get_icon()
- def assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType,
+ def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType,
...]],
call: Callable) -> None:
"""assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],
@@ -302,7 +301,7 @@ class EmptyPlayer(Player['ba.EmptyTeam']):
# instead of requiring extra work by them.
-def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType:
+def playercast(totype: type[PlayerType], player: ba.Player) -> PlayerType:
"""Cast a ba.Player to a specific ba.Player subclass.
Category: Gameplay Functions
@@ -320,7 +319,7 @@ def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType:
# NOTE: ideally we should have a single playercast() call and use overloads
# for the optional variety, but that currently seems to not be working.
# See: https://github.com/python/mypy/issues/8800
-def playercast_o(totype: Type[PlayerType],
+def playercast_o(totype: type[PlayerType],
player: Optional[ba.Player]) -> Optional[PlayerType]:
"""A variant of ba.playercast() for use with optional ba.Player values.
diff --git a/assets/src/ba_data/python/ba/_playlist.py b/assets/src/ba_data/python/ba/_playlist.py
index 1f31ee6d..b6e36046 100644
--- a/assets/src/ba_data/python/ba/_playlist.py
+++ b/assets/src/ba_data/python/ba/_playlist.py
@@ -5,17 +5,17 @@
from __future__ import annotations
import copy
-from typing import Any, TYPE_CHECKING, Dict, List
+from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Type, Sequence
+ from typing import Sequence
from ba import _session
-PlaylistType = List[Dict[str, Any]]
+PlaylistType = list[dict[str, Any]]
def filter_playlist(playlist: PlaylistType,
- sessiontype: Type[_session.Session],
+ sessiontype: type[_session.Session],
add_resolved_type: bool = False,
remove_unowned: bool = True,
mark_unowned: bool = False) -> PlaylistType:
@@ -32,7 +32,7 @@ def filter_playlist(playlist: PlaylistType,
from ba import _map
from ba import _general
from ba import _gameactivity
- goodlist: List[Dict] = []
+ goodlist: list[dict] = []
unowned_maps: Sequence[str]
if remove_unowned or mark_unowned:
unowned_maps = _map.get_unowned_maps()
diff --git a/assets/src/ba_data/python/ba/_plugin.py b/assets/src/ba_data/python/ba/_plugin.py
index 025f7a24..7637717c 100644
--- a/assets/src/ba_data/python/ba/_plugin.py
+++ b/assets/src/ba_data/python/ba/_plugin.py
@@ -10,7 +10,6 @@ from dataclasses import dataclass
import _ba
if TYPE_CHECKING:
- from typing import List, Dict
import ba
@@ -23,8 +22,8 @@ class PluginSubsystem:
"""
def __init__(self) -> None:
- self.potential_plugins: List[ba.PotentialPlugin] = []
- self.active_plugins: Dict[str, ba.Plugin] = {}
+ self.potential_plugins: list[ba.PotentialPlugin] = []
+ self.active_plugins: dict[str, ba.Plugin] = {}
def on_app_launch(self) -> None:
"""Should be called at app launch time."""
@@ -73,9 +72,9 @@ class PluginSubsystem:
# plugins, but that is only used to give the user a list of plugins
# that they can enable. (we wouldn't want to look at meta-scan here
# anyway because it may not be done yet at this point in the launch)
- plugstates: Dict[str, Dict] = _ba.app.config.get('Plugins', {})
+ plugstates: dict[str, dict] = _ba.app.config.get('Plugins', {})
assert isinstance(plugstates, dict)
- plugkeys: List[str] = sorted(key for key, val in plugstates.items()
+ plugkeys: list[str] = sorted(key for key, val in plugstates.items()
if val.get('enabled', False))
for plugkey in plugkeys:
try:
diff --git a/assets/src/ba_data/python/ba/_powerup.py b/assets/src/ba_data/python/ba/_powerup.py
index 7dd895ce..520d3020 100644
--- a/assets/src/ba_data/python/ba/_powerup.py
+++ b/assets/src/ba_data/python/ba/_powerup.py
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
from dataclasses import dataclass
if TYPE_CHECKING:
- from typing import Sequence, Tuple, Optional
+ from typing import Sequence, Optional
import ba
@@ -47,7 +47,7 @@ class PowerupAcceptMessage:
"""
-def get_default_powerup_distribution() -> Sequence[Tuple[str, int]]:
+def get_default_powerup_distribution() -> Sequence[tuple[str, int]]:
"""Standard set of powerups."""
return (('triple_bombs', 3), ('ice_bombs', 3), ('punch', 3),
('impact_bombs', 3), ('land_mines', 2), ('sticky_bombs', 3),
diff --git a/assets/src/ba_data/python/ba/_profile.py b/assets/src/ba_data/python/ba/_profile.py
index 404afd8b..9f89a7f0 100644
--- a/assets/src/ba_data/python/ba/_profile.py
+++ b/assets/src/ba_data/python/ba/_profile.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import List, Tuple, Any, Dict, Optional
+ from typing import Any, Optional
# NOTE: player color options are enforced server-side for non-pro accounts
# so don't change these or they won't stick...
@@ -20,7 +20,7 @@ PLAYER_COLORS = [(1, 0.15, 0.15), (0.2, 1, 0.2), (0.1, 0.1, 1), (0.2, 1, 1),
(0.5, 0.5, 0.5), (1, 1, 1)]
-def get_player_colors() -> List[Tuple[float, float, float]]:
+def get_player_colors() -> list[tuple[float, float, float]]:
"""Return user-selectable player colors."""
return PLAYER_COLORS
@@ -50,8 +50,8 @@ def get_player_profile_icon(profilename: str) -> str:
def get_player_profile_colors(
profilename: Optional[str],
- profiles: Dict[str, Dict[str, Any]] = None
-) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]:
+ profiles: dict[str, dict[str, Any]] = None
+) -> tuple[tuple[float, float, float], tuple[float, float, float]]:
"""Given a profile, return colors for them."""
appconfig = _ba.app.config
if profiles is None:
diff --git a/assets/src/ba_data/python/ba/_servermode.py b/assets/src/ba_data/python/ba/_servermode.py
index 7f06ddaa..6df38d79 100644
--- a/assets/src/ba_data/python/ba/_servermode.py
+++ b/assets/src/ba_data/python/ba/_servermode.py
@@ -19,7 +19,7 @@ from ba._dualteamsession import DualTeamSession
from ba._coopsession import CoopSession
if TYPE_CHECKING:
- from typing import Optional, Dict, Any, Type
+ from typing import Optional, Any
import ba
from bacommon.servermanager import ServerConfig
@@ -198,7 +198,7 @@ class ServerController:
callback=self._access_check_response,
)
- def _access_check_response(self, data: Optional[Dict[str, Any]]) -> None:
+ def _access_check_response(self, data: Optional[dict[str, Any]]) -> None:
import os
if data is None:
print('error on UDP port access check (internet down?)')
@@ -267,7 +267,7 @@ class ServerController:
def _on_playlist_fetch_response(
self,
- result: Optional[Dict[str, Any]],
+ result: Optional[dict[str, Any]],
) -> None:
if result is None:
print('Error fetching playlist; aborting.')
@@ -283,7 +283,7 @@ class ServerController:
self._config.session_type = typename
self._playlist_name = (result['playlistName'])
- def _get_session_type(self) -> Type[ba.Session]:
+ def _get_session_type(self) -> type[ba.Session]:
# Convert string session type to the class.
# Hmm should we just keep this as a string?
if self._config.session_type == 'ffa':
diff --git a/assets/src/ba_data/python/ba/_session.py b/assets/src/ba_data/python/ba/_session.py
index dc471f50..0b59fed4 100644
--- a/assets/src/ba_data/python/ba/_session.py
+++ b/assets/src/ba_data/python/ba/_session.py
@@ -12,7 +12,7 @@ from ba._language import Lstr
from ba._player import Player
if TYPE_CHECKING:
- from typing import Sequence, List, Dict, Any, Optional, Set
+ from typing import Sequence, Any, Optional
import ba
@@ -76,9 +76,9 @@ class Session:
lobby: ba.Lobby
max_players: int
min_players: int
- sessionplayers: List[ba.SessionPlayer]
+ sessionplayers: list[ba.SessionPlayer]
customdata: dict
- sessionteams: List[ba.SessionTeam]
+ sessionteams: list[ba.SessionTeam]
def __init__(self,
depsets: Sequence[ba.DependencySet],
@@ -108,7 +108,7 @@ class Session:
# If things are missing, we'll try to gather them into a single
# missing-deps exception if possible to give the caller a clean
# path to download missing stuff and try again.
- missing_asset_packages: Set[str] = set()
+ missing_asset_packages: set[str] = set()
for depset in depsets:
try:
depset.resolve()
@@ -133,7 +133,7 @@ class Session:
# Ok; looks like our dependencies check out.
# Now give the engine a list of asset-set-ids to pass along to clients.
- required_asset_packages: Set[str] = set()
+ required_asset_packages: set[str] = set()
for depset in depsets:
required_asset_packages.update(depset.get_asset_package_ids())
@@ -495,7 +495,7 @@ class Session:
"""Return the current foreground activity for this session."""
return self._activity_weak()
- def get_custom_menu_entries(self) -> List[Dict[str, Any]]:
+ def get_custom_menu_entries(self) -> list[dict[str, Any]]:
"""Subclasses can override this to provide custom menu entries.
The returned value should be a list of dicts, each containing
diff --git a/assets/src/ba_data/python/ba/_settings.py b/assets/src/ba_data/python/ba/_settings.py
index 1b3e4040..cf590b52 100644
--- a/assets/src/ba_data/python/ba/_settings.py
+++ b/assets/src/ba_data/python/ba/_settings.py
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING
from dataclasses import dataclass
if TYPE_CHECKING:
- from typing import Any, List, Tuple
+ from typing import Any
@dataclass
@@ -61,7 +61,7 @@ class ChoiceSetting(Setting):
Category: Settings Classes
"""
- choices: List[Tuple[str, Any]]
+ choices: list[tuple[str, Any]]
@dataclass
@@ -71,7 +71,7 @@ class IntChoiceSetting(ChoiceSetting):
Category: Settings Classes
"""
default: int
- choices: List[Tuple[str, int]]
+ choices: list[tuple[str, int]]
@dataclass
@@ -81,4 +81,4 @@ class FloatChoiceSetting(ChoiceSetting):
Category: Settings Classes
"""
default: float
- choices: List[Tuple[str, float]]
+ choices: list[tuple[str, float]]
diff --git a/assets/src/ba_data/python/ba/_stats.py b/assets/src/ba_data/python/ba/_stats.py
index bf3becb0..486a39e2 100644
--- a/assets/src/ba_data/python/ba/_stats.py
+++ b/assets/src/ba_data/python/ba/_stats.py
@@ -14,8 +14,7 @@ from ba._error import (print_exception, print_error, SessionTeamNotFoundError,
if TYPE_CHECKING:
import ba
- from weakref import ReferenceType
- from typing import Any, Dict, Optional, Sequence, Union, Tuple
+ from typing import Any, Optional, Sequence, Union
@dataclass
@@ -58,7 +57,7 @@ class PlayerRecord:
self._stats = weakref.ref(stats)
self._last_sessionplayer: Optional[ba.SessionPlayer] = None
self._sessionplayer: Optional[ba.SessionPlayer] = None
- self._sessionteam: Optional[ReferenceType[ba.SessionTeam]] = None
+ self._sessionteam: Optional[weakref.ref[ba.SessionTeam]] = None
self.streak = 0
self.associate_with_sessionplayer(sessionplayer)
@@ -90,7 +89,7 @@ class PlayerRecord:
"""Return the player entry's name."""
return self.name_full if full else self.name
- def get_icon(self) -> Dict[str, Any]:
+ def get_icon(self) -> dict[str, Any]:
"""Get the icon for this instance's player."""
player = self._last_sessionplayer
assert player is not None
@@ -181,7 +180,7 @@ class PlayerRecord:
sound = stats.orchestrahitsound4
def _apply(name2: Lstr, score2: int, showpoints2: bool,
- color2: Tuple[float, float, float, float], scale2: float,
+ color2: tuple[float, float, float, float], scale2: float,
sound2: Optional[ba.Sound]) -> None:
from bastd.actor.popuptext import PopupText
@@ -237,8 +236,8 @@ class Stats:
"""
def __init__(self) -> None:
- self._activity: Optional[ReferenceType[ba.Activity]] = None
- self._player_records: Dict[str, PlayerRecord] = {}
+ self._activity: Optional[weakref.ref[ba.Activity]] = None
+ self._player_records: dict[str, PlayerRecord] = {}
self.orchestrahitsound1: Optional[ba.Sound] = None
self.orchestrahitsound2: Optional[ba.Sound] = None
self.orchestrahitsound3: Optional[ba.Sound] = None
@@ -303,7 +302,7 @@ class Stats:
self._player_records[name] = PlayerRecord(name, name_full, player,
self)
- def get_records(self) -> Dict[str, ba.PlayerRecord]:
+ def get_records(self) -> dict[str, ba.PlayerRecord]:
"""Get PlayerRecord corresponding to still-existing players."""
records = {}
diff --git a/assets/src/ba_data/python/ba/_store.py b/assets/src/ba_data/python/ba/_store.py
index 14cd6080..0dc91f9c 100644
--- a/assets/src/ba_data/python/ba/_store.py
+++ b/assets/src/ba_data/python/ba/_store.py
@@ -9,11 +9,11 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Type, List, Dict, Tuple, Optional, Any
+ from typing import Optional, Any
import ba
-def get_store_item(item: str) -> Dict[str, Any]:
+def get_store_item(item: str) -> dict[str, Any]:
"""(internal)"""
return get_store_items()[item]
@@ -32,17 +32,17 @@ def get_store_item_name_translated(item_name: str) -> ba.Lstr:
subs=[('${APP_NAME}',
_language.Lstr(resource='titleText'))])
if item_name.startswith('maps.'):
- map_type: Type[ba.Map] = item_info['map_type']
+ map_type: type[ba.Map] = item_info['map_type']
return _map.get_map_display_string(map_type.name)
if item_name.startswith('games.'):
- gametype: Type[ba.GameActivity] = item_info['gametype']
+ gametype: type[ba.GameActivity] = item_info['gametype']
return gametype.get_display_string()
if item_name.startswith('icons.'):
return _language.Lstr(resource='editProfileWindow.iconText')
raise ValueError('unrecognized item: ' + item_name)
-def get_store_item_display_size(item_name: str) -> Tuple[float, float]:
+def get_store_item_display_size(item_name: str) -> tuple[float, float]:
"""(internal)"""
if item_name.startswith('characters.'):
return 340 * 0.6, 430 * 0.6
@@ -55,7 +55,7 @@ def get_store_item_display_size(item_name: str) -> Tuple[float, float]:
return 450 * 0.6, 450 * 0.6
-def get_store_items() -> Dict[str, Dict]:
+def get_store_items() -> dict[str, dict]:
"""Returns info about purchasable items.
(internal)
@@ -285,7 +285,7 @@ def get_store_items() -> Dict[str, Dict]:
return store_items
-def get_store_layout() -> Dict[str, List[Dict[str, Any]]]:
+def get_store_layout() -> dict[str, list[dict[str, Any]]]:
"""Return what's available in the store at a given time.
Categorized by tab and by section."""
@@ -421,7 +421,7 @@ def get_available_purchase_count(tab: str = None) -> int:
return 0
-def _calc_count_for_tab(tabval: List[Dict[str, Any]], our_tickets: int,
+def _calc_count_for_tab(tabval: list[dict[str, Any]], our_tickets: int,
count: int) -> int:
for section in tabval:
for item in section['items']:
@@ -442,7 +442,7 @@ def get_available_sale_time(tab: str) -> Optional[int]:
import datetime
from ba._generated.enums import TimeType, TimeFormat
app = _ba.app
- sale_times: List[Optional[int]] = []
+ sale_times: list[Optional[int]] = []
# Calc time for our pro sale (old special case).
if tab == 'extras':
diff --git a/assets/src/ba_data/python/ba/_team.py b/assets/src/ba_data/python/ba/_team.py
index 67e254b2..0cdfbe75 100644
--- a/assets/src/ba_data/python/ba/_team.py
+++ b/assets/src/ba_data/python/ba/_team.py
@@ -10,8 +10,7 @@ from typing import TYPE_CHECKING, TypeVar, Generic
from ba._error import print_exception
if TYPE_CHECKING:
- from weakref import ReferenceType
- from typing import Dict, List, Sequence, Tuple, Union, Optional
+ from typing import Sequence, Union, Optional
import ba
@@ -47,8 +46,8 @@ class SessionTeam:
# Annotate our attr types at the class level so they're introspectable.
name: Union[ba.Lstr, str]
- color: Tuple[float, ...] # FIXME: can't we make this fixed len?
- players: List[ba.SessionPlayer]
+ color: tuple[float, ...] # FIXME: can't we make this fixed len?
+ players: list[ba.SessionPlayer]
customdata: dict
id: int
@@ -88,11 +87,11 @@ class Team(Generic[PlayerType]):
# Defining these types at the class level instead of in __init__ so
# that types are introspectable (these are still instance attrs).
- players: List[PlayerType]
+ players: list[PlayerType]
id: int
name: Union[ba.Lstr, str]
- color: Tuple[float, ...] # FIXME: can't we make this fixed length?
- _sessionteam: ReferenceType[SessionTeam]
+ color: tuple[float, ...] # FIXME: can't we make this fixed length?
+ _sessionteam: weakref.ref[SessionTeam]
_expired: bool
_postinited: bool
_customdata: dict
@@ -127,7 +126,7 @@ class Team(Generic[PlayerType]):
self._postinited = True
def manual_init(self, team_id: int, name: Union[ba.Lstr, str],
- color: Tuple[float, ...]) -> None:
+ color: tuple[float, ...]) -> None:
"""Manually init a team for uses such as bots."""
self.id = team_id
self.name = name
diff --git a/assets/src/ba_data/python/ba/_teamgame.py b/assets/src/ba_data/python/ba/_teamgame.py
index afa8519e..93076210 100644
--- a/assets/src/ba_data/python/ba/_teamgame.py
+++ b/assets/src/ba_data/python/ba/_teamgame.py
@@ -13,7 +13,7 @@ from ba._gameresults import GameResults
from ba._dualteamsession import DualTeamSession
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Sequence
+ from typing import Any, Sequence
from bastd.actor.playerspaz import PlayerSpaz
import ba
@@ -31,7 +31,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]):
"""
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
"""
Class method override;
returns True for ba.DualTeamSessions and ba.FreeForAllSessions;
diff --git a/assets/src/ba_data/python/ba/_tips.py b/assets/src/ba_data/python/ba/_tips.py
index 7a2501d5..c6e8955e 100644
--- a/assets/src/ba_data/python/ba/_tips.py
+++ b/assets/src/ba_data/python/ba/_tips.py
@@ -3,12 +3,16 @@
"""Functionality related to game tips.
These can be shown at opportune times such as between rounds."""
+from __future__ import annotations
+from typing import TYPE_CHECKING
import random
-from typing import List
import _ba
+if TYPE_CHECKING:
+ pass
+
def get_next_tip() -> str:
"""Returns the next tip to be displayed."""
@@ -20,7 +24,7 @@ def get_next_tip() -> str:
return tip
-def get_all_tips() -> List[str]:
+def get_all_tips() -> list[str]:
"""Return the complete list of tips."""
tips = [
('If you are short on controllers, install the \'${REMOTE_APP_NAME}\' '
diff --git a/assets/src/ba_data/python/ba/_tournament.py b/assets/src/ba_data/python/ba/_tournament.py
index b246ff87..ec1618ae 100644
--- a/assets/src/ba_data/python/ba/_tournament.py
+++ b/assets/src/ba_data/python/ba/_tournament.py
@@ -9,10 +9,10 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Dict, List, Any
+ from typing import Any
-def get_tournament_prize_strings(entry: Dict[str, Any]) -> List[str]:
+def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]:
"""Given a tournament entry, return strings for its prize levels."""
# pylint: disable=too-many-locals
from ba._generated.enums import SpecialChar
diff --git a/assets/src/ba_data/python/ba/_ui.py b/assets/src/ba_data/python/ba/_ui.py
index dcf5df47..bf019471 100644
--- a/assets/src/ba_data/python/ba/_ui.py
+++ b/assets/src/ba_data/python/ba/_ui.py
@@ -10,7 +10,7 @@ import _ba
from ba._generated.enums import UIScale
if TYPE_CHECKING:
- from typing import Optional, Dict, Any, Callable, List, Type
+ from typing import Optional, Any, Callable
from ba.ui import UICleanupCheck
import ba
@@ -43,13 +43,13 @@ class UISubsystem:
else:
raise RuntimeError(f'Invalid UIScale value: {interfacetype}')
- self.window_states: Dict[Type, Any] = {} # FIXME: Kill this.
+ self.window_states: dict[type, Any] = {} # FIXME: Kill this.
self.main_menu_selection: Optional[str] = None # FIXME: Kill this.
self.have_party_queue_window = False
self.quit_window: Any = None
self.dismiss_wii_remotes_window_call: (Optional[Callable[[],
Any]]) = None
- self.cleanupchecks: List[UICleanupCheck] = []
+ self.cleanupchecks: list[UICleanupCheck] = []
self.upkeeptimer: Optional[ba.Timer] = None
self.use_toolbars = env.get('toolbar_test', True)
self.party_window: Any = None # FIXME: Don't use Any.
diff --git a/assets/src/ba_data/python/ba/macmusicapp.py b/assets/src/ba_data/python/ba/macmusicapp.py
index 9149b3d9..598f5725 100644
--- a/assets/src/ba_data/python/ba/macmusicapp.py
+++ b/assets/src/ba_data/python/ba/macmusicapp.py
@@ -10,7 +10,7 @@ import _ba
from ba._music import MusicPlayer
if TYPE_CHECKING:
- from typing import List, Optional, Callable, Any
+ from typing import Optional, Callable, Any
class MacMusicAppMusicPlayer(MusicPlayer):
@@ -60,7 +60,7 @@ class _MacMusicAppThread(threading.Thread):
def __init__(self) -> None:
super().__init__()
self._commands_available = threading.Event()
- self._commands: List[List] = []
+ self._commands: list[list] = []
self._volume = 1.0
self._current_playlist: Optional[str] = None
self._orig_volume: Optional[int] = None
@@ -153,7 +153,7 @@ class _MacMusicAppThread(threading.Thread):
self._commands_available.set()
def _handle_get_playlists_command(
- self, target: Callable[[List[str]], None]) -> None:
+ self, target: Callable[[list[str]], None]) -> None:
from ba._general import Call
try:
playlists = _ba.mac_music_app_get_playlists()
diff --git a/assets/src/ba_data/python/ba/modutils.py b/assets/src/ba_data/python/ba/modutils.py
index cdd6ecaf..5984f25c 100644
--- a/assets/src/ba_data/python/ba/modutils.py
+++ b/assets/src/ba_data/python/ba/modutils.py
@@ -9,7 +9,7 @@ import os
import _ba
if TYPE_CHECKING:
- from typing import Optional, List, Sequence
+ from typing import Optional, Sequence
def get_human_readable_user_scripts_path() -> str:
diff --git a/assets/src/ba_data/python/ba/osmusic.py b/assets/src/ba_data/python/ba/osmusic.py
index 5257e0aa..64f2bd1e 100644
--- a/assets/src/ba_data/python/ba/osmusic.py
+++ b/assets/src/ba_data/python/ba/osmusic.py
@@ -12,7 +12,7 @@ import _ba
from ba._music import MusicPlayer
if TYPE_CHECKING:
- from typing import Callable, Any, Union, List, Optional
+ from typing import Callable, Any, Union, Optional
class OSMusicPlayer(MusicPlayer):
@@ -26,7 +26,7 @@ class OSMusicPlayer(MusicPlayer):
self._actually_playing = False
@classmethod
- def get_valid_music_file_extensions(cls) -> List[str]:
+ def get_valid_music_file_extensions(cls) -> list[str]:
"""Return file extensions for types playable on this device."""
# FIXME: should ask the C++ layer for these; just hard-coding for now.
return ['mp3', 'ogg', 'm4a', 'wav', 'flac', 'mid']
@@ -60,7 +60,7 @@ class OSMusicPlayer(MusicPlayer):
self._on_play_folder_cb).start()
def _on_play_folder_cb(self,
- result: Union[str, List[str]],
+ result: Union[str, list[str]],
error: Optional[str] = None) -> None:
from ba import _language
if error is not None:
@@ -94,8 +94,8 @@ class OSMusicPlayer(MusicPlayer):
class _PickFolderSongThread(threading.Thread):
- def __init__(self, path: str, valid_extensions: List[str],
- callback: Callable[[Union[str, List[str]], Optional[str]],
+ def __init__(self, path: str, valid_extensions: list[str],
+ callback: Callable[[Union[str, list[str]], Optional[str]],
None]):
super().__init__()
self._valid_extensions = valid_extensions
@@ -108,7 +108,7 @@ class _PickFolderSongThread(threading.Thread):
do_print_error = True
try:
_ba.set_thread_name('BA_PickFolderSongThread')
- all_files: List[str] = []
+ all_files: list[str] = []
valid_extensions = ['.' + x for x in self._valid_extensions]
for root, _subdirs, filenames in os.walk(self._path):
for fname in filenames:
diff --git a/assets/src/ba_data/python/ba/ui/__init__.py b/assets/src/ba_data/python/ba/ui/__init__.py
index a7fe5747..a3b16de3 100644
--- a/assets/src/ba_data/python/ba/ui/__init__.py
+++ b/assets/src/ba_data/python/ba/ui/__init__.py
@@ -14,8 +14,7 @@ from ba._generated.enums import TimeType
from ba._general import print_active_refs
if TYPE_CHECKING:
- from typing import Optional, List, Any
- from weakref import ReferenceType
+ from typing import Optional, Any
import ba
@@ -45,7 +44,7 @@ class Window:
@dataclass
class UICleanupCheck:
"""Holds info about a uicleanupcheck target."""
- obj: ReferenceType
+ obj: weakref.ref
widget: ba.Widget
widget_death_time: Optional[float]
@@ -126,15 +125,15 @@ class UIController:
def __init__(self) -> None:
# FIXME: document why we have separate stacks for game and menu...
- self._main_stack_game: List[UIEntry] = []
- self._main_stack_menu: List[UIEntry] = []
+ self._main_stack_game: list[UIEntry] = []
+ self._main_stack_menu: list[UIEntry] = []
# This points at either the game or menu stack.
- self._main_stack: Optional[List[UIEntry]] = None
+ self._main_stack: Optional[list[UIEntry]] = None
# There's only one of these since we don't need to preserve its state
# between sessions.
- self._dialog_stack: List[UIEntry] = []
+ self._dialog_stack: list[UIEntry] = []
def show_main_menu(self, in_game: bool = True) -> None:
"""Show the main menu, clearing other UIs from location stacks."""
diff --git a/assets/src/ba_data/python/bastd/activity/coopjoin.py b/assets/src/ba_data/python/bastd/activity/coopjoin.py
index 1bb614a4..9c44baa9 100644
--- a/assets/src/ba_data/python/bastd/activity/coopjoin.py
+++ b/assets/src/ba_data/python/bastd/activity/coopjoin.py
@@ -11,7 +11,7 @@ import ba
from ba.internal import JoinActivity
if TYPE_CHECKING:
- from typing import Any, Dict, List, Optional, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
class CoopJoinActivity(JoinActivity):
@@ -54,7 +54,7 @@ class CoopJoinActivity(JoinActivity):
ControlsGuide(delay=1.0).autoretain()
def _on_got_scores_to_beat(self,
- scores: Optional[List[Dict[str, Any]]]) -> None:
+ scores: Optional[list[dict[str, Any]]]) -> None:
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
from efro.util import asserttype
diff --git a/assets/src/ba_data/python/bastd/activity/coopscore.py b/assets/src/ba_data/python/bastd/activity/coopscore.py
index dc201f55..9df3badd 100644
--- a/assets/src/ba_data/python/bastd/activity/coopscore.py
+++ b/assets/src/ba_data/python/bastd/activity/coopscore.py
@@ -14,7 +14,7 @@ from bastd.actor.text import Text
from bastd.actor.zoomtext import ZoomText
if TYPE_CHECKING:
- from typing import Optional, Tuple, List, Dict, Any, Sequence
+ from typing import Optional, Any, Sequence
from bastd.ui.store.button import StoreButton
from bastd.ui.league.rankbutton import LeagueRankButton
@@ -96,7 +96,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
self._game_config_str: Optional[str] = None
# Ui bits.
- self._corner_button_offs: Optional[Tuple[float, float]] = None
+ self._corner_button_offs: Optional[tuple[float, float]] = None
self._league_rank_button: Optional[LeagueRankButton] = None
self._store_button_instance: Optional[StoreButton] = None
self._restart_button: Optional[ba.Widget] = None
@@ -110,7 +110,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
self._is_more_levels: Optional[bool] = None
self._next_level_name: Optional[str] = None
self._show_friend_scores: Optional[bool] = None
- self._show_info: Optional[Dict[str, Any]] = None
+ self._show_info: Optional[dict[str, Any]] = None
self._name_str: Optional[str] = None
self._friends_loading_status: Optional[ba.Actor] = None
self._score_loading_status: Optional[ba.Actor] = None
@@ -124,7 +124,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
self._allow_server_transition = False
self._server_transitioning: Optional[bool] = None
- self._playerinfos: List[ba.PlayerInfo] = settings['playerinfos']
+ self._playerinfos: list[ba.PlayerInfo] = settings['playerinfos']
assert isinstance(self._playerinfos, list)
assert (isinstance(i, ba.PlayerInfo) for i in self._playerinfos)
@@ -831,7 +831,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
scale = 0.65
elif p_count == 4:
scale = 0.5
- times: List[Tuple[float, float]] = []
+ times: list[tuple[float, float]] = []
for i in range(display_count):
times.insert(random.randrange(0,
len(times) + 1),
@@ -929,7 +929,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
'loop': False
})).autoretain()
- def _got_friend_score_results(self, results: Optional[List[Any]]) -> None:
+ def _got_friend_score_results(self, results: Optional[list[Any]]) -> None:
# FIXME: tidy this up
# pylint: disable=too-many-locals
@@ -990,7 +990,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
while len(results) < 5:
results.append([0, '-', False])
results = results[:5]
- times: List[Tuple[float, float]] = []
+ times: list[tuple[float, float]] = []
for i in range(len(results)):
times.insert(random.randrange(0,
len(times) + 1),
@@ -1044,7 +1044,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
transition=Text.Transition.IN_RIGHT,
transition_delay=tdelay2).autoretain()
- def _got_score_results(self, results: Optional[Dict[str, Any]]) -> None:
+ def _got_score_results(self, results: Optional[dict[str, Any]]) -> None:
# FIXME: tidy this up
# pylint: disable=too-many-locals
@@ -1142,7 +1142,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]):
while len(self._show_info['tops']) < 10:
self._show_info['tops'].append([0, '-'])
- times: List[Tuple[float, float]] = []
+ times: list[tuple[float, float]] = []
for i in range(len(self._show_info['tops'])):
times.insert(
random.randrange(0,
diff --git a/assets/src/ba_data/python/bastd/activity/drawscore.py b/assets/src/ba_data/python/bastd/activity/drawscore.py
index c12b82b7..38109f7b 100644
--- a/assets/src/ba_data/python/bastd/activity/drawscore.py
+++ b/assets/src/ba_data/python/bastd/activity/drawscore.py
@@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
from bastd.actor.zoomtext import ZoomText
if TYPE_CHECKING:
- from typing import Any, Dict
+ pass
class DrawScoreScreenActivity(MultiTeamScoreScreenActivity):
diff --git a/assets/src/ba_data/python/bastd/activity/dualteamscore.py b/assets/src/ba_data/python/bastd/activity/dualteamscore.py
index b031bb80..aae7fdeb 100644
--- a/assets/src/ba_data/python/bastd/activity/dualteamscore.py
+++ b/assets/src/ba_data/python/bastd/activity/dualteamscore.py
@@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
from bastd.actor.zoomtext import ZoomText
if TYPE_CHECKING:
- from typing import Any, Dict
+ pass
class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
diff --git a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
index 10150580..0aab7144 100644
--- a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
+++ b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py
@@ -10,7 +10,7 @@ import ba
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
- from typing import Any, Dict, Optional, Set, Tuple
+ from typing import Any, Optional
class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
@@ -71,7 +71,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
scale=1.2,
x_offset=-110.0)
- sound_times: Set[float] = set()
+ sound_times: set[float] = set()
def _scoretxt(text: str,
x_offs: float,
@@ -260,7 +260,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
v_offs -= spacing
def _safe_animate(self, node: Optional[ba.Node], attr: str,
- keys: Dict[float, float]) -> None:
+ keys: dict[float, float]) -> None:
"""Run an animation on a node if the node still exists."""
if node:
ba.animate(node, attr, keys)
diff --git a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py
index 9c278590..a1a2586e 100644
--- a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py
+++ b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py
@@ -11,7 +11,7 @@ from ba.internal import JoinActivity
from bastd.actor.text import Text
if TYPE_CHECKING:
- from typing import Any, Dict, Optional
+ from typing import Optional
class MultiTeamJoinActivity(JoinActivity):
diff --git a/assets/src/ba_data/python/bastd/activity/multiteamscore.py b/assets/src/ba_data/python/bastd/activity/multiteamscore.py
index ba87a616..3701ff89 100644
--- a/assets/src/ba_data/python/bastd/activity/multiteamscore.py
+++ b/assets/src/ba_data/python/bastd/activity/multiteamscore.py
@@ -11,7 +11,7 @@ from bastd.actor.text import Text
from bastd.actor.image import Image
if TYPE_CHECKING:
- from typing import Any, Dict, Optional, Union
+ from typing import Optional, Union
class MultiTeamScoreScreenActivity(ScoreScreenActivity):
diff --git a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py
index 9acc7846..061ad68f 100644
--- a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py
+++ b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py
@@ -10,7 +10,7 @@ import ba
from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity
if TYPE_CHECKING:
- from typing import Any, Dict, List, Tuple, Optional
+ from typing import Optional
class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
@@ -51,7 +51,7 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity):
ba.timer(4.6, ba.Call(ba.playsound, self._score_display_sound))
# Score / Name / Player-record.
- player_entries: List[Tuple[int, str, ba.PlayerRecord]] = []
+ player_entries: list[tuple[int, str, ba.PlayerRecord]] = []
# Note: for ffa, exclude players who haven't entered the game yet.
if self._is_ffa:
diff --git a/assets/src/ba_data/python/bastd/actor/bomb.py b/assets/src/ba_data/python/bastd/actor/bomb.py
index 99d7dd12..1c86f1fa 100644
--- a/assets/src/ba_data/python/bastd/actor/bomb.py
+++ b/assets/src/ba_data/python/bastd/actor/bomb.py
@@ -14,7 +14,7 @@ import ba
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Sequence, Optional, Callable, List, Tuple, Type
+ from typing import Any, Sequence, Optional, Callable
PlayerType = TypeVar('PlayerType', bound='ba.Player')
@@ -693,7 +693,7 @@ class Bomb(ba.Actor):
elif self.bomb_type == 'tnt':
self.blast_radius *= 1.45
- self._explode_callbacks: List[Callable[[Bomb, Blast], Any]] = []
+ self._explode_callbacks: list[Callable[[Bomb, Blast], Any]] = []
# The player this came from.
self._source_player = source_player
@@ -716,7 +716,7 @@ class Bomb(ba.Actor):
# since players carrying those things and thus touching footing
# objects will think they're on solid ground.. perhaps we don't
# wanna add this even in the tnt case?
- materials: Tuple[ba.Material, ...]
+ materials: tuple[ba.Material, ...]
if self.bomb_type == 'tnt':
materials = (factory.bomb_material, shared.footing_material,
shared.object_material)
@@ -847,7 +847,7 @@ class Bomb(ba.Actor):
})
def get_source_player(
- self, playertype: Type[PlayerType]) -> Optional[PlayerType]:
+ self, playertype: type[PlayerType]) -> Optional[PlayerType]:
"""Return the source-player if one exists and is the provided type."""
player: Any = self._source_player
return (player if isinstance(player, playertype) and player.exists()
diff --git a/assets/src/ba_data/python/bastd/actor/controlsguide.py b/assets/src/ba_data/python/bastd/actor/controlsguide.py
index db0d8cee..70279a9e 100644
--- a/assets/src/ba_data/python/bastd/actor/controlsguide.py
+++ b/assets/src/ba_data/python/bastd/actor/controlsguide.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Optional, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
class ControlsGuide(ba.Actor):
@@ -24,7 +24,7 @@ class ControlsGuide(ba.Actor):
"""
def __init__(self,
- position: Tuple[float, float] = (390.0, 120.0),
+ position: tuple[float, float] = (390.0, 120.0),
scale: float = 1.0,
delay: float = 0.0,
lifespan: float = None,
@@ -57,8 +57,8 @@ class ControlsGuide(ba.Actor):
self._update_timer: Optional[ba.Timer] = None
self._title_text: Optional[ba.Node]
clr: Sequence[float]
- extra_pos_1: Optional[Tuple[float, float]]
- extra_pos_2: Optional[Tuple[float, float]]
+ extra_pos_1: Optional[tuple[float, float]]
+ extra_pos_2: Optional[tuple[float, float]]
if ba.app.iircade_mode:
xtweak = 0.2
ytweak = 0.2
diff --git a/assets/src/ba_data/python/bastd/actor/image.py b/assets/src/ba_data/python/bastd/actor/image.py
index 2db08a1e..915ea44b 100644
--- a/assets/src/ba_data/python/bastd/actor/image.py
+++ b/assets/src/ba_data/python/bastd/actor/image.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Sequence, Union, Dict, Optional
+ from typing import Any, Sequence, Union, Optional
class Image(ba.Actor):
@@ -33,13 +33,13 @@ class Image(ba.Actor):
BOTTOM_CENTER = 'bottomCenter'
def __init__(self,
- texture: Union[ba.Texture, Dict[str, Any]],
- position: Tuple[float, float] = (0, 0),
+ texture: Union[ba.Texture, dict[str, Any]],
+ position: tuple[float, float] = (0, 0),
transition: Optional[Transition] = None,
transition_delay: float = 0.0,
attach: Attach = Attach.CENTER,
color: Sequence[float] = (1.0, 1.0, 1.0, 1.0),
- scale: Tuple[float, float] = (100.0, 100.0),
+ scale: tuple[float, float] = (100.0, 100.0),
transition_out_delay: float = None,
model_opaque: ba.Model = None,
model_transparent: ba.Model = None,
diff --git a/assets/src/ba_data/python/bastd/actor/playerspaz.py b/assets/src/ba_data/python/bastd/actor/playerspaz.py
index b77aa8a4..7969dc75 100644
--- a/assets/src/ba_data/python/bastd/actor/playerspaz.py
+++ b/assets/src/ba_data/python/bastd/actor/playerspaz.py
@@ -10,7 +10,7 @@ import ba
from bastd.actor.spaz import Spaz
if TYPE_CHECKING:
- from typing import Any, Sequence, Tuple, Optional, Type, Literal
+ from typing import Any, Sequence, Optional, Literal
PlayerType = TypeVar('PlayerType', bound=ba.Player)
TeamType = TypeVar('TeamType', bound=ba.Team)
@@ -65,7 +65,7 @@ class PlayerSpaz(Spaz):
powerups_expire=powerups_expire)
self.last_player_attacked_by: Optional[ba.Player] = None
self.last_attacked_time = 0.0
- self.last_attacked_type: Optional[Tuple[str, str]] = None
+ self.last_attacked_type: Optional[tuple[str, str]] = None
self.held_count = 0
self.last_player_held_by: Optional[ba.Player] = None
self._player = player
@@ -75,17 +75,17 @@ class PlayerSpaz(Spaz):
@overload
def getplayer(self,
- playertype: Type[PlayerType],
+ playertype: type[PlayerType],
doraise: Literal[False] = False) -> Optional[PlayerType]:
...
@overload
- def getplayer(self, playertype: Type[PlayerType],
+ def getplayer(self, playertype: type[PlayerType],
doraise: Literal[True]) -> PlayerType:
...
def getplayer(self,
- playertype: Type[PlayerType],
+ playertype: type[PlayerType],
doraise: bool = False) -> Optional[PlayerType]:
"""Get the ba.Player associated with this Spaz.
diff --git a/assets/src/ba_data/python/bastd/actor/powerupbox.py b/assets/src/ba_data/python/bastd/actor/powerupbox.py
index aac89f07..bed2de5d 100644
--- a/assets/src/ba_data/python/bastd/actor/powerupbox.py
+++ b/assets/src/ba_data/python/bastd/actor/powerupbox.py
@@ -11,7 +11,7 @@ import ba
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import List, Any, Optional, Sequence
+ from typing import Any, Optional, Sequence
DEFAULT_POWERUP_INTERVAL = 8.0
@@ -133,14 +133,14 @@ class PowerupBoxFactory:
actions=('impact_sound', self.drop_sound, 0.5, 0.1),
)
- self._powerupdist: List[str] = []
+ self._powerupdist: list[str] = []
for powerup, freq in get_default_powerup_distribution():
for _i in range(int(freq)):
self._powerupdist.append(powerup)
def get_random_powerup_type(self,
forcetype: str = None,
- excludetypes: List[str] = None) -> str:
+ excludetypes: list[str] = None) -> str:
"""Returns a random powerup type (string).
See ba.Powerup.poweruptype for available type values.
diff --git a/assets/src/ba_data/python/bastd/actor/respawnicon.py b/assets/src/ba_data/python/bastd/actor/respawnicon.py
index 504a8e66..66c8bf16 100644
--- a/assets/src/ba_data/python/bastd/actor/respawnicon.py
+++ b/assets/src/ba_data/python/bastd/actor/respawnicon.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Optional, Dict, Tuple
+ from typing import Optional
class RespawnIcon:
@@ -116,7 +116,7 @@ class RespawnIcon:
"""Is this icon still visible?"""
return self._visible
- def _get_context(self, player: ba.Player) -> Tuple[bool, float, Dict]:
+ def _get_context(self, player: ba.Player) -> tuple[bool, float, dict]:
"""Return info on where we should be shown and stored."""
activity = ba.getactivity()
diff --git a/assets/src/ba_data/python/bastd/actor/scoreboard.py b/assets/src/ba_data/python/bastd/actor/scoreboard.py
index 54e13129..8432946d 100644
--- a/assets/src/ba_data/python/bastd/actor/scoreboard.py
+++ b/assets/src/ba_data/python/bastd/actor/scoreboard.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Sequence, Dict, Union
+ from typing import Any, Optional, Sequence, Union
class _Entry:
@@ -334,7 +334,7 @@ class Scoreboard:
show up on boards if provided.
"""
self._flat_tex = ba.gettexture('null')
- self._entries: Dict[int, _Entry] = {}
+ self._entries: dict[int, _Entry] = {}
self._label = label
self.score_split = score_split
diff --git a/assets/src/ba_data/python/bastd/actor/spaz.py b/assets/src/ba_data/python/bastd/actor/spaz.py
index 064b90b0..45931bb1 100644
--- a/assets/src/ba_data/python/bastd/actor/spaz.py
+++ b/assets/src/ba_data/python/bastd/actor/spaz.py
@@ -15,8 +15,7 @@ from bastd.actor.spazfactory import SpazFactory
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import (Any, Sequence, Optional, Dict, List, Union, Callable,
- Tuple, Set)
+ from typing import Any, Sequence, Optional, Union, Callable
from bastd.actor.spazfactory import SpazFactory
POWERUP_WEAR_OFF_TIME = 20000
@@ -104,7 +103,7 @@ class Spaz(ba.Actor):
self._hockey = activity.map.is_hockey
else:
self._hockey = False
- self._punched_nodes: Set[ba.Node] = set()
+ self._punched_nodes: set[ba.Node] = set()
self._cursed = False
self._connected_to_player: Optional[ba.Player] = None
materials = [
@@ -203,9 +202,9 @@ class Spaz(ba.Actor):
self.last_run_time_ms = -9999
self._last_run_value = 0.0
self.last_bomb_time_ms = -9999
- self._turbo_filter_times: Dict[str, int] = {}
+ self._turbo_filter_times: dict[str, int] = {}
self._turbo_filter_time_bucket = 0
- self._turbo_filter_counts: Dict[str, int] = {}
+ self._turbo_filter_counts: dict[str, int] = {}
self.frozen = False
self.shattered = False
self._last_hit_time: Optional[int] = None
@@ -213,7 +212,7 @@ class Spaz(ba.Actor):
self._bomb_held = False
if self.default_shields:
self.equip_shields()
- self._dropped_bomb_callbacks: List[Callable[[Spaz, ba.Actor],
+ self._dropped_bomb_callbacks: list[Callable[[Spaz, ba.Actor],
Any]] = []
self._score_text: Optional[ba.Node] = None
@@ -561,7 +560,7 @@ class Spaz(ba.Actor):
def on_punched(self, damage: int) -> None:
"""Called when this spaz gets punched."""
- def get_death_points(self, how: ba.DeathType) -> Tuple[int, int]:
+ def get_death_points(self, how: ba.DeathType) -> tuple[int, int]:
"""Get the points awarded for killing this spaz."""
del how # Unused.
num_hits = float(max(1, self._num_times_hit))
diff --git a/assets/src/ba_data/python/bastd/actor/spazappearance.py b/assets/src/ba_data/python/bastd/actor/spazappearance.py
index 166b1f84..bc229407 100644
--- a/assets/src/ba_data/python/bastd/actor/spazappearance.py
+++ b/assets/src/ba_data/python/bastd/actor/spazappearance.py
@@ -9,10 +9,10 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import List, Optional, Tuple
+ from typing import Optional
-def get_appearances(include_locked: bool = False) -> List[str]:
+def get_appearances(include_locked: bool = False) -> list[str]:
"""Get the list of available spaz appearances."""
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
@@ -104,15 +104,15 @@ class Appearance:
self.upper_leg_model = ''
self.lower_leg_model = ''
self.toes_model = ''
- self.jump_sounds: List[str] = []
- self.attack_sounds: List[str] = []
- self.impact_sounds: List[str] = []
- self.death_sounds: List[str] = []
- self.pickup_sounds: List[str] = []
- self.fall_sounds: List[str] = []
+ self.jump_sounds: list[str] = []
+ self.attack_sounds: list[str] = []
+ self.impact_sounds: list[str] = []
+ self.death_sounds: list[str] = []
+ self.pickup_sounds: list[str] = []
+ self.fall_sounds: list[str] = []
self.style = 'spaz'
- self.default_color: Optional[Tuple[float, float, float]] = None
- self.default_highlight: Optional[Tuple[float, float, float]] = None
+ self.default_color: Optional[tuple[float, float, float]] = None
+ self.default_highlight: Optional[tuple[float, float, float]] = None
def register_appearances() -> None:
diff --git a/assets/src/ba_data/python/bastd/actor/spazbot.py b/assets/src/ba_data/python/bastd/actor/spazbot.py
index ac950ef6..9d4d92ec 100644
--- a/assets/src/ba_data/python/bastd/actor/spazbot.py
+++ b/assets/src/ba_data/python/bastd/actor/spazbot.py
@@ -13,7 +13,7 @@ import ba
from bastd.actor.spaz import Spaz
if TYPE_CHECKING:
- from typing import Any, Optional, List, Tuple, Sequence, Type, Callable
+ from typing import Any, Optional, Sequence, Callable
from bastd.actor.flag import Flag
LITE_BOT_COLOR = (1.2, 0.9, 0.2)
@@ -125,7 +125,7 @@ class SpazBot(Spaz):
self._map = weakref.ref(activity.map)
self.last_player_attacked_by: Optional[ba.Player] = None
self.last_attacked_time = 0.0
- self.last_attacked_type: Optional[Tuple[str, str]] = None
+ self.last_attacked_type: Optional[tuple[str, str]] = None
self.target_point_default: Optional[ba.Vec3] = None
self.held_count = 0
self.last_player_held_by: Optional[ba.Player] = None
@@ -141,7 +141,7 @@ class SpazBot(Spaz):
self._throw_release_time: Optional[float] = None
self._have_dropped_throw_bomb: Optional[bool] = None
- self._player_pts: Optional[List[Tuple[ba.Vec3, ba.Vec3]]] = None
+ self._player_pts: Optional[list[tuple[ba.Vec3, ba.Vec3]]] = None
# These cooldowns didn't exist when these bots were calibrated,
# so take them out of the equation.
@@ -161,7 +161,7 @@ class SpazBot(Spaz):
return mval
def _get_target_player_pt(
- self) -> Tuple[Optional[ba.Vec3], Optional[ba.Vec3]]:
+ self) -> tuple[Optional[ba.Vec3], Optional[ba.Vec3]]:
"""Returns the position and velocity of our target.
Both values will be None in the case of no target.
@@ -189,7 +189,7 @@ class SpazBot(Spaz):
ba.Vec3(closest_vel[0], closest_vel[1], closest_vel[2]))
return None, None
- def set_player_points(self, pts: List[Tuple[ba.Vec3, ba.Vec3]]) -> None:
+ def set_player_points(self, pts: list[tuple[ba.Vec3, ba.Vec3]]) -> None:
"""Provide the spaz-bot with the locations of its enemies."""
self._player_pts = pts
@@ -882,7 +882,7 @@ class SpazBotSet:
self._bot_list_count = 5
self._bot_add_list = 0
self._bot_update_list = 0
- self._bot_lists: List[List[SpazBot]] = [
+ self._bot_lists: list[list[SpazBot]] = [
[] for _ in range(self._bot_list_count)
]
self._spawn_sound = ba.getsound('spawn')
@@ -894,7 +894,7 @@ class SpazBotSet:
self.clear()
def spawn_bot(self,
- bot_type: Type[SpazBot],
+ bot_type: type[SpazBot],
pos: Sequence[float],
spawn_time: float = 3.0,
on_spawn_call: Callable[[SpazBot], Any] = None) -> None:
@@ -907,7 +907,7 @@ class SpazBotSet:
on_spawn_call))
self._spawning_count += 1
- def _spawn_bot(self, bot_type: Type[SpazBot], pos: Sequence[float],
+ def _spawn_bot(self, bot_type: type[SpazBot], pos: Sequence[float],
on_spawn_call: Optional[Callable[[SpazBot], Any]]) -> None:
spaz = bot_type()
ba.playsound(self._spawn_sound, position=pos)
@@ -925,9 +925,9 @@ class SpazBotSet:
return (self._spawning_count > 0
or any(any(b.is_alive() for b in l) for l in self._bot_lists))
- def get_living_bots(self) -> List[SpazBot]:
+ def get_living_bots(self) -> list[SpazBot]:
"""Get the living bots in the set."""
- bots: List[SpazBot] = []
+ bots: list[SpazBot] = []
for botlist in self._bot_lists:
for bot in botlist:
if bot.is_alive():
diff --git a/assets/src/ba_data/python/bastd/actor/spazfactory.py b/assets/src/ba_data/python/bastd/actor/spazfactory.py
index 7363ec43..ed06d72e 100644
--- a/assets/src/ba_data/python/bastd/actor/spazfactory.py
+++ b/assets/src/ba_data/python/bastd/actor/spazfactory.py
@@ -11,7 +11,7 @@ from bastd.gameutils import SharedObjects
import _ba
if TYPE_CHECKING:
- from typing import Any, Dict
+ from typing import Any
class SpazFactory:
@@ -206,7 +206,7 @@ class SpazFactory:
actions=('modify_node_collision', 'collide', False),
)
- self.spaz_media: Dict[str, Any] = {}
+ self.spaz_media: dict[str, Any] = {}
# Lets load some basic rules.
# (allows them to be tweaked from the master server)
@@ -227,7 +227,7 @@ class SpazFactory:
"""
return ba.app.spaz_appearances[character].style
- def get_media(self, character: str) -> Dict[str, Any]:
+ def get_media(self, character: str) -> dict[str, Any]:
"""Return the set of media used by this variant of spaz."""
char = ba.app.spaz_appearances[character]
if character not in self.spaz_media:
diff --git a/assets/src/ba_data/python/bastd/actor/text.py b/assets/src/ba_data/python/bastd/actor/text.py
index 96e3be58..7b84d0d5 100644
--- a/assets/src/ba_data/python/bastd/actor/text.py
+++ b/assets/src/ba_data/python/bastd/actor/text.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Union, Tuple, Sequence, Optional
+ from typing import Any, Union, Sequence, Optional
class Text(ba.Actor):
@@ -50,7 +50,7 @@ class Text(ba.Actor):
def __init__(self,
text: Union[str, ba.Lstr],
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
h_align: HAlign = HAlign.LEFT,
v_align: VAlign = VAlign.NONE,
color: Sequence[float] = (1.0, 1.0, 1.0, 1.0),
diff --git a/assets/src/ba_data/python/bastd/actor/zoomtext.py b/assets/src/ba_data/python/bastd/actor/zoomtext.py
index 4c0b2c9c..5288bb66 100644
--- a/assets/src/ba_data/python/bastd/actor/zoomtext.py
+++ b/assets/src/ba_data/python/bastd/actor/zoomtext.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Union, Tuple, Sequence
+ from typing import Any, Union, Sequence
class ZoomText(ba.Actor):
@@ -23,8 +23,8 @@ class ZoomText(ba.Actor):
def __init__(self,
text: Union[str, ba.Lstr],
- position: Tuple[float, float] = (0.0, 0.0),
- shiftposition: Tuple[float, float] = None,
+ position: tuple[float, float] = (0.0, 0.0),
+ shiftposition: tuple[float, float] = None,
shiftdelay: float = None,
lifespan: float = None,
flash: bool = True,
@@ -171,7 +171,7 @@ class ZoomText(ba.Actor):
return None
return super().handlemessage(msg)
- def _jitter(self, position: Tuple[float, float],
+ def _jitter(self, position: tuple[float, float],
jitter_amount: float) -> None:
if not self.node:
return
@@ -187,8 +187,8 @@ class ZoomText(ba.Actor):
ba.animate(cmb, attr, keys, loop=True)
cmb.connectattr('output', self.node, 'position')
- def _shift(self, position1: Tuple[float, float],
- position2: Tuple[float, float]) -> None:
+ def _shift(self, position1: tuple[float, float],
+ position2: tuple[float, float]) -> None:
if not self.node:
return
cmb = ba.newnode('combine', owner=self.node, attrs={'size': 2})
diff --git a/assets/src/ba_data/python/bastd/appdelegate.py b/assets/src/ba_data/python/bastd/appdelegate.py
index 9ae96c62..6a7d2776 100644
--- a/assets/src/ba_data/python/bastd/appdelegate.py
+++ b/assets/src/ba_data/python/bastd/appdelegate.py
@@ -8,15 +8,15 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Type, Any, Dict, Callable, Optional
+ from typing import Any, Callable, Optional
class AppDelegate(ba.AppDelegate):
"""Defines handlers for high level app functionality."""
def create_default_game_settings_ui(
- self, gameclass: Type[ba.GameActivity],
- sessiontype: Type[ba.Session], settings: Optional[dict],
+ self, gameclass: type[ba.GameActivity],
+ sessiontype: type[ba.Session], settings: Optional[dict],
completion_call: Callable[[Optional[dict]], Any]) -> None:
"""(internal)"""
diff --git a/assets/src/ba_data/python/bastd/game/assault.py b/assets/src/ba_data/python/bastd/game/assault.py
index 44dc8ca0..6389b4bd 100644
--- a/assets/src/ba_data/python/bastd/game/assault.py
+++ b/assets/src/ba_data/python/bastd/game/assault.py
@@ -17,7 +17,7 @@ from bastd.actor.scoreboard import Scoreboard
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Sequence, Union
+ from typing import Any, Sequence, Union
class Player(ba.Player['Team']):
@@ -72,11 +72,11 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]):
]
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('team_flag')
def __init__(self, settings: dict):
@@ -84,7 +84,7 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]):
self._scoreboard = Scoreboard()
self._last_score_time = 0.0
self._score_sound = ba.getsound('score')
- self._base_region_materials: Dict[int, ba.Material] = {}
+ self._base_region_materials: dict[int, ba.Material] = {}
self._epic_mode = bool(settings['Epic Mode'])
self._score_to_win = int(settings['Score to Win'])
self._time_limit = float(settings['Time Limit'])
diff --git a/assets/src/ba_data/python/bastd/game/capturetheflag.py b/assets/src/ba_data/python/bastd/game/capturetheflag.py
index 638d2d3b..0e910620 100644
--- a/assets/src/ba_data/python/bastd/game/capturetheflag.py
+++ b/assets/src/ba_data/python/bastd/game/capturetheflag.py
@@ -16,7 +16,7 @@ from bastd.actor.flag import (FlagFactory, Flag, FlagPickedUpMessage,
FlagDroppedMessage, FlagDiedMessage)
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Sequence, Union, Optional
+ from typing import Any, Sequence, Union, Optional
class CTFFlag(Flag):
@@ -132,11 +132,11 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
]
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('team_flag')
def __init__(self, settings: dict):
@@ -491,10 +491,10 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]):
player = spaz.getplayer(Player, True)
team: Team = player.team
player.touching_own_flag = 0
- no_physical_mats: List[ba.Material] = [
+ no_physical_mats: list[ba.Material] = [
team.spaz_material_no_flag_physical
]
- no_collide_mats: List[ba.Material] = [
+ no_collide_mats: list[ba.Material] = [
team.spaz_material_no_flag_collide
]
diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py
index 465dec97..9f5e3315 100644
--- a/assets/src/ba_data/python/bastd/game/chosenone.py
+++ b/assets/src/ba_data/python/bastd/game/chosenone.py
@@ -16,7 +16,7 @@ from bastd.actor.scoreboard import Scoreboard
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Optional, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
class Player(ba.Player['Team']):
@@ -81,7 +81,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
scoreconfig = ba.ScoreConfig(label='Time Held')
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('keep_away')
def __init__(self, settings: dict):
@@ -89,7 +89,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]):
self._scoreboard = Scoreboard()
self._chosen_one_player: Optional[Player] = None
self._swipsound = ba.getsound('swip')
- self._countdownsounds: Dict[int, ba.Sound] = {
+ self._countdownsounds: dict[int, ba.Sound] = {
10: ba.getsound('announceTen'),
9: ba.getsound('announceNine'),
8: ba.getsound('announceEight'),
diff --git a/assets/src/ba_data/python/bastd/game/conquest.py b/assets/src/ba_data/python/bastd/game/conquest.py
index 7f41819b..93bb279d 100644
--- a/assets/src/ba_data/python/bastd/game/conquest.py
+++ b/assets/src/ba_data/python/bastd/game/conquest.py
@@ -17,7 +17,7 @@ from bastd.actor.playerspaz import PlayerSpaz
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Optional, Type, List, Dict, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
from bastd.actor.respawnicon import RespawnIcon
@@ -105,11 +105,11 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
]
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('conquest')
def __init__(self, settings: dict):
@@ -119,7 +119,7 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]):
self._score_sound = ba.getsound('score')
self._swipsound = ba.getsound('swip')
self._extraflagmat = ba.Material()
- self._flags: List[ConquestFlag] = []
+ self._flags: list[ConquestFlag] = []
self._epic_mode = bool(settings['Epic Mode'])
self._time_limit = float(settings['Time Limit'])
diff --git a/assets/src/ba_data/python/bastd/game/deathmatch.py b/assets/src/ba_data/python/bastd/game/deathmatch.py
index f91c7aff..ddfa0d46 100644
--- a/assets/src/ba_data/python/bastd/game/deathmatch.py
+++ b/assets/src/ba_data/python/bastd/game/deathmatch.py
@@ -14,7 +14,7 @@ from bastd.actor.playerspaz import PlayerSpaz
from bastd.actor.scoreboard import Scoreboard
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional
+ from typing import Any, Union, Sequence, Optional
class Player(ba.Player['Team']):
@@ -40,7 +40,7 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]):
@classmethod
def get_available_settings(
- cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
+ cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
settings = [
ba.IntSetting(
'Kills to Win Per Player',
@@ -86,12 +86,12 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]):
return settings
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('melee')
def __init__(self, settings: dict):
diff --git a/assets/src/ba_data/python/bastd/game/easteregghunt.py b/assets/src/ba_data/python/bastd/game/easteregghunt.py
index 2c5b9b02..d7f3655b 100644
--- a/assets/src/ba_data/python/bastd/game/easteregghunt.py
+++ b/assets/src/ba_data/python/bastd/game/easteregghunt.py
@@ -20,7 +20,7 @@ from bastd.actor.respawnicon import RespawnIcon
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Type, Dict, List, Tuple, Optional
+ from typing import Any, Optional
class Player(ba.Player['Team']):
@@ -49,12 +49,12 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
# We're currently hard-coded for one map.
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ['Tower D']
# We support teams, free-for-all, and co-op sessions.
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.CoopSession)
or issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@@ -75,7 +75,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
self.egg_material.add_actions(
conditions=('they_have_material', shared.player_material),
actions=(('call', 'at_connect', self._on_egg_player_collide), ))
- self._eggs: List[Egg] = []
+ self._eggs: list[Egg] = []
self._update_timer: Optional[ba.Timer] = None
self._countdown: Optional[OnScreenCountdown] = None
self._bots: Optional[SpazBotSet] = None
@@ -224,7 +224,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]):
class Egg(ba.Actor):
"""A lovely egg that can be picked up for points."""
- def __init__(self, position: Tuple[float, float, float] = (0.0, 1.0, 0.0)):
+ def __init__(self, position: tuple[float, float, float] = (0.0, 1.0, 0.0)):
super().__init__()
activity = self.activity
assert isinstance(activity, EasterEggHuntGame)
diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py
index dd95a469..a0df7705 100644
--- a/assets/src/ba_data/python/bastd/game/elimination.py
+++ b/assets/src/ba_data/python/bastd/game/elimination.py
@@ -14,8 +14,7 @@ from bastd.actor.spazfactory import SpazFactory
from bastd.actor.scoreboard import Scoreboard
if TYPE_CHECKING:
- from typing import (Any, Tuple, Dict, Type, List, Sequence, Optional,
- Union)
+ from typing import Any, Sequence, Optional, Union
class Icon(ba.Actor):
@@ -23,7 +22,7 @@ class Icon(ba.Actor):
def __init__(self,
player: Player,
- position: Tuple[float, float],
+ position: tuple[float, float],
scale: float,
show_lives: bool = True,
show_death: bool = True,
@@ -83,7 +82,7 @@ class Icon(ba.Actor):
})
self.set_position_and_scale(position, scale)
- def set_position_and_scale(self, position: Tuple[float, float],
+ def set_position_and_scale(self, position: tuple[float, float],
scale: float) -> None:
"""(Re)position the icon."""
assert self.node
@@ -156,7 +155,7 @@ class Player(ba.Player['Team']):
def __init__(self) -> None:
self.lives = 0
- self.icons: List[Icon] = []
+ self.icons: list[Icon] = []
class Team(ba.Team[Player]):
@@ -164,7 +163,7 @@ class Team(ba.Team[Player]):
def __init__(self) -> None:
self.survival_seconds: Optional[int] = None
- self.spawn_order: List[Player] = []
+ self.spawn_order: list[Player] = []
# ba_meta export game
@@ -183,7 +182,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
@classmethod
def get_available_settings(
- cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
+ cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
settings = [
ba.IntSetting(
'Lives Per Player',
@@ -224,12 +223,12 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
return settings
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('melee')
def __init__(self, settings: dict):
@@ -421,7 +420,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
if living_player:
assert living_player_pos is not None
player_pos = ba.Vec3(living_player_pos)
- points: List[Tuple[float, ba.Vec3]] = []
+ points: list[tuple[float, ba.Vec3]] = []
for team in self.teams:
start_pos = ba.Vec3(self.map.get_start_position(team.id))
points.append(
@@ -539,7 +538,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]):
if len(self._get_living_teams()) < 2:
self._round_end_timer = ba.Timer(0.5, self.end_game)
- def _get_living_teams(self) -> List[Team]:
+ def _get_living_teams(self) -> list[Team]:
return [
team for team in self.teams
if len(team.players) > 0 and any(player.lives > 0
diff --git a/assets/src/ba_data/python/bastd/game/football.py b/assets/src/ba_data/python/bastd/game/football.py
index 8773e272..bcddc8bc 100644
--- a/assets/src/ba_data/python/bastd/game/football.py
+++ b/assets/src/ba_data/python/bastd/game/football.py
@@ -26,7 +26,7 @@ from bastd.actor.spazbot import (SpazBotDiedMessage, SpazBotPunchedMessage,
StickyBot, ExplodeyBot)
if TYPE_CHECKING:
- from typing import Any, List, Type, Dict, Sequence, Optional, Union
+ from typing import Any, Sequence, Optional, Union
from bastd.actor.spaz import Spaz
from bastd.actor.spazbot import SpazBot
@@ -110,12 +110,12 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]):
default_music = ba.MusicType.FOOTBALL
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
# We only support two-team play.
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('football')
def __init__(self, settings: dict):
@@ -137,7 +137,7 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]):
('call', 'at_connect', self._handle_score),
))
self._flag_spawn_pos: Optional[Sequence[float]] = None
- self._score_regions: List[ba.NodeActor] = []
+ self._score_regions: list[ba.NodeActor] = []
self._flag: Optional[FootballFlag] = None
self._flag_respawn_timer: Optional[ba.Timer] = None
self._flag_respawn_light: Optional[ba.NodeActor] = None
@@ -377,12 +377,12 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
self._player_has_punched = False
self._scoreboard: Optional[Scoreboard] = None
self._flag_spawn_pos: Optional[Sequence[float]] = None
- self._score_regions: List[ba.NodeActor] = []
- self._exclude_powerups: List[str] = []
+ self._score_regions: list[ba.NodeActor] = []
+ self._exclude_powerups: list[str] = []
self._have_tnt = False
- self._bot_types_initial: Optional[List[Type[SpazBot]]] = None
- self._bot_types_7: Optional[List[Type[SpazBot]]] = None
- self._bot_types_14: Optional[List[Type[SpazBot]]] = None
+ self._bot_types_initial: Optional[list[type[SpazBot]]] = None
+ self._bot_types_7: Optional[list[type[SpazBot]]] = None
+ self._bot_types_14: Optional[list[type[SpazBot]]] = None
self._bot_team: Optional[Team] = None
self._starttime_ms: Optional[int] = None
self._time_text: Optional[ba.NodeActor] = None
@@ -436,9 +436,9 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
controlsguide.ControlsGuide(delay=3.0, lifespan=10.0,
bright=True).autoretain()
assert self.initialplayerinfos is not None
- abot: Type[SpazBot]
- bbot: Type[SpazBot]
- cbot: Type[SpazBot]
+ abot: type[SpazBot]
+ bbot: type[SpazBot]
+ cbot: type[SpazBot]
if self._preset in ['rookie', 'rookie_easy']:
self._exclude_powerups = ['curse']
self._have_tnt = False
@@ -467,7 +467,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
self._bot_types_initial = [ChargerBot] * len(
self.initialplayerinfos)
abot = (BrawlerBot if self._preset == 'pro' else BrawlerBotLite)
- typed_bot_list: List[Type[SpazBot]] = []
+ typed_bot_list: list[type[SpazBot]] = []
self._bot_types_7 = (
typed_bot_list + [abot] + [BomberBot] *
(1 if len(self.initialplayerinfos) < 3 else 2))
@@ -479,7 +479,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
self._have_tnt = True
abot = (BrawlerBotPro if self._preset == 'uber' else BrawlerBot)
bbot = (TriggerBotPro if self._preset == 'uber' else TriggerBot)
- typed_bot_list_2: List[Type[SpazBot]] = []
+ typed_bot_list_2: list[type[SpazBot]] = []
self._bot_types_initial = (typed_bot_list_2 + [StickyBot] +
[abot] * len(self.initialplayerinfos))
self._bot_types_7 = (
@@ -542,7 +542,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
for bottype in self._bot_types_initial:
self._spawn_bot(bottype)
- def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
+ def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
self._show_standard_scores_to_beat_ui(scores)
def _on_bot_spawn(self, spaz: SpazBot) -> None:
@@ -550,7 +550,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]):
spaz.target_point_default = ba.Vec3(0, 0, 0)
def _spawn_bot(self,
- spaz_type: Type[SpazBot],
+ spaz_type: type[SpazBot],
immediate: bool = False) -> None:
assert self._bot_team is not None
pos = self.map.get_start_position(self._bot_team.id)
diff --git a/assets/src/ba_data/python/bastd/game/hockey.py b/assets/src/ba_data/python/bastd/game/hockey.py
index 0e988c05..7f47bf78 100644
--- a/assets/src/ba_data/python/bastd/game/hockey.py
+++ b/assets/src/ba_data/python/bastd/game/hockey.py
@@ -16,7 +16,7 @@ from bastd.actor.powerupbox import PowerupBoxFactory
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, Sequence, Dict, Type, List, Optional, Union
+ from typing import Any, Sequence, Optional, Union
class PuckDiedMessage:
@@ -36,7 +36,7 @@ class Puck(ba.Actor):
# Spawn just above the provided point.
self._spawn_pos = (position[0], position[1] + 1.0, position[2])
- self.last_players_to_touch: Dict[int, Player] = {}
+ self.last_players_to_touch: dict[int, Player] = {}
self.scored = False
assert activity is not None
assert isinstance(activity, HockeyGame)
@@ -141,11 +141,11 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]):
default_music = ba.MusicType.HOCKEY
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.DualTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('hockey')
def __init__(self, settings: dict):
@@ -199,7 +199,7 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]):
True), ('modify_part_collision', 'physical', False),
('call', 'at_connect', self._handle_score)))
self._puck_spawn_pos: Optional[Sequence[float]] = None
- self._score_regions: Optional[List[ba.NodeActor]] = None
+ self._score_regions: Optional[list[ba.NodeActor]] = None
self._puck: Optional[Puck] = None
self._score_to_win = int(settings['Score to Win'])
self._time_limit = float(settings['Time Limit'])
diff --git a/assets/src/ba_data/python/bastd/game/keepaway.py b/assets/src/ba_data/python/bastd/game/keepaway.py
index 7810b2e6..263326a7 100644
--- a/assets/src/ba_data/python/bastd/game/keepaway.py
+++ b/assets/src/ba_data/python/bastd/game/keepaway.py
@@ -17,7 +17,7 @@ from bastd.actor.flag import (Flag, FlagDroppedMessage, FlagDiedMessage,
FlagPickedUpMessage)
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Optional, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
class FlagState(Enum):
@@ -81,12 +81,12 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]):
default_music = ba.MusicType.KEEP_AWAY
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession))
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('keep_away')
def __init__(self, settings: dict):
@@ -108,7 +108,7 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]):
}
self._flag_spawn_pos: Optional[Sequence[float]] = None
self._update_timer: Optional[ba.Timer] = None
- self._holding_players: List[Player] = []
+ self._holding_players: list[Player] = []
self._flag_state: Optional[FlagState] = None
self._flag_light: Optional[ba.Node] = None
self._scoring_team: Optional[Team] = None
diff --git a/assets/src/ba_data/python/bastd/game/kingofthehill.py b/assets/src/ba_data/python/bastd/game/kingofthehill.py
index 66726261..9194f5ac 100644
--- a/assets/src/ba_data/python/bastd/game/kingofthehill.py
+++ b/assets/src/ba_data/python/bastd/game/kingofthehill.py
@@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from weakref import ReferenceType
- from typing import Any, Type, List, Dict, Optional, Sequence, Union
+ from typing import Any, Optional, Sequence, Union
class FlagState(Enum):
@@ -84,11 +83,11 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]):
scoreconfig = ba.ScoreConfig(label='Time Held')
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.MultiTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('king_of_the_hill')
def __init__(self, settings: dict):
@@ -113,7 +112,7 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]):
self._flag_state: Optional[FlagState] = None
self._flag: Optional[Flag] = None
self._flag_light: Optional[ba.Node] = None
- self._scoring_team: Optional[ReferenceType[Team]] = None
+ self._scoring_team: Optional[weakref.ref[Team]] = None
self._hold_time = int(settings['Hold Time'])
self._time_limit = float(settings['Time Limit'])
self._flag_region_material = ba.Material()
diff --git a/assets/src/ba_data/python/bastd/game/meteorshower.py b/assets/src/ba_data/python/bastd/game/meteorshower.py
index 32c62c0d..e346160e 100644
--- a/assets/src/ba_data/python/bastd/game/meteorshower.py
+++ b/assets/src/ba_data/python/bastd/game/meteorshower.py
@@ -15,7 +15,7 @@ from bastd.actor.bomb import Bomb
from bastd.actor.onscreentimer import OnScreenTimer
if TYPE_CHECKING:
- from typing import Any, Sequence, Optional, List, Dict, Type, Type
+ from typing import Any, Sequence, Optional
class Player(ba.Player['Team']):
@@ -50,12 +50,12 @@ class MeteorShowerGame(ba.TeamGameActivity[Player, Team]):
# We're currently hard-coded for one map.
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ['Rampage']
# We support teams, free-for-all, and co-op sessions.
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return (issubclass(sessiontype, ba.DualTeamSession)
or issubclass(sessiontype, ba.FreeForAllSession)
or issubclass(sessiontype, ba.CoopSession))
diff --git a/assets/src/ba_data/python/bastd/game/ninjafight.py b/assets/src/ba_data/python/bastd/game/ninjafight.py
index 37ba0215..13b6341f 100644
--- a/assets/src/ba_data/python/bastd/game/ninjafight.py
+++ b/assets/src/ba_data/python/bastd/game/ninjafight.py
@@ -15,7 +15,7 @@ from bastd.actor.spazbot import SpazBotSet, ChargerBot, SpazBotDiedMessage
from bastd.actor.onscreentimer import OnScreenTimer
if TYPE_CHECKING:
- from typing import Any, Type, Dict, List, Optional
+ from typing import Any, Optional
class Player(ba.Player['Team']):
@@ -41,14 +41,14 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]):
default_music = ba.MusicType.TO_THE_DEATH
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
# For now we're hard-coding spawn positions and whatnot
# so we need to be sure to specify that we only support
# a specific map.
return ['Courtyard']
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
# We currently support Co-Op only.
return issubclass(sessiontype, ba.CoopSession)
diff --git a/assets/src/ba_data/python/bastd/game/onslaught.py b/assets/src/ba_data/python/bastd/game/onslaught.py
index 9b8efe85..d56f3fac 100644
--- a/assets/src/ba_data/python/bastd/game/onslaught.py
+++ b/assets/src/ba_data/python/bastd/game/onslaught.py
@@ -28,21 +28,21 @@ from bastd.actor.spazbot import (
TriggerBotProShielded, BrawlerBotPro, BomberBotProShielded)
if TYPE_CHECKING:
- from typing import Any, Type, Dict, Optional, List, Tuple, Union, Sequence
+ from typing import Any, Optional, Union, Sequence
from bastd.actor.spazbot import SpazBot
@dataclass
class Wave:
"""A wave of enemies."""
- entries: List[Union[Spawn, Spacing, Delay, None]]
+ entries: list[Union[Spawn, Spacing, Delay, None]]
base_angle: float = 0.0
@dataclass
class Spawn:
"""A bot spawn event in a wave."""
- bottype: Union[Type[SpazBot], str]
+ bottype: Union[type[SpazBot], str]
point: Optional[Point] = None
spacing: float = 5.0
@@ -123,7 +123,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
name = 'Onslaught'
description = 'Defeat all enemies.'
- tips: List[Union[str, ba.GameTip]] = [
+ tips: list[Union[str, ba.GameTip]] = [
'Hold any button to run.'
' (Trigger buttons work well if you have them)',
'Try tricking enemies into killing eachother or running off cliffs.',
@@ -179,8 +179,8 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
self._dingsound = ba.getsound('dingSmall')
self._dingsoundhigh = ba.getsound('dingSmallHigh')
self._have_tnt = False
- self._excluded_powerups: Optional[List[str]] = None
- self._waves: List[Wave] = []
+ self._excluded_powerups: Optional[list[str]] = None
+ self._waves: list[Wave] = []
self._tntspawner: Optional[TNTSpawner] = None
self._bots: Optional[SpazBotSet] = None
self._powerup_drop_timer: Optional[ba.Timer] = None
@@ -538,10 +538,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
self._bots = SpazBotSet()
ba.timer(4.0, self._start_updating_waves)
- def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
+ def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
self._show_standard_scores_to_beat_ui(scores)
- def _get_dist_grp_totals(self, grps: List[Any]) -> Tuple[int, int]:
+ def _get_dist_grp_totals(self, grps: list[Any]) -> tuple[int, int]:
totalpts = 0
totaldudes = 0
for grp in grps:
@@ -553,11 +553,11 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
def _get_distribution(self, target_points: int, min_dudes: int,
max_dudes: int, group_count: int,
- max_level: int) -> List[List[Tuple[int, int]]]:
+ max_level: int) -> list[list[tuple[int, int]]]:
"""Calculate a distribution of bad guys given some params."""
max_iterations = 10 + max_dudes * 2
- groups: List[List[Tuple[int, int]]] = []
+ groups: list[list[tuple[int, int]]] = []
for _g in range(group_count):
groups.append([])
types = [1]
@@ -599,9 +599,9 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
return groups
- def _add_dist_entry_if_possible(self, groups: List[List[Tuple[int, int]]],
+ def _add_dist_entry_if_possible(self, groups: list[list[tuple[int, int]]],
max_dudes: int, target_points: int,
- types: List[int]) -> int:
+ types: list[int]) -> int:
# See how much we're off our target by.
total_points, total_dudes = self._get_dist_grp_totals(groups)
diff = target_points - total_points
@@ -624,7 +624,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
return diff
def _delete_smallest_dist_entry(
- self, groups: List[List[Tuple[int, int]]]) -> None:
+ self, groups: list[list[tuple[int, int]]]) -> None:
smallest_value = 9999
smallest_entry = None
smallest_entry_group = None
@@ -639,7 +639,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
smallest_entry_group.remove(smallest_entry)
def _delete_biggest_dist_entry(
- self, groups: List[List[Tuple[int, int]]]) -> None:
+ self, groups: list[list[tuple[int, int]]]) -> None:
biggest_value = 9999
biggest_entry = None
biggest_entry_group = None
@@ -654,7 +654,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
biggest_entry_group.remove(biggest_entry)
def _delete_random_dist_entry(self,
- groups: List[List[Tuple[int, int]]]) -> None:
+ groups: list[list[tuple[int, int]]]) -> None:
entry_count = 0
for group in groups:
for _ in group:
@@ -1025,7 +1025,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
'text': wttxt
}))
- def _bot_levels_for_wave(self) -> List[List[Type[SpazBot]]]:
+ def _bot_levels_for_wave(self) -> list[list[type[SpazBot]]]:
level = self._wavenum
bot_types = [
BomberBot, BrawlerBot, TriggerBot, ChargerBot, BomberBotPro,
@@ -1068,10 +1068,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
return bot_levels
def _add_entries_for_distribution_group(
- self, group: List[Tuple[int, int]],
- bot_levels: List[List[Type[SpazBot]]],
- all_entries: List[Union[Spawn, Spacing, Delay, None]]) -> None:
- entries: List[Union[Spawn, Spacing, Delay, None]] = []
+ self, group: list[tuple[int, int]],
+ bot_levels: list[list[type[SpazBot]]],
+ all_entries: list[Union[Spawn, Spacing, Delay, None]]) -> None:
+ entries: list[Union[Spawn, Spacing, Delay, None]] = []
for entry in group:
bot_level = bot_levels[entry[0] - 1]
bot_type = bot_level[random.randrange(len(bot_level))]
@@ -1106,7 +1106,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
distribution = self._get_distribution(target_points, min_dudes,
max_dudes, group_count,
max_level)
- all_entries: List[Union[Spawn, Spacing, Delay, None]] = []
+ all_entries: list[Union[Spawn, Spacing, Delay, None]] = []
for group in distribution:
self._add_entries_for_distribution_group(group, bot_levels,
all_entries)
@@ -1125,7 +1125,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
def add_bot_at_point(self,
point: Point,
- spaz_type: Type[SpazBot],
+ spaz_type: type[SpazBot],
spawn_time: float = 1.0) -> None:
"""Add a new bot at a specified named point."""
if self._game_over:
@@ -1137,7 +1137,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]):
def add_bot_at_angle(self,
angle: float,
- spaz_type: Type[SpazBot],
+ spaz_type: type[SpazBot],
spawn_time: float = 1.0) -> None:
"""Add a new bot at a specified angle (for circular maps)."""
if self._game_over:
diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py
index 0a058ac4..c8e6f3d3 100644
--- a/assets/src/ba_data/python/bastd/game/race.py
+++ b/assets/src/ba_data/python/bastd/game/race.py
@@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import (Any, Type, Tuple, List, Sequence, Optional, Dict,
- Union)
+ from typing import Any, Sequence, Optional, Union
from bastd.actor.onscreentimer import OnScreenTimer
@@ -83,7 +82,7 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
@classmethod
def get_available_settings(
- cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]:
+ cls, sessiontype: type[ba.Session]) -> list[ba.Setting]:
settings = [
ba.IntSetting('Laps', min_value=1, default=3, increment=1),
ba.IntChoiceSetting(
@@ -129,11 +128,11 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
return settings
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
return issubclass(sessiontype, ba.MultiTeamSession)
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ba.getmaps('race')
def __init__(self, settings: dict):
@@ -148,15 +147,15 @@ class RaceGame(ba.TeamGameActivity[Player, Team]):
self._beep_1_sound = ba.getsound('raceBeep1')
self._beep_2_sound = ba.getsound('raceBeep2')
self.race_region_material: Optional[ba.Material] = None
- self._regions: List[RaceRegion] = []
+ self._regions: list[RaceRegion] = []
self._team_finish_pts: Optional[int] = None
self._time_text: Optional[ba.Actor] = None
self._timer: Optional[OnScreenTimer] = None
- self._race_mines: Optional[List[RaceMine]] = None
+ self._race_mines: Optional[list[RaceMine]] = None
self._race_mine_timer: Optional[ba.Timer] = None
self._scoreboard_timer: Optional[ba.Timer] = None
self._player_order_update_timer: Optional[ba.Timer] = None
- self._start_lights: Optional[List[ba.Node]] = None
+ self._start_lights: Optional[list[ba.Node]] = None
self._bomb_spawn_timer: Optional[ba.Timer] = None
self._laps = int(settings['Laps'])
self._entire_team_must_finish = bool(
diff --git a/assets/src/ba_data/python/bastd/game/runaround.py b/assets/src/ba_data/python/bastd/game/runaround.py
index 3607ecbd..e22d4581 100644
--- a/assets/src/ba_data/python/bastd/game/runaround.py
+++ b/assets/src/ba_data/python/bastd/game/runaround.py
@@ -26,7 +26,7 @@ from bastd.actor.spazbot import (
BomberBotPro, BrawlerBotPro)
if TYPE_CHECKING:
- from typing import Type, Any, List, Dict, Tuple, Sequence, Optional, Union
+ from typing import Any, Sequence, Optional, Union
class Preset(Enum):
@@ -51,7 +51,7 @@ class Point(Enum):
@dataclass
class Spawn:
"""Defines a bot spawn event."""
- type: Type[SpazBot]
+ type: type[SpazBot]
path: int = 0
point: Optional[Point] = None
@@ -65,7 +65,7 @@ class Spacing:
@dataclass
class Wave:
"""Defines a wave of enemies."""
- entries: List[Union[Spawn, Spacing, None]]
+ entries: list[Union[Spawn, Spacing, None]]
class Player(ba.Player['Team']):
@@ -93,7 +93,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
default_music = ba.MusicType.MARCHING
# How fast our various bot types walk.
- _bot_speed_map: Dict[Type[SpazBot], float] = {
+ _bot_speed_map: dict[type[SpazBot], float] = {
BomberBot: 0.48,
BomberBotPro: 0.48,
BomberBotProShielded: 0.48,
@@ -152,9 +152,9 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
self._score_region: Optional[ba.Actor] = None
self._dingsound = ba.getsound('dingSmall')
self._dingsoundhigh = ba.getsound('dingSmallHigh')
- self._exclude_powerups: Optional[List[str]] = None
+ self._exclude_powerups: Optional[list[str]] = None
self._have_tnt: Optional[bool] = None
- self._waves: Optional[List[Wave]] = None
+ self._waves: Optional[list[Wave]] = None
self._bots = SpazBotSet()
self._tntspawner: Optional[TNTSpawner] = None
self._lives_bg: Optional[ba.NodeActor] = None
@@ -571,7 +571,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
'playerinfos': self.initialplayerinfos
})
- def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
+ def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
self._show_standard_scores_to_beat_ui(scores)
def _update_waves(self) -> None:
@@ -722,14 +722,14 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
t_sec = 0.0
base_delay = 0.5
delay = 0.0
- bot_types: List[Union[Spawn, Spacing, None]] = []
+ bot_types: list[Union[Spawn, Spacing, None]] = []
if self._preset in {Preset.ENDLESS, Preset.ENDLESS_TOURNAMENT}:
level = self._wavenum
target_points = (level + 1) * 8.0
group_count = random.randint(1, 3)
- entries: List[Union[Spawn, Spacing, None]] = []
- spaz_types: List[Tuple[Type[SpazBot], float]] = []
+ entries: list[Union[Spawn, Spacing, None]] = []
+ spaz_types: list[tuple[type[SpazBot], float]] = []
if level < 6:
spaz_types += [(BomberBot, 5.0)]
if level < 10:
@@ -751,7 +751,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
] * (1 + (level - 7) // 3)
# Bot type, their effect on target points.
- defender_types: List[Tuple[Type[SpazBot], float]] = [
+ defender_types: list[tuple[type[SpazBot], float]] = [
(BomberBot, 0.9),
(BrawlerBot, 0.9),
(TriggerBot, 0.85),
@@ -815,8 +815,8 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
elif path == 6:
this_target_point_s *= 0.7
- def _add_defender(defender_type: Tuple[Type[SpazBot], float],
- pnt: Point) -> Tuple[float, Spawn]:
+ def _add_defender(defender_type: tuple[type[SpazBot], float],
+ pnt: Point) -> tuple[float, Spawn]:
# This is ok because we call it immediately.
# pylint: disable=cell-var-from-loop
return this_target_point_s * defender_type[1], Spawn(
@@ -979,7 +979,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
def add_bot_at_point(self,
point: Point,
- spaztype: Type[SpazBot],
+ spaztype: type[SpazBot],
path: int,
spawn_time: float = 0.1) -> None:
"""Add the given type bot with the given delay (in seconds)."""
@@ -1152,7 +1152,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]):
return super().handlemessage(msg)
return None
- def _get_bot_speed(self, bot_type: Type[SpazBot]) -> float:
+ def _get_bot_speed(self, bot_type: type[SpazBot]) -> float:
speed = self._bot_speed_map.get(bot_type)
if speed is None:
raise TypeError('Invalid bot type to _get_bot_speed(): ' +
diff --git a/assets/src/ba_data/python/bastd/game/targetpractice.py b/assets/src/ba_data/python/bastd/game/targetpractice.py
index 91d0e131..c6213065 100644
--- a/assets/src/ba_data/python/bastd/game/targetpractice.py
+++ b/assets/src/ba_data/python/bastd/game/targetpractice.py
@@ -17,7 +17,7 @@ from bastd.actor.bomb import Bomb
from bastd.actor.popuptext import PopupText
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Optional, Sequence
+ from typing import Any, Optional, Sequence
from bastd.actor.bomb import Blast
@@ -49,11 +49,11 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]):
default_music = ba.MusicType.FORWARD_MARCH
@classmethod
- def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]:
+ def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]:
return ['Doom Shroom']
@classmethod
- def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool:
+ def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool:
# We support any teams or versus sessions.
return (issubclass(sessiontype, ba.CoopSession)
or issubclass(sessiontype, ba.MultiTeamSession))
@@ -61,7 +61,7 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]):
def __init__(self, settings: dict):
super().__init__(settings)
self._scoreboard = Scoreboard()
- self._targets: List[Target] = []
+ self._targets: list[Target] = []
self._update_timer: Optional[ba.Timer] = None
self._countdown: Optional[OnScreenCountdown] = None
self._target_count = int(settings['Target Count'])
@@ -280,7 +280,7 @@ class Target(ba.Actor):
# Inform our activity that we were hit
self._hit = True
activity.handlemessage(self.TargetHitMessage())
- keys: Dict[float, Sequence[float]] = {
+ keys: dict[float, Sequence[float]] = {
0.0: (1.0, 0.0, 0.0),
0.049: (1.0, 0.0, 0.0),
0.05: (1.0, 1.0, 1.0),
diff --git a/assets/src/ba_data/python/bastd/game/thelaststand.py b/assets/src/ba_data/python/bastd/game/thelaststand.py
index 5a24cc4d..b4235915 100644
--- a/assets/src/ba_data/python/bastd/game/thelaststand.py
+++ b/assets/src/ba_data/python/bastd/game/thelaststand.py
@@ -21,7 +21,7 @@ from bastd.actor.spazbot import (SpazBotSet, SpazBotDiedMessage, BomberBot,
ChargerBot, StickyBot, ExplodeyBot)
if TYPE_CHECKING:
- from typing import Any, Dict, Type, List, Optional, Sequence
+ from typing import Any, Optional, Sequence
from bastd.actor.spazbot import SpazBot
@@ -70,7 +70,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
self._powerup_center = (0, 7, -4.14)
self._powerup_spread = (7, 2)
self._preset = str(settings.get('preset', 'default'))
- self._excludepowerups: List[str] = []
+ self._excludepowerups: list[str] = []
self._scoreboard: Optional[Scoreboard] = None
self._score = 0
self._bots = SpazBotSet()
@@ -185,11 +185,11 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
self._bot_update_interval = max(0.5, self._bot_update_interval * 0.98)
self._bot_update_timer = ba.Timer(self._bot_update_interval,
ba.WeakCall(self._update_bots))
- botspawnpts: List[Sequence[float]] = [[-5.0, 5.5, -4.14],
+ botspawnpts: list[Sequence[float]] = [[-5.0, 5.5, -4.14],
[0.0, 5.5, -4.14],
[5.0, 5.5, -4.14]]
dists = [0.0, 0.0, 0.0]
- playerpts: List[Sequence[float]] = []
+ playerpts: list[Sequence[float]] = []
for player in self.players:
try:
if player.is_alive():
@@ -220,7 +220,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
# Now go back through and see where this value falls.
total = 0
- bottype: Optional[Type[SpazBot]] = None
+ bottype: Optional[type[SpazBot]] = None
for spawntype, spawninfo in self._bot_spawn_types.items():
total += spawninfo.spawnrate
if randval <= total:
@@ -284,7 +284,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]):
else:
super().handlemessage(msg)
- def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None:
+ def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None:
self._show_standard_scores_to_beat_ui(scores)
def end_game(self) -> None:
diff --git a/assets/src/ba_data/python/bastd/gameutils.py b/assets/src/ba_data/python/bastd/gameutils.py
index 280e5742..01a913f6 100644
--- a/assets/src/ba_data/python/bastd/gameutils.py
+++ b/assets/src/ba_data/python/bastd/gameutils.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Sequence, Optional
+ from typing import Optional
class SharedObjects:
diff --git a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py
index a7e197d2..8b8ff490 100644
--- a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py
+++ b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py
@@ -12,13 +12,13 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Iterable, List, Tuple, Dict
+ from typing import Iterable
-def split(chars: Iterable[str], maxlen: int) -> List[List[str]]:
+def split(chars: Iterable[str], maxlen: int) -> list[list[str]]:
"""Returns char groups with a fixed number of elements"""
result = []
- shatter: List[str] = []
+ shatter: list[str] = []
for i in chars:
if len(shatter) < maxlen:
shatter.append(i)
@@ -32,7 +32,7 @@ def split(chars: Iterable[str], maxlen: int) -> List[List[str]]:
return result
-def generate_emojis(maxlen: int) -> List[List[str]]:
+def generate_emojis(maxlen: int) -> list[list[str]]:
"""Generates a lot of UTF8 emojis prepared for ba.Keyboard pages"""
all_emojis = split([chr(i) for i in range(0x1F601, 0x1F650)], maxlen)
all_emojis += split([chr(i) for i in range(0x2702, 0x27B1)], maxlen)
@@ -49,7 +49,7 @@ class EnglishKeyboard(ba.Keyboard):
('z', 'x', 'c', 'v', 'b', 'n', 'm')]
nums = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '/', ':',
';', '(', ')', '$', '&', '@', '"', '.', ',', '?', '!', '\'', '_')
- pages: Dict[str, Tuple[str, ...]] = {
+ pages: dict[str, tuple[str, ...]] = {
f'emoji{i}': tuple(page)
for i, page in enumerate(generate_emojis(len(nums)))
}
diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py
index 5889631a..e7f2db68 100644
--- a/assets/src/ba_data/python/bastd/mainmenu.py
+++ b/assets/src/ba_data/python/bastd/mainmenu.py
@@ -13,7 +13,7 @@ import ba
import _ba
if TYPE_CHECKING:
- from typing import Any, List, Optional
+ from typing import Any, Optional
# FIXME: Clean this up if I ever revisit it.
# pylint: disable=attribute-defined-outside-init
@@ -34,7 +34,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]):
random.seed(123)
self._logo_node: Optional[ba.Node] = None
self._custom_logo_tex_name: Optional[str] = None
- self._word_actors: List[ba.Actor] = []
+ self._word_actors: list[ba.Actor] = []
app = ba.app
# FIXME: We shouldn't be doing things conditionally based on whether
@@ -364,7 +364,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]):
return
with ba.Context(activity):
- self._phrases: List[str] = []
+ self._phrases: list[str] = []
# Show upcoming achievements in non-vr versions
# (currently too hard to read in vr).
diff --git a/assets/src/ba_data/python/bastd/maps.py b/assets/src/ba_data/python/bastd/maps.py
index 03f41255..7d3779e4 100644
--- a/assets/src/ba_data/python/bastd/maps.py
+++ b/assets/src/ba_data/python/bastd/maps.py
@@ -11,7 +11,7 @@ import ba
from bastd.gameutils import SharedObjects
if TYPE_CHECKING:
- from typing import Any, List, Dict
+ from typing import Any
class HockeyStadium(ba.Map):
@@ -21,7 +21,7 @@ class HockeyStadium(ba.Map):
name = 'Hockey Stadium'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'hockey', 'team_flag', 'keep_away']
@@ -31,7 +31,7 @@ class HockeyStadium(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'models': (ba.getmodel('hockeyStadiumOuter'),
ba.getmodel('hockeyStadiumInner'),
ba.getmodel('hockeyStadiumStands')),
@@ -106,7 +106,7 @@ class FootballStadium(ba.Map):
name = 'Football Stadium'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'football', 'team_flag', 'keep_away']
@@ -116,7 +116,7 @@ class FootballStadium(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('footballStadium'),
'vr_fill_model': ba.getmodel('footballStadiumVRFill'),
'collide_model': ba.getcollidemodel('footballStadiumCollide'),
@@ -170,7 +170,7 @@ class Bridgit(ba.Map):
dataname = 'bridgit'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
# print('getting playtypes', cls._getdata()['play_types'])
return ['melee', 'team_flag', 'keep_away']
@@ -181,7 +181,7 @@ class Bridgit(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model_top': ba.getmodel('bridgitLevelTop'),
'model_bottom': ba.getmodel('bridgitLevelBottom'),
'model_bg': ba.getmodel('natureBackground'),
@@ -264,7 +264,7 @@ class BigG(ba.Map):
name = 'Big G'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return [
'race', 'melee', 'keep_away', 'team_flag', 'king_of_the_hill',
@@ -277,7 +277,7 @@ class BigG(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model_top': ba.getmodel('bigG'),
'model_bottom': ba.getmodel('bigGBottom'),
'model_bg': ba.getmodel('natureBackground'),
@@ -361,7 +361,7 @@ class Roundabout(ba.Map):
name = 'Roundabout'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag']
@@ -371,7 +371,7 @@ class Roundabout(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('roundaboutLevel'),
'model_bottom': ba.getmodel('roundaboutLevelBottom'),
'model_bg': ba.getmodel('natureBackground'),
@@ -455,7 +455,7 @@ class MonkeyFace(ba.Map):
name = 'Monkey Face'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag']
@@ -465,7 +465,7 @@ class MonkeyFace(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('monkeyFaceLevel'),
'bottom_model': ba.getmodel('monkeyFaceLevelBottom'),
'model_bg': ba.getmodel('natureBackground'),
@@ -549,7 +549,7 @@ class ZigZag(ba.Map):
name = 'Zigzag'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return [
'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill'
@@ -561,7 +561,7 @@ class ZigZag(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('zigZagLevel'),
'model_bottom': ba.getmodel('zigZagLevelBottom'),
'model_bg': ba.getmodel('natureBackground'),
@@ -643,7 +643,7 @@ class ThePad(ba.Map):
name = 'The Pad'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill']
@@ -653,7 +653,7 @@ class ThePad(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('thePadLevel'),
'bottom_model': ba.getmodel('thePadLevelBottom'),
'collide_model': ba.getcollidemodel('thePadLevelCollide'),
@@ -724,7 +724,7 @@ class DoomShroom(ba.Map):
name = 'Doom Shroom'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag']
@@ -734,7 +734,7 @@ class DoomShroom(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('doomShroomLevel'),
'collide_model': ba.getcollidemodel('doomShroomLevelCollide'),
'tex': ba.gettexture('doomShroomLevelColor'),
@@ -814,7 +814,7 @@ class LakeFrigid(ba.Map):
name = 'Lake Frigid'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag', 'race']
@@ -824,7 +824,7 @@ class LakeFrigid(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('lakeFrigid'),
'model_top': ba.getmodel('lakeFrigidTop'),
'model_reflections': ba.getmodel('lakeFrigidReflections'),
@@ -895,7 +895,7 @@ class TipTop(ba.Map):
name = 'Tip Top'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill']
@@ -905,7 +905,7 @@ class TipTop(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('tipTopLevel'),
'bottom_model': ba.getmodel('tipTopLevelBottom'),
'collide_model': ba.getcollidemodel('tipTopLevelCollide'),
@@ -967,7 +967,7 @@ class CragCastle(ba.Map):
name = 'Crag Castle'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag', 'conquest']
@@ -977,7 +977,7 @@ class CragCastle(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('cragCastleLevel'),
'bottom_model': ba.getmodel('cragCastleLevelBottom'),
'collide_model': ba.getcollidemodel('cragCastleLevelCollide'),
@@ -1052,7 +1052,7 @@ class TowerD(ba.Map):
name = 'Tower D'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return []
@@ -1062,7 +1062,7 @@ class TowerD(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model':
ba.getmodel('towerDLevel'),
'model_bottom':
@@ -1169,7 +1169,7 @@ class HappyThoughts(ba.Map):
name = 'Happy Thoughts'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return [
'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill'
@@ -1181,7 +1181,7 @@ class HappyThoughts(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('alwaysLandLevel'),
'bottom_model': ba.getmodel('alwaysLandLevelBottom'),
'bgmodel': ba.getmodel('alwaysLandBG'),
@@ -1275,7 +1275,7 @@ class StepRightUp(ba.Map):
name = 'Step Right Up'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag', 'conquest']
@@ -1285,7 +1285,7 @@ class StepRightUp(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('stepRightUpLevel'),
'model_bottom': ba.getmodel('stepRightUpLevelBottom'),
'collide_model': ba.getcollidemodel('stepRightUpLevelCollide'),
@@ -1350,7 +1350,7 @@ class Courtyard(ba.Map):
name = 'Courtyard'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag']
@@ -1360,7 +1360,7 @@ class Courtyard(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('courtyardLevel'),
'model_bottom': ba.getmodel('courtyardLevelBottom'),
'collide_model': ba.getcollidemodel('courtyardLevelCollide'),
@@ -1456,7 +1456,7 @@ class Rampage(ba.Map):
name = 'Rampage'
@classmethod
- def get_play_types(cls) -> List[str]:
+ def get_play_types(cls) -> list[str]:
"""Return valid play types for this map."""
return ['melee', 'keep_away', 'team_flag']
@@ -1466,7 +1466,7 @@ class Rampage(ba.Map):
@classmethod
def on_preload(cls) -> Any:
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'model': ba.getmodel('rampageLevel'),
'bottom_model': ba.getmodel('rampageLevelBottom'),
'collide_model': ba.getcollidemodel('rampageLevelCollide'),
diff --git a/assets/src/ba_data/python/bastd/stdmap.py b/assets/src/ba_data/python/bastd/stdmap.py
index 2508fa8b..4522eaca 100644
--- a/assets/src/ba_data/python/bastd/stdmap.py
+++ b/assets/src/ba_data/python/bastd/stdmap.py
@@ -9,10 +9,10 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Dict, Any, Optional
+ from typing import Any, Optional
-def _get_map_data(name: str) -> Dict[str, Any]:
+def _get_map_data(name: str) -> dict[str, Any]:
import json
print('Would get map data', name)
with open('ba_data/data/maps/' + name + '.json',
@@ -26,10 +26,10 @@ class StdMap(ba.Map):
"""A map completely defined by asset data.
"""
- _data: Optional[Dict[str, Any]] = None
+ _data: Optional[dict[str, Any]] = None
@classmethod
- def _getdata(cls) -> Dict[str, Any]:
+ def _getdata(cls) -> dict[str, Any]:
if cls._data is None:
cls._data = _get_map_data('bridgit')
return cls._data
diff --git a/assets/src/ba_data/python/bastd/tutorial.py b/assets/src/ba_data/python/bastd/tutorial.py
index 39bad74d..6eb78163 100644
--- a/assets/src/ba_data/python/bastd/tutorial.py
+++ b/assets/src/ba_data/python/bastd/tutorial.py
@@ -23,8 +23,7 @@ import ba
from bastd.actor import spaz as basespaz
if TYPE_CHECKING:
- from typing import (Any, Optional, Dict, List, Tuple, Callable, Sequence,
- Union)
+ from typing import Any, Optional, Callable, Sequence, Union
def _safesetattr(node: Optional[ba.Node], attr: str, value: Any) -> None:
@@ -187,7 +186,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
self.current_spaz: Optional[basespaz.Spaz] = None
self._benchmark_type = getattr(ba.getsession(), 'benchmark_type', None)
self.last_start_time: Optional[int] = None
- self.cycle_times: List[int] = []
+ self.cycle_times: list[int] = []
self.allow_pausing = True
self.allow_kick_idle_players = False
self._issued_warning = False
@@ -206,8 +205,8 @@ class TutorialActivity(ba.Activity[Player, Team]):
self._skip_text: Optional[ba.Node] = None
self._skip_count_text: Optional[ba.Node] = None
self._scale: Optional[float] = None
- self._stick_base_position: Tuple[float, float] = (0.0, 0.0)
- self._stick_nub_position: Tuple[float, float] = (0.0, 0.0)
+ self._stick_base_position: tuple[float, float] = (0.0, 0.0)
+ self._stick_nub_position: tuple[float, float] = (0.0, 0.0)
self._stick_base_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0)
self._stick_nub_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0)
self._time: int = -1
@@ -220,10 +219,10 @@ class TutorialActivity(ba.Activity[Player, Team]):
self._stick_nub_image: Optional[ba.Node] = None
self.bomb_image_color = (1.0, 1.0, 1.0)
self.pickup_image_color = (1.0, 1.0, 1.0)
- self.control_ui_nodes: List[ba.Node] = []
- self.spazzes: Dict[int, basespaz.Spaz] = {}
+ self.control_ui_nodes: list[ba.Node] = []
+ self.spazzes: dict[int, basespaz.Spaz] = {}
self.jump_image_color = (1.0, 1.0, 1.0)
- self._entries: List[Any] = []
+ self._entries: list[Any] = []
self._read_entries_timer: Optional[ba.Timer] = None
self._entry_timer: Optional[ba.Timer] = None
@@ -300,7 +299,7 @@ class TutorialActivity(ba.Activity[Player, Team]):
nub_size = 110.0 * scale
p = (position[0] + center_offs, position[1] - offs)
- def _sc(r: float, g: float, b: float) -> Tuple[float, float, float]:
+ def _sc(r: float, g: float, b: float) -> tuple[float, float, float]:
return 0.6 * r, 0.6 * g, 0.6 * b
self.jump_image_color = c = _sc(0.4, 1, 0.4)
diff --git a/assets/src/ba_data/python/bastd/ui/account/link.py b/assets/src/ba_data/python/bastd/ui/account/link.py
index f82985b2..df01fc9a 100644
--- a/assets/src/ba_data/python/bastd/ui/account/link.py
+++ b/assets/src/ba_data/python/bastd/ui/account/link.py
@@ -12,14 +12,14 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Optional, Dict
+ from typing import Any, Optional
class AccountLinkWindow(ba.Window):
"""Window for linking accounts."""
def __init__(self, origin_widget: ba.Widget = None):
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -111,7 +111,7 @@ class AccountLinkWindow(ba.Window):
class AccountLinkCodeWindow(ba.Window):
"""Window showing code for account-linking."""
- def __init__(self, data: Dict[str, Any]):
+ def __init__(self, data: dict[str, Any]):
self._width = 350
self._height = 200
uiscale = ba.app.ui.uiscale
diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py
index 785f186e..3e517b1b 100644
--- a/assets/src/ba_data/python/bastd/ui/account/settings.py
+++ b/assets/src/ba_data/python/bastd/ui/account/settings.py
@@ -12,7 +12,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Optional, Tuple, List, Union
+ from typing import Optional, Union
class AccountSettingsWindow(ba.Window):
@@ -29,7 +29,7 @@ class AccountSettingsWindow(ba.Window):
ba.set_analytics_screen('Account Window')
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -74,7 +74,7 @@ class AccountSettingsWindow(ba.Window):
self._sub_width = self._scroll_width - 20
# Determine which sign-in/sign-out buttons we should show.
- self._show_sign_in_buttons: List[str] = []
+ self._show_sign_in_buttons: list[str] = []
if app.platform == 'android' and app.subplatform == 'google':
self._show_sign_in_buttons.append('Google Play')
diff --git a/assets/src/ba_data/python/bastd/ui/account/unlink.py b/assets/src/ba_data/python/bastd/ui/account/unlink.py
index ef3b0114..8ef04517 100644
--- a/assets/src/ba_data/python/bastd/ui/account/unlink.py
+++ b/assets/src/ba_data/python/bastd/ui/account/unlink.py
@@ -11,14 +11,14 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, Dict
+ from typing import Any, Optional
class AccountUnlinkWindow(ba.Window):
"""A window to kick off account unlinks."""
def __init__(self, origin_widget: ba.Widget = None):
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -104,7 +104,7 @@ class AccountUnlinkWindow(ba.Window):
if i == 0:
ba.widget(edit=txt, up_widget=self._cancel_button)
- def _on_entry_selected(self, entry: Dict[str, Any]) -> None:
+ def _on_entry_selected(self, entry: dict[str, Any]) -> None:
ba.screenmessage(ba.Lstr(resource='pleaseWaitText',
fallback_resource='requestingText'),
color=(0, 1, 0))
diff --git a/assets/src/ba_data/python/bastd/ui/account/viewer.py b/assets/src/ba_data/python/bastd/ui/account/viewer.py
index a8ea39af..01f18c14 100644
--- a/assets/src/ba_data/python/bastd/ui/account/viewer.py
+++ b/assets/src/ba_data/python/bastd/ui/account/viewer.py
@@ -11,7 +11,7 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Tuple, Dict, Optional
+ from typing import Any, Optional
class AccountViewerWindow(popup.PopupWindow):
@@ -20,9 +20,9 @@ class AccountViewerWindow(popup.PopupWindow):
def __init__(self,
account_id: str,
profile_id: str = None,
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0)):
+ offset: tuple[float, float] = (0.0, 0.0)):
from ba.internal import is_browser_likely_available, master_server_get
self._account_id = account_id
@@ -169,7 +169,7 @@ class AccountViewerWindow(popup.PopupWindow):
ba.open_url(_ba.get_master_server_address() + '/highscores?profile=' +
self._account_id)
- def _on_query_response(self, data: Optional[Dict[str, Any]]) -> None:
+ def _on_query_response(self, data: Optional[dict[str, Any]]) -> None:
# FIXME: Tidy this up.
# pylint: disable=too-many-locals
# pylint: disable=too-many-branches
diff --git a/assets/src/ba_data/python/bastd/ui/achievements.py b/assets/src/ba_data/python/bastd/ui/achievements.py
index ca56c436..5ca7d516 100644
--- a/assets/src/ba_data/python/bastd/ui/achievements.py
+++ b/assets/src/ba_data/python/bastd/ui/achievements.py
@@ -10,13 +10,13 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Tuple
+ pass
class AchievementsWindow(popup.PopupWindow):
"""Popup window to view achievements."""
- def __init__(self, position: Tuple[float, float], scale: float = None):
+ def __init__(self, position: tuple[float, float], scale: float = None):
# pylint: disable=too-many-locals
uiscale = ba.app.ui.uiscale
if scale is None:
diff --git a/assets/src/ba_data/python/bastd/ui/appinvite.py b/assets/src/ba_data/python/bastd/ui/appinvite.py
index c058f762..9d3cb384 100644
--- a/assets/src/ba_data/python/bastd/ui/appinvite.py
+++ b/assets/src/ba_data/python/bastd/ui/appinvite.py
@@ -12,7 +12,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Dict, Union
+ from typing import Any, Optional, Union
class AppInviteWindow(ba.Window):
@@ -20,7 +20,7 @@ class AppInviteWindow(ba.Window):
def __init__(self) -> None:
ba.set_analytics_screen('AppInviteWindow')
- self._data: Optional[Dict[str, Any]] = None
+ self._data: Optional[dict[str, Any]] = None
self._width = 650
self._height = 400
@@ -114,7 +114,7 @@ class AppInviteWindow(ba.Window):
callback=ba.WeakCall(self._on_code_result))
_ba.run_transactions()
- def _on_code_result(self, result: Optional[Dict[str, Any]]) -> None:
+ def _on_code_result(self, result: Optional[dict[str, Any]]) -> None:
if result is not None:
self._data = result
@@ -151,7 +151,7 @@ class AppInviteWindow(ba.Window):
class ShowFriendCodeWindow(ba.Window):
"""Window showing a code for sharing with friends."""
- def __init__(self, data: Dict[str, Any]):
+ def __init__(self, data: dict[str, Any]):
from ba.internal import is_browser_likely_available
ba.set_analytics_screen('Friend Promo Code')
self._width = 650
@@ -317,7 +317,7 @@ def handle_app_invites_press(force_code: bool = False) -> None:
ba.Lstr(resource='gatherWindow.requestingAPromoCodeText'),
color=(0, 1, 0))
- def handle_result(result: Optional[Dict[str, Any]]) -> None:
+ def handle_result(result: Optional[dict[str, Any]]) -> None:
with ba.Context('ui'):
if result is None:
ba.screenmessage(ba.Lstr(resource='errorText'),
diff --git a/assets/src/ba_data/python/bastd/ui/characterpicker.py b/assets/src/ba_data/python/bastd/ui/characterpicker.py
index 6f57a20b..b60a4767 100644
--- a/assets/src/ba_data/python/bastd/ui/characterpicker.py
+++ b/assets/src/ba_data/python/bastd/ui/characterpicker.py
@@ -12,7 +12,7 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Tuple, Sequence
+ from typing import Any, Sequence
class CharacterPicker(popup.PopupWindow):
@@ -20,10 +20,10 @@ class CharacterPicker(popup.PopupWindow):
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None,
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
tint_color: Sequence[float] = (1.0, 1.0, 1.0),
tint2_color: Sequence[float] = (1.0, 1.0, 1.0),
selected_character: str = None):
diff --git a/assets/src/ba_data/python/bastd/ui/colorpicker.py b/assets/src/ba_data/python/bastd/ui/colorpicker.py
index 42cbb3a4..14e935c9 100644
--- a/assets/src/ba_data/python/bastd/ui/colorpicker.py
+++ b/assets/src/ba_data/python/bastd/ui/colorpicker.py
@@ -10,7 +10,7 @@ import ba
from bastd.ui.popup import PopupWindow
if TYPE_CHECKING:
- from typing import Any, Tuple, Sequence, List, Optional
+ from typing import Any, Sequence, Optional
class ColorPicker(PopupWindow):
@@ -21,11 +21,11 @@ class ColorPicker(PopupWindow):
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float],
+ position: tuple[float, float],
initial_color: Sequence[float] = (1.0, 1.0, 1.0),
delegate: Any = None,
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
tag: Any = ''):
# pylint: disable=too-many-locals
from ba.internal import get_player_colors
@@ -56,11 +56,11 @@ class ColorPicker(PopupWindow):
focus_size=(190, 220),
bg_color=(0.5, 0.5, 0.5),
offset=offset)
- rows: List[List[ba.Widget]] = []
+ rows: list[list[ba.Widget]] = []
closest_dist = 9999.0
closest = (0, 0)
for y in range(4):
- row: List[ba.Widget] = []
+ row: list[ba.Widget] = []
rows.append(row)
for x in range(4):
color = self.colors[y][x]
@@ -159,11 +159,11 @@ class ColorPickerExact(PopupWindow):
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float],
+ position: tuple[float, float],
initial_color: Sequence[float] = (1.0, 1.0, 1.0),
delegate: Any = None,
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
tag: Any = ''):
# pylint: disable=too-many-locals
del parent # Unused var.
diff --git a/assets/src/ba_data/python/bastd/ui/config.py b/assets/src/ba_data/python/bastd/ui/config.py
index 0c11ff4e..b9e74000 100644
--- a/assets/src/ba_data/python/bastd/ui/config.py
+++ b/assets/src/ba_data/python/bastd/ui/config.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Union, Callable
+ from typing import Any, Union, Callable
class ConfigCheckBox:
@@ -27,8 +27,8 @@ class ConfigCheckBox:
def __init__(self,
parent: ba.Widget,
configkey: str,
- position: Tuple[float, float],
- size: Tuple[float, float],
+ position: tuple[float, float],
+ size: tuple[float, float],
displayname: Union[str, ba.Lstr] = None,
scale: float = None,
maxwidth: float = None,
@@ -84,7 +84,7 @@ class ConfigNumberEdit:
def __init__(self,
parent: ba.Widget,
configkey: str,
- position: Tuple[float, float],
+ position: tuple[float, float],
minval: float = 0.0,
maxval: float = 100.0,
increment: float = 1.0,
diff --git a/assets/src/ba_data/python/bastd/ui/confirm.py b/assets/src/ba_data/python/bastd/ui/confirm.py
index 82e2ac48..37ed99a4 100644
--- a/assets/src/ba_data/python/bastd/ui/confirm.py
+++ b/assets/src/ba_data/python/bastd/ui/confirm.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Union, Callable, Tuple, Optional
+ from typing import Any, Union, Callable, Optional
class ConfirmWindow:
@@ -23,7 +23,7 @@ class ConfirmWindow:
height: float = 100.0,
cancel_button: bool = True,
cancel_is_selected: bool = False,
- color: Tuple[float, float, float] = (1, 1, 1),
+ color: tuple[float, float, float] = (1, 1, 1),
text_scale: float = 1.0,
ok_text: Union[str, ba.Lstr] = None,
cancel_text: Union[str, ba.Lstr] = None,
@@ -39,7 +39,7 @@ class ConfirmWindow:
# if they provided an origin-widget, scale up from that
self._transition_out: Optional[str]
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/coop/browser.py b/assets/src/ba_data/python/bastd/ui/coop/browser.py
index a0a008b8..6fb34fef 100644
--- a/assets/src/ba_data/python/bastd/ui/coop/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/coop/browser.py
@@ -16,7 +16,7 @@ from bastd.ui.league.rankbutton import LeagueRankButton
from bastd.ui.store.browser import StoreBrowserWindow
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, Dict, List, Union
+ from typing import Any, Optional, Union
class CoopBrowserWindow(ba.Window):
@@ -62,7 +62,7 @@ class CoopBrowserWindow(ba.Window):
timetype=ba.TimeType.REAL)
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -361,7 +361,7 @@ class CoopBrowserWindow(ba.Window):
except Exception:
ba.print_exception('Error updating campaign lock.')
- def _update_for_data(self, data: Optional[List[Dict[str, Any]]]) -> None:
+ def _update_for_data(self, data: Optional[list[dict[str, Any]]]) -> None:
# pylint: disable=too-many-statements
# pylint: disable=too-many-locals
# pylint: disable=too-many-branches
@@ -380,7 +380,7 @@ class CoopBrowserWindow(ba.Window):
# Update all of our tourney buttons based on whats in data.
for i, tbtn in enumerate(self._tournament_buttons):
assert data is not None
- entry: Dict[str, Any] = data[i]
+ entry: dict[str, Any] = data[i]
prize_y_offs = (34 if 'prizeRange3' in entry else
20 if 'prizeRange2' in entry else 12)
x_offs = 90
@@ -589,7 +589,7 @@ class CoopBrowserWindow(ba.Window):
('' + str(free_tries_remaining))),
color=(0.6, 0.6, 0.6, 1))
- def _on_tournament_query_response(self, data: Optional[Dict[str,
+ def _on_tournament_query_response(self, data: Optional[dict[str,
Any]]) -> None:
accounts = ba.app.accounts
if data is not None:
@@ -835,7 +835,7 @@ class CoopBrowserWindow(ba.Window):
# Tournaments
- self._tournament_buttons: List[Dict[str, Any]] = []
+ self._tournament_buttons: list[dict[str, Any]] = []
v -= 53
# FIXME shouldn't use hard-coded strings here.
@@ -976,7 +976,7 @@ class CoopBrowserWindow(ba.Window):
30 + 200 * len(items)), 200),
background=False)
h_spacing = 200
- self._custom_buttons: List[GameButton] = []
+ self._custom_buttons: list[GameButton] = []
h = 0
v2 = -2
for item in items:
@@ -1034,10 +1034,10 @@ class CoopBrowserWindow(ba.Window):
self._do_selection_callbacks = True
def _tournament_button(self, parent: ba.Widget, x: float, y: float,
- select: bool) -> Dict[str, Any]:
+ select: bool) -> dict[str, Any]:
sclx = 300
scly = 195.0
- data: Dict[str, Any] = {
+ data: dict[str, Any] = {
'tournament_id': None,
'time_remaining': 0,
'has_time_remaining': False,
@@ -1374,7 +1374,7 @@ class CoopBrowserWindow(ba.Window):
show_tab=show_tab,
back_location='CoopBrowserWindow').get_root_widget())
- def _show_leader(self, tournament_button: Dict[str, Any]) -> None:
+ def _show_leader(self, tournament_button: dict[str, Any]) -> None:
# pylint: disable=cyclic-import
from bastd.ui.account.viewer import AccountViewerWindow
tournament_id = tournament_button['tournament_id']
@@ -1392,7 +1392,7 @@ class CoopBrowserWindow(ba.Window):
position=tournament_button['current_leader_name_text'].
get_screen_space_center())
- def _show_scores(self, tournament_button: Dict[str, Any]) -> None:
+ def _show_scores(self, tournament_button: dict[str, Any]) -> None:
# pylint: disable=cyclic-import
from bastd.ui.tournamentscores import TournamentScoresWindow
tournament_id = tournament_button['tournament_id']
@@ -1411,7 +1411,7 @@ class CoopBrowserWindow(ba.Window):
def run(self,
game: Optional[str],
- tournament_button: Dict[str, Any] = None) -> None:
+ tournament_button: dict[str, Any] = None) -> None:
"""Run the provided game."""
# pylint: disable=too-many-branches
# pylint: disable=too-many-statements
@@ -1421,7 +1421,7 @@ class CoopBrowserWindow(ba.Window):
from bastd.ui.tournamententry import TournamentEntryWindow
from bastd.ui.purchase import PurchaseWindow
from bastd.ui.account import show_sign_in_prompt
- args: Dict[str, Any] = {}
+ args: dict[str, Any] = {}
# Do a bit of pre-flight for tournament options.
if tournament_button is not None:
diff --git a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py
index 8aee88b7..2a6a75b4 100644
--- a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py
+++ b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py
@@ -11,7 +11,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Optional, List, Tuple
+ from typing import Optional
from bastd.ui.coop.browser import CoopBrowserWindow
@@ -98,7 +98,7 @@ class GameButton:
starscale = 35.0 if self._achievements else 45.0
- self._star_widgets: List[ba.Widget] = []
+ self._star_widgets: list[ba.Widget] = []
for _i in range(stars):
imw = ba.imagewidget(parent=parent,
draw_controller=btn,
@@ -120,7 +120,7 @@ class GameButton:
xach = x + 69
yach = y + scly - 168
a_scale = 30.0
- self._achievement_widgets: List[Tuple[ba.Widget, ba.Widget]] = []
+ self._achievement_widgets: list[tuple[ba.Widget, ba.Widget]] = []
for ach in self._achievements:
a_complete = ach.complete
imw = ba.imagewidget(
diff --git a/assets/src/ba_data/python/bastd/ui/creditslist.py b/assets/src/ba_data/python/bastd/ui/creditslist.py
index 161b77d2..d6a37c8d 100644
--- a/assets/src/ba_data/python/bastd/ui/creditslist.py
+++ b/assets/src/ba_data/python/bastd/ui/creditslist.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional, Sequence
+ from typing import Optional, Sequence
class CreditsListWindow(ba.Window):
@@ -23,7 +23,7 @@ class CreditsListWindow(ba.Window):
ba.set_analytics_screen('Credits Window')
# if they provided an origin-widget, scale up from that
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/fileselector.py b/assets/src/ba_data/python/bastd/ui/fileselector.py
index da6e2b2f..e48b456a 100644
--- a/assets/src/ba_data/python/bastd/ui/fileselector.py
+++ b/assets/src/ba_data/python/bastd/ui/fileselector.py
@@ -13,7 +13,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Callable, Sequence, List, Optional
+ from typing import Any, Callable, Sequence, Optional
class FileSelectorWindow(ba.Window):
@@ -34,7 +34,7 @@ class FileSelectorWindow(ba.Window):
self._callback = callback
self._base_path = path
self._path: Optional[str] = None
- self._recent_paths: List[str] = []
+ self._recent_paths: list[str] = []
self._show_base_path = show_base_path
self._valid_file_extensions = [
'.' + ext for ext in valid_file_extensions
@@ -173,7 +173,7 @@ class FileSelectorWindow(ba.Window):
class _RefreshThread(threading.Thread):
def __init__(self, path: str,
- callback: Callable[[List[str], Optional[str]], Any]):
+ callback: Callable[[list[str], Optional[str]], Any]):
super().__init__()
self._callback = callback
self._path = path
@@ -195,7 +195,7 @@ class FileSelectorWindow(ba.Window):
# Ignore permission-denied.
if 'Errno 13' not in str(exc):
ba.print_exception()
- nofiles: List[str] = []
+ nofiles: list[str] = []
ba.pushcall(ba.Call(self._callback, nofiles, str(exc)),
from_other_thread=True)
@@ -205,7 +205,7 @@ class FileSelectorWindow(ba.Window):
self._recent_paths.append(path)
self._RefreshThread(path, self._refresh).start()
- def _refresh(self, file_names: List[str], error: Optional[str]) -> None:
+ def _refresh(self, file_names: list[str], error: Optional[str]) -> None:
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
diff --git a/assets/src/ba_data/python/bastd/ui/gather/__init__.py b/assets/src/ba_data/python/bastd/ui/gather/__init__.py
index 3d21747c..8dca6cc5 100644
--- a/assets/src/ba_data/python/bastd/ui/gather/__init__.py
+++ b/assets/src/ba_data/python/bastd/ui/gather/__init__.py
@@ -13,8 +13,7 @@ import ba
from bastd.ui.tabs import TabRow
if TYPE_CHECKING:
- from typing import (Any, Optional, Tuple, Dict, List, Union, Callable,
- Type)
+ from typing import Optional
class GatherTab:
@@ -80,7 +79,7 @@ class GatherWindow(ba.Window):
from bastd.ui.gather.nearbytab import NearbyGatherTab
ba.set_analytics_screen('Gather Window')
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -149,7 +148,7 @@ class GatherWindow(ba.Window):
tab_buffer_h = ((320 if condensed else 250) + 2 * x_offs)
# Build up the set of tabs we want.
- tabdefs: List[Tuple[GatherWindow.TabID, ba.Lstr]] = [
+ tabdefs: list[tuple[GatherWindow.TabID, ba.Lstr]] = [
(self.TabID.ABOUT, ba.Lstr(resource=self._r + '.aboutText'))
]
if _ba.get_account_misc_read_val('enablePublicParties', True):
@@ -173,14 +172,14 @@ class GatherWindow(ba.Window):
on_select_call=ba.WeakCall(self._set_tab))
# Now instantiate handlers for these tabs.
- tabtypes: Dict[GatherWindow.TabID, Type[GatherTab]] = {
+ tabtypes: dict[GatherWindow.TabID, type[GatherTab]] = {
self.TabID.ABOUT: AboutGatherTab,
self.TabID.MANUAL: ManualGatherTab,
self.TabID.PRIVATE: PrivateGatherTab,
self.TabID.INTERNET: PublicGatherTab,
self.TabID.NEARBY: NearbyGatherTab
}
- self._tabs: Dict[GatherWindow.TabID, GatherTab] = {}
+ self._tabs: dict[GatherWindow.TabID, GatherTab] = {}
for tab_id in self._tab_row.tabs:
tabtype = tabtypes.get(tab_id)
if tabtype is not None:
diff --git a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py
index 367b0eb8..798b11f6 100644
--- a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py
+++ b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py
@@ -15,7 +15,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Dict, List, Tuple, Type, Union, Callable
+ from typing import Any, Optional, Union, Callable
from bastd.ui.gather import GatherWindow
from bastd.ui.confirm import ConfirmWindow
@@ -850,7 +850,7 @@ class ManualGatherTab(GatherTab):
callback=ba.WeakCall(
self._on_accessible_response))
- def _on_accessible_response(self, data: Optional[Dict[str, Any]]) -> None:
+ def _on_accessible_response(self, data: Optional[dict[str, Any]]) -> None:
t_addr = self._t_addr
t_accessible = self._t_accessible
t_accessible_extra = self._t_accessible_extra
diff --git a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py
index 19fe1c53..03561cbd 100644
--- a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py
+++ b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py
@@ -12,7 +12,7 @@ import _ba
from bastd.ui.gather import GatherTab
if TYPE_CHECKING:
- from typing import Optional, Dict, Any
+ from typing import Optional, Any
from bastd.ui.gather import GatherWindow
@@ -30,7 +30,7 @@ class NetScanner:
left_border=10)
ba.widget(edit=self._columnwidget, up_widget=tab_button)
self._width = width
- self._last_selected_host: Optional[Dict[str, Any]] = None
+ self._last_selected_host: Optional[dict[str, Any]] = None
self._update_timer = ba.Timer(1.0,
ba.WeakCall(self.update),
@@ -44,10 +44,10 @@ class NetScanner:
def __del__(self) -> None:
_ba.end_host_scanning()
- def _on_select(self, host: Dict[str, Any]) -> None:
+ def _on_select(self, host: dict[str, Any]) -> None:
self._last_selected_host = host
- def _on_activate(self, host: Dict[str, Any]) -> None:
+ def _on_activate(self, host: dict[str, Any]) -> None:
_ba.connect_to_party(host['address'])
def update(self) -> None:
diff --git a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py
index 941be6d2..839ba787 100644
--- a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py
+++ b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py
@@ -20,7 +20,7 @@ from bastd.ui.gather import GatherTab
from bastd.ui import getcurrency
if TYPE_CHECKING:
- from typing import Optional, Dict, Any, List, Type
+ from typing import Optional, Any
from bastd.ui.gather import GatherWindow
# Print a bit of info about queries, etc.
@@ -160,7 +160,7 @@ class PrivateGatherTab(GatherTab):
raise RuntimeError(f'Invalid sessiontype {sessiontypestr}')
hcfg.session_type = sessiontypestr
- sessiontype: Type[ba.Session]
+ sessiontype: type[ba.Session]
if hcfg.session_type == 'ffa':
sessiontype = ba.FreeForAllSession
elif hcfg.session_type == 'teams':
@@ -177,7 +177,7 @@ class PrivateGatherTab(GatherTab):
if playlist_name == '__default__' else
playlist_name)
- playlist: Optional[List[Dict[str, Any]]] = None
+ playlist: Optional[list[dict[str, Any]]] = None
if playlist_name != '__default__':
playlist = (cfg.get(f'{pvars.config_name} Playlists',
{}).get(playlist_name))
@@ -197,7 +197,7 @@ class PrivateGatherTab(GatherTab):
hcfg.tutorial = tutorial
if hcfg.session_type == 'teams':
- ctn: Optional[List[str]] = cfg.get('Custom Team Names')
+ ctn: Optional[list[str]] = cfg.get('Custom Team Names')
if ctn is not None:
if (isinstance(ctn, (list, tuple)) and len(ctn) == 2
and all(isinstance(x, str) for x in ctn)):
@@ -205,7 +205,7 @@ class PrivateGatherTab(GatherTab):
else:
print(f'Found invalid custom-team-names data: {ctn}')
- ctc: Optional[List[List[float]]] = cfg.get('Custom Team Colors')
+ ctc: Optional[list[list[float]]] = cfg.get('Custom Team Colors')
if ctc is not None:
if (isinstance(ctc, (list, tuple)) and len(ctc) == 2
and all(isinstance(x, (list, tuple)) for x in ctc)
@@ -269,7 +269,7 @@ class PrivateGatherTab(GatherTab):
self._last_hosting_state_query_time = now
def _hosting_state_idle_response(self,
- result: Optional[Dict[str, Any]]) -> None:
+ result: Optional[dict[str, Any]]) -> None:
# This simply passes through to our standard response handler.
# The one exception is if we've recently sent an action to the
@@ -284,7 +284,7 @@ class PrivateGatherTab(GatherTab):
return
self._hosting_state_response(result)
- def _hosting_state_response(self, result: Optional[Dict[str,
+ def _hosting_state_response(self, result: Optional[dict[str,
Any]]) -> None:
# Its possible for this to come back to us after our UI is dead;
@@ -344,7 +344,7 @@ class PrivateGatherTab(GatherTab):
# Kick off an update to get any needed messages sent/etc.
ba.pushcall(self._update)
- def _selwidgets(self) -> List[Optional[ba.Widget]]:
+ def _selwidgets(self) -> list[Optional[ba.Widget]]:
"""An indexed list of widgets we can use for saving/restoring sel."""
return [
self._host_playlist_button, self._host_copy_button,
@@ -844,7 +844,7 @@ class PrivateGatherTab(GatherTab):
self._connect_to_party_code(code)
- def _connect_response(self, result: Optional[Dict[str, Any]]) -> None:
+ def _connect_response(self, result: Optional[dict[str, Any]]) -> None:
try:
self._connect_press_time = None
if result is None:
diff --git a/assets/src/ba_data/python/bastd/ui/gather/publictab.py b/assets/src/ba_data/python/bastd/ui/gather/publictab.py
index 7a6999b5..b2c1b647 100644
--- a/assets/src/ba_data/python/bastd/ui/gather/publictab.py
+++ b/assets/src/ba_data/python/bastd/ui/gather/publictab.py
@@ -17,7 +17,7 @@ import ba
from bastd.ui.gather import GatherTab
if TYPE_CHECKING:
- from typing import Callable, Any, Optional, Dict, Union, Tuple, List
+ from typing import Callable, Any, Optional, Union
from bastd.ui.gather import GatherWindow
# Print a bit of info about pings, queries, etc.
@@ -182,7 +182,7 @@ class UIRow:
class State:
"""State saved/restored only while the app is running."""
sub_tab: SubTabType = SubTabType.JOIN
- parties: Optional[List[Tuple[str, PartyEntry]]] = None
+ parties: Optional[list[tuple[str, PartyEntry]]] = None
next_entry_index: int = 0
filter_value: str = ''
have_server_list_response: bool = False
@@ -312,26 +312,26 @@ class PublicGatherTab(GatherTab):
self._host_max_party_size_plus_button: (Optional[ba.Widget]) = None
self._host_status_text: Optional[ba.Widget] = None
self._signed_in = False
- self._ui_rows: List[UIRow] = []
+ self._ui_rows: list[UIRow] = []
self._refresh_ui_row = 0
self._have_user_selected_row = False
self._first_valid_server_list_time: Optional[float] = None
# Parties indexed by id:
- self._parties: Dict[str, PartyEntry] = {}
+ self._parties: dict[str, PartyEntry] = {}
# Parties sorted in display order:
- self._parties_sorted: List[Tuple[str, PartyEntry]] = []
+ self._parties_sorted: list[tuple[str, PartyEntry]] = []
self._party_lists_dirty = True
# Sorted parties with filter applied:
- self._parties_displayed: Dict[str, PartyEntry] = {}
+ self._parties_displayed: dict[str, PartyEntry] = {}
self._next_entry_index = 0
self._have_server_list_response = False
self._have_valid_server_list = False
self._filter_value = ''
- self._pending_party_infos: List[Dict[str, Any]] = []
+ self._pending_party_infos: list[dict[str, Any]] = []
self._last_sub_scroll_height = 0.0
def on_activate(
@@ -715,7 +715,7 @@ class PublicGatherTab(GatherTab):
self._do_status_check()
def _on_public_party_query_result(
- self, result: Optional[Dict[str, Any]]) -> None:
+ self, result: Optional[dict[str, Any]]) -> None:
starttime = time.time()
self._have_server_list_response = True
@@ -1100,7 +1100,7 @@ class PublicGatherTab(GatherTab):
self._local_address = str(val)
def _on_public_party_accessible_response(
- self, data: Optional[Dict[str, Any]]) -> None:
+ self, data: Optional[dict[str, Any]]) -> None:
# If we've got status text widgets, update them.
text = self._host_status_text
diff --git a/assets/src/ba_data/python/bastd/ui/getcurrency.py b/assets/src/ba_data/python/bastd/ui/getcurrency.py
index ef9f7118..d2674060 100644
--- a/assets/src/ba_data/python/bastd/ui/getcurrency.py
+++ b/assets/src/ba_data/python/bastd/ui/getcurrency.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, Union, Dict
+ from typing import Any, Optional, Union
class GetCurrencyWindow(ba.Window):
@@ -38,7 +38,7 @@ class GetCurrencyWindow(ba.Window):
self._ad_time_text = None
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -102,8 +102,8 @@ class GetCurrencyWindow(ba.Window):
self._ad_button = None
def _add_button(item: str,
- position: Tuple[float, float],
- size: Tuple[float, float],
+ position: tuple[float, float],
+ size: tuple[float, float],
label: ba.Lstr,
price: str = None,
tex_name: str = None,
@@ -528,7 +528,7 @@ class GetCurrencyWindow(ba.Window):
item))
def _purchase_check_result(self, item: str,
- result: Optional[Dict[str, Any]]) -> None:
+ result: Optional[dict[str, Any]]) -> None:
if result is None:
ba.playsound(ba.getsound('error'))
ba.screenmessage(
diff --git a/assets/src/ba_data/python/bastd/ui/helpui.py b/assets/src/ba_data/python/bastd/ui/helpui.py
index 2fda7f8a..77594b0a 100644
--- a/assets/src/ba_data/python/bastd/ui/helpui.py
+++ b/assets/src/ba_data/python/bastd/ui/helpui.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Optional, Tuple
+ from typing import Optional
class HelpWindow(ba.Window):
@@ -25,7 +25,7 @@ class HelpWindow(ba.Window):
ba.set_analytics_screen('Help Window')
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/iconpicker.py b/assets/src/ba_data/python/bastd/ui/iconpicker.py
index 1d1820f4..6c6f07db 100644
--- a/assets/src/ba_data/python/bastd/ui/iconpicker.py
+++ b/assets/src/ba_data/python/bastd/ui/iconpicker.py
@@ -12,7 +12,7 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Tuple, Sequence
+ from typing import Any, Sequence
class IconPicker(popup.PopupWindow):
@@ -20,10 +20,10 @@ class IconPicker(popup.PopupWindow):
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None,
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
tint_color: Sequence[float] = (1.0, 1.0, 1.0),
tint2_color: Sequence[float] = (1.0, 1.0, 1.0),
selected_icon: str = None):
diff --git a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
index f299f5ff..d7ab53e2 100644
--- a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
+++ b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Optional, Callable, Dict, Union
+ from typing import Any, Optional, Callable, Union
class LeagueRankButton:
@@ -18,13 +18,13 @@ class LeagueRankButton:
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float],
- size: Tuple[float, float],
+ position: tuple[float, float],
+ size: tuple[float, float],
scale: float,
on_activate_call: Callable[[], Any] = None,
transition_delay: float = None,
- color: Tuple[float, float, float] = None,
- textcolor: Tuple[float, float, float] = None,
+ color: tuple[float, float, float] = None,
+ textcolor: tuple[float, float, float] = None,
smooth_update_delay: float = None):
if on_activate_call is None:
on_activate_call = ba.WeakCall(self._default_on_activate_call)
@@ -42,7 +42,7 @@ class LeagueRankButton:
self._textcolor = textcolor
self._header_color = (0.8, 0.8, 2.0)
self._parent = parent
- self._position: Tuple[float, float] = (0.0, 0.0)
+ self._position: tuple[float, float] = (0.0, 0.0)
self._button = ba.buttonwidget(parent=parent,
size=size,
@@ -211,7 +211,7 @@ class LeagueRankButton:
ba.print_exception('Error doing smooth update.')
self._smooth_update_timer = None
- def _update_for_league_rank_data(self, data: Optional[Dict[str,
+ def _update_for_league_rank_data(self, data: Optional[dict[str,
Any]]) -> None:
# pylint: disable=too-many-branches
# pylint: disable=too-many-statements
@@ -325,7 +325,7 @@ class LeagueRankButton:
ba.textwidget(edit=self._value_text, text=status_text)
def _on_power_ranking_query_response(
- self, data: Optional[Dict[str, Any]]) -> None:
+ self, data: Optional[dict[str, Any]]) -> None:
self._doing_power_ranking_query = False
ba.app.accounts.cache_league_rank_data(data)
self._update_for_league_rank_data(data)
@@ -357,7 +357,7 @@ class LeagueRankButton:
from bastd.ui.league.rankwindow import LeagueRankWindow
LeagueRankWindow(modal=True, origin_widget=self._button)
- def set_position(self, position: Tuple[float, float]) -> None:
+ def set_position(self, position: tuple[float, float]) -> None:
"""Set the button's position."""
self._position = position
if not self._button:
diff --git a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
index 48bb1667..d1e31c46 100644
--- a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
+++ b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py
@@ -12,7 +12,7 @@ import ba
from bastd.ui import popup as popup_ui
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, List, Dict, Union
+ from typing import Any, Optional, Union
class LeagueRankWindow(ba.Window):
@@ -24,11 +24,11 @@ class LeagueRankWindow(ba.Window):
origin_widget: ba.Widget = None):
ba.set_analytics_screen('League Rank Window')
- self._league_rank_data: Optional[Dict[str, Any]] = None
+ self._league_rank_data: Optional[dict[str, Any]] = None
self._modal = modal
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -111,7 +111,7 @@ class LeagueRankWindow(ba.Window):
self._subcontainer: Optional[ba.Widget] = None
self._subcontainerwidth = 800
self._subcontainerheight = 483
- self._power_ranking_score_widgets: List[ba.Widget] = []
+ self._power_ranking_score_widgets: list[ba.Widget] = []
self._season_popup_menu: Optional[popup_ui.PopupMenu] = None
self._requested_season: Optional[str] = None
@@ -192,7 +192,7 @@ class LeagueRankWindow(ba.Window):
ba.playsound(ba.getsound('error'))
def _on_power_ranking_query_response(
- self, data: Optional[Dict[str, Any]]) -> None:
+ self, data: Optional[dict[str, Any]]) -> None:
self._doing_power_ranking_query = False
# important: *only* cache this if we requested the current season..
if data is not None and data.get('s', None) is None:
@@ -587,7 +587,7 @@ class LeagueRankWindow(ba.Window):
'/highscores?list=powerRankings&v=2' + league_str +
season_str + '&player=' + our_login_id)
- def _update_for_league_rank_data(self, data: Optional[Dict[str,
+ def _update_for_league_rank_data(self, data: Optional[dict[str,
Any]]) -> None:
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
diff --git a/assets/src/ba_data/python/bastd/ui/mainmenu.py b/assets/src/ba_data/python/bastd/ui/mainmenu.py
index c82c7eb1..420b6cf6 100644
--- a/assets/src/ba_data/python/bastd/ui/mainmenu.py
+++ b/assets/src/ba_data/python/bastd/ui/mainmenu.py
@@ -11,7 +11,7 @@ import ba
import _ba
if TYPE_CHECKING:
- from typing import Any, Callable, List, Dict, Tuple, Optional, Union
+ from typing import Any, Callable, Optional, Union
class MainMenuWindow(ba.Window):
@@ -190,7 +190,7 @@ class MainMenuWindow(ba.Window):
input_device.is_connected_to_remote_player()
if input_device else False)
- positions: List[Tuple[float, float, float]] = []
+ positions: list[tuple[float, float, float]] = []
self._p_index = 0
if self._in_game:
@@ -412,8 +412,8 @@ class MainMenuWindow(ba.Window):
scale=3.0 * t_scale)
def _refresh_not_in_game(
- self, positions: List[Tuple[float, float,
- float]]) -> Tuple[float, float, float]:
+ self, positions: list[tuple[float, float,
+ float]]) -> tuple[float, float, float]:
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
@@ -675,12 +675,12 @@ class MainMenuWindow(ba.Window):
return h, v, scale
def _refresh_in_game(
- self, positions: List[Tuple[float, float,
- float]]) -> Tuple[float, float, float]:
+ self, positions: list[tuple[float, float,
+ float]]) -> tuple[float, float, float]:
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
# pylint: disable=too-many-statements
- custom_menu_entries: List[Dict[str, Any]] = []
+ custom_menu_entries: list[dict[str, Any]] = []
session = _ba.get_foreground_host_session()
if session is not None:
try:
diff --git a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
index d5ad875a..4a446a3c 100644
--- a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
+++ b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py
@@ -12,7 +12,7 @@ from ba import charstr
from ba import SpecialChar as SpCh
if TYPE_CHECKING:
- from typing import List, Tuple, Optional
+ from typing import Optional
class OnScreenKeyboardWindow(ba.Window):
@@ -78,14 +78,14 @@ class OnScreenKeyboardWindow(ba.Window):
self._double_press_shift = False
self._num_mode_button: Optional[ba.Widget] = None
self._emoji_button: Optional[ba.Widget] = None
- self._char_keys: List[ba.Widget] = []
+ self._char_keys: list[ba.Widget] = []
self._keyboard_index = 0
self._last_space_press = 0.0
self._double_space_interval = 0.3
self._keyboard: ba.Keyboard
- self._chars: List[str]
- self._modes: List[str]
+ self._chars: list[str]
+ self._modes: list[str]
self._mode: str
self._mode_index: int
self._load_keyboard()
@@ -116,7 +116,7 @@ class OnScreenKeyboardWindow(ba.Window):
# dummy data just used for row/column lengths... we don't actually
# set things until refresh
- chars: List[Tuple[str, ...]] = self._keyboard.chars
+ chars: list[tuple[str, ...]] = self._keyboard.chars
for row_num, row in enumerate(chars):
h = row_starts[row_num]
@@ -244,7 +244,7 @@ class OnScreenKeyboardWindow(ba.Window):
return kbclass()
def _refresh(self) -> None:
- chars: Optional[List[str]] = None
+ chars: Optional[list[str]] = None
if self._mode in ['normal', 'caps']:
chars = list(self._chars)
if self._mode == 'caps':
diff --git a/assets/src/ba_data/python/bastd/ui/party.py b/assets/src/ba_data/python/bastd/ui/party.py
index 041fc4f7..307b5704 100644
--- a/assets/src/ba_data/python/bastd/ui/party.py
+++ b/assets/src/ba_data/python/bastd/ui/party.py
@@ -13,7 +13,7 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import List, Sequence, Optional, Dict, Any
+ from typing import Sequence, Optional, Any
class PartyWindow(ba.Window):
@@ -113,7 +113,7 @@ class PartyWindow(ba.Window):
h_align='center',
v_align='center',
text=ba.Lstr(resource='chatMutedText'))
- self._chat_texts: List[ba.Widget] = []
+ self._chat_texts: list[ba.Widget] = []
# add all existing messages if chat is not muted
if not ba.app.config.resolve('Chat Muted'):
@@ -153,8 +153,8 @@ class PartyWindow(ba.Window):
position=(self._width - 70, 35),
on_activate_call=self._send_chat_message)
ba.textwidget(edit=txt, on_return_press_call=btn.activate)
- self._name_widgets: List[ba.Widget] = []
- self._roster: Optional[List[Dict[str, Any]]] = None
+ self._name_widgets: list[ba.Widget] = []
+ self._roster: Optional[list[dict[str, Any]]] = None
self._update_timer = ba.Timer(1.0,
ba.WeakCall(self._update),
repeat=True,
diff --git a/assets/src/ba_data/python/bastd/ui/partyqueue.py b/assets/src/ba_data/python/bastd/ui/partyqueue.py
index fd8df48b..f1b5a235 100644
--- a/assets/src/ba_data/python/bastd/ui/partyqueue.py
+++ b/assets/src/ba_data/python/bastd/ui/partyqueue.py
@@ -12,7 +12,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Sequence, List, Dict
+ from typing import Any, Optional, Sequence
class PartyQueueWindow(ba.Window):
@@ -181,8 +181,8 @@ class PartyQueueWindow(ba.Window):
self._boost_price: Optional[ba.Widget] = None
self._boost_label: Optional[ba.Widget] = None
self._field_shown = False
- self._dudes: List[PartyQueueWindow.Dude] = []
- self._dudes_by_id: Dict[int, PartyQueueWindow.Dude] = {}
+ self._dudes: list[PartyQueueWindow.Dude] = []
+ self._dudes_by_id: dict[int, PartyQueueWindow.Dude] = {}
self._line_left = 40.0
self._line_width = self._width - 190
self._line_bottom = self._height * 0.4
@@ -292,7 +292,7 @@ class PartyQueueWindow(ba.Window):
"""Close the ui."""
ba.containerwidget(edit=self._root_widget, transition='out_scale')
- def _update_field(self, response: Dict[str, Any]) -> None:
+ def _update_field(self, response: dict[str, Any]) -> None:
if self._angry_computer_image is None:
self._angry_computer_image = ba.imagewidget(
parent=self._root_widget,
@@ -356,7 +356,7 @@ class PartyQueueWindow(ba.Window):
self._dudes = []
self._dudes_by_id = {}
- def on_update_response(self, response: Optional[Dict[str, Any]]) -> None:
+ def on_update_response(self, response: Optional[dict[str, Any]]) -> None:
"""We've received a response from an update to the server."""
# pylint: disable=too-many-branches
if not self._root_widget:
diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py
index 620b7a04..adfeb3e9 100644
--- a/assets/src/ba_data/python/bastd/ui/play.py
+++ b/assets/src/ba_data/python/bastd/ui/play.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Optional, Tuple
+ from typing import Optional
class PlayWindow(ba.Window):
@@ -37,7 +37,7 @@ class PlayWindow(ba.Window):
height = 550
button_width = 400
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -476,8 +476,8 @@ class PlayWindow(ba.Window):
sessiontype=ba.FreeForAllSession).get_root_widget())
def _draw_dude(self, i: int, btn: ba.Widget, hoffs: float, v: float,
- scl: float, position: Tuple[float, float],
- color: Tuple[float, float, float]) -> None:
+ scl: float, position: tuple[float, float],
+ color: tuple[float, float, float]) -> None:
h_extra = -100
v_extra = 130
eye_color = (0.7 * 1.0 + 0.3 * color[0], 0.7 * 1.0 + 0.3 * color[1],
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py
index 483008c9..5aeadf67 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py
@@ -9,17 +9,17 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Type
+ pass
# FIXME: Could change this to be a classmethod of session types?
class PlaylistTypeVars:
"""Defines values for a playlist type (config names to use, etc)."""
- def __init__(self, sessiontype: Type[ba.Session]):
+ def __init__(self, sessiontype: type[ba.Session]):
from ba.internal import (get_default_teams_playlist,
get_default_free_for_all_playlist)
- self.sessiontype: Type[ba.Session]
+ self.sessiontype: type[ba.Session]
if issubclass(sessiontype, ba.DualTeamSession):
play_mode_name = ba.Lstr(resource='playModes.teamsText',
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
index af51c57e..f12f26bf 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Type, Optional
+ from typing import Optional
from bastd.ui.playlist.editcontroller import PlaylistEditController
@@ -112,7 +112,7 @@ class PlaylistAddGameWindow(ba.Window):
ba.containerwidget(edit=self._root_widget,
cancel_button=self._back_button,
start_button=select_button)
- self._selected_game_type: Optional[Type[ba.GameActivity]] = None
+ self._selected_game_type: Optional[type[ba.GameActivity]] = None
ba.containerwidget(edit=self._root_widget,
selected_child=self._scrollwidget)
@@ -193,7 +193,7 @@ class PlaylistAddGameWindow(ba.Window):
assert self._selected_game_type is not None
self._editcontroller.add_game_type_selected(self._selected_game_type)
- def _set_selected_game_type(self, gametype: Type[ba.GameActivity]) -> None:
+ def _set_selected_game_type(self, gametype: type[ba.GameActivity]) -> None:
self._selected_game_type = gametype
ba.textwidget(edit=self._selected_title_text,
text=gametype.get_display_string())
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py
index 0a3c7ef9..7646b3ff 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py
@@ -12,14 +12,14 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Type, Optional, Tuple, Union
+ from typing import Optional, Union
class PlaylistBrowserWindow(ba.Window):
"""Window for starting teams games."""
def __init__(self,
- sessiontype: Type[ba.Session],
+ sessiontype: type[ba.Session],
transition: Optional[str] = 'in_right',
origin_widget: ba.Widget = None):
# pylint: disable=too-many-statements
@@ -27,7 +27,7 @@ class PlaylistBrowserWindow(ba.Window):
from bastd.ui.playlist import PlaylistTypeVars
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -432,7 +432,7 @@ class PlaylistBrowserWindow(ba.Window):
mark_unowned=True)
for entry in playlist:
mapname = entry['settings']['map']
- maptype: Optional[Type[ba.Map]]
+ maptype: Optional[type[ba.Map]]
try:
maptype = get_map_class(mapname)
except ba.NotFoundError:
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
index 4ee5b297..917e65ed 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py
@@ -12,14 +12,14 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Type, Optional, Tuple, List, Dict
+ from typing import Any, Optional
class PlaylistCustomizeBrowserWindow(ba.Window):
"""Window for viewing a playlist."""
def __init__(self,
- sessiontype: Type[ba.Session],
+ sessiontype: type[ba.Session],
transition: str = 'in_right',
select_playlist: str = None,
origin_widget: ba.Widget = None):
@@ -28,7 +28,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
# pylint: disable=too-many-statements
# pylint: disable=cyclic-import
from bastd.ui import playlist
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -86,7 +86,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
h = 41 + x_inset
b_color = (0.6, 0.53, 0.63)
b_textcolor = (0.75, 0.7, 0.8)
- self._lock_images: List[ba.Widget] = []
+ self._lock_images: list[ba.Widget] = []
lock_tex = ba.gettexture('lock')
scl = (1.1 if uiscale is ba.UIScale.SMALL else
@@ -236,7 +236,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
self._selected_playlist_name: Optional[str] = None
self._selected_playlist_index: Optional[int] = None
- self._playlist_widgets: List[ba.Widget] = []
+ self._playlist_widgets: list[ba.Widget] = []
self._refresh(select_playlist=select_playlist)
@@ -539,7 +539,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window):
return
if self._selected_playlist_name is None:
return
- plst: Optional[List[Dict[str, Any]]]
+ plst: Optional[list[dict[str, Any]]]
if self._selected_playlist_name == '__default__':
plst = self._pvars.get_default_list_call()
else:
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/edit.py b/assets/src/ba_data/python/bastd/ui/playlist/edit.py
index cb5388a2..2b9e4c4b 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/edit.py
@@ -10,7 +10,7 @@ import ba
import _ba
if TYPE_CHECKING:
- from typing import Optional, List
+ from typing import Optional
from bastd.ui.playlist.editcontroller import PlaylistEditController
@@ -106,7 +106,7 @@ class PlaylistEditWindow(ba.Window):
on_return_press_call=self._save_press_with_sound)
ba.widget(edit=cancel_button, down_widget=self._text_field)
- self._list_widgets: List[ba.Widget] = []
+ self._list_widgets: list[ba.Widget] = []
h = 40 + x_inset
v = self._height - 172.0
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
index 5c37c539..bf3e8326 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py
@@ -10,17 +10,17 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, Type, List, Dict, Optional
+ from typing import Any, Optional
class PlaylistEditController:
"""Coordinates various UIs involved in playlist editing."""
def __init__(self,
- sessiontype: Type[ba.Session],
+ sessiontype: type[ba.Session],
existing_playlist_name: str = None,
transition: str = 'in_right',
- playlist: List[Dict[str, Any]] = None,
+ playlist: list[dict[str, Any]] = None,
playlist_name: str = None):
from ba.internal import preload_map_preview_media, filter_playlist
from bastd.ui.playlist import PlaylistTypeVars
@@ -34,7 +34,7 @@ class PlaylistEditController:
self._sessiontype = sessiontype
self._editing_game = False
- self._editing_game_type: Optional[Type[ba.GameActivity]] = None
+ self._editing_game_type: Optional[type[ba.GameActivity]] = None
self._pvars = PlaylistTypeVars(sessiontype)
self._existing_playlist_name = existing_playlist_name
self._config_name_full = self._pvars.config_name + ' Playlists'
@@ -106,15 +106,15 @@ class PlaylistEditController:
"""(internal)"""
self._name = name
- def get_playlist(self) -> List[Dict[str, Any]]:
+ def get_playlist(self) -> list[dict[str, Any]]:
"""Return the current state of the edited playlist."""
return copy.deepcopy(self._playlist)
- def set_playlist(self, playlist: List[Dict[str, Any]]) -> None:
+ def set_playlist(self, playlist: list[dict[str, Any]]) -> None:
"""Set the playlist contents."""
self._playlist = copy.deepcopy(playlist)
- def get_session_type(self) -> Type[ba.Session]:
+ def get_session_type(self) -> type[ba.Session]:
"""Return the ba.Session type for this edit-session."""
return self._sessiontype
@@ -155,19 +155,19 @@ class PlaylistEditController:
PlaylistEditWindow(editcontroller=self,
transition='in_left').get_root_widget())
- def _show_edit_ui(self, gametype: Type[ba.GameActivity],
- settings: Optional[Dict[str, Any]]) -> None:
+ def _show_edit_ui(self, gametype: type[ba.GameActivity],
+ settings: Optional[dict[str, Any]]) -> None:
self._editing_game = (settings is not None)
self._editing_game_type = gametype
assert self._sessiontype is not None
gametype.create_settings_ui(self._sessiontype, copy.deepcopy(settings),
self._edit_game_done)
- def add_game_type_selected(self, gametype: Type[ba.GameActivity]) -> None:
+ def add_game_type_selected(self, gametype: type[ba.GameActivity]) -> None:
"""(internal)"""
self._show_edit_ui(gametype=gametype, settings=None)
- def _edit_game_done(self, config: Optional[Dict[str, Any]]) -> None:
+ def _edit_game_done(self, config: Optional[dict[str, Any]]) -> None:
from bastd.ui.playlist.edit import PlaylistEditWindow
from bastd.ui.playlist.addgame import PlaylistAddGameWindow
from ba.internal import get_type_name
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
index 8533cc11..98441087 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py
@@ -12,20 +12,20 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Type, Any, Dict, Callable, Optional, Union, List
+ from typing import Any, Callable, Optional, Union
class PlaylistEditGameWindow(ba.Window):
"""Window for editing a game config."""
def __init__(self,
- gametype: Type[ba.GameActivity],
- sessiontype: Type[ba.Session],
- config: Optional[Dict[str, Any]],
- completion_call: Callable[[Optional[Dict[str, Any]]], Any],
+ gametype: type[ba.GameActivity],
+ sessiontype: type[ba.Session],
+ config: Optional[dict[str, Any]],
+ completion_call: Callable[[Optional[dict[str, Any]]], Any],
default_selection: str = None,
transition: str = 'in_right',
- edit_info: Dict[str, Any] = None):
+ edit_info: dict[str, Any] = None):
# pylint: disable=too-many-branches
# pylint: disable=too-many-statements
# pylint: disable=too-many-locals
@@ -86,7 +86,7 @@ class PlaylistEditGameWindow(ba.Window):
else:
self._settings = {}
- self._choice_selections: Dict[str, int] = {}
+ self._choice_selections: dict[str, int] = {}
uiscale = ba.app.ui.uiscale
width = 720 if uiscale is ba.UIScale.SMALL else 620
@@ -176,7 +176,7 @@ class PlaylistEditGameWindow(ba.Window):
# Keep track of all the selectable widgets we make so we can wire
# them up conveniently.
- widget_column: List[List[ba.Widget]] = []
+ widget_column: list[list[ba.Widget]] = []
# Map select button.
ba.textwidget(parent=self._subcontainer,
@@ -392,7 +392,7 @@ class PlaylistEditGameWindow(ba.Window):
# Ok now wire up the column.
try:
# pylint: disable=unsubscriptable-object
- prev_widgets: Optional[List[ba.Widget]] = None
+ prev_widgets: Optional[list[ba.Widget]] = None
for cwdg in widget_column:
if prev_widgets is not None:
# Wire our rightmost to their rightmost.
@@ -458,7 +458,7 @@ class PlaylistEditGameWindow(ba.Window):
resource='offText'))
self._settings[setting_name] = value
- def _getconfig(self) -> Dict[str, Any]:
+ def _getconfig(self) -> dict[str, Any]:
settings = copy.deepcopy(self._settings)
settings['map'] = self._map
return {'settings': settings}
@@ -468,7 +468,7 @@ class PlaylistEditGameWindow(ba.Window):
def _inc(self, ctrl: ba.Widget, min_val: Union[int, float],
max_val: Union[int, float], increment: Union[int, float],
- setting_type: Type, setting_name: str) -> None:
+ setting_type: type, setting_name: str) -> None:
if setting_type == float:
val = float(cast(str, ba.textwidget(query=ctrl)))
else:
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
index 2381f6c5..fc79ce76 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py
@@ -11,18 +11,18 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Type, Any, Callable, Dict, List, Tuple, Optional
+ from typing import Any, Callable, Optional
class PlaylistMapSelectWindow(ba.Window):
"""Window to select a map."""
def __init__(self,
- gametype: Type[ba.GameActivity],
- sessiontype: Type[ba.Session],
- config: Dict[str, Any],
- edit_info: Dict[str, Any],
- completion_call: Callable[[Optional[Dict[str, Any]]], Any],
+ gametype: type[ba.GameActivity],
+ sessiontype: type[ba.Session],
+ config: dict[str, Any],
+ edit_info: dict[str, Any],
+ completion_call: Callable[[Optional[dict[str, Any]]], Any],
transition: str = 'in_right'):
from ba.internal import get_filtered_map_name
self._gametype = gametype
@@ -30,7 +30,7 @@ class PlaylistMapSelectWindow(ba.Window):
self._config = config
self._completion_call = completion_call
self._edit_info = edit_info
- self._maps: List[Tuple[str, ba.Texture]] = []
+ self._maps: list[tuple[str, ba.Texture]] = []
try:
self._previous_map = get_filtered_map_name(
config['settings']['map'])
diff --git a/assets/src/ba_data/python/bastd/ui/playlist/share.py b/assets/src/ba_data/python/bastd/ui/playlist/share.py
index 0cd1ea4b..8355c39a 100644
--- a/assets/src/ba_data/python/bastd/ui/playlist/share.py
+++ b/assets/src/ba_data/python/bastd/ui/playlist/share.py
@@ -12,7 +12,7 @@ import ba
from bastd.ui import promocode
if TYPE_CHECKING:
- from typing import Any, Callable, Dict, Optional, Tuple
+ from typing import Any, Callable, Optional
class SharePlaylistImportWindow(promocode.PromoCodeWindow):
@@ -26,7 +26,7 @@ class SharePlaylistImportWindow(promocode.PromoCodeWindow):
origin_widget=origin_widget)
self._on_success_callback = on_success_callback
- def _on_import_response(self, response: Optional[Dict[str, Any]]) -> None:
+ def _on_import_response(self, response: Optional[dict[str, Any]]) -> None:
if response is None:
ba.screenmessage(ba.Lstr(resource='errorText'), color=(1, 0, 0))
ba.playsound(ba.getsound('error'))
@@ -67,7 +67,7 @@ class SharePlaylistResultsWindow(ba.Window):
def __init__(self,
name: str,
data: str,
- origin: Tuple[float, float] = (0.0, 0.0)):
+ origin: tuple[float, float] = (0.0, 0.0)):
del origin # unused arg
self._width = 450
self._height = 300
diff --git a/assets/src/ba_data/python/bastd/ui/playoptions.py b/assets/src/ba_data/python/bastd/ui/playoptions.py
index af6725d9..e4b16d5a 100644
--- a/assets/src/ba_data/python/bastd/ui/playoptions.py
+++ b/assets/src/ba_data/python/bastd/ui/playoptions.py
@@ -11,16 +11,16 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Type, Tuple, Optional, Union
+ from typing import Any, Optional, Union
class PlayOptionsWindow(popup.PopupWindow):
"""A popup window for configuring play options."""
def __init__(self,
- sessiontype: Type[ba.Session],
+ sessiontype: type[ba.Session],
playlist: str,
- scale_origin: Tuple[float, float],
+ scale_origin: tuple[float, float],
delegate: Any = None):
# FIXME: Tidy this up.
# pylint: disable=too-many-branches
@@ -90,7 +90,7 @@ class PlayOptionsWindow(popup.PopupWindow):
game_count = len(plst)
for entry in plst:
mapname = entry['settings']['map']
- maptype: Optional[Type[ba.Map]]
+ maptype: Optional[type[ba.Map]]
try:
maptype = get_map_class(mapname)
except ba.NotFoundError:
diff --git a/assets/src/ba_data/python/bastd/ui/popup.py b/assets/src/ba_data/python/bastd/ui/popup.py
index 500c3796..d89374b2 100644
--- a/assets/src/ba_data/python/bastd/ui/popup.py
+++ b/assets/src/ba_data/python/bastd/ui/popup.py
@@ -11,20 +11,20 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Any, Sequence, Callable, Optional, List, Union
+ from typing import Any, Sequence, Callable, Optional, Union
class PopupWindow:
"""A transient window that positions and scales itself for visibility."""
def __init__(self,
- position: Tuple[float, float],
- size: Tuple[float, float],
+ position: tuple[float, float],
+ size: tuple[float, float],
scale: float = 1.0,
- offset: Tuple[float, float] = (0, 0),
- bg_color: Tuple[float, float, float] = (0.35, 0.55, 0.15),
- focus_position: Tuple[float, float] = (0, 0),
- focus_size: Tuple[float, float] = None,
+ offset: tuple[float, float] = (0, 0),
+ bg_color: tuple[float, float, float] = (0.35, 0.55, 0.15),
+ focus_position: tuple[float, float] = (0, 0),
+ focus_size: tuple[float, float] = None,
toolbar_visibility: str = 'menu_minimal_no_back'):
# pylint: disable=too-many-locals
if focus_size is None:
@@ -101,7 +101,7 @@ class PopupMenuWindow(PopupWindow):
"""A menu built using popup-window functionality."""
def __init__(self,
- position: Tuple[float, float],
+ position: tuple[float, float],
choices: Sequence[str],
current_choice: str,
delegate: Any = None,
@@ -121,7 +121,7 @@ class PopupMenuWindow(PopupWindow):
# FIXME: For the moment we base our width on these strings so
# we need to flatten them.
- choices_display_fin: List[str] = []
+ choices_display_fin: list[str] = []
for choice_display in choices_display:
choices_display_fin.append(choice_display.evaluate())
@@ -264,7 +264,7 @@ class PopupMenu:
def __init__(self,
parent: ba.Widget,
- position: Tuple[float, float],
+ position: tuple[float, float],
choices: Sequence[str],
current_choice: str = None,
on_value_change_call: Callable[[str], Any] = None,
@@ -275,7 +275,7 @@ class PopupMenu:
scale: float = None,
choices_disabled: Sequence[str] = None,
choices_display: Sequence[ba.Lstr] = None,
- button_size: Tuple[float, float] = (160.0, 50.0),
+ button_size: tuple[float, float] = (160.0, 50.0),
autoselect: bool = True):
# pylint: disable=too-many-locals
if choices_disabled is None:
diff --git a/assets/src/ba_data/python/bastd/ui/profile/browser.py b/assets/src/ba_data/python/bastd/ui/profile/browser.py
index e82fd29d..8d0ac7e7 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/browser.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, List, Dict
+ from typing import Any, Optional
class ProfileBrowserWindow(ba.Window):
@@ -39,7 +39,7 @@ class ProfileBrowserWindow(ba.Window):
ba.app.pause()
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -162,9 +162,9 @@ class ProfileBrowserWindow(ba.Window):
border=2,
margin=0)
v -= 255
- self._profiles: Optional[Dict[str, Dict[str, Any]]] = None
+ self._profiles: Optional[dict[str, dict[str, Any]]] = None
self._selected_profile = selected_profile
- self._profile_widgets: List[ba.Widget] = []
+ self._profile_widgets: list[ba.Widget] = []
self._refresh()
self._restore_state()
diff --git a/assets/src/ba_data/python/bastd/ui/profile/edit.py b/assets/src/ba_data/python/bastd/ui/profile/edit.py
index c63cd165..d7df39ac 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/edit.py
@@ -11,7 +11,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional, List
+ from typing import Optional
from bastd.ui.colorpicker import ColorPicker
@@ -38,9 +38,9 @@ class EditProfileWindow(ba.Window):
self._in_main_menu = in_main_menu
self._existing_profile = existing_profile
self._r = 'editProfileWindow'
- self._spazzes: List[str] = []
- self._icon_textures: List[ba.Texture] = []
- self._icon_tint_textures: List[ba.Texture] = []
+ self._spazzes: list[str] = []
+ self._icon_textures: list[ba.Texture] = []
+ self._icon_tint_textures: list[ba.Texture] = []
# Grab profile colors or pick random ones.
self._color, self._highlight = get_player_profile_colors(
@@ -523,7 +523,7 @@ class EditProfileWindow(ba.Window):
tint_color=self._color,
tint2_color=self._highlight)
- def _make_picker(self, picker_type: str, origin: Tuple[float,
+ def _make_picker(self, picker_type: str, origin: tuple[float,
float]) -> None:
from bastd.ui import colorpicker
if picker_type == 'color':
@@ -550,12 +550,12 @@ class EditProfileWindow(ba.Window):
selected_profile=self._existing_profile,
in_main_menu=self._in_main_menu).get_root_widget())
- def _set_color(self, color: Tuple[float, float, float]) -> None:
+ def _set_color(self, color: tuple[float, float, float]) -> None:
self._color = color
if self._color_button:
ba.buttonwidget(edit=self._color_button, color=color)
- def _set_highlight(self, color: Tuple[float, float, float]) -> None:
+ def _set_highlight(self, color: tuple[float, float, float]) -> None:
self._highlight = color
if self._highlight_button:
ba.buttonwidget(edit=self._highlight_button, color=color)
@@ -575,7 +575,7 @@ class EditProfileWindow(ba.Window):
print('color_picker_closing got unknown tag ' + str(tag))
def color_picker_selected_color(self, picker: ColorPicker,
- color: Tuple[float, float, float]) -> None:
+ color: tuple[float, float, float]) -> None:
"""Called when a color is selected in a color picker."""
if not self._root_widget:
return
diff --git a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
index c28777fd..5d2c8f16 100644
--- a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
+++ b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py
@@ -12,7 +12,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Dict
+ from typing import Any, Optional
from bastd.ui.profile.edit import EditProfileWindow
@@ -134,7 +134,7 @@ class ProfileUpgradeWindow(ba.Window):
repeat=True)
self._update()
- def _profile_check_result(self, result: Optional[Dict[str, Any]]) -> None:
+ def _profile_check_result(self, result: Optional[dict[str, Any]]) -> None:
if result is None:
ba.textwidget(
edit=self._status_text,
diff --git a/assets/src/ba_data/python/bastd/ui/promocode.py b/assets/src/ba_data/python/bastd/ui/promocode.py
index dfd1fddd..ce416a54 100644
--- a/assets/src/ba_data/python/bastd/ui/promocode.py
+++ b/assets/src/ba_data/python/bastd/ui/promocode.py
@@ -11,7 +11,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Optional, Tuple
+ from typing import Optional
class PromoCodeWindow(ba.Window):
@@ -19,7 +19,7 @@ class PromoCodeWindow(ba.Window):
def __init__(self, modal: bool = False, origin_widget: ba.Widget = None):
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/purchase.py b/assets/src/ba_data/python/bastd/ui/purchase.py
index 519fb489..c516b43e 100644
--- a/assets/src/ba_data/python/bastd/ui/purchase.py
+++ b/assets/src/ba_data/python/bastd/ui/purchase.py
@@ -10,14 +10,14 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Dict, List, Optional
+ from typing import Any, Optional
class PurchaseWindow(ba.Window):
"""Window for purchasing one or more items."""
def __init__(self,
- items: List[str],
+ items: list[str],
transition: str = 'in_right',
header_text: ba.Lstr = None):
from ba.internal import get_store_item_display_size
@@ -50,7 +50,7 @@ class PurchaseWindow(ba.Window):
scale=1.2,
color=(1, 0.8, 0.3, 1))
size = get_store_item_display_size(items[0])
- display: Dict[str, Any] = {}
+ display: dict[str, Any] = {}
storeitemui.instantiate_store_item_display(
items[0],
display,
diff --git a/assets/src/ba_data/python/bastd/ui/radiogroup.py b/assets/src/ba_data/python/bastd/ui/radiogroup.py
index 20d3f9cc..39f2aff7 100644
--- a/assets/src/ba_data/python/bastd/ui/radiogroup.py
+++ b/assets/src/ba_data/python/bastd/ui/radiogroup.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import List, Any, Callable, Sequence
+ from typing import Any, Callable, Sequence
def make_radio_group(check_boxes: Sequence[ba.Widget],
@@ -17,7 +17,7 @@ def make_radio_group(check_boxes: Sequence[ba.Widget],
value_change_call: Callable[[str], Any]) -> None:
"""Link the provided check_boxes together into a radio group."""
- def _radio_press(check_string: str, other_check_boxes: List[ba.Widget],
+ def _radio_press(check_string: str, other_check_boxes: list[ba.Widget],
val: int) -> None:
if val == 1:
value_change_call(check_string)
diff --git a/assets/src/ba_data/python/bastd/ui/serverdialog.py b/assets/src/ba_data/python/bastd/ui/serverdialog.py
index 17565036..1f98ef7b 100644
--- a/assets/src/ba_data/python/bastd/ui/serverdialog.py
+++ b/assets/src/ba_data/python/bastd/ui/serverdialog.py
@@ -10,13 +10,13 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Dict, Optional
+ from typing import Any, Optional
class ServerDialogWindow(ba.Window):
"""A dialog window driven by the master-server."""
- def __init__(self, data: Dict[str, Any]):
+ def __init__(self, data: dict[str, Any]):
self._dialog_id = data['dialogID']
txt = ba.Lstr(translate=('serverResponses', data['text']),
subs=data.get('subs', [])).evaluate()
diff --git a/assets/src/ba_data/python/bastd/ui/settings/advanced.py b/assets/src/ba_data/python/bastd/ui/settings/advanced.py
index 5d428cb7..d281b4f3 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/advanced.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/advanced.py
@@ -11,7 +11,7 @@ import ba
from bastd.ui import popup as popup_ui
if TYPE_CHECKING:
- from typing import Tuple, Any, Optional, List, Dict
+ from typing import Any, Optional
class AdvancedSettingsWindow(ba.Window):
@@ -31,7 +31,7 @@ class AdvancedSettingsWindow(ba.Window):
app = ba.app
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -57,8 +57,8 @@ class AdvancedSettingsWindow(ba.Window):
1.4 if uiscale is ba.UIScale.MEDIUM else 1.0),
stack_offset=(0, -25) if uiscale is ba.UIScale.SMALL else (0, 0)))
self._prev_lang = ''
- self._prev_lang_list: List[str] = []
- self._complete_langs_list: Optional[List] = None
+ self._prev_lang_list: list[str] = []
+ self._complete_langs_list: Optional[list] = None
self._complete_langs_error = False
self._language_popup: Optional[popup_ui.PopupMenu] = None
@@ -693,7 +693,7 @@ class AdvancedSettingsWindow(ba.Window):
self._save_state()
ba.timer(0.1, ba.WeakCall(self._rebuild), timetype=ba.TimeType.REAL)
- def _completed_langs_cb(self, results: Optional[Dict[str, Any]]) -> None:
+ def _completed_langs_cb(self, results: Optional[dict[str, Any]]) -> None:
if results is not None and results['langs'] is not None:
self._complete_langs_list = results['langs']
self._complete_langs_error = False
diff --git a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
index ede3823d..cf44b215 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional, Union
+ from typing import Optional, Union
class AllSettingsWindow(ba.Window):
@@ -28,7 +28,7 @@ class AllSettingsWindow(ba.Window):
threading.Thread(target=self._preload_modules).start()
ba.set_analytics_screen('Settings Window')
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/settings/audio.py b/assets/src/ba_data/python/bastd/ui/settings/audio.py
index 99f98d93..0e27e38f 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/audio.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/audio.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional
+ from typing import Optional
class AudioSettingsWindow(ba.Window):
@@ -28,7 +28,7 @@ class AudioSettingsWindow(ba.Window):
music = ba.app.music
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/settings/controls.py b/assets/src/ba_data/python/bastd/ui/settings/controls.py
index ee06d279..81aa0715 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/controls.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/controls.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional
+ from typing import Optional
class ControlsSettingsWindow(ba.Window):
@@ -27,7 +27,7 @@ class ControlsSettingsWindow(ba.Window):
from bastd.ui import popup as popup_ui
self._have_selected_child = False
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
# If they provided an origin-widget, scale up from that.
if origin_widget is not None:
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
index 4c345094..b9511382 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Dict, Any, Optional, Union, Tuple, Callable
+ from typing import Any, Optional, Union, Callable
class GamepadSettingsWindow(ba.Window):
@@ -62,7 +62,7 @@ class GamepadSettingsWindow(ba.Window):
for widget in self._root_widget.get_children():
widget.delete()
- self._textwidgets: Dict[str, ba.Widget] = {}
+ self._textwidgets: dict[str, ba.Widget] = {}
# If we were supplied with settings, we're a secondary joystick and
# just operate on that. in the other (normal) case we make our own.
@@ -348,7 +348,7 @@ class GamepadSettingsWindow(ba.Window):
"""(internal)"""
return self._is_secondary
- def get_settings(self) -> Dict[str, Any]:
+ def get_settings(self) -> dict[str, Any]:
"""(internal)"""
assert self._settings is not None
return self._settings
@@ -528,7 +528,7 @@ class GamepadSettingsWindow(ba.Window):
return self._input.get_button_name(self._settings[control])
return ba.Lstr(resource=self._r + '.unsetText')
- def _gamepad_event(self, control: str, event: Dict[str, Any],
+ def _gamepad_event(self, control: str, event: dict[str, Any],
dialog: AwaitGamepadInputWindow) -> None:
# pylint: disable=too-many-nested-blocks
# pylint: disable=too-many-branches
@@ -647,8 +647,8 @@ class GamepadSettingsWindow(ba.Window):
dialog.die()
def _capture_button(self,
- pos: Tuple[float, float],
- color: Tuple[float, float, float],
+ pos: tuple[float, float],
+ color: tuple[float, float, float],
texture: ba.Texture,
button: str,
scale: float = 1.0,
@@ -713,7 +713,7 @@ class GamepadSettingsWindow(ba.Window):
assert self._settings is not None
if self._input:
dst = get_input_device_config(self._input, default=True)
- dst2: Dict[str, Any] = dst[0][dst[1]]
+ dst2: dict[str, Any] = dst[0][dst[1]]
dst2.clear()
# Store any values that aren't -1.
@@ -752,7 +752,7 @@ class AwaitGamepadInputWindow(ba.Window):
self,
gamepad: ba.InputDevice,
button: str,
- callback: Callable[[str, Dict[str, Any], AwaitGamepadInputWindow],
+ callback: Callable[[str, dict[str, Any], AwaitGamepadInputWindow],
Any],
message: ba.Lstr = None,
message2: ba.Lstr = None):
@@ -815,7 +815,7 @@ class AwaitGamepadInputWindow(ba.Window):
if self._root_widget:
ba.containerwidget(edit=self._root_widget, transition='out_scale')
- def _event_callback(self, event: Dict[str, Any]) -> None:
+ def _event_callback(self, event: dict[str, Any]) -> None:
input_device = event['input_device']
assert isinstance(input_device, ba.InputDevice)
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
index 07c1074d..116d0fec 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Dict, Tuple, Optional, Any
+ from typing import Optional, Any
from bastd.ui.settings import gamepad as gpsui
@@ -27,7 +27,7 @@ class GamepadAdvancedSettingsWindow(ba.Window):
self._width = 900 if uiscale is ba.UIScale.SMALL else 700
self._x_inset = x_inset = 100 if uiscale is ba.UIScale.SMALL else 0
self._height = 402 if uiscale is ba.UIScale.SMALL else 512
- self._textwidgets: Dict[str, ba.Widget] = {}
+ self._textwidgets: dict[str, ba.Widget] = {}
super().__init__(root_widget=ba.containerwidget(
transition='in_scale',
size=(self._width, self._height),
@@ -331,10 +331,10 @@ class GamepadAdvancedSettingsWindow(ba.Window):
def _capture_button(
self,
- pos: Tuple[float, float],
+ pos: tuple[float, float],
name: ba.Lstr,
control: str,
- message: Optional[ba.Lstr] = None) -> Tuple[ba.Widget, ba.Widget]:
+ message: Optional[ba.Lstr] = None) -> tuple[ba.Widget, ba.Widget]:
if message is None:
message = ba.Lstr(resource=self._parent_window.get_r() +
'.pressAnyButtonText')
@@ -398,13 +398,13 @@ class GamepadAdvancedSettingsWindow(ba.Window):
self,
name: ba.Lstr,
control: str,
- position: Tuple[float, float],
+ position: tuple[float, float],
min_val: float = 0.0,
max_val: float = 100.0,
increment: float = 1.0,
change_sound: bool = True,
x_offset: float = 0.0,
- displayname: ba.Lstr = None) -> Tuple[ba.Widget, ba.Widget]:
+ displayname: ba.Lstr = None) -> tuple[ba.Widget, ba.Widget]:
if displayname is None:
displayname = name
@@ -455,7 +455,7 @@ class GamepadAdvancedSettingsWindow(ba.Window):
ba.textwidget(edit=self._textwidgets[control],
text=self._parent_window.get_control_value_name(control))
- def _gamepad_event(self, control: str, event: Dict[str, Any],
+ def _gamepad_event(self, control: str, event: dict[str, Any],
dialog: gpsui.AwaitGamepadInputWindow) -> None:
ext = self._parent_window.get_ext()
if control in ['triggerRun1' + ext, 'triggerRun2' + ext]:
diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
index 71b867c8..8053fe30 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py
@@ -10,10 +10,10 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Dict, Any
+ from typing import Any
-def gamepad_configure_callback(event: Dict[str, Any]) -> None:
+def gamepad_configure_callback(event: dict[str, Any]) -> None:
"""Respond to a gamepad button press during config selection."""
from ba.internal import get_remote_app_name
from bastd.ui.settings import gamepad
diff --git a/assets/src/ba_data/python/bastd/ui/settings/graphics.py b/assets/src/ba_data/python/bastd/ui/settings/graphics.py
index df3e89ca..b4e5955a 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/graphics.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/graphics.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional
+ from typing import Optional
class GraphicsSettingsWindow(ba.Window):
@@ -25,7 +25,7 @@ class GraphicsSettingsWindow(ba.Window):
from bastd.ui import popup
from bastd.ui.config import ConfigCheckBox, ConfigNumberEdit
# if they provided an origin-widget, scale up from that
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
diff --git a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
index 7482381c..42c634cb 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py
@@ -10,7 +10,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Dict, Tuple, Any, Optional
+ from typing import Any, Optional
class ConfigKeyboardWindow(ba.Window):
@@ -47,7 +47,7 @@ class ConfigKeyboardWindow(ba.Window):
widget.delete()
# Fill our temp config with present values.
- self._settings: Dict[str, int] = {}
+ self._settings: dict[str, int] = {}
for button in [
'buttonJump', 'buttonPunch', 'buttonBomb', 'buttonPickUp',
'buttonStart', 'buttonStart2', 'buttonUp', 'buttonDown',
@@ -165,8 +165,8 @@ class ConfigKeyboardWindow(ba.Window):
scale=1.0)
def _capture_button(self,
- pos: Tuple[float, float],
- color: Tuple[float, float, float],
+ pos: tuple[float, float],
+ color: tuple[float, float, float],
texture: ba.Texture,
button: str,
scale: float = 1.0) -> None:
@@ -224,7 +224,7 @@ class ConfigKeyboardWindow(ba.Window):
return
dst = get_input_device_config(self._input, default=False)
- dst2: Dict[str, Any] = dst[0][dst[1]]
+ dst2: dict[str, Any] = dst[0][dst[1]]
dst2.clear()
# Store any values that aren't -1.
@@ -292,7 +292,7 @@ class AwaitKeyboardInputWindow(ba.Window):
if self._root_widget:
ba.containerwidget(edit=self._root_widget, transition='out_left')
- def _button_callback(self, event: Dict[str, Any]) -> None:
+ def _button_callback(self, event: dict[str, Any]) -> None:
self._settings[self._capture_button] = event['button']
if event['type'] == 'BUTTONDOWN':
bname = event['input_device'].get_button_name(event['button'])
diff --git a/assets/src/ba_data/python/bastd/ui/settings/plugins.py b/assets/src/ba_data/python/bastd/ui/settings/plugins.py
index 72e44805..13706eff 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/plugins.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/plugins.py
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Tuple, Optional, Dict
+ from typing import Optional
class PluginSettingsWindow(ba.Window):
@@ -22,7 +22,7 @@ class PluginSettingsWindow(ba.Window):
app = ba.app
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -98,7 +98,7 @@ class PluginSettingsWindow(ba.Window):
color=(1, 0, 0))
ba.playsound(ba.getsound('error'))
pluglist = ba.app.plugins.potential_plugins
- plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {})
+ plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {})
assert isinstance(plugstates, dict)
for i, availplug in enumerate(pluglist):
active = availplug.class_path in ba.app.plugins.active_plugins
@@ -134,7 +134,7 @@ class PluginSettingsWindow(ba.Window):
ba.screenmessage(
ba.Lstr(resource='settingsWindowAdvanced.mustRestartText'),
color=(1.0, 0.5, 0.0))
- plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {})
+ plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {})
assert isinstance(plugstates, dict)
plugstate = plugstates.setdefault(plug.class_path, {})
plugstate['enabled'] = value
diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py
index 810311da..51f237e8 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/testing.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py
@@ -11,7 +11,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Dict, List
+ from typing import Any
class TestingWindow(ba.Window):
@@ -19,7 +19,7 @@ class TestingWindow(ba.Window):
def __init__(self,
title: ba.Lstr,
- entries: List[Dict[str, Any]],
+ entries: list[dict[str, Any]],
transition: str = 'in_right'):
uiscale = ba.app.ui.uiscale
self._width = 600
@@ -146,7 +146,7 @@ class TestingWindow(ba.Window):
right_widget=btn,
on_activate_call=self._on_reset_press)
- def _get_entry(self, name: str) -> Dict[str, Any]:
+ def _get_entry(self, name: str) -> dict[str, Any]:
for entry in self._entries:
if entry['name'] == name:
return entry
diff --git a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py
index 7065d463..a899caac 100644
--- a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py
+++ b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py
@@ -10,7 +10,7 @@ import ba
from bastd.ui.settings import testing
if TYPE_CHECKING:
- from typing import Any, Dict, List
+ from typing import Any
class VRTestingWindow(testing.TestingWindow):
@@ -18,7 +18,7 @@ class VRTestingWindow(testing.TestingWindow):
def __init__(self, transition: str = 'in_right'):
- entries: List[Dict[str, Any]] = []
+ entries: list[dict[str, Any]] = []
app = ba.app
# these are gear-vr only
if app.platform == 'android' and app.subplatform == 'oculus':
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
index 7989d329..cc125175 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py
@@ -11,7 +11,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, List, Tuple, Dict
+ from typing import Any, Optional
class SoundtrackBrowserWindow(ba.Window):
@@ -24,7 +24,7 @@ class SoundtrackBrowserWindow(ba.Window):
# pylint: disable=too-many-statements
# If they provided an origin-widget, scale up from that.
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -81,7 +81,7 @@ class SoundtrackBrowserWindow(ba.Window):
b_color = (0.6, 0.53, 0.63)
b_textcolor = (0.75, 0.7, 0.8)
lock_tex = ba.gettexture('lock')
- self._lock_images: List[ba.Widget] = []
+ self._lock_images: list[ba.Widget] = []
scl = (1.0 if uiscale is ba.UIScale.SMALL else
1.13 if uiscale is ba.UIScale.MEDIUM else 1.4)
@@ -195,10 +195,10 @@ class SoundtrackBrowserWindow(ba.Window):
if ba.app.ui.use_toolbars else self._scrollwidget)
self._col = ba.columnwidget(parent=scrollwidget, border=2, margin=0)
- self._soundtracks: Optional[Dict[str, Any]] = None
+ self._soundtracks: Optional[dict[str, Any]] = None
self._selected_soundtrack: Optional[str] = None
self._selected_soundtrack_index: Optional[int] = None
- self._soundtrack_widgets: List[ba.Widget] = []
+ self._soundtrack_widgets: list[ba.Widget] = []
self._allow_changing_soundtracks = False
self._refresh()
if self._back_button is not None:
@@ -259,7 +259,7 @@ class SoundtrackBrowserWindow(ba.Window):
if self._selected_soundtrack is None:
return
- sdtk: Dict[str, Any]
+ sdtk: dict[str, Any]
if self._selected_soundtrack == '__default__':
sdtk = {}
else:
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
index e264d115..7e08f0f0 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py
@@ -11,14 +11,14 @@ from typing import TYPE_CHECKING, cast
import ba
if TYPE_CHECKING:
- from typing import Any, Dict, Union, Optional
+ from typing import Any, Union, Optional
class SoundtrackEditWindow(ba.Window):
"""Window for editing a soundtrack."""
def __init__(self,
- existing_soundtrack: Optional[Union[str, Dict[str, Any]]],
+ existing_soundtrack: Optional[Union[str, dict[str, Any]]],
transition: str = 'in_right'):
# pylint: disable=too-many-statements
appconfig = ba.app.config
@@ -147,7 +147,7 @@ class SoundtrackEditWindow(ba.Window):
claims_tab=True,
selection_loops_to_parent=True)
- self._song_type_buttons: Dict[str, ba.Widget] = {}
+ self._song_type_buttons: dict[str, ba.Widget] = {}
self._refresh()
ba.buttonwidget(edit=cancel_button, on_activate_call=self._cancel)
ba.containerwidget(edit=self._root_widget, cancel_button=cancel_button)
@@ -266,7 +266,7 @@ class SoundtrackEditWindow(ba.Window):
prev_test_button = btn
@classmethod
- def _restore_editor(cls, state: Dict[str, Any], musictype: str,
+ def _restore_editor(cls, state: dict[str, Any], musictype: str,
entry: Any) -> None:
music = ba.app.music
diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
index 1f149b02..ff50e6b9 100644
--- a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
+++ b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
import ba
if TYPE_CHECKING:
- from typing import Any, List, Optional, Callable
+ from typing import Any, Optional, Callable
class MacMusicAppPlaylistSelectWindow(ba.Window):
@@ -66,7 +66,7 @@ class MacMusicAppPlaylistSelectWindow(ba.Window):
ba.containerwidget(edit=self._root_widget,
selected_child=self._scrollwidget)
- def _playlists_cb(self, playlists: List[str]) -> None:
+ def _playlists_cb(self, playlists: list[str]) -> None:
if self._column:
for widget in self._column.get_children():
widget.delete()
diff --git a/assets/src/ba_data/python/bastd/ui/specialoffer.py b/assets/src/ba_data/python/bastd/ui/specialoffer.py
index 3e3a5421..5b2c2ab6 100644
--- a/assets/src/ba_data/python/bastd/ui/specialoffer.py
+++ b/assets/src/ba_data/python/bastd/ui/specialoffer.py
@@ -11,13 +11,13 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Dict, Optional, Union
+ from typing import Any, Optional, Union
class SpecialOfferWindow(ba.Window):
"""Window for presenting sales/etc."""
- def __init__(self, offer: Dict[str, Any], transition: str = 'in_right'):
+ def __init__(self, offer: dict[str, Any], transition: str = 'in_right'):
# pylint: disable=too-many-statements
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
@@ -159,7 +159,7 @@ class SpecialOfferWindow(ba.Window):
timetype=ba.TimeType.REAL)
size = get_store_item_display_size(self._offer_item)
- display: Dict[str, Any] = {}
+ display: dict[str, Any] = {}
storeitemui.instantiate_store_item_display(
self._offer_item,
display,
diff --git a/assets/src/ba_data/python/bastd/ui/store/browser.py b/assets/src/ba_data/python/bastd/ui/store/browser.py
index 990f4067..6d757c2a 100644
--- a/assets/src/ba_data/python/bastd/ui/store/browser.py
+++ b/assets/src/ba_data/python/bastd/ui/store/browser.py
@@ -14,8 +14,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import (Any, Callable, Optional, Tuple, Dict, Union, Sequence,
- List)
+ from typing import Any, Callable, Optional, Union, Sequence
class StoreBrowserWindow(ba.Window):
@@ -46,7 +45,7 @@ class StoreBrowserWindow(ba.Window):
ba.set_analytics_screen('Store Window')
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
# If they provided an origin-widget, scale up from that.
if origin_widget is not None:
@@ -57,7 +56,7 @@ class StoreBrowserWindow(ba.Window):
self._transition_out = 'out_right'
scale_origin = None
- self.button_infos: Optional[Dict[str, Dict[str, Any]]] = None
+ self.button_infos: Optional[dict[str, dict[str, Any]]] = None
self.update_buttons_timer: Optional[ba.Timer] = None
self._status_textwidget_update_timer = None
@@ -185,8 +184,8 @@ class StoreBrowserWindow(ba.Window):
size=(self._width - tab_buffer_h, 50),
on_select_call=self._set_tab)
- self._purchasable_count_widgets: Dict[StoreBrowserWindow.TabID,
- Dict[str, Any]] = {}
+ self._purchasable_count_widgets: dict[StoreBrowserWindow.TabID,
+ dict[str, Any]] = {}
# Create our purchasable-items tags and have them update over time.
for tab_id, tab in self._tab_row.tabs.items():
@@ -388,7 +387,7 @@ class StoreBrowserWindow(ba.Window):
ba.WeakCall(self._on_response, data),
timetype=ba.TimeType.REAL)
- def _on_response(self, data: Optional[Dict[str, Any]]) -> None:
+ def _on_response(self, data: Optional[dict[str, Any]]) -> None:
# FIXME: clean this up.
# pylint: disable=protected-access
window = self._window()
@@ -402,7 +401,7 @@ class StoreBrowserWindow(ba.Window):
# Actually start the purchase locally.
def _purchase_check_result(self, item: str, is_ticket_purchase: bool,
- result: Optional[Dict[str, Any]]) -> None:
+ result: Optional[dict[str, Any]]) -> None:
if result is None:
ba.playsound(ba.getsound('error'))
ba.screenmessage(
@@ -685,7 +684,7 @@ class StoreBrowserWindow(ba.Window):
ba.textwidget(edit=b_info['descriptionText'],
color=description_color)
- def _on_response(self, data: Optional[Dict[str, Any]]) -> None:
+ def _on_response(self, data: Optional[dict[str, Any]]) -> None:
# pylint: disable=too-many-statements
# clear status text..
@@ -710,7 +709,7 @@ class StoreBrowserWindow(ba.Window):
class _Store:
def __init__(self, store_window: StoreBrowserWindow,
- sdata: Dict[str, Any], width: float):
+ sdata: dict[str, Any], width: float):
from ba.internal import (get_store_item_display_size,
get_store_layout)
self._store_window = store_window
@@ -855,7 +854,7 @@ class StoreBrowserWindow(ba.Window):
maxwidth=700,
transition_delay=0.4)
- prev_row_buttons: Optional[List] = None
+ prev_row_buttons: Optional[list] = None
this_row_buttons = []
delay = 0.3
@@ -881,7 +880,7 @@ class StoreBrowserWindow(ba.Window):
math.floor((self._width - boffs_h - 20) /
(b_width + button_spacing)))
col = 0
- item: Dict[str, Any]
+ item: dict[str, Any]
assert self._store_window.button_infos is not None
for i, item_name in enumerate(section['items']):
item = self._store_window.button_infos[
diff --git a/assets/src/ba_data/python/bastd/ui/store/item.py b/assets/src/ba_data/python/bastd/ui/store/item.py
index 841ae1f2..ea49deda 100644
--- a/assets/src/ba_data/python/bastd/ui/store/item.py
+++ b/assets/src/ba_data/python/bastd/ui/store/item.py
@@ -9,13 +9,13 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Tuple, Dict, Optional
+ from typing import Any, Optional
def instantiate_store_item_display(item_name: str,
- item: Dict[str, Any],
+ item: dict[str, Any],
parent_widget: ba.Widget,
- b_pos: Tuple[float, float],
+ b_pos: tuple[float, float],
b_width: float,
b_height: float,
boffs_h: float = 0.0,
diff --git a/assets/src/ba_data/python/bastd/ui/tabs.py b/assets/src/ba_data/python/bastd/ui/tabs.py
index 62e8a2fd..b3dc38a0 100644
--- a/assets/src/ba_data/python/bastd/ui/tabs.py
+++ b/assets/src/ba_data/python/bastd/ui/tabs.py
@@ -10,15 +10,15 @@ from typing import TYPE_CHECKING, TypeVar, Generic
import ba
if TYPE_CHECKING:
- from typing import Any, Callable, Dict, Tuple, List, Sequence, Optional
+ from typing import Any, Callable, Optional
@dataclass
class Tab:
"""Info for an individual tab in a TabRow"""
button: ba.Widget
- position: Tuple[float, float]
- size: Tuple[float, float]
+ position: tuple[float, float]
+ size: tuple[float, float]
T = TypeVar('T')
@@ -32,13 +32,13 @@ class TabRow(Generic[T]):
def __init__(self,
parent: ba.Widget,
- tabdefs: List[Tuple[T, ba.Lstr]],
- pos: Tuple[float, float],
- size: Tuple[float, float],
+ tabdefs: list[tuple[T, ba.Lstr]],
+ pos: tuple[float, float],
+ size: tuple[float, float],
on_select_call: Callable[[T], None] = None) -> None:
if not tabdefs:
raise ValueError('At least one tab def is required')
- self.tabs: Dict[T, Tab] = {}
+ self.tabs: dict[T, Tab] = {}
tab_pos_v = pos[1]
tab_button_width = float(size[0]) / len(tabdefs)
tab_spacing = (250.0 - tab_button_width) * 0.06
diff --git a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py
index 9f8450e7..fc789717 100644
--- a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py
+++ b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py
@@ -10,14 +10,14 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Tuple, List, Sequence
+ from typing import Sequence
from bastd.ui.colorpicker import ColorPicker
class TeamNamesColorsWindow(popup.PopupWindow):
"""A popup window for customizing team names and colors."""
- def __init__(self, scale_origin: Tuple[float, float]):
+ def __init__(self, scale_origin: tuple[float, float]):
from ba.internal import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES
self._width = 500
self._height = 330
@@ -44,8 +44,8 @@ class TeamNamesColorsWindow(popup.PopupWindow):
self._colors = list(
appconfig.get('Custom Team Colors', DEFAULT_TEAM_COLORS))
- self._color_buttons: List[ba.Widget] = []
- self._color_text_fields: List[ba.Widget] = []
+ self._color_buttons: list[ba.Widget] = []
+ self._color_text_fields: list[ba.Widget] = []
resetbtn = ba.buttonwidget(
parent=self.root_widget,
@@ -145,7 +145,7 @@ class TeamNamesColorsWindow(popup.PopupWindow):
# either the default raw value or its translation we consider it
# default. (the fact that team names get translated makes this
# situation a bit sloppy)
- new_names: List[str] = []
+ new_names: list[str] = []
is_default = True
for i in range(2):
name = cast(str, ba.textwidget(query=self._color_text_fields[i]))
diff --git a/assets/src/ba_data/python/bastd/ui/tournamententry.py b/assets/src/ba_data/python/bastd/ui/tournamententry.py
index 12ed8b3a..17373870 100644
--- a/assets/src/ba_data/python/bastd/ui/tournamententry.py
+++ b/assets/src/ba_data/python/bastd/ui/tournamententry.py
@@ -11,7 +11,7 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Tuple, Callable, Optional, Dict
+ from typing import Any, Callable, Optional
class TournamentEntryWindow(popup.PopupWindow):
@@ -20,10 +20,10 @@ class TournamentEntryWindow(popup.PopupWindow):
def __init__(self,
tournament_id: str,
tournament_activity: ba.Activity = None,
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
delegate: Any = None,
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
on_close_call: Callable[[], Any] = None):
# Needs some tidying.
# pylint: disable=too-many-branches
@@ -302,7 +302,7 @@ class TournamentEntryWindow(popup.PopupWindow):
self._update()
self._restore_state()
- def _on_tournament_query_response(self, data: Optional[Dict[str,
+ def _on_tournament_query_response(self, data: Optional[dict[str,
Any]]) -> None:
accounts = ba.app.accounts
self._running_query = False
diff --git a/assets/src/ba_data/python/bastd/ui/tournamentscores.py b/assets/src/ba_data/python/bastd/ui/tournamentscores.py
index e162b47b..ec704d93 100644
--- a/assets/src/ba_data/python/bastd/ui/tournamentscores.py
+++ b/assets/src/ba_data/python/bastd/ui/tournamentscores.py
@@ -11,7 +11,7 @@ import ba
from bastd.ui import popup as popup_ui
if TYPE_CHECKING:
- from typing import Any, Tuple, Sequence, Callable, Dict, Optional, List
+ from typing import Any, Sequence, Callable, Optional
class TournamentScoresWindow(popup_ui.PopupWindow):
@@ -20,9 +20,9 @@ class TournamentScoresWindow(popup_ui.PopupWindow):
def __init__(self,
tournament_id: str,
tournament_activity: ba.GameActivity = None,
- position: Tuple[float, float] = (0.0, 0.0),
+ position: tuple[float, float] = (0.0, 0.0),
scale: float = None,
- offset: Tuple[float, float] = (0.0, 0.0),
+ offset: tuple[float, float] = (0.0, 0.0),
tint_color: Sequence[float] = (1.0, 1.0, 1.0),
tint2_color: Sequence[float] = (1.0, 1.0, 1.0),
selected_character: str = None,
@@ -107,11 +107,11 @@ class TournamentScoresWindow(popup_ui.PopupWindow):
callback=ba.WeakCall(
self._on_tournament_query_response))
- def _on_tournament_query_response(self, data: Optional[Dict[str,
+ def _on_tournament_query_response(self, data: Optional[dict[str,
Any]]) -> None:
if data is not None:
# this used to be the whole payload
- data_t: List[Dict[str, Any]] = data['t']
+ data_t: list[dict[str, Any]] = data['t']
# kill our loading text if we've got scores.. otherwise just
# replace it with 'no scores yet'
if data_t[0]['scores']:
diff --git a/assets/src/ba_data/python/bastd/ui/trophies.py b/assets/src/ba_data/python/bastd/ui/trophies.py
index 4763172c..4e0ceac8 100644
--- a/assets/src/ba_data/python/bastd/ui/trophies.py
+++ b/assets/src/ba_data/python/bastd/ui/trophies.py
@@ -10,15 +10,15 @@ import ba
from bastd.ui import popup
if TYPE_CHECKING:
- from typing import Any, Tuple, Dict, List
+ from typing import Any
class TrophiesWindow(popup.PopupWindow):
"""Popup window for viewing trophies."""
def __init__(self,
- position: Tuple[float, float],
- data: Dict[str, Any],
+ position: tuple[float, float],
+ data: dict[str, Any],
scale: float = None):
self._data = data
uiscale = ba.app.ui.uiscale
@@ -110,7 +110,7 @@ class TrophiesWindow(popup.PopupWindow):
def _create_trophy_type_widgets(self, eq_text: str, incr: int,
multi_txt: str, sub_height: int,
sub_width: int,
- trophy_types: List[List[str]]) -> int:
+ trophy_types: list[list[str]]) -> int:
from ba.internal import get_trophy_string
pts = 0
for i, trophy_type in enumerate(trophy_types):
diff --git a/assets/src/ba_data/python/bastd/ui/watch.py b/assets/src/ba_data/python/bastd/ui/watch.py
index b27a381a..c7e871e6 100644
--- a/assets/src/ba_data/python/bastd/ui/watch.py
+++ b/assets/src/ba_data/python/bastd/ui/watch.py
@@ -12,7 +12,7 @@ import _ba
import ba
if TYPE_CHECKING:
- from typing import Any, Optional, Tuple, Dict
+ from typing import Any, Optional
class WatchWindow(ba.Window):
@@ -30,7 +30,7 @@ class WatchWindow(ba.Window):
# pylint: disable=too-many-statements
from bastd.ui.tabs import TabRow
ba.set_analytics_screen('Watch Window')
- scale_origin: Optional[Tuple[float, float]]
+ scale_origin: Optional[tuple[float, float]]
if origin_widget is not None:
self._transition_out = 'out_scale'
scale_origin = origin_widget.get_screen_space_center()
@@ -39,7 +39,7 @@ class WatchWindow(ba.Window):
self._transition_out = 'out_right'
scale_origin = None
ba.app.ui.set_main_menu_location('Watch')
- self._tab_data: Dict[str, Any] = {}
+ self._tab_data: dict[str, Any] = {}
self._my_replays_scroll_width: Optional[float] = None
self._my_replays_watch_replay_button: Optional[ba.Widget] = None
self._scrollwidget: Optional[ba.Widget] = None
diff --git a/assets/src/server/ballisticacore_server.py b/assets/src/server/ballisticacore_server.py
index 9267d190..50492300 100755
--- a/assets/src/server/ballisticacore_server.py
+++ b/assets/src/server/ballisticacore_server.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""BallisticaCore server manager."""
@@ -28,7 +28,7 @@ from efro.error import CleanError
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import Optional, List, Dict, Union, Tuple
+ from typing import Optional, Union
from types import FrameType
from bacommon.servermanager import ServerCommand
@@ -81,7 +81,7 @@ class ServerManagerApp:
self._interactive = sys.stdin.isatty()
self._wrapper_shutdown_desired = False
self._done = False
- self._subprocess_commands: List[Union[str, ServerCommand]] = []
+ self._subprocess_commands: list[Union[str, ServerCommand]] = []
self._subprocess_commands_lock = Lock()
self._subprocess_force_kill_time: Optional[float] = None
self._auto_restart = True
@@ -251,8 +251,8 @@ class ServerManagerApp:
def screenmessage(self,
message: str,
- color: Optional[Tuple[float, float, float]] = None,
- clients: Optional[List[int]] = None) -> None:
+ color: Optional[tuple[float, float, float]] = None,
+ clients: Optional[list[int]] = None) -> None:
"""Display a screen-message.
This will have no name attached and not show up in chat history.
@@ -265,7 +265,7 @@ class ServerManagerApp:
def chatmessage(self,
message: str,
- clients: Optional[List[int]] = None) -> None:
+ clients: Optional[list[int]] = None) -> None:
"""Send a chat message from the server.
This will have the server's name attached and will be logged
@@ -533,7 +533,7 @@ class ServerManagerApp:
flush=True)
return out
- def _enable_tab_completion(self, locs: Dict) -> None:
+ def _enable_tab_completion(self, locs: dict) -> None:
"""Enable tab-completion on platforms where available (linux/mac)."""
try:
import readline
diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
index b4e73a88..680dfd01 100644
--- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml
+++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
@@ -4,6 +4,7 @@
NOMINMAX
aabb
abcdefghijklmnopqrstuvwxyz
+ abcdefghjkmnpqrtuvwxy
abouttab
absval
accel
@@ -51,6 +52,7 @@
anyval
aosp
apientry
+ apost
appconfig
appname
appnameupper
@@ -120,6 +122,7 @@
boostrapping
bootconfig
bootstrappy
+ bootsubprocess
bouyancy
bppv
bresult
@@ -192,6 +195,7 @@
cmath
cmds
cmdvals
+ cmodules
codedata
codewarrior
codewarrior's
@@ -271,6 +275,7 @@
dirslash
dlfcn
dlife
+ dliwk
dllpath
dmake
dname
@@ -332,6 +337,7 @@
ewww
ewwww
ewwwww
+ exargs
exctype
execinfo
execing
@@ -351,6 +357,7 @@
fastlsolve
fastltsolve
fbos
+ fcntl
fdata
fdirx
fdiry
@@ -454,6 +461,7 @@
googleplaytab
gpgs
gqualstr
+ graphlib
grav
grisha
gstate
@@ -566,12 +574,16 @@
lasti
lastline
lastvalid
+ lbzip
leaderboard
leaderboards
lenval
lgui
lhalf
+ libbz
+ libbzip
libutf
+ libuuid
lightshad
linearsize
linearstep
@@ -597,6 +609,7 @@
lsync
ltypes
lubyte
+ luuid
lvec
lvoid
macbuild
@@ -757,6 +770,7 @@
optin
ortho
osis
+ ossaudiodev
osssssssssss
ostype
ourcode
@@ -791,6 +805,7 @@
pname
podcast
podcasts
+ popd
portaudio
positivex
positivey
@@ -1055,6 +1070,7 @@
tempvec
tenum
testint
+ testinternalcapi
testnode
texel
texqualstr
@@ -1105,6 +1121,7 @@
twst
typeobj
typestr
+ tzpath
uber
uibounds
uiid
@@ -1127,6 +1144,7 @@
uppercased
userspace
uther
+ uuidmodule
uuids
uval
uxxxx
@@ -1168,6 +1186,7 @@
wdeprecated
weakref
weakthis
+ weeeird
welp
whaaaaaaa
wheee
@@ -1195,6 +1214,9 @@
xmmintrin
xoffset
xtweak
+ xxlimited
+ xxsubinterpreters
+ xxtestfuzz
yclamped
ydiff
ydist
@@ -1207,6 +1229,7 @@
zmin
zoffset
zomg
+ zoneinfo
zoomable
zrot
diff --git a/ballisticacore-cmake/CMakeLists.txt b/ballisticacore-cmake/CMakeLists.txt
index 3a9ba470..f0457266 100644
--- a/ballisticacore-cmake/CMakeLists.txt
+++ b/ballisticacore-cmake/CMakeLists.txt
@@ -27,12 +27,12 @@ if (APPLE)
# to load a 3.X library from within it which doesn't exist. So we need
# to be a bit more explicit telling it where to look. Note: this was last
# tested with 3.7; should revisit sometime to make sure still applies.
- execute_process(COMMAND "python3.8-config" "--prefix"
+ execute_process(COMMAND "python3.9-config" "--prefix"
OUTPUT_VARIABLE Python_ROOT_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
endif ()
-find_package (Python 3.8 REQUIRED EXACT COMPONENTS Development)
+find_package (Python 3.9 REQUIRED EXACT COMPONENTS Development)
if (HEADLESS)
diff --git a/config/toolconfigsrc/pylintrc b/config/toolconfigsrc/pylintrc
index cbe6f4f0..bf42b893 100644
--- a/config/toolconfigsrc/pylintrc
+++ b/config/toolconfigsrc/pylintrc
@@ -5,6 +5,8 @@ load-plugins=efrotools.pylintplugins
persistent=no
+extension-pkg-allow-list=math, readline, zlib, binascii
+
__EFRO_PYLINT_INIT__
[REPORTS]
diff --git a/docs/ba_module.md b/docs/ba_module.md
index 25acdaa2..1354e171 100644
--- a/docs/ba_module.md
+++ b/docs/ba_module.md
@@ -1,5 +1,5 @@
-last updated on 2021-10-14 for Ballistica version 1.6.5 build 20393
+last updated on 2021-10-23 for Ballistica version 1.6.5 build 20395
This page documents the Python classes and functions in the 'ba' module,
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know . Happy modding!
@@ -323,7 +323,7 @@
-create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'List[ba.Actor ]'
+create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'list[ba.Actor ]'
Create a display for the Achievement.
@@ -383,7 +383,7 @@ actually award achievements.
-achievements_for_coop_level(self, level_name: str) -> List[Achievement]
+achievements_for_coop_level(self, level_name: str) -> list[Achievement]
Given a level name, return achievements available for it.
@@ -439,14 +439,14 @@ actually award achievements.
-List[PlayerType]
+list[PlayerType]
The list of ba.Players in the Activity. This gets populated just
before on_begin() is called and is updated automatically as players
join or leave the game.
-Type[PlayerType]
+type[PlayerType]
The type of ba.Player this Activity is using.
@@ -458,7 +458,7 @@ join or leave the game.
-Dict[str, Any]
+dict[str, Any]
The settings dict passed in when the activity was made.
This attribute is deprecated and should be avoided when possible;
activities should pull all values they need from the 'settings' arg
@@ -473,7 +473,7 @@ passed to the Activity __init__ call.
-List[TeamType]
+list[TeamType]
The list of ba.Teams in the Activity. This gets populated just before
before on_begin() is called and is updated automatically as players
join or leave the game. (at least in free-for-all mode where every
@@ -482,7 +482,7 @@ regardless of the player count).
-Type[TeamType]
+type[TeamType]
The type of ba.Team this Activity is using.
@@ -939,7 +939,7 @@ likely result in errors.
-Tuple[float, float, float, float]
+tuple[float, float, float, float]
Bounds of the 'safe' screen area in ui space.
This tuple contains: (x-min, x-max, y-min, y-max)
@@ -975,7 +975,7 @@ likely result in errors.
-launch_coop_game(self, game: str, force: bool = False, args: Dict = None) -> bool
+launch_coop_game(self, game: str, force: bool = False, args: dict = None) -> bool
High level way to launch a local co-op session.
@@ -1065,7 +1065,7 @@ to resume.
-builtin_keys(self) -> List[str]
+builtin_keys(self) -> list[str]
Return the list of valid key names recognized by ba.AppConfig .
@@ -1134,7 +1134,7 @@ manually.
Methods:
-create_default_game_settings_ui(self, gameclass: Type[ba.GameActivity ], sessiontype: Type[ba.Session ], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None
+create_default_game_settings_ui(self, gameclass: type[ba.GameActivity ], sessiontype: type[ba.Session ], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None
Launch a UI to configure the given game config.
@@ -1274,12 +1274,12 @@ mycall()
-Dict[str, Any]
+dict[str, Any]
Return the live config dict for this campaign.
-List[ba.Level ]
+list[ba.Level ]
The list of ba.Levels in the Campaign.
@@ -1366,7 +1366,7 @@ mycall()
Methods:
-ba.ChoiceSetting(name: str, default: Any, choices: List[Tuple[str, Any]])
+ba.ChoiceSetting(name: str, default: Any, choices: list[tuple[str, Any]])
@@ -1672,7 +1672,7 @@ start_long_action(callback_when_done=ba.ContextC
-Type[PlayerType]
+type[PlayerType]
The type of ba.Player this Activity is using.
@@ -1691,7 +1691,7 @@ start_long_action(callback_when_done=ba.ContextC
-Type[TeamType]
+type[TeamType]
The type of ba.Team this Activity is using.
@@ -1752,7 +1752,7 @@ and it should begin its actual game logic.
<class method>
-supports_session_type(sessiontype: Type[ba.Session ]) -> bool
+supports_session_type(sessiontype: type[ba.Session ]) -> bool
Return whether this game supports the provided Session type.
@@ -1804,7 +1804,7 @@ there is no associated Campaign.
-get_custom_menu_entries(self) -> List[Dict[str, Any]]
+get_custom_menu_entries(self) -> list[dict[str, Any]]
Subclasses can override this to provide custom menu entries.
@@ -1918,7 +1918,7 @@ the data object is requested and when it's value is accessed.
-ba.Dependency(cls: Type[T], config: Any = None)
+ba.Dependency(cls: type[T], config: Any = None)
Instantiate a Dependency given a ba.DependencyComponent type.
@@ -1960,7 +1960,7 @@ influence dependency calculation for the target class.
<class method>
-get_dynamic_deps(config: Any = None) -> List[Dependency]
+get_dynamic_deps(config: Any = None) -> list[Dependency]
Return any dynamically-calculated deps for this component/config.
@@ -1983,7 +1983,7 @@ on the dep config value. (for instance a map required by a game type)
Attributes:
-List[ba.Dependency ]
+list[ba.Dependency ]
The list of missing dependencies causing this error.
@@ -1993,7 +1993,7 @@ on the dep config value. (for instance a map required by a game type)
Methods Defined or Overridden:
-ba.DependencyError(deps: List[ba.Dependency ])
+ba.DependencyError(deps: list[ba.Dependency ])
@@ -2031,7 +2031,7 @@ on the dep config value. (for instance a map required by a game type)
-get_asset_package_ids(self) -> Set[str]
+get_asset_package_ids(self) -> set[str]
Return the set of asset-package-ids required by this dep-set.
@@ -2291,7 +2291,7 @@ its time with lingering corpses, sound effects, etc.
Methods:
-ba.FloatChoiceSetting(name: str, default: float, choices: List[Tuple[str, float]])
+ba.FloatChoiceSetting(name: str, default: float, choices: list[tuple[str, float]])
@@ -2340,7 +2340,7 @@ its time with lingering corpses, sound effects, etc.
-get_ffa_point_awards(self) -> Dict[int, int]
+get_ffa_point_awards(self) -> dict[int, int]
Return the number of points awarded for different rankings.
@@ -2410,7 +2410,7 @@ its time with lingering corpses, sound effects, etc.
-Type[PlayerType]
+type[PlayerType]
The type of ba.Player this Activity is using.
@@ -2429,7 +2429,7 @@ its time with lingering corpses, sound effects, etc.
-Type[TeamType]
+type[TeamType]
The type of ba.Team this Activity is using.
@@ -2454,7 +2454,7 @@ and calls either end_game or continue_game depending on the result
<class method>
-create_settings_ui(sessiontype: Type[ba.Session ], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None
+create_settings_ui(sessiontype: type[ba.Session ], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None
Launch an in-game UI to configure settings for a game type.
@@ -2496,7 +2496,7 @@ yet; this way things like the standard time-limit
<class method>
-get_available_settings(sessiontype: Type[ba.Session ]) -> List[ba.Setting ]
+get_available_settings(sessiontype: type[ba.Session ]) -> list[ba.Setting ]
Return a list of settings relevant to this game type when
running under the provided session type.
@@ -2504,7 +2504,7 @@ running under the provided session type.
<class method>
-get_description(sessiontype: Type[ba.Session ]) -> str
+get_description(sessiontype: type[ba.Session ]) -> str
Get a str description of this game type.
@@ -2515,7 +2515,7 @@ can override this method.
<class method>
-get_description_display_string(sessiontype: Type[ba.Session ]) -> ba.Lstr
+get_description_display_string(sessiontype: type[ba.Session ]) -> ba.Lstr
Return a translated version of get_description().
@@ -2524,7 +2524,7 @@ can override this method.
<class method>
-get_display_string(settings: Optional[Dict] = None) -> ba.Lstr
+get_display_string(settings: Optional[dict] = None) -> ba.Lstr
Return a descriptive name for this game/settings combo.
@@ -2602,7 +2602,7 @@ of the screen, so it should be as concise as possible.
<class method>
-get_settings_display_string(config: Dict[str, Any]) -> ba.Lstr
+get_settings_display_string(config: dict[str, Any]) -> ba.Lstr
Given a game config dict, return a short description for it.
@@ -2612,7 +2612,7 @@ is up next in a series.
<class method>
-get_supported_maps(sessiontype: Type[ba.Session ]) -> List[str]
+get_supported_maps(sessiontype: type[ba.Session ]) -> list[str]
Called by the default ba.GameActivity.create_settings_ui ()
implementation; should return a list of map names valid
@@ -2748,7 +2748,7 @@ If the time-limit expires, end_game() will be called.
<class method>
-supports_session_type(sessiontype: Type[ba.Session ]) -> bool
+supports_session_type(sessiontype: type[ba.Session ]) -> bool
Return whether this game supports the provided Session type.
@@ -2775,7 +2775,7 @@ Results for a completed game.
-List[ba.PlayerInfo ]
+list[ba.PlayerInfo ]
Get info about the players represented by the results.
@@ -2790,12 +2790,12 @@ Results for a completed game.
-List[ba.SessionTeam ]
+list[ba.SessionTeam ]
Return all ba.SessionTeams in the results.
-List[WinnerGroup]
+list[WinnerGroup]
Get an ordered list of winner groups.
@@ -2886,7 +2886,7 @@ Results for a completed game.
-get_source_player(self, playertype: Type[PlayerType]) -> Optional[PlayerType]
+get_source_player(self, playertype: type[PlayerType]) -> Optional[PlayerType]
Return the source-player if one exists and is the provided type.
@@ -3077,7 +3077,7 @@ prefs, etc.
Methods:
-ba.IntChoiceSetting(name: str, default: int, choices: List[Tuple[str, int]])
+ba.IntChoiceSetting(name: str, default: int, choices: list[tuple[str, int]])
@@ -3112,7 +3112,7 @@ prefs, etc.
-List[Tuple[str, ...]]
+list[tuple[str, ...]]
Used for row/column lengths.
@@ -3122,12 +3122,12 @@ prefs, etc.
-Tuple[str, ...]
+tuple[str, ...]
The 'num' page.
-Dict[str, Tuple[str, ...]]
+dict[str, tuple[str, ...]]
Extra chars like emojis.
@@ -3147,7 +3147,7 @@ prefs, etc.
-List[str]
+list[str]
A list of all available languages.
Note that languages that may be present in game assets but which
@@ -3239,7 +3239,7 @@ prefs, etc.
-Type[ba.GameActivity ]
+type[ba.GameActivity ]
The type of game used for this Level.
@@ -3271,7 +3271,7 @@ prefs, etc.
-ba.Level(name: str, gametype: Type[ba.GameActivity ], settings: dict, preview_texture_name: str, displayname: str = None)
+ba.Level(name: str, gametype: type[ba.GameActivity ], settings: dict, preview_texture_name: str, displayname: str = None)
@@ -3296,7 +3296,7 @@ can be changed to separate its new high score lists/etc. from the old.
-get_settings(self) -> Dict[str, Any]
+get_settings(self) -> dict[str, Any]
Returns the settings for this Level.
@@ -3308,7 +3308,7 @@ can be changed to separate its new high score lists/etc. from the old.
-set_high_scores(self, high_scores: Dict) -> None
+set_high_scores(self, high_scores: dict) -> None
Set high scores for this level.
@@ -3333,7 +3333,7 @@ can be changed to separate its new high score lists/etc. from the old.
-List[ba.SessionTeam ]
+list[ba.SessionTeam ]
ba.SessionTeams available in this lobby.
@@ -3374,7 +3374,7 @@ Intended for use in initial joining-screens.
-get_choosers(self) -> List[Chooser]
+get_choosers(self) -> list[Chooser]
Return the lobby's current choosers.
@@ -3558,7 +3558,7 @@ even if myactor is set to None.
-get_def_bound_box(self, name: str) -> Optional[Tuple[float, float, float, float, float, float]]
+get_def_bound_box(self, name: str) -> Optional[tuple[float, float, float, float, float, float]]
Return a 6 member bounds tuple or None if it is not defined.
@@ -3570,7 +3570,7 @@ even if myactor is set to None.
-get_def_points(self, name: str) -> List[Sequence[float]]
+get_def_points(self, name: str) -> list[Sequence[float]]
Return a list of named points.
@@ -3607,7 +3607,7 @@ as far from these players as possible.
<class method>
-get_play_types() -> List[str]
+get_play_types() -> list[str]
Return valid play types for this map.
@@ -3706,7 +3706,7 @@ add_actions() method to define what the material does.
Methods:
-add_actions(actions: Tuple, conditions: Optional[Tuple] = None)
+add_actions(actions: tuple, conditions: Optional[tuple] = None)
-> None
Add one or more actions to the material, optionally with conditions.
@@ -3861,7 +3861,7 @@ m.add_actions(conditions=('they_have_material',
-get_game_types(self) -> List[Type[ba.GameActivity ]]
+get_game_types(self) -> list[type[ba.GameActivity ]]
Return available game types.
@@ -3873,7 +3873,7 @@ m.add_actions(conditions=('they_have_material',
-get_unowned_game_types(self) -> Set[Type[ba.GameActivity ]]
+get_unowned_game_types(self) -> set[type[ba.GameActivity ]]
Return present game types not owned by the current account.
@@ -4114,7 +4114,7 @@ signify that the default soundtrack should be used..
-do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: Dict[str, Any] = None) -> None
+do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: dict[str, Any] = None) -> None
Plays the requested music type/mode.
@@ -4290,7 +4290,7 @@ the right thing both for Node objects and values of None.
-getdelegate(type: Type, doraise: bool = False) -> <varies>
+getdelegate(type: type, doraise: bool = False) -> <varies>
Return the node's current delegate object if it matches a certain type.
@@ -4552,7 +4552,7 @@ even if myactor is set to None.
-assigninput(self, inputtype: Union[ba.InputType , Tuple[ba.InputType , ...]], call: Callable) -> None
+assigninput(self, inputtype: Union[ba.InputType , tuple[ba.InputType , ...]], call: Callable) -> None
assigninput(type: Union[ba.InputType , Tuple[ba.InputType , ...]],
call: Callable) -> None
@@ -4575,9 +4575,9 @@ the right thing both for Player objects and values of None.
-get_icon(self) -> Dict[str, Any]
+get_icon(self) -> dict[str, Any]
-get_icon() -> Dict[str, Any]
+get_icon() -> dict[str, Any]
Returns the character's icon (images, colors, etc contained in a dict)
@@ -4653,7 +4653,7 @@ If False, they left the game or the round ended.
-getkillerplayer(self, playertype: Type[PlayerType]) -> Optional[PlayerType]
+getkillerplayer(self, playertype: type[PlayerType]) -> Optional[PlayerType]
Return the ba.Player responsible for the killing, if any.
@@ -4661,7 +4661,7 @@ If False, they left the game or the round ended.
-getplayer(self, playertype: Type[PlayerType]) -> PlayerType
+getplayer(self, playertype: type[PlayerType]) -> PlayerType
Return the ba.Player that died.
@@ -4749,7 +4749,7 @@ the type-checker properly identifies the returned value as one.
-get_icon(self) -> Dict[str, Any]
+get_icon(self) -> dict[str, Any]
Get the icon for this instance's player.
@@ -5123,7 +5123,7 @@ to proceed past the initial joining screen.
-List[ba.SessionPlayer ]
+list[ba.SessionPlayer ]
All ba.SessionPlayers in the Session. Most things should use the
list of ba.Players in ba.Activity ; not this. Some players, such as
those who have not yet selected a character, will only be
@@ -5131,7 +5131,7 @@ found on this list.
-List[ba.SessionTeam ]
+list[ba.SessionTeam ]
All the ba.SessionTeams in the Session. Most things should use the
list of ba.Teams in ba.Activity ; not this.
@@ -5192,7 +5192,7 @@ will replace the old.
-get_custom_menu_entries(self) -> List[Dict[str, Any]]
+get_custom_menu_entries(self) -> list[dict[str, Any]]
Subclasses can override this to provide custom menu entries.
@@ -5357,7 +5357,7 @@ is still in its lobby selecting a team/etc. then a
-assigninput(type: Union[ba.InputType , Tuple[ba.InputType , ...]],
+assigninput(type: Union[ba.InputType , tuple[ba.InputType , ...]],
call: Callable) -> None
Set the python callable to be run for one or more types of input.
@@ -5381,7 +5381,7 @@ joins (while verification occurs).
-get_icon() -> Dict[str, Any]
+get_icon() -> dict[str, Any]
Returns the character's icon (images, colors, etc contained in a dict)
@@ -5441,7 +5441,7 @@ other players.
-Tuple[float, ...]
+tuple[float, ...]
The team's color.
@@ -5464,7 +5464,7 @@ of the session.
-List[ba.SessionPlayer ]
+list[ba.SessionPlayer ]
The list of ba.SessionPlayers on the team.
@@ -5698,7 +5698,7 @@ of the session.
-get_records(self) -> Dict[str, ba.PlayerRecord ]
+get_records(self) -> dict[str, ba.PlayerRecord ]
Get PlayerRecord corresponding to still-existing players.
@@ -5787,7 +5787,7 @@ of the session.
-manual_init(self, team_id: int, name: Union[ba.Lstr , str], color: Tuple[float, ...]) -> None
+manual_init(self, team_id: int, name: Union[ba.Lstr , str], color: tuple[float, ...]) -> None
Manually init a team for uses such as bots.
@@ -5846,7 +5846,7 @@ of the session.
-Type[PlayerType]
+type[PlayerType]
The type of ba.Player this Activity is using.
@@ -5865,7 +5865,7 @@ of the session.
-Type[TeamType]
+type[TeamType]
The type of ba.Team this Activity is using.
@@ -5921,7 +5921,7 @@ on the ba.Player and their supports_session_type()
<class method>
-supports_session_type(sessiontype: Type[ba.Session ]) -> bool
+supports_session_type(sessiontype: type[ba.Session ]) -> bool
Class method override;
returns True for ba.DualTeamSessions and ba.FreeForAllSessions ;
@@ -6331,13 +6331,13 @@ the right thing both for Widget objects and values of None.
-get_children() -> List[ba.Widget ]
+get_children() -> list[ba.Widget ]
Returns any child Widgets of this Widget.
-get_screen_space_center() -> Tuple[float, float]
+get_screen_space_center() -> tuple[float, float]
Returns the coords of the Widget center relative to the center of the
screen. This can be useful for placing pop-up windows and other special
@@ -6394,7 +6394,7 @@ widgets.
animate(node: ba.Node , attr: str, keys: Dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node
+animate(node: ba.Node , attr: str, keys: dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node
Animate values on a target ba.Node .
@@ -6409,7 +6409,7 @@ but timeformat can also be set to MILLISECONDS to recreate the old behavior
animate_array(node: ba.Node , attr: str, size: int, keys: Dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None
+animate_array(node: ba.Node , attr: str, size: int, keys: dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None
Animate an array of values on a target ba.Node .
@@ -6724,7 +6724,7 @@ If doraise is False, None will be returned instead in that case.
getclass(name: str, subclassof: Type[T]) -> Type[T]
+getclass(name: str, subclassof: type[T]) -> type[T]
Given a full class name such as foo.bar.MyClass, return the class.
@@ -6759,7 +6759,7 @@ in the background if necessary.
getmaps(playtype: str) -> List[str]
+getmaps(playtype: str) -> list[str]
Return a list of ba.Map types supporting a playtype str.
@@ -6948,7 +6948,7 @@ so in most cases you can just use that.
newactivity(activity_type: Type[ba.Activity ],
+newactivity(activity_type: type[ba.Activity ],
settings: dict = None) -> ba.Activity
Instantiates a ba.Activity given a type object.
@@ -6984,7 +6984,7 @@ object dies. 'owner' can be another node or a ba.Actor
normalized_color(color: Sequence[float]) -> Tuple[float, ...]
+normalized_color(color: Sequence[float]) -> tuple[float, ...]
Scale a color so its largest value is 1; useful for coloring lights.
@@ -7110,7 +7110,7 @@ are applied to the Widget.
safecolor(color: Sequence[float], target_intensity: float = 0.6)
- -> Tuple[float, ...]
+ -> tuple[float, ...]
Given a color tuple, return a color safe to display as text.
@@ -7123,7 +7123,7 @@ dark colors, etc.
screenmessage(message: Union[str, ba.Lstr ],
color: Sequence[float] = None, top: bool = False,
- image: Dict[str, Any] = None, log: bool = False,
+ image: dict[str, Any] = None, log: bool = False,
clients: Sequence[int] = None, transient: bool = False) -> None
Print a message to the local client's screen, in a given color.
diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc
index 6d97a0db..d6fd206a 100644
--- a/src/ballistica/ballistica.cc
+++ b/src/ballistica/ballistica.cc
@@ -21,7 +21,7 @@
namespace ballistica {
// These are set automatically via script; don't modify them here.
-const int kAppBuildNumber = 20393;
+const int kAppBuildNumber = 20395;
const char* kAppVersion = "1.6.5";
// Our standalone globals.
diff --git a/src/ballistica/platform/windows/platform_windows.cc b/src/ballistica/platform/windows/platform_windows.cc
index f7eb2b69..2948c519 100644
--- a/src/ballistica/platform/windows/platform_windows.cc
+++ b/src/ballistica/platform/windows/platform_windows.cc
@@ -18,9 +18,9 @@
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")
#if BA_DEBUG_BUILD
-#pragma comment(lib, "python38_d.lib")
+#pragma comment(lib, "python39_d.lib")
#else
-#pragma comment(lib, "python38.lib")
+#pragma comment(lib, "python39.lib")
#endif
#if !BA_HEADLESS_BUILD
diff --git a/src/ballistica/python/class/python_class_material.cc b/src/ballistica/python/class/python_class_material.cc
index 16ac06a9..fb6717e1 100644
--- a/src/ballistica/python/class/python_class_material.cc
+++ b/src/ballistica/python/class/python_class_material.cc
@@ -275,7 +275,7 @@ auto PythonClassMaterial::AddActions(PythonClassMaterial* self, PyObject* args,
PyMethodDef PythonClassMaterial::tp_methods[] = {
{"add_actions", (PyCFunction)AddActions, METH_VARARGS | METH_KEYWORDS,
- "add_actions(actions: Tuple, conditions: Optional[Tuple] = None)\n"
+ "add_actions(actions: tuple, conditions: Optional[tuple] = None)\n"
" -> None\n"
"\n"
"Add one or more actions to the material, optionally with conditions.\n"
diff --git a/src/ballistica/python/class/python_class_node.cc b/src/ballistica/python/class/python_class_node.cc
index bc3b5df6..2b0d74df 100644
--- a/src/ballistica/python/class/python_class_node.cc
+++ b/src/ballistica/python/class/python_class_node.cc
@@ -402,7 +402,7 @@ PyMethodDef PythonClassNode::tp_methods[] = {
"\n"
"Return the name assigned to a Node; used mainly for debugging"},
{"getdelegate", (PyCFunction)GetDelegate, METH_VARARGS | METH_KEYWORDS,
- "getdelegate(type: Type, doraise: bool = False) -> \n"
+ "getdelegate(type: type, doraise: bool = False) -> \n"
"\n"
"Return the node's current delegate object if it matches a certain type.\n"
"\n"
diff --git a/src/ballistica/python/class/python_class_session_player.cc b/src/ballistica/python/class/python_class_session_player.cc
index cefc59f9..d1a45162 100644
--- a/src/ballistica/python/class/python_class_session_player.cc
+++ b/src/ballistica/python/class/python_class_session_player.cc
@@ -696,7 +696,7 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = {
"\n"
"Return whether the underlying player is still in the game."},
{"assigninput", (PyCFunction)AssignInputCall, METH_VARARGS | METH_KEYWORDS,
- "assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],\n"
+ "assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]],\n"
" call: Callable) -> None\n"
"\n"
"Set the python callable to be run for one or more types of input."},
@@ -732,11 +732,11 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = {
"\n"
"(internal)"},
{"get_icon", (PyCFunction)GetIcon, METH_NOARGS,
- "get_icon() -> Dict[str, Any]\n"
+ "get_icon() -> dict[str, Any]\n"
"\n"
"Returns the character's icon (images, colors, etc contained in a dict)"},
{"get_icon_info", (PyCFunction)GetIconInfo, METH_NOARGS,
- "get_icon_info() -> Dict[str, Any]\n"
+ "get_icon_info() -> dict[str, Any]\n"
"\n"
"(internal)"},
{"__dir__", (PyCFunction)Dir, METH_NOARGS,
diff --git a/src/ballistica/python/class/python_class_widget.cc b/src/ballistica/python/class/python_class_widget.cc
index 92c60bc1..11d35d6b 100644
--- a/src/ballistica/python/class/python_class_widget.cc
+++ b/src/ballistica/python/class/python_class_widget.cc
@@ -256,11 +256,11 @@ PyMethodDef PythonClassWidget::tp_methods[] = {
"\n"
"Activates a widget; the same as if it had been clicked."},
{"get_children", (PyCFunction)GetChildren, METH_NOARGS,
- "get_children() -> List[ba.Widget]\n"
+ "get_children() -> list[ba.Widget]\n"
"\n"
"Returns any child Widgets of this Widget."},
{"get_screen_space_center", (PyCFunction)GetScreenSpaceCenter, METH_NOARGS,
- "get_screen_space_center() -> Tuple[float, float]\n"
+ "get_screen_space_center() -> tuple[float, float]\n"
"\n"
"Returns the coords of the Widget center relative to the center of the\n"
"screen. This can be useful for placing pop-up windows and other special\n"
diff --git a/src/ballistica/python/methods/python_methods_app.cc b/src/ballistica/python/methods/python_methods_app.cc
index dcbca8f6..a2ae06a0 100644
--- a/src/ballistica/python/methods/python_methods_app.cc
+++ b/src/ballistica/python/methods/python_methods_app.cc
@@ -998,7 +998,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector {
METH_VARARGS | METH_KEYWORDS,
"screenmessage(message: Union[str, ba.Lstr],\n"
" color: Sequence[float] = None, top: bool = False,\n"
- " image: Dict[str, Any] = None, log: bool = False,\n"
+ " image: dict[str, Any] = None, log: bool = False,\n"
" clients: Sequence[int] = None, transient: bool = False) -> None\n"
"\n"
"Print a message to the local client's screen, in a given color.\n"
@@ -1155,7 +1155,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector {
{"newactivity", (PyCFunction)PyNewActivity,
METH_VARARGS | METH_KEYWORDS,
- "newactivity(activity_type: Type[ba.Activity],\n"
+ "newactivity(activity_type: type[ba.Activity],\n"
" settings: dict = None) -> ba.Activity\n"
"\n"
"Instantiates a ba.Activity given a type object.\n"
@@ -1201,7 +1201,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector {
{"new_host_session", (PyCFunction)PyNewHostSession,
METH_VARARGS | METH_KEYWORDS,
- "new_host_session(sessiontype: Type[ba.Session],\n"
+ "new_host_session(sessiontype: type[ba.Session],\n"
" benchmark_type: str = None) -> None\n"
"\n"
"(internal)"},
diff --git a/src/ballistica/python/methods/python_methods_gameplay.cc b/src/ballistica/python/methods/python_methods_gameplay.cc
index d4d8825e..d5f63310 100644
--- a/src/ballistica/python/methods/python_methods_gameplay.cc
+++ b/src/ballistica/python/methods/python_methods_gameplay.cc
@@ -652,7 +652,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector {
{"get_game_roster", (PyCFunction)PyGetGameRoster,
METH_VARARGS | METH_KEYWORDS,
- "get_game_roster() -> List[Dict[str, Any]]\n"
+ "get_game_roster() -> list[dict[str, Any]]\n"
"\n"
"(internal)"},
@@ -667,7 +667,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector {
{"set_map_bounds", (PyCFunction)PySetMapBounds,
METH_VARARGS | METH_KEYWORDS,
- "set_map_bounds(bounds: Tuple[float, float, float, float, float, "
+ "set_map_bounds(bounds: tuple[float, float, float, float, float, "
"float])\n"
" -> None\n"
"\n"
diff --git a/src/ballistica/python/methods/python_methods_graphics.cc b/src/ballistica/python/methods/python_methods_graphics.cc
index debe7a4c..8e642ec9 100644
--- a/src/ballistica/python/methods/python_methods_graphics.cc
+++ b/src/ballistica/python/methods/python_methods_graphics.cc
@@ -225,7 +225,7 @@ auto PyGetDisplayResolution(PyObject* self, PyObject* args) -> PyObject* {
auto PythonMethodsGraphics::GetMethods() -> std::vector {
return {
{"get_display_resolution", PyGetDisplayResolution, METH_VARARGS,
- "get_display_resolution() -> Optional[Tuple[int, int]]\n"
+ "get_display_resolution() -> Optional[tuple[int, int]]\n"
"\n"
"(internal)\n"
"\n"
@@ -290,7 +290,7 @@ auto PythonMethodsGraphics::GetMethods() -> std::vector {
{"safecolor", (PyCFunction)PySafeColor, METH_VARARGS | METH_KEYWORDS,
"safecolor(color: Sequence[float], target_intensity: float = 0.6)\n"
- " -> Tuple[float, ...]\n"
+ " -> tuple[float, ...]\n"
"\n"
"Given a color tuple, return a color safe to display as text.\n"
"\n"
diff --git a/src/ballistica/python/methods/python_methods_media.cc b/src/ballistica/python/methods/python_methods_media.cc
index 5c438ba0..cac8d070 100644
--- a/src/ballistica/python/methods/python_methods_media.cc
+++ b/src/ballistica/python/methods/python_methods_media.cc
@@ -412,7 +412,7 @@ auto PythonMethodsMedia::GetMethods() -> std::vector {
{"mac_music_app_get_playlists", (PyCFunction)PyMacMusicAppGetPlaylists,
METH_VARARGS | METH_KEYWORDS,
- "mac_music_app_get_playlists() -> List[str]\n"
+ "mac_music_app_get_playlists() -> list[str]\n"
"\n"
"(internal)"},
diff --git a/src/ballistica/python/methods/python_methods_system.cc b/src/ballistica/python/methods/python_methods_system.cc
index ed2d65cd..0a64f147 100644
--- a/src/ballistica/python/methods/python_methods_system.cc
+++ b/src/ballistica/python/methods/python_methods_system.cc
@@ -890,8 +890,8 @@ auto PythonMethodsSystem::GetMethods() -> std::vector {
"Returns whether we're running the ouya-specific version"},
{"set_internal_language_keys", PySetInternalLanguageKeys, METH_VARARGS,
- "set_internal_language_keys(listobj: List[Tuple[str, str]],\n"
- " random_names_list: List[Tuple[str, str]]) -> None\n"
+ "set_internal_language_keys(listobj: list[tuple[str, str]],\n"
+ " random_names_list: list[tuple[str, str]]) -> None\n"
"\n"
"(internal)"},
@@ -987,7 +987,7 @@ auto PythonMethodsSystem::GetMethods() -> std::vector {
{"get_appconfig_builtin_keys", (PyCFunction)PyAppConfigGetBuiltinKeys,
METH_VARARGS | METH_KEYWORDS,
- "get_appconfig_builtin_keys() -> List[str]\n"
+ "get_appconfig_builtin_keys() -> list[str]\n"
"\n"
"(internal)"},
diff --git a/src/ballistica/python/methods/python_methods_ui.cc b/src/ballistica/python/methods/python_methods_ui.cc
index 5aa77f39..ee0ac6f7 100644
--- a/src/ballistica/python/methods/python_methods_ui.cc
+++ b/src/ballistica/python/methods/python_methods_ui.cc
@@ -2372,7 +2372,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector {
{"get_chat_messages", (PyCFunction)PyGetChatMessages,
METH_VARARGS | METH_KEYWORDS,
- "get_chat_messages() -> List[str]\n"
+ "get_chat_messages() -> list[str]\n"
"\n"
"(internal)"},
@@ -2456,7 +2456,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector {
"A workaround for some unintentional backgrounding that occurs on mac"},
{"uibounds", (PyCFunction)PyUIBounds, METH_VARARGS | METH_KEYWORDS,
- "uibounds() -> Tuple[float, float, float, float]\n"
+ "uibounds() -> tuple[float, float, float, float]\n"
"\n"
"(internal)\n"
"\n"
diff --git a/src/ballistica/python/python.cc b/src/ballistica/python/python.cc
index 5ed6f336..86ab60f4 100644
--- a/src/ballistica/python/python.cc
+++ b/src/ballistica/python/python.cc
@@ -945,8 +945,8 @@ void Python::Reset(bool do_init) {
BA_PRECONDITION(main_dict_ = PyModule_GetDict(m));
const char* ver = Py_GetVersion();
- if (strncmp(ver, "3.8", 3) != 0) {
- throw Exception("We require Python 3.8.x; instead found "
+ if (strncmp(ver, "3.9", 3) != 0) {
+ throw Exception("We require Python 3.9.x; instead found "
+ std::string(ver));
}
diff --git a/src/external/windows/include/python/Python-ast.h b/src/external/windows/include/python/Python-ast.h
index 9e7a621c..dfa0b1aa 100755
--- a/src/external/windows/include/python/Python-ast.h
+++ b/src/external/windows/include/python/Python-ast.h
@@ -6,6 +6,7 @@
extern "C" {
#endif
+#ifndef Py_LIMITED_API
#include "asdl.h"
#undef Yield /* undefine macro conflicting with */
@@ -16,10 +17,7 @@ typedef struct _stmt *stmt_ty;
typedef struct _expr *expr_ty;
-typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
- Param=6 } expr_context_ty;
-
-typedef struct _slice *slice_ty;
+typedef enum _expr_context { Load=1, Store=2, Del=3 } expr_context_ty;
typedef enum _boolop { And=1, Or=2 } boolop_ty;
@@ -50,7 +48,7 @@ typedef struct _type_ignore *type_ignore_ty;
enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
- FunctionType_kind=4, Suite_kind=5};
+ FunctionType_kind=4};
struct _mod {
enum _mod_kind kind;
union {
@@ -72,10 +70,6 @@ struct _mod {
expr_ty returns;
} FunctionType;
- struct {
- asdl_seq *body;
- } Suite;
-
} v;
};
@@ -236,7 +230,7 @@ enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4,
YieldFrom_kind=15, Compare_kind=16, Call_kind=17,
FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20,
Attribute_kind=21, Subscript_kind=22, Starred_kind=23,
- Name_kind=24, List_kind=25, Tuple_kind=26};
+ Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27};
struct _expr {
enum _expr_kind kind;
union {
@@ -349,7 +343,7 @@ struct _expr {
struct {
expr_ty value;
- slice_ty slice;
+ expr_ty slice;
expr_context_ty ctx;
} Subscript;
@@ -373,32 +367,17 @@ struct _expr {
expr_context_ty ctx;
} Tuple;
- } v;
- int lineno;
- int col_offset;
- int end_lineno;
- int end_col_offset;
-};
-
-enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3};
-struct _slice {
- enum _slice_kind kind;
- union {
struct {
expr_ty lower;
expr_ty upper;
expr_ty step;
} Slice;
- struct {
- asdl_seq *dims;
- } ExtSlice;
-
- struct {
- expr_ty value;
- } Index;
-
} v;
+ int lineno;
+ int col_offset;
+ int end_lineno;
+ int end_col_offset;
};
struct _comprehension {
@@ -448,6 +427,10 @@ struct _arg {
struct _keyword {
identifier arg;
expr_ty value;
+ int lineno;
+ int col_offset;
+ int end_lineno;
+ int end_col_offset;
};
struct _alias {
@@ -482,8 +465,6 @@ mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena);
mod_ty _Py_Expression(expr_ty body, PyArena *arena);
#define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2)
mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena);
-#define Suite(a0, a1) _Py_Suite(a0, a1)
-mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
asdl_seq * decorator_list, expr_ty returns, string
@@ -653,7 +634,7 @@ expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7)
-expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
+expr_ty _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6)
@@ -672,12 +653,10 @@ expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int
expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
-#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3)
-slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
-#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1)
-slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena);
-#define Index(a0, a1) _Py_Index(a0, a1)
-slice_ty _Py_Index(expr_ty value, PyArena *arena);
+#define Slice(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Slice(a0, a1, a2, a3, a4, a5, a6, a7)
+expr_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int
+ col_offset, int end_lineno, int end_col_offset, PyArena
+ *arena);
#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4)
comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq *
ifs, int is_async, PyArena *arena);
@@ -695,8 +674,10 @@ arguments_ty _Py_arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty
arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int
lineno, int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
-#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2)
-keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena);
+#define keyword(a0, a1, a2, a3, a4, a5, a6) _Py_keyword(a0, a1, a2, a3, a4, a5, a6)
+keyword_ty _Py_keyword(identifier arg, expr_ty value, int lineno, int
+ col_offset, int end_lineno, int end_col_offset, PyArena
+ *arena);
#define alias(a0, a1, a2) _Py_alias(a0, a1, a2)
alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena);
#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2)
@@ -708,6 +689,7 @@ type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena);
PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
int PyAST_Check(PyObject* obj);
+#endif /* !Py_LIMITED_API */
#ifdef __cplusplus
}
diff --git a/src/external/windows/include/python/Python.h b/src/external/windows/include/python/Python.h
index 7729fb07..613453db 100755
--- a/src/external/windows/include/python/Python.h
+++ b/src/external/windows/include/python/Python.h
@@ -63,13 +63,22 @@
#include "pyport.h"
#include "pymacro.h"
-/* A convenient way for code to know if clang's memory sanitizer is enabled. */
+/* A convenient way for code to know if sanitizers are enabled. */
#if defined(__has_feature)
# if __has_feature(memory_sanitizer)
# if !defined(_Py_MEMORY_SANITIZER)
# define _Py_MEMORY_SANITIZER
# endif
# endif
+# if __has_feature(address_sanitizer)
+# if !defined(_Py_ADDRESS_SANITIZER)
+# define _Py_ADDRESS_SANITIZER
+# endif
+# endif
+#elif defined(__GNUC__)
+# if defined(__SANITIZE_ADDRESS__)
+# define _Py_ADDRESS_SANITIZER
+# endif
#endif
/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG.
@@ -114,12 +123,15 @@
#include "classobject.h"
#include "fileobject.h"
#include "pycapsule.h"
+#include "code.h"
+#include "pyframe.h"
#include "traceback.h"
#include "sliceobject.h"
#include "cellobject.h"
#include "iterobject.h"
#include "genobject.h"
#include "descrobject.h"
+#include "genericaliasobject.h"
#include "warnings.h"
#include "weakrefobject.h"
#include "structseq.h"
@@ -130,6 +142,7 @@
#include "pyerrors.h"
#include "cpython/initconfig.h"
+#include "pythread.h"
#include "pystate.h"
#include "context.h"
@@ -152,7 +165,6 @@
#include "pyctype.h"
#include "pystrtod.h"
#include "pystrcmp.h"
-#include "dtoa.h"
#include "fileutils.h"
#include "pyfpe.h"
#include "tracemalloc.h"
diff --git a/src/external/windows/include/python/abstract.h b/src/external/windows/include/python/abstract.h
index fd85882a..2baa6981 100755
--- a/src/external/windows/include/python/abstract.h
+++ b/src/external/windows/include/python/abstract.h
@@ -141,6 +141,12 @@ extern "C" {
#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* Call a callable Python object without any arguments */
+PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
+#endif
+
+
/* Call a callable Python object 'callable' with arguments given by the
tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
@@ -696,7 +702,7 @@ PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
(PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
/* Return a pointer to the underlying item array for
- an object retured by PySequence_Fast */
+ an object returned by PySequence_Fast */
#define PySequence_Fast_ITEMS(sf) \
(PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
: ((PyTupleObject *)(sf))->ob_item)
diff --git a/src/external/windows/include/python/asdl.h b/src/external/windows/include/python/asdl.h
index c8e49f0a..31db708b 100755
--- a/src/external/windows/include/python/asdl.h
+++ b/src/external/windows/include/python/asdl.h
@@ -1,11 +1,10 @@
+#ifndef Py_LIMITED_API
#ifndef Py_ASDL_H
#define Py_ASDL_H
typedef PyObject * identifier;
typedef PyObject * string;
-typedef PyObject * bytes;
typedef PyObject * object;
-typedef PyObject * singleton;
typedef PyObject * constant;
/* It would be nice if the code generated by asdl_c.py was completely
@@ -44,3 +43,4 @@ asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena);
#endif
#endif /* !Py_ASDL_H */
+#endif /* Py_LIMITED_API */
diff --git a/src/external/windows/include/python/ast.h b/src/external/windows/include/python/ast.h
index 27f11b7a..389113a7 100755
--- a/src/external/windows/include/python/ast.h
+++ b/src/external/windows/include/python/ast.h
@@ -1,3 +1,4 @@
+#ifndef Py_LIMITED_API
#ifndef Py_AST_H
#define Py_AST_H
#ifdef __cplusplus
@@ -19,19 +20,16 @@ PyAPI_FUNC(mod_ty) PyAST_FromNodeObject(
PyObject *filename,
PyArena *arena);
-#ifndef Py_LIMITED_API
-
/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty);
/* Return the borrowed reference to the first literal string in the
- sequence of statemnts or NULL if it doesn't start from a literal string.
+ sequence of statements or NULL if it doesn't start from a literal string.
Doesn't set exception. */
PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *);
-#endif /* !Py_LIMITED_API */
-
#ifdef __cplusplus
}
#endif
#endif /* !Py_AST_H */
+#endif /* !Py_LIMITED_API */
diff --git a/src/external/windows/include/python/boolobject.h b/src/external/windows/include/python/boolobject.h
index 79501fd9..e9e48673 100755
--- a/src/external/windows/include/python/boolobject.h
+++ b/src/external/windows/include/python/boolobject.h
@@ -9,7 +9,7 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyBool_Type;
-#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type)
+#define PyBool_Check(x) Py_IS_TYPE(x, &PyBool_Type)
/* Py_False and Py_True are the only two bools in existence.
Don't forget to apply Py_INCREF() when returning either!!! */
diff --git a/src/external/windows/include/python/bytearrayobject.h b/src/external/windows/include/python/bytearrayobject.h
index 0d93e06b..1ef0cf3b 100755
--- a/src/external/windows/include/python/bytearrayobject.h
+++ b/src/external/windows/include/python/bytearrayobject.h
@@ -18,25 +18,13 @@ extern "C" {
* to contain a char pointer, not an unsigned char pointer.
*/
-/* Object layout */
-#ifndef Py_LIMITED_API
-typedef struct {
- PyObject_VAR_HEAD
- Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
- char *ob_bytes; /* Physical backing buffer */
- char *ob_start; /* Logical start inside ob_bytes */
- /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
- int ob_exports; /* How many buffer exports */
-} PyByteArrayObject;
-#endif
-
/* Type object */
PyAPI_DATA(PyTypeObject) PyByteArray_Type;
PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
/* Type check macros */
#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
-#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)
+#define PyByteArray_CheckExact(self) Py_IS_TYPE(self, &PyByteArray_Type)
/* Direct API functions */
PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
@@ -46,14 +34,10 @@ PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *);
PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);
-/* Macros, trading safety for speed */
#ifndef Py_LIMITED_API
-#define PyByteArray_AS_STRING(self) \
- (assert(PyByteArray_Check(self)), \
- Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
-#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
-
-PyAPI_DATA(char) _PyByteArray_empty_string[];
+# define Py_CPYTHON_BYTEARRAYOBJECT_H
+# include "cpython/bytearrayobject.h"
+# undef Py_CPYTHON_BYTEARRAYOBJECT_H
#endif
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/bytesobject.h b/src/external/windows/include/python/bytesobject.h
index fd08ba6e..3643f530 100755
--- a/src/external/windows/include/python/bytesobject.h
+++ b/src/external/windows/include/python/bytesobject.h
@@ -27,26 +27,12 @@ functions should be applied to nil objects.
/* Caching the hash (ob_shash) saves recalculation of a string's hash value.
This significantly speeds up dict lookups. */
-#ifndef Py_LIMITED_API
-typedef struct {
- PyObject_VAR_HEAD
- Py_hash_t ob_shash;
- char ob_sval[1];
-
- /* Invariants:
- * ob_sval contains space for 'ob_size+1' elements.
- * ob_sval[ob_size] == 0.
- * ob_shash is the hash of the string or -1 if not computed yet.
- */
-} PyBytesObject;
-#endif
-
PyAPI_DATA(PyTypeObject) PyBytes_Type;
PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
#define PyBytes_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
-#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
+#define PyBytes_CheckExact(op) Py_IS_TYPE(op, &PyBytes_Type)
PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
@@ -60,40 +46,9 @@ PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
-PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
- const char *format,
- Py_ssize_t format_len,
- PyObject *args,
- int use_bytearray);
-PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
- PyObject *string,
- int use_bytearray);
-#endif
PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
const char *, Py_ssize_t,
const char *);
-#ifndef Py_LIMITED_API
-/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
-PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
- const char *, Py_ssize_t,
- const char *,
- const char **);
-#endif
-
-/* Macro, trading safety for speed */
-#ifndef Py_LIMITED_API
-#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
- (((PyBytesObject *)(op))->ob_sval))
-#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op))
-#endif
-
-/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
- x must be an iterable object. */
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
-#endif
/* Provides access to the internal data buffer and size of a string
object or the default encoded version of a Unicode object. Passing
@@ -108,28 +63,6 @@ PyAPI_FUNC(int) PyBytes_AsStringAndSize(
strings) */
);
-/* Using the current locale, insert the thousands grouping
- into the string pointed to by buffer. For the argument descriptions,
- see Objects/stringlib/localeutil.h */
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
- Py_ssize_t n_buffer,
- char *digits,
- Py_ssize_t n_digits,
- Py_ssize_t min_width);
-
-/* Using explicit passed-in values, insert the thousands grouping
- into the string pointed to by buffer. For the argument descriptions,
- see Objects/stringlib/localeutil.h */
-PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
- Py_ssize_t n_buffer,
- char *digits,
- Py_ssize_t n_digits,
- Py_ssize_t min_width,
- const char *grouping,
- const char *thousands_sep);
-#endif
-
/* Flags used by string formatting */
#define F_LJUST (1<<0)
#define F_SIGN (1<<1)
@@ -138,85 +71,10 @@ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
#define F_ZERO (1<<4)
#ifndef Py_LIMITED_API
-/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
- A _PyBytesWriter variable must be declared at the end of variables in a
- function to optimize the memory allocation on the stack. */
-typedef struct {
- /* bytes, bytearray or NULL (when the small buffer is used) */
- PyObject *buffer;
-
- /* Number of allocated size. */
- Py_ssize_t allocated;
-
- /* Minimum number of allocated bytes,
- incremented by _PyBytesWriter_Prepare() */
- Py_ssize_t min_size;
-
- /* If non-zero, use a bytearray instead of a bytes object for buffer. */
- int use_bytearray;
-
- /* If non-zero, overallocate the buffer (default: 0).
- This flag must be zero if use_bytearray is non-zero. */
- int overallocate;
-
- /* Stack buffer */
- int use_small_buffer;
- char small_buffer[512];
-} _PyBytesWriter;
-
-/* Initialize a bytes writer
-
- By default, the overallocation is disabled. Set the overallocate attribute
- to control the allocation of the buffer. */
-PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
-
-/* Get the buffer content and reset the writer.
- Return a bytes object, or a bytearray object if use_bytearray is non-zero.
- Raise an exception and return NULL on error. */
-PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
- void *str);
-
-/* Deallocate memory of a writer (clear its internal buffer). */
-PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
-
-/* Allocate the buffer to write size bytes.
- Return the pointer to the beginning of buffer data.
- Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
- Py_ssize_t size);
-
-/* Ensure that the buffer is large enough to write *size* bytes.
- Add size to the writer minimum size (min_size attribute).
-
- str is the current pointer inside the buffer.
- Return the updated current pointer inside the buffer.
- Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
- void *str,
- Py_ssize_t size);
-
-/* Resize the buffer to make it larger.
- The new buffer may be larger than size bytes because of overallocation.
- Return the updated current pointer inside the buffer.
- Raise an exception and return NULL on error.
-
- Note: size must be greater than the number of allocated bytes in the writer.
-
- This function doesn't use the writer minimum size (min_size attribute).
-
- See also _PyBytesWriter_Prepare().
- */
-PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
- void *str,
- Py_ssize_t size);
-
-/* Write bytes.
- Raise an exception and return NULL on error. */
-PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
- void *str,
- const void *bytes,
- Py_ssize_t size);
-#endif /* Py_LIMITED_API */
+# define Py_CPYTHON_BYTESOBJECT_H
+# include "cpython/bytesobject.h"
+# undef Py_CPYTHON_BYTESOBJECT_H
+#endif
#ifdef __cplusplus
}
diff --git a/src/external/windows/include/python/cellobject.h b/src/external/windows/include/python/cellobject.h
index d38bf130..00749aed 100755
--- a/src/external/windows/include/python/cellobject.h
+++ b/src/external/windows/include/python/cellobject.h
@@ -13,7 +13,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyCell_Type;
-#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type)
+#define PyCell_Check(op) Py_IS_TYPE(op, &PyCell_Type)
PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
diff --git a/src/external/windows/include/python/ceval.h b/src/external/windows/include/python/ceval.h
index 31b92ffa..1b32417e 100755
--- a/src/external/windows/include/python/ceval.h
+++ b/src/external/windows/include/python/ceval.h
@@ -8,52 +8,30 @@ extern "C" {
/* Interface to random parts in ceval.c */
/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
- * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(),
- * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call
- * a callable object.
+ * and PyEval_CallMethod are deprecated. Since they are officially part of the
+ * stable ABI (PEP 384), they must be kept for backward compatibility.
+ * PyObject_Call(), PyObject_CallFunction() and PyObject_CallMethod() are
+ * recommended to call a callable object.
*/
-PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
PyObject *callable,
PyObject *args,
PyObject *kwargs);
-/* Inline this */
+/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */
#define PyEval_CallObject(callable, arg) \
PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)
-PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable,
- const char *format, ...);
-PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
- const char *name,
- const char *format, ...);
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
-PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
-PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
-PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
-PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
-PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
-PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
-PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
-#endif
-
-struct _frame; /* Avoid including frameobject.h */
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction(
+ PyObject *callable, const char *format, ...);
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallMethod(
+ PyObject *obj, const char *name, const char *format, ...);
PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
-PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
-
-#ifndef Py_LIMITED_API
-/* Helper to look up a builtin object */
-PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
-/* Look at the current frame's (if any) code's co_flags, and turn on
- the corresponding compiler flags in cf->cf_flags. Return 1 if any
- flag was set, else return 0. */
-PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
-#endif
+PyAPI_FUNC(PyFrameObject *) PyEval_GetFrame(void);
PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
PyAPI_FUNC(int) Py_MakePendingCalls(void);
@@ -86,41 +64,8 @@ PyAPI_FUNC(int) Py_MakePendingCalls(void);
PyAPI_FUNC(void) Py_SetRecursionLimit(int);
PyAPI_FUNC(int) Py_GetRecursionLimit(void);
-#define Py_EnterRecursiveCall(where) \
- (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \
- _Py_CheckRecursiveCall(where))
-#define Py_LeaveRecursiveCall() \
- do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \
- PyThreadState_GET()->overflowed = 0; \
- } while(0)
-PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where);
-
-/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in
- the stable ABI. It should be removed therefrom when possible.
-*/
-PyAPI_DATA(int) _Py_CheckRecursionLimit;
-
-#ifdef USE_STACKCHECK
-/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall()
- on every 64th call to Py_EnterRecursiveCall.
-*/
-# define _Py_MakeRecCheck(x) \
- (++(x) > _Py_CheckRecursionLimit || \
- ++(PyThreadState_GET()->stackcheck_counter) > 64)
-#else
-# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit)
-#endif
-
-/* Compute the "lower-water mark" for a recursion limit. When
- * Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
- * the overflowed flag is reset to 0. */
-#define _Py_RecursionLimitLowerWaterMark(limit) \
- (((limit) > 200) \
- ? ((limit) - 50) \
- : (3 * ((limit) >> 2)))
-
-#define _Py_MakeEndRecCheck(x) \
- (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit))
+PyAPI_FUNC(int) Py_EnterRecursiveCall(const char *where);
+PyAPI_FUNC(void) Py_LeaveRecursiveCall(void);
#define Py_ALLOW_RECURSION \
do { unsigned char _old = PyThreadState_GET()->recursion_critical;\
@@ -133,11 +78,8 @@ PyAPI_DATA(int) _Py_CheckRecursionLimit;
PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
-PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
-PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
-#endif
+PyAPI_FUNC(PyObject *) PyEval_EvalFrame(PyFrameObject *);
+PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc);
/* Interface for threads.
@@ -177,9 +119,6 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
Py_END_ALLOW_THREADS!!!
- The function PyEval_InitThreads() should be called only from
- init_thread() in "_threadmodule.c".
-
Note that not yet all candidates have been converted to use this
mechanism!
*/
@@ -187,22 +126,17 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
-PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
-PyAPI_FUNC(void) PyEval_InitThreads(void);
+Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
+Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
+/* PyEval_AcquireLock() and PyEval_ReleaseLock() are part of stable ABI.
+ * They will be removed from this header file in the future version.
+ * But they will be remained in ABI until Python 4.0.
+ */
Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void);
-/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void);
+Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_ReleaseLock(void);
PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
-PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
-#endif
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
-#endif
-
#define Py_BEGIN_ALLOW_THREADS { \
PyThreadState *_save; \
_save = PyEval_SaveThread();
@@ -211,11 +145,6 @@ PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
#define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \
}
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
-PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
-#endif
-
/* Masks and values used by FORMAT_VALUE opcode. */
#define FVC_MASK 0x3
#define FVC_NONE 0x0
@@ -225,6 +154,12 @@ PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
#define FVS_MASK 0x4
#define FVS_HAVE_SPEC 0x4
+#ifndef Py_LIMITED_API
+# define Py_CPYTHON_CEVAL_H
+# include "cpython/ceval.h"
+# undef Py_CPYTHON_CEVAL_H
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/classobject.h b/src/external/windows/include/python/classobject.h
index 4c513eb3..5ee99b3b 100755
--- a/src/external/windows/include/python/classobject.h
+++ b/src/external/windows/include/python/classobject.h
@@ -19,7 +19,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyMethod_Type;
-#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
+#define PyMethod_Check(op) Py_IS_TYPE(op, &PyMethod_Type)
PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
@@ -33,8 +33,6 @@ PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
#define PyMethod_GET_SELF(meth) \
(((PyMethodObject *)meth) -> im_self)
-PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
-
typedef struct {
PyObject_HEAD
PyObject *func;
@@ -42,7 +40,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
-#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)
+#define PyInstanceMethod_Check(op) Py_IS_TYPE(op, &PyInstanceMethod_Type)
PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
diff --git a/src/external/windows/include/python/code.h b/src/external/windows/include/python/code.h
index 6c79cf19..1f948e52 100755
--- a/src/external/windows/include/python/code.h
+++ b/src/external/windows/include/python/code.h
@@ -1,180 +1,20 @@
/* Definitions for bytecode */
-#ifndef Py_LIMITED_API
#ifndef Py_CODE_H
#define Py_CODE_H
#ifdef __cplusplus
extern "C" {
#endif
-typedef uint16_t _Py_CODEUNIT;
-
-#ifdef WORDS_BIGENDIAN
-# define _Py_OPCODE(word) ((word) >> 8)
-# define _Py_OPARG(word) ((word) & 255)
-#else
-# define _Py_OPCODE(word) ((word) & 255)
-# define _Py_OPARG(word) ((word) >> 8)
-#endif
-
-typedef struct _PyOpcache _PyOpcache;
-
-/* Bytecode object */
-typedef struct {
- PyObject_HEAD
- int co_argcount; /* #arguments, except *args */
- int co_posonlyargcount; /* #positional only arguments */
- int co_kwonlyargcount; /* #keyword only arguments */
- int co_nlocals; /* #local variables */
- int co_stacksize; /* #entries needed for evaluation stack */
- int co_flags; /* CO_..., see below */
- int co_firstlineno; /* first source line number */
- PyObject *co_code; /* instruction opcodes */
- PyObject *co_consts; /* list (constants used) */
- PyObject *co_names; /* list of strings (names used) */
- PyObject *co_varnames; /* tuple of strings (local variable names) */
- PyObject *co_freevars; /* tuple of strings (free variable names) */
- PyObject *co_cellvars; /* tuple of strings (cell variable names) */
- /* The rest aren't used in either hash or comparisons, except for co_name,
- used in both. This is done to preserve the name and line number
- for tracebacks and debuggers; otherwise, constant de-duplication
- would collapse identical functions/lambdas defined on different lines.
- */
- Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */
- PyObject *co_filename; /* unicode (where it was loaded from) */
- PyObject *co_name; /* unicode (name, for reference) */
- PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See
- Objects/lnotab_notes.txt for details. */
- void *co_zombieframe; /* for optimization only (see frameobject.c) */
- PyObject *co_weakreflist; /* to support weakrefs to code objects */
- /* Scratch space for extra data relating to the code object.
- Type is a void* to keep the format private in codeobject.c to force
- people to go through the proper APIs. */
- void *co_extra;
-
- /* Per opcodes just-in-time cache
- *
- * To reduce cache size, we use indirect mapping from opcode index to
- * cache object:
- * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
- */
-
- // co_opcache_map is indexed by (next_instr - first_instr).
- // * 0 means there is no cache for this opcode.
- // * n > 0 means there is cache in co_opcache[n-1].
- unsigned char *co_opcache_map;
- _PyOpcache *co_opcache;
- int co_opcache_flag; // used to determine when create a cache.
- unsigned char co_opcache_size; // length of co_opcache.
-} PyCodeObject;
-
-/* Masks for co_flags above */
-#define CO_OPTIMIZED 0x0001
-#define CO_NEWLOCALS 0x0002
-#define CO_VARARGS 0x0004
-#define CO_VARKEYWORDS 0x0008
-#define CO_NESTED 0x0010
-#define CO_GENERATOR 0x0020
-/* The CO_NOFREE flag is set if there are no free or cell variables.
- This information is redundant, but it allows a single flag test
- to determine whether there is any extra work to be done when the
- call frame it setup.
-*/
-#define CO_NOFREE 0x0040
-
-/* The CO_COROUTINE flag is set for coroutine functions (defined with
- ``async def`` keywords) */
-#define CO_COROUTINE 0x0080
-#define CO_ITERABLE_COROUTINE 0x0100
-#define CO_ASYNC_GENERATOR 0x0200
-
-/* bpo-39562: These constant values are changed in Python 3.9
- to prevent collision with compiler flags. CO_FUTURE_ and PyCF_
- constants must be kept unique. PyCF_ constants can use bits from
- 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */
-#define CO_FUTURE_DIVISION 0x20000
-#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
-#define CO_FUTURE_WITH_STATEMENT 0x80000
-#define CO_FUTURE_PRINT_FUNCTION 0x100000
-#define CO_FUTURE_UNICODE_LITERALS 0x200000
-
-#define CO_FUTURE_BARRY_AS_BDFL 0x400000
-#define CO_FUTURE_GENERATOR_STOP 0x800000
-#define CO_FUTURE_ANNOTATIONS 0x1000000
-
-/* This value is found in the co_cell2arg array when the associated cell
- variable does not correspond to an argument. */
-#define CO_CELL_NOT_AN_ARG (-1)
-
-/* This should be defined if a future statement modifies the syntax.
- For example, when a keyword is added.
-*/
-#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
-
-#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
-
-PyAPI_DATA(PyTypeObject) PyCode_Type;
-
-#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
-#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
-
-/* Public interface */
-PyAPI_FUNC(PyCodeObject *) PyCode_New(
- int, int, int, int, int, PyObject *, PyObject *,
- PyObject *, PyObject *, PyObject *, PyObject *,
- PyObject *, PyObject *, int, PyObject *);
-
-PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
- int, int, int, int, int, int, PyObject *, PyObject *,
- PyObject *, PyObject *, PyObject *, PyObject *,
- PyObject *, PyObject *, int, PyObject *);
- /* same as struct above */
-
-/* Creates a new empty code object with the specified source location. */
-PyAPI_FUNC(PyCodeObject *)
-PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
-
-/* Return the line number associated with the specified bytecode index
- in this code object. If you just need the line number of a frame,
- use PyFrame_GetLineNumber() instead. */
-PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
-
-/* for internal use only */
-typedef struct _addr_pair {
- int ap_lower;
- int ap_upper;
-} PyAddrPair;
+typedef struct PyCodeObject PyCodeObject;
#ifndef Py_LIMITED_API
-/* Update *bounds to describe the first and one-past-the-last instructions in the
- same line as lasti. Return the number of that line.
-*/
-PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
- int lasti, PyAddrPair *bounds);
-
-/* Create a comparable key used to compare constants taking in account the
- * object type. It is used to make sure types are not coerced (e.g., float and
- * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
- *
- * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
- * depending on the type and the value. The type is the first item to not
- * compare bytes and str which can raise a BytesWarning exception. */
-PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
-#endif
-
-PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
- PyObject *names, PyObject *lnotab);
-
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
- void **extra);
-PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
- void *extra);
+# define Py_CPYTHON_CODE_H
+# include "cpython/code.h"
+# undef Py_CPYTHON_CODE_H
#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_CODE_H */
-#endif /* Py_LIMITED_API */
diff --git a/src/external/windows/include/python/compile.h b/src/external/windows/include/python/compile.h
index eac3d9b5..4d6a0f6c 100755
--- a/src/external/windows/include/python/compile.h
+++ b/src/external/windows/include/python/compile.h
@@ -2,7 +2,6 @@
#define Py_COMPILE_H
#ifndef Py_LIMITED_API
-#include "code.h"
#ifdef __cplusplus
extern "C" {
@@ -10,6 +9,9 @@ extern "C" {
/* Public interface */
struct _node; /* Declare the existence of this type */
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
/* XXX (ncoghlan): Unprefixed type name in a public API! */
@@ -89,7 +91,12 @@ PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
-PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
+typedef struct {
+ int optimize;
+ int ff_features;
+} _PyASTOptimizeState;
+
+PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state);
#ifdef __cplusplus
}
@@ -103,4 +110,7 @@ PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
#define Py_eval_input 258
#define Py_func_type_input 345
+/* This doesn't need to match anything */
+#define Py_fstring_input 800
+
#endif /* !Py_COMPILE_H */
diff --git a/src/external/windows/include/python/complexobject.h b/src/external/windows/include/python/complexobject.h
index a189212d..a912a55f 100755
--- a/src/external/windows/include/python/complexobject.h
+++ b/src/external/windows/include/python/complexobject.h
@@ -39,7 +39,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyComplex_Type;
#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
-#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)
+#define PyComplex_CheckExact(op) Py_IS_TYPE(op, &PyComplex_Type)
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
diff --git a/src/external/windows/include/python/context.h b/src/external/windows/include/python/context.h
index cb21c429..e1a0f0fb 100755
--- a/src/external/windows/include/python/context.h
+++ b/src/external/windows/include/python/context.h
@@ -17,9 +17,9 @@ PyAPI_DATA(PyTypeObject) PyContextToken_Type;
typedef struct _pycontexttokenobject PyContextToken;
-#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type)
-#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type)
-#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type)
+#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type)
+#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type)
+#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type)
PyAPI_FUNC(PyObject *) PyContext_New(void);
@@ -73,9 +73,6 @@ PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token);
PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void);
-PyAPI_FUNC(int) PyContext_ClearFreeList(void);
-
-
#endif /* !Py_LIMITED_API */
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/cpython/abstract.h b/src/external/windows/include/python/cpython/abstract.h
index 8b921dae..91c15448 100755
--- a/src/external/windows/include/python/cpython/abstract.h
+++ b/src/external/windows/include/python/cpython/abstract.h
@@ -26,28 +26,10 @@ PyAPI_FUNC(PyObject *) _PyStack_AsDict(
PyObject *const *values,
PyObject *kwnames);
-/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
-
- Return 0 on success, raise an exception and return -1 on error.
-
- Write the new stack into *p_stack. If *p_stack is differen than args, it
- must be released by PyMem_Free().
-
- The stack uses borrowed references.
-
- The type of keyword keys is not checked, these checks should be done
- later (ex: _PyArg_ParseStackAndKeywords). */
-PyAPI_FUNC(int) _PyStack_UnpackDict(
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwargs,
- PyObject *const **p_stack,
- PyObject **p_kwnames);
-
/* Suggested size (number of positional arguments) for arrays of PyObject*
allocated on a C stack to avoid allocating memory on the heap memory. Such
array is used to pass positional arguments to call functions of the
- _PyObject_Vectorcall() family.
+ PyObject_Vectorcall() family.
The size is chosen to not abuse the C stack and so limit the risk of stack
overflow. The size is also chosen to allow using the small stack for most
@@ -55,16 +37,19 @@ PyAPI_FUNC(int) _PyStack_UnpackDict(
40 bytes on the stack. */
#define _PY_FASTCALL_SMALL_STACK 5
-PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
- PyObject *result,
- const char *where);
+PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(
+ PyThreadState *tstate,
+ PyObject *callable,
+ PyObject *result,
+ const char *where);
/* === Vectorcall protocol (PEP 590) ============================= */
-/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall()
- or _PyObject_FastCallDict() (both forms are supported),
+/* Call callable using tp_call. Arguments are like PyObject_Vectorcall()
+ or PyObject_FastCallDict() (both forms are supported),
except that nargs is plainly the number of arguments without flags. */
PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall(
+ PyThreadState *tstate,
PyObject *callable,
PyObject *const *args, Py_ssize_t nargs,
PyObject *keywords);
@@ -78,18 +63,22 @@ PyVectorcall_NARGS(size_t n)
}
static inline vectorcallfunc
-_PyVectorcall_Function(PyObject *callable)
+PyVectorcall_Function(PyObject *callable)
{
- PyTypeObject *tp = Py_TYPE(callable);
- Py_ssize_t offset = tp->tp_vectorcall_offset;
- vectorcallfunc *ptr;
- if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) {
+ PyTypeObject *tp;
+ Py_ssize_t offset;
+ vectorcallfunc ptr;
+
+ assert(callable != NULL);
+ tp = Py_TYPE(callable);
+ if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
return NULL;
}
assert(PyCallable_Check(callable));
+ offset = tp->tp_vectorcall_offset;
assert(offset > 0);
- ptr = (vectorcallfunc*)(((char *)callable) + offset);
- return *ptr;
+ memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
+ return ptr;
}
/* Call the callable object 'callable' with the "vectorcall" calling
@@ -106,31 +95,51 @@ _PyVectorcall_Function(PyObject *callable)
of keyword arguments does not change nargsf). kwnames can also be NULL if
there are no keyword arguments.
- keywords must only contains str strings (no subclass), and all keys must
- be unique.
+ keywords must only contain strings and all keys must be unique.
Return the result on success. Raise an exception and return NULL on
error. */
static inline PyObject *
-_PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
- size_t nargsf, PyObject *kwnames)
+_PyObject_VectorcallTstate(PyThreadState *tstate, PyObject *callable,
+ PyObject *const *args, size_t nargsf,
+ PyObject *kwnames)
{
- PyObject *res;
vectorcallfunc func;
+ PyObject *res;
+
assert(kwnames == NULL || PyTuple_Check(kwnames));
assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
- func = _PyVectorcall_Function(callable);
+
+ func = PyVectorcall_Function(callable);
if (func == NULL) {
Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
- return _PyObject_MakeTpCall(callable, args, nargs, kwnames);
+ return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
}
res = func(callable, args, nargsf, kwnames);
- return _Py_CheckFunctionResult(callable, res, NULL);
+ return _Py_CheckFunctionResult(tstate, callable, res, NULL);
}
-/* Same as _PyObject_Vectorcall except that keyword arguments are passed as
+static inline PyObject *
+PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames)
+{
+ PyThreadState *tstate = PyThreadState_GET();
+ return _PyObject_VectorcallTstate(tstate, callable,
+ args, nargsf, kwnames);
+}
+
+// Backwards compatibility aliases for API that was provisional in Python 3.8
+#define _PyObject_Vectorcall PyObject_Vectorcall
+#define _PyObject_VectorcallMethod PyObject_VectorcallMethod
+#define _PyObject_FastCallDict PyObject_VectorcallDict
+#define _PyVectorcall_Function PyVectorcall_Function
+#define _PyObject_CallOneArg PyObject_CallOneArg
+#define _PyObject_CallMethodNoArgs PyObject_CallMethodNoArgs
+#define _PyObject_CallMethodOneArg PyObject_CallMethodOneArg
+
+/* Same as PyObject_Vectorcall except that keyword arguments are passed as
dict, which may be NULL if there are no keyword arguments. */
-PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
+PyAPI_FUNC(PyObject *) PyObject_VectorcallDict(
PyObject *callable,
PyObject *const *args,
size_t nargsf,
@@ -140,30 +149,65 @@ PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
"tuple" and keyword arguments "dict". "dict" may also be NULL */
PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);
-/* Same as _PyObject_Vectorcall except without keyword arguments */
+static inline PyObject *
+_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func, PyObject *const *args, Py_ssize_t nargs)
+{
+ return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL);
+}
+
+/* Same as PyObject_Vectorcall except without keyword arguments */
static inline PyObject *
_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
{
- return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
+ PyThreadState *tstate = PyThreadState_GET();
+ return _PyObject_FastCallTstate(tstate, func, args, nargs);
}
-/* Call a callable without any arguments */
+/* Call a callable without any arguments
+ Private static inline function variant of public function
+ PyObject_CallNoArgs(). */
static inline PyObject *
_PyObject_CallNoArg(PyObject *func) {
- return _PyObject_Vectorcall(func, NULL, 0, NULL);
+ PyThreadState *tstate = PyThreadState_GET();
+ return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
}
-PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
- PyObject *callable,
- PyObject *obj,
- PyObject *args,
- PyObject *kwargs);
+static inline PyObject *
+PyObject_CallOneArg(PyObject *func, PyObject *arg)
+{
+ PyObject *_args[2];
+ PyObject **args;
+ PyThreadState *tstate;
+ size_t nargsf;
-PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
- PyObject *callable,
- PyObject *obj,
- PyObject *const *args,
- Py_ssize_t nargs);
+ assert(arg != NULL);
+ args = _args + 1; // For PY_VECTORCALL_ARGUMENTS_OFFSET
+ args[0] = arg;
+ tstate = PyThreadState_GET();
+ nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
+ return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
+}
+
+PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod(
+ PyObject *name, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames);
+
+static inline PyObject *
+PyObject_CallMethodNoArgs(PyObject *self, PyObject *name)
+{
+ return PyObject_VectorcallMethod(name, &self,
+ 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
+static inline PyObject *
+PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg)
+{
+ PyObject *args[2] = {self, arg};
+
+ assert(arg != NULL);
+ return PyObject_VectorcallMethod(name, args,
+ 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
as the method name. */
@@ -181,6 +225,35 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
struct _Py_Identifier *name,
...);
+static inline PyObject *
+_PyObject_VectorcallMethodId(
+ _Py_Identifier *name, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames)
+{
+ PyObject *oname = _PyUnicode_FromId(name); /* borrowed */
+ if (!oname) {
+ return NULL;
+ }
+ return PyObject_VectorcallMethod(oname, args, nargsf, kwnames);
+}
+
+static inline PyObject *
+_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name)
+{
+ return _PyObject_VectorcallMethodId(name, &self,
+ 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
+static inline PyObject *
+_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg)
+{
+ PyObject *args[2] = {self, arg};
+
+ assert(arg != NULL);
+ return _PyObject_VectorcallMethodId(name, args,
+ 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
+}
+
PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
/* Guess the size of object 'o' using len(o) or o.__length_hint__().
@@ -191,9 +264,7 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
/* === New Buffer API ============================================ */
/* Return 1 if the getbuffer function is available, otherwise return 0. */
-#define PyObject_CheckBuffer(obj) \
- (((obj)->ob_type->tp_as_buffer != NULL) && \
- ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
+PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj);
/* This is a C-API version of the getbuffer function call. It checks
to make sure object has the required function pointer and issues the
@@ -209,7 +280,7 @@ PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
/* Return the implied itemsize of the data-format area from a
struct-style description. */
-PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
+PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format);
/* Implementation in memoryobject.c */
PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
@@ -261,14 +332,8 @@ PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
/* ==== Iterators ================================================ */
#define PyIter_Check(obj) \
- ((obj)->ob_type->tp_iternext != NULL && \
- (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
-
-/* === Number Protocol ================================================== */
-
-#define PyIndex_Check(obj) \
- ((obj)->ob_type->tp_as_number != NULL && \
- (obj)->ob_type->tp_as_number->nb_index != NULL)
+ (Py_TYPE(obj)->tp_iternext != NULL && \
+ Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented)
/* === Sequence protocol ================================================ */
diff --git a/src/external/windows/include/python/cpython/bytearrayobject.h b/src/external/windows/include/python/cpython/bytearrayobject.h
new file mode 100755
index 00000000..061de138
--- /dev/null
+++ b/src/external/windows/include/python/cpython/bytearrayobject.h
@@ -0,0 +1,20 @@
+#ifndef Py_CPYTHON_BYTEARRAYOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+/* Object layout */
+typedef struct {
+ PyObject_VAR_HEAD
+ Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
+ char *ob_bytes; /* Physical backing buffer */
+ char *ob_start; /* Logical start inside ob_bytes */
+ Py_ssize_t ob_exports; /* How many buffer exports */
+} PyByteArrayObject;
+
+/* Macros, trading safety for speed */
+#define PyByteArray_AS_STRING(self) \
+ (assert(PyByteArray_Check(self)), \
+ Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
+#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
+
+PyAPI_DATA(char) _PyByteArray_empty_string[];
diff --git a/src/external/windows/include/python/cpython/bytesobject.h b/src/external/windows/include/python/cpython/bytesobject.h
new file mode 100755
index 00000000..370513c0
--- /dev/null
+++ b/src/external/windows/include/python/cpython/bytesobject.h
@@ -0,0 +1,118 @@
+#ifndef Py_CPYTHON_BYTESOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+typedef struct {
+ PyObject_VAR_HEAD
+ Py_hash_t ob_shash;
+ char ob_sval[1];
+
+ /* Invariants:
+ * ob_sval contains space for 'ob_size+1' elements.
+ * ob_sval[ob_size] == 0.
+ * ob_shash is the hash of the string or -1 if not computed yet.
+ */
+} PyBytesObject;
+
+PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
+PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
+ const char *format,
+ Py_ssize_t format_len,
+ PyObject *args,
+ int use_bytearray);
+PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
+ PyObject *string,
+ int use_bytearray);
+
+/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
+PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
+ const char *, const char **);
+
+/* Macro, trading safety for speed */
+#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
+ (((PyBytesObject *)(op))->ob_sval))
+#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op))
+
+/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
+ x must be an iterable object. */
+PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
+
+
+/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
+ A _PyBytesWriter variable must be declared at the end of variables in a
+ function to optimize the memory allocation on the stack. */
+typedef struct {
+ /* bytes, bytearray or NULL (when the small buffer is used) */
+ PyObject *buffer;
+
+ /* Number of allocated size. */
+ Py_ssize_t allocated;
+
+ /* Minimum number of allocated bytes,
+ incremented by _PyBytesWriter_Prepare() */
+ Py_ssize_t min_size;
+
+ /* If non-zero, use a bytearray instead of a bytes object for buffer. */
+ int use_bytearray;
+
+ /* If non-zero, overallocate the buffer (default: 0).
+ This flag must be zero if use_bytearray is non-zero. */
+ int overallocate;
+
+ /* Stack buffer */
+ int use_small_buffer;
+ char small_buffer[512];
+} _PyBytesWriter;
+
+/* Initialize a bytes writer
+
+ By default, the overallocation is disabled. Set the overallocate attribute
+ to control the allocation of the buffer. */
+PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
+
+/* Get the buffer content and reset the writer.
+ Return a bytes object, or a bytearray object if use_bytearray is non-zero.
+ Raise an exception and return NULL on error. */
+PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
+ void *str);
+
+/* Deallocate memory of a writer (clear its internal buffer). */
+PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
+
+/* Allocate the buffer to write size bytes.
+ Return the pointer to the beginning of buffer data.
+ Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
+ Py_ssize_t size);
+
+/* Ensure that the buffer is large enough to write *size* bytes.
+ Add size to the writer minimum size (min_size attribute).
+
+ str is the current pointer inside the buffer.
+ Return the updated current pointer inside the buffer.
+ Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
+ void *str,
+ Py_ssize_t size);
+
+/* Resize the buffer to make it larger.
+ The new buffer may be larger than size bytes because of overallocation.
+ Return the updated current pointer inside the buffer.
+ Raise an exception and return NULL on error.
+
+ Note: size must be greater than the number of allocated bytes in the writer.
+
+ This function doesn't use the writer minimum size (min_size attribute).
+
+ See also _PyBytesWriter_Prepare().
+ */
+PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
+ void *str,
+ Py_ssize_t size);
+
+/* Write bytes.
+ Raise an exception and return NULL on error. */
+PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
+ void *str,
+ const void *bytes,
+ Py_ssize_t size);
diff --git a/src/external/windows/include/python/cpython/ceval.h b/src/external/windows/include/python/cpython/ceval.h
new file mode 100755
index 00000000..ce4fdfe3
--- /dev/null
+++ b/src/external/windows/include/python/cpython/ceval.h
@@ -0,0 +1,38 @@
+#ifndef Py_CPYTHON_CEVAL_H
+# error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
+PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
+PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
+PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
+PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
+PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *);
+PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
+PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *);
+PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
+
+/* Helper to look up a builtin object */
+PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
+/* Look at the current frame's (if any) code's co_flags, and turn on
+ the corresponding compiler flags in cf->cf_flags. Return 1 if any
+ flag was set, else return 0. */
+PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
+
+PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int exc);
+
+PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
+PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
+
+PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
+
+PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
+PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/external/windows/include/python/cpython/code.h b/src/external/windows/include/python/cpython/code.h
new file mode 100755
index 00000000..e0d1f1cb
--- /dev/null
+++ b/src/external/windows/include/python/cpython/code.h
@@ -0,0 +1,165 @@
+#ifndef Py_CPYTHON_CODE_H
+# error "this header file must not be included directly"
+#endif
+
+typedef uint16_t _Py_CODEUNIT;
+
+#ifdef WORDS_BIGENDIAN
+# define _Py_OPCODE(word) ((word) >> 8)
+# define _Py_OPARG(word) ((word) & 255)
+#else
+# define _Py_OPCODE(word) ((word) & 255)
+# define _Py_OPARG(word) ((word) >> 8)
+#endif
+
+typedef struct _PyOpcache _PyOpcache;
+
+/* Bytecode object */
+struct PyCodeObject {
+ PyObject_HEAD
+ int co_argcount; /* #arguments, except *args */
+ int co_posonlyargcount; /* #positional only arguments */
+ int co_kwonlyargcount; /* #keyword only arguments */
+ int co_nlocals; /* #local variables */
+ int co_stacksize; /* #entries needed for evaluation stack */
+ int co_flags; /* CO_..., see below */
+ int co_firstlineno; /* first source line number */
+ PyObject *co_code; /* instruction opcodes */
+ PyObject *co_consts; /* list (constants used) */
+ PyObject *co_names; /* list of strings (names used) */
+ PyObject *co_varnames; /* tuple of strings (local variable names) */
+ PyObject *co_freevars; /* tuple of strings (free variable names) */
+ PyObject *co_cellvars; /* tuple of strings (cell variable names) */
+ /* The rest aren't used in either hash or comparisons, except for co_name,
+ used in both. This is done to preserve the name and line number
+ for tracebacks and debuggers; otherwise, constant de-duplication
+ would collapse identical functions/lambdas defined on different lines.
+ */
+ Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */
+ PyObject *co_filename; /* unicode (where it was loaded from) */
+ PyObject *co_name; /* unicode (name, for reference) */
+ PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See
+ Objects/lnotab_notes.txt for details. */
+ void *co_zombieframe; /* for optimization only (see frameobject.c) */
+ PyObject *co_weakreflist; /* to support weakrefs to code objects */
+ /* Scratch space for extra data relating to the code object.
+ Type is a void* to keep the format private in codeobject.c to force
+ people to go through the proper APIs. */
+ void *co_extra;
+
+ /* Per opcodes just-in-time cache
+ *
+ * To reduce cache size, we use indirect mapping from opcode index to
+ * cache object:
+ * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
+ */
+
+ // co_opcache_map is indexed by (next_instr - first_instr).
+ // * 0 means there is no cache for this opcode.
+ // * n > 0 means there is cache in co_opcache[n-1].
+ unsigned char *co_opcache_map;
+ _PyOpcache *co_opcache;
+ int co_opcache_flag; // used to determine when create a cache.
+ unsigned char co_opcache_size; // length of co_opcache.
+};
+
+/* Masks for co_flags above */
+#define CO_OPTIMIZED 0x0001
+#define CO_NEWLOCALS 0x0002
+#define CO_VARARGS 0x0004
+#define CO_VARKEYWORDS 0x0008
+#define CO_NESTED 0x0010
+#define CO_GENERATOR 0x0020
+/* The CO_NOFREE flag is set if there are no free or cell variables.
+ This information is redundant, but it allows a single flag test
+ to determine whether there is any extra work to be done when the
+ call frame it setup.
+*/
+#define CO_NOFREE 0x0040
+
+/* The CO_COROUTINE flag is set for coroutine functions (defined with
+ ``async def`` keywords) */
+#define CO_COROUTINE 0x0080
+#define CO_ITERABLE_COROUTINE 0x0100
+#define CO_ASYNC_GENERATOR 0x0200
+
+/* bpo-39562: These constant values are changed in Python 3.9
+ to prevent collision with compiler flags. CO_FUTURE_ and PyCF_
+ constants must be kept unique. PyCF_ constants can use bits from
+ 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */
+#define CO_FUTURE_DIVISION 0x20000
+#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
+#define CO_FUTURE_WITH_STATEMENT 0x80000
+#define CO_FUTURE_PRINT_FUNCTION 0x100000
+#define CO_FUTURE_UNICODE_LITERALS 0x200000
+
+#define CO_FUTURE_BARRY_AS_BDFL 0x400000
+#define CO_FUTURE_GENERATOR_STOP 0x800000
+#define CO_FUTURE_ANNOTATIONS 0x1000000
+
+/* This value is found in the co_cell2arg array when the associated cell
+ variable does not correspond to an argument. */
+#define CO_CELL_NOT_AN_ARG (-1)
+
+/* This should be defined if a future statement modifies the syntax.
+ For example, when a keyword is added.
+*/
+#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
+
+#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
+
+PyAPI_DATA(PyTypeObject) PyCode_Type;
+
+#define PyCode_Check(op) Py_IS_TYPE(op, &PyCode_Type)
+#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
+
+/* Public interface */
+PyAPI_FUNC(PyCodeObject *) PyCode_New(
+ int, int, int, int, int, PyObject *, PyObject *,
+ PyObject *, PyObject *, PyObject *, PyObject *,
+ PyObject *, PyObject *, int, PyObject *);
+
+PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
+ int, int, int, int, int, int, PyObject *, PyObject *,
+ PyObject *, PyObject *, PyObject *, PyObject *,
+ PyObject *, PyObject *, int, PyObject *);
+ /* same as struct above */
+
+/* Creates a new empty code object with the specified source location. */
+PyAPI_FUNC(PyCodeObject *)
+PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
+
+/* Return the line number associated with the specified bytecode index
+ in this code object. If you just need the line number of a frame,
+ use PyFrame_GetLineNumber() instead. */
+PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
+
+/* for internal use only */
+typedef struct _addr_pair {
+ int ap_lower;
+ int ap_upper;
+} PyAddrPair;
+
+/* Update *bounds to describe the first and one-past-the-last instructions in the
+ same line as lasti. Return the number of that line.
+*/
+PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
+ int lasti, PyAddrPair *bounds);
+
+/* Create a comparable key used to compare constants taking in account the
+ * object type. It is used to make sure types are not coerced (e.g., float and
+ * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
+ *
+ * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
+ * depending on the type and the value. The type is the first item to not
+ * compare bytes and str which can raise a BytesWarning exception. */
+PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
+
+PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
+ PyObject *names, PyObject *lnotab);
+
+
+PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
+ void **extra);
+PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
+ void *extra);
diff --git a/src/external/windows/include/python/cpython/dictobject.h b/src/external/windows/include/python/cpython/dictobject.h
index e8c94964..3a0869de 100755
--- a/src/external/windows/include/python/cpython/dictobject.h
+++ b/src/external/windows/include/python/cpython/dictobject.h
@@ -62,8 +62,6 @@ PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *);
PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
-PyAPI_FUNC(int) PyDict_ClearFreeList(void);
-
/* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0,
the first occurrence of a key wins, if override is 1, the last occurrence
of a key wins, if override is 2, a KeyError with conflicting key as
diff --git a/src/external/windows/include/python/cpython/fileobject.h b/src/external/windows/include/python/cpython/fileobject.h
index 7752c056..9aa0ead5 100755
--- a/src/external/windows/include/python/cpython/fileobject.h
+++ b/src/external/windows/include/python/cpython/fileobject.h
@@ -8,14 +8,6 @@ extern "C" {
PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
-PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
-#endif
-
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
-PyAPI_DATA(int) Py_UTF8Mode;
-#endif
-
/* The std printer acts as a preliminary sys.stderr until the new io
infrastructure is in place. */
PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int);
diff --git a/src/external/windows/include/python/cpython/fileutils.h b/src/external/windows/include/python/cpython/fileutils.h
new file mode 100755
index 00000000..08139cf7
--- /dev/null
+++ b/src/external/windows/include/python/cpython/fileutils.h
@@ -0,0 +1,165 @@
+#ifndef Py_CPYTHON_FILEUTILS_H
+# error "this header file must not be included directly"
+#endif
+
+typedef enum {
+ _Py_ERROR_UNKNOWN=0,
+ _Py_ERROR_STRICT,
+ _Py_ERROR_SURROGATEESCAPE,
+ _Py_ERROR_REPLACE,
+ _Py_ERROR_IGNORE,
+ _Py_ERROR_BACKSLASHREPLACE,
+ _Py_ERROR_SURROGATEPASS,
+ _Py_ERROR_XMLCHARREFREPLACE,
+ _Py_ERROR_OTHER
+} _Py_error_handler;
+
+PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
+
+PyAPI_FUNC(int) _Py_DecodeLocaleEx(
+ const char *arg,
+ wchar_t **wstr,
+ size_t *wlen,
+ const char **reason,
+ int current_locale,
+ _Py_error_handler errors);
+
+PyAPI_FUNC(int) _Py_EncodeLocaleEx(
+ const wchar_t *text,
+ char **str,
+ size_t *error_pos,
+ const char **reason,
+ int current_locale,
+ _Py_error_handler errors);
+
+
+PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
+
+#if defined(MS_WINDOWS) || defined(__APPLE__)
+ /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
+ On macOS 10.13, read() and write() with more than INT_MAX bytes
+ fail with EINVAL (bpo-24658). */
+# define _PY_READ_MAX INT_MAX
+# define _PY_WRITE_MAX INT_MAX
+#else
+ /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
+ but it's safer to do it ourself to have a portable behaviour */
+# define _PY_READ_MAX PY_SSIZE_T_MAX
+# define _PY_WRITE_MAX PY_SSIZE_T_MAX
+#endif
+
+#ifdef MS_WINDOWS
+struct _Py_stat_struct {
+ unsigned long st_dev;
+ uint64_t st_ino;
+ unsigned short st_mode;
+ int st_nlink;
+ int st_uid;
+ int st_gid;
+ unsigned long st_rdev;
+ __int64 st_size;
+ time_t st_atime;
+ int st_atime_nsec;
+ time_t st_mtime;
+ int st_mtime_nsec;
+ time_t st_ctime;
+ int st_ctime_nsec;
+ unsigned long st_file_attributes;
+ unsigned long st_reparse_tag;
+};
+#else
+# define _Py_stat_struct stat
+#endif
+
+PyAPI_FUNC(int) _Py_fstat(
+ int fd,
+ struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_fstat_noraise(
+ int fd,
+ struct _Py_stat_struct *status);
+
+PyAPI_FUNC(int) _Py_stat(
+ PyObject *path,
+ struct stat *status);
+
+PyAPI_FUNC(int) _Py_open(
+ const char *pathname,
+ int flags);
+
+PyAPI_FUNC(int) _Py_open_noraise(
+ const char *pathname,
+ int flags);
+
+PyAPI_FUNC(FILE *) _Py_wfopen(
+ const wchar_t *path,
+ const wchar_t *mode);
+
+PyAPI_FUNC(FILE*) _Py_fopen(
+ const char *pathname,
+ const char *mode);
+
+PyAPI_FUNC(FILE*) _Py_fopen_obj(
+ PyObject *path,
+ const char *mode);
+
+PyAPI_FUNC(Py_ssize_t) _Py_read(
+ int fd,
+ void *buf,
+ size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write(
+ int fd,
+ const void *buf,
+ size_t count);
+
+PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
+ int fd,
+ const void *buf,
+ size_t count);
+
+#ifdef HAVE_READLINK
+PyAPI_FUNC(int) _Py_wreadlink(
+ const wchar_t *path,
+ wchar_t *buf,
+ /* Number of characters of 'buf' buffer
+ including the trailing NUL character */
+ size_t buflen);
+#endif
+
+#ifdef HAVE_REALPATH
+PyAPI_FUNC(wchar_t*) _Py_wrealpath(
+ const wchar_t *path,
+ wchar_t *resolved_path,
+ /* Number of characters of 'resolved_path' buffer
+ including the trailing NUL character */
+ size_t resolved_path_len);
+#endif
+
+#ifndef MS_WINDOWS
+PyAPI_FUNC(int) _Py_isabs(const wchar_t *path);
+#endif
+
+PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p);
+
+PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
+ wchar_t *buf,
+ /* Number of characters of 'buf' buffer
+ including the trailing NUL character */
+ size_t buflen);
+
+PyAPI_FUNC(int) _Py_get_inheritable(int fd);
+
+PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
+ int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
+ int *atomic_flag_works);
+
+PyAPI_FUNC(int) _Py_dup(int fd);
+
+#ifndef MS_WINDOWS
+PyAPI_FUNC(int) _Py_get_blocking(int fd);
+
+PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
+#endif /* !MS_WINDOWS */
diff --git a/src/external/windows/include/python/cpython/frameobject.h b/src/external/windows/include/python/cpython/frameobject.h
new file mode 100755
index 00000000..85255fa5
--- /dev/null
+++ b/src/external/windows/include/python/cpython/frameobject.h
@@ -0,0 +1,84 @@
+/* Frame object interface */
+
+#ifndef Py_CPYTHON_FRAMEOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ int b_type; /* what kind of block this is */
+ int b_handler; /* where to jump to find handler */
+ int b_level; /* value stack level to pop to */
+} PyTryBlock;
+
+struct _frame {
+ PyObject_VAR_HEAD
+ struct _frame *f_back; /* previous frame, or NULL */
+ PyCodeObject *f_code; /* code segment */
+ PyObject *f_builtins; /* builtin symbol table (PyDictObject) */
+ PyObject *f_globals; /* global symbol table (PyDictObject) */
+ PyObject *f_locals; /* local symbol table (any mapping) */
+ PyObject **f_valuestack; /* points after the last local */
+ /* Next free slot in f_valuestack. Frame creation sets to f_valuestack.
+ Frame evaluation usually NULLs it, but a frame that yields sets it
+ to the current stack top. */
+ PyObject **f_stacktop;
+ PyObject *f_trace; /* Trace function */
+ char f_trace_lines; /* Emit per-line trace events? */
+ char f_trace_opcodes; /* Emit per-opcode trace events? */
+
+ /* Borrowed reference to a generator, or NULL */
+ PyObject *f_gen;
+
+ int f_lasti; /* Last instruction if called */
+ /* Call PyFrame_GetLineNumber() instead of reading this field
+ directly. As of 2.3 f_lineno is only valid when tracing is
+ active (i.e. when f_trace is set). At other times we use
+ PyCode_Addr2Line to calculate the line from the current
+ bytecode index. */
+ int f_lineno; /* Current line number */
+ int f_iblock; /* index in f_blockstack */
+ char f_executing; /* whether the frame is still executing */
+ PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
+ PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */
+};
+
+
+/* Standard object interface */
+
+PyAPI_DATA(PyTypeObject) PyFrame_Type;
+
+#define PyFrame_Check(op) Py_IS_TYPE(op, &PyFrame_Type)
+
+PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
+ PyObject *, PyObject *);
+
+/* only internal use */
+PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *,
+ PyObject *, PyObject *);
+
+
+/* The rest of the interface is specific for frame objects */
+
+/* Block management functions */
+
+PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
+PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
+
+/* Conversions between "fast locals" and locals in dictionary */
+
+PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
+
+PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
+PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
+
+PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
+
+PyAPI_FUNC(PyFrameObject *) PyFrame_GetBack(PyFrameObject *frame);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/external/windows/include/python/cpython/import.h b/src/external/windows/include/python/cpython/import.h
new file mode 100755
index 00000000..ab711e9a
--- /dev/null
+++ b/src/external/windows/include/python/cpython/import.h
@@ -0,0 +1,50 @@
+#ifndef Py_CPYTHON_IMPORT_H
+# error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyMODINIT_FUNC PyInit__imp(void);
+
+PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
+
+PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
+PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
+PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
+
+PyAPI_FUNC(void) _PyImport_AcquireLock(void);
+PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
+
+PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
+
+PyAPI_FUNC(int) _PyImport_FixupBuiltin(
+ PyObject *mod,
+ const char *name, /* UTF-8 encoded string */
+ PyObject *modules
+ );
+PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
+ PyObject *, PyObject *);
+
+struct _inittab {
+ const char *name; /* ASCII encoded string */
+ PyObject* (*initfunc)(void);
+};
+PyAPI_DATA(struct _inittab *) PyImport_Inittab;
+PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
+
+struct _frozen {
+ const char *name; /* ASCII encoded string */
+ const unsigned char *code;
+ int size;
+};
+
+/* Embedding apps may change this pointer to point to their favorite
+ collection of frozen modules: */
+
+PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/external/windows/include/python/cpython/initconfig.h b/src/external/windows/include/python/cpython/initconfig.h
index 4bbe13c2..94922c00 100755
--- a/src/external/windows/include/python/cpython/initconfig.h
+++ b/src/external/windows/include/python/cpython/initconfig.h
@@ -113,7 +113,11 @@ typedef struct {
"POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */
int utf8_mode;
- int dev_mode; /* Development mode. PYTHONDEVMODE, -X dev */
+ /* If non-zero, enable the Python Development Mode.
+
+ Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE
+ environment variable. */
+ int dev_mode;
/* Memory allocator: PYTHONMALLOC env var.
See PyMemAllocatorName for valid values. */
@@ -131,7 +135,7 @@ typedef struct {
int isolated; /* Isolated mode? see PyPreConfig.isolated */
int use_environment; /* Use environment variables? see PyPreConfig.use_environment */
- int dev_mode; /* Development mode? See PyPreConfig.dev_mode */
+ int dev_mode; /* Python Development Mode? See PyPreConfig.dev_mode */
/* Install signal handlers? Yes by default. */
int install_signal_handlers;
@@ -143,13 +147,16 @@ typedef struct {
Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */
int faulthandler;
+ /* Enable PEG parser?
+ 1 by default, set to 0 by -X oldparser and PYTHONOLDPARSER */
+ int _use_peg_parser;
+
/* Enable tracemalloc?
Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */
int tracemalloc;
int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */
int show_ref_count; /* -X showrefcount */
- int show_alloc_count; /* -X showalloccount */
int dump_refs; /* PYTHONDUMPREFS */
int malloc_stats; /* PYTHONMALLOCSTATS */
@@ -381,6 +388,7 @@ typedef struct {
wchar_t *base_prefix; /* sys.base_prefix */
wchar_t *exec_prefix; /* sys.exec_prefix */
wchar_t *base_exec_prefix; /* sys.base_exec_prefix */
+ wchar_t *platlibdir; /* sys.platlibdir */
/* --- Parameter only used by Py_Main() ---------- */
@@ -402,6 +410,18 @@ typedef struct {
/* If equal to 0, stop Python initialization before the "main" phase */
int _init_main;
+
+ /* If non-zero, disallow threads, subprocesses, and fork.
+ Default: 0. */
+ int _isolated_interpreter;
+
+ /* Original command line arguments. If _orig_argv is empty and _argv is
+ not equal to [''], PyConfig_Read() copies the configuration 'argv' list
+ into '_orig_argv' list before modifying 'argv' list (if parse_argv
+ is non-zero).
+
+ _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */
+ PyWideStringList _orig_argv;
} PyConfig;
PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
@@ -427,6 +447,14 @@ PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
PyWideStringList *list,
Py_ssize_t length, wchar_t **items);
+
+/* --- Helper functions --------------------------------------- */
+
+/* Get the original command line arguments, before Python modified them.
+
+ See also PyConfig._orig_argv. */
+PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/cpython/listobject.h b/src/external/windows/include/python/cpython/listobject.h
new file mode 100755
index 00000000..54972b74
--- /dev/null
+++ b/src/external/windows/include/python/cpython/listobject.h
@@ -0,0 +1,43 @@
+#ifndef Py_CPYTHON_LISTOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ PyObject_VAR_HEAD
+ /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
+ PyObject **ob_item;
+
+ /* ob_item contains space for 'allocated' elements. The number
+ * currently in use is ob_size.
+ * Invariants:
+ * 0 <= ob_size <= allocated
+ * len(list) == ob_size
+ * ob_item == NULL implies ob_size == allocated == 0
+ * list.sort() temporarily sets allocated to -1 to detect mutations.
+ *
+ * Items must normally not be NULL, except during construction when
+ * the list is not yet visible outside the function that builds it.
+ */
+ Py_ssize_t allocated;
+} PyListObject;
+
+PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
+PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
+
+/* Macro, trading safety for speed */
+
+/* Cast argument to PyTupleObject* type. */
+#define _PyList_CAST(op) (assert(PyList_Check(op)), (PyListObject *)(op))
+
+#define PyList_GET_ITEM(op, i) (_PyList_CAST(op)->ob_item[i])
+#define PyList_SET_ITEM(op, i, v) (_PyList_CAST(op)->ob_item[i] = (v))
+#define PyList_GET_SIZE(op) Py_SIZE(_PyList_CAST(op))
+#define _PyList_ITEMS(op) (_PyList_CAST(op)->ob_item)
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/external/windows/include/python/cpython/methodobject.h b/src/external/windows/include/python/cpython/methodobject.h
new file mode 100755
index 00000000..a2c4857e
--- /dev/null
+++ b/src/external/windows/include/python/cpython/methodobject.h
@@ -0,0 +1,35 @@
+#ifndef Py_CPYTHON_METHODOBJECT_H
+# error "this header file must not be included directly"
+#endif
+
+PyAPI_DATA(PyTypeObject) PyCMethod_Type;
+
+#define PyCMethod_CheckExact(op) Py_IS_TYPE(op, &PyCMethod_Type)
+#define PyCMethod_Check(op) PyObject_TypeCheck(op, &PyCMethod_Type)
+
+/* Macros for direct access to these values. Type checks are *not*
+ done, so use with care. */
+#define PyCFunction_GET_FUNCTION(func) \
+ (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
+#define PyCFunction_GET_SELF(func) \
+ (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \
+ NULL : ((PyCFunctionObject *)func) -> m_self)
+#define PyCFunction_GET_FLAGS(func) \
+ (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
+#define PyCFunction_GET_CLASS(func) \
+ (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_METHOD ? \
+ ((PyCMethodObject *)func) -> mm_class : NULL)
+
+typedef struct {
+ PyObject_HEAD
+ PyMethodDef *m_ml; /* Description of the C function to call */
+ PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */
+ PyObject *m_module; /* The __module__ attribute, can be anything */
+ PyObject *m_weakreflist; /* List of weak references */
+ vectorcallfunc vectorcall;
+} PyCFunctionObject;
+
+typedef struct {
+ PyCFunctionObject func;
+ PyTypeObject *mm_class; /* Class that defines this method */
+} PyCMethodObject;
diff --git a/src/external/windows/include/python/cpython/object.h b/src/external/windows/include/python/cpython/object.h
index 12f53f57..98fb144c 100755
--- a/src/external/windows/include/python/cpython/object.h
+++ b/src/external/windows/include/python/cpython/object.h
@@ -6,6 +6,22 @@
extern "C" {
#endif
+PyAPI_FUNC(void) _Py_NewReference(PyObject *op);
+
+#ifdef Py_TRACE_REFS
+/* Py_TRACE_REFS is such major surgery that we call external routines. */
+PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
+#endif
+
+/* Update the Python traceback of an object. This function must be called
+ when a memory block is reused from a free list. */
+PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
+
+#ifdef Py_REF_DEBUG
+PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
+#endif
+
+
/********************* String Literals ****************************************/
/* This structure helps managing static strings. The basic usage goes like this:
Instead of doing
@@ -20,7 +36,7 @@ extern "C" {
PyId_foo is a static variable, either on block level or file level. On first
usage, the string "foo" is interned, and the structures are linked. On interpreter
- shutdown, all strings are released (through _PyUnicode_ClearStaticStrings).
+ shutdown, all strings are released.
Alternatively, _Py_static_string allows choosing the variable name.
_PyUnicode_FromId returns a borrowed reference to the interned string.
@@ -176,7 +192,7 @@ typedef struct {
* backwards-compatibility */
typedef Py_ssize_t printfunc;
-typedef struct _typeobject {
+struct _typeobject {
PyObject_VAR_HEAD
const char *tp_name; /* For printing, in format "." */
Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
@@ -257,19 +273,7 @@ typedef struct _typeobject {
destructor tp_finalize;
vectorcallfunc tp_vectorcall;
-
- /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
- Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
-
-#ifdef COUNT_ALLOCS
- /* these must be last and never explicitly initialized */
- Py_ssize_t tp_allocs;
- Py_ssize_t tp_frees;
- Py_ssize_t tp_maxalloc;
- struct _typeobject *tp_prev;
- struct _typeobject *tp_next;
-#endif
-} PyTypeObject;
+};
/* The *real* layout of a type object when allocated on the heap */
typedef struct _heaptypeobject {
@@ -287,6 +291,7 @@ typedef struct _heaptypeobject {
PyBufferProcs as_buffer;
PyObject *ht_name, *ht_slots, *ht_qualname;
struct _dictkeysobject *ht_cached_keys;
+ PyObject *ht_module;
/* here are optional user slots, followed by the members. */
} PyHeapTypeObject;
@@ -323,6 +328,9 @@ PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *);
*/
PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **);
PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **);
+
+PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+
PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *);
@@ -336,20 +344,7 @@ PyAPI_FUNC(int)
_PyObject_GenericSetAttrWithDict(PyObject *, PyObject *,
PyObject *, PyObject *);
-#define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0)
-
-static inline void _Py_Dealloc_inline(PyObject *op)
-{
- destructor dealloc = Py_TYPE(op)->tp_dealloc;
-#ifdef Py_TRACE_REFS
- _Py_ForgetReference(op);
-#else
- _Py_INC_TPFREES(op);
-#endif
- (*dealloc)(op);
-}
-#define _Py_Dealloc(op) _Py_Dealloc_inline(op)
-
+PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *);
/* Safely decref `op` and set `op` to `op2`.
*
@@ -393,11 +388,6 @@ PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type;
*/
PyAPI_DATA(int) _Py_SwappedOp[];
-/* This is the old private API, invoked by the macros before 3.2.4.
- Kept for binary compatibility of extensions using the stable ABI. */
-PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*);
-PyAPI_FUNC(void) _PyTrash_destroy_chain(void);
-
PyAPI_FUNC(void)
_PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks,
size_t sizeof_block);
@@ -444,7 +434,7 @@ _PyObject_DebugTypeStats(FILE *out);
NDEBUG against a Python built with NDEBUG defined.
msg, expr and function can be NULL. */
-PyAPI_FUNC(void) _PyObject_AssertFailed(
+PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed(
PyObject *obj,
const char *expr,
const char *msg,
@@ -467,6 +457,100 @@ PyAPI_FUNC(int) _PyObject_CheckConsistency(
PyObject *op,
int check_content);
+
+/* Trashcan mechanism, thanks to Christian Tismer.
+
+When deallocating a container object, it's possible to trigger an unbounded
+chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
+next" object in the chain to 0. This can easily lead to stack overflows,
+especially in threads (which typically have less stack space to work with).
+
+A container object can avoid this by bracketing the body of its tp_dealloc
+function with a pair of macros:
+
+static void
+mytype_dealloc(mytype *p)
+{
+ ... declarations go here ...
+
+ PyObject_GC_UnTrack(p); // must untrack first
+ Py_TRASHCAN_BEGIN(p, mytype_dealloc)
+ ... The body of the deallocator goes here, including all calls ...
+ ... to Py_DECREF on contained objects. ...
+ Py_TRASHCAN_END // there should be no code after this
+}
+
+CAUTION: Never return from the middle of the body! If the body needs to
+"get out early", put a label immediately before the Py_TRASHCAN_END
+call, and goto it. Else the call-depth counter (see below) will stay
+above 0 forever, and the trashcan will never get emptied.
+
+How it works: The BEGIN macro increments a call-depth counter. So long
+as this counter is small, the body of the deallocator is run directly without
+further ado. But if the counter gets large, it instead adds p to a list of
+objects to be deallocated later, skips the body of the deallocator, and
+resumes execution after the END macro. The tp_dealloc routine then returns
+without deallocating anything (and so unbounded call-stack depth is avoided).
+
+When the call stack finishes unwinding again, code generated by the END macro
+notices this, and calls another routine to deallocate all the objects that
+may have been added to the list of deferred deallocations. In effect, a
+chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces,
+with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL.
+
+Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base
+class, we need to ensure that the trashcan is only triggered on the tp_dealloc
+of the actual class being deallocated. Otherwise we might end up with a
+partially-deallocated object. To check this, the tp_dealloc function must be
+passed as second argument to Py_TRASHCAN_BEGIN().
+*/
+
+/* This is the old private API, invoked by the macros before 3.2.4.
+ Kept for binary compatibility of extensions using the stable ABI. */
+PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*);
+PyAPI_FUNC(void) _PyTrash_destroy_chain(void);
+
+/* This is the old private API, invoked by the macros before 3.9.
+ Kept for binary compatibility of extensions using the stable ABI. */
+PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*);
+PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
+
+/* Forward declarations for PyThreadState */
+struct _ts;
+
+/* Python 3.9 private API, invoked by the macros below. */
+PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op);
+PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate);
+
+#define PyTrash_UNWIND_LEVEL 50
+
+#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
+ do { \
+ PyThreadState *_tstate = NULL; \
+ /* If "cond" is false, then _tstate remains NULL and the deallocator \
+ * is run normally without involving the trashcan */ \
+ if (cond) { \
+ _tstate = PyThreadState_GET(); \
+ if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \
+ break; \
+ } \
+ }
+ /* The body of the deallocator is here. */
+#define Py_TRASHCAN_END \
+ if (_tstate) { \
+ _PyTrash_end(_tstate); \
+ } \
+ } while (0);
+
+#define Py_TRASHCAN_BEGIN(op, dealloc) \
+ Py_TRASHCAN_BEGIN_CONDITION(op, \
+ Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))
+
+/* For backwards compatibility, these macros enable the trashcan
+ * unconditionally */
+#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1)
+#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/cpython/objimpl.h b/src/external/windows/include/python/cpython/objimpl.h
index 7df222c2..0e06e372 100755
--- a/src/external/windows/include/python/cpython/objimpl.h
+++ b/src/external/windows/include/python/cpython/objimpl.h
@@ -6,6 +6,89 @@
extern "C" {
#endif
+#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
+
+/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
+ vrbl-size object with nitems items, exclusive of gc overhead (if any). The
+ value is rounded up to the closest multiple of sizeof(void *), in order to
+ ensure that pointer fields at the end of the object are correctly aligned
+ for the platform (this is of special importance for subclasses of, e.g.,
+ str or int, so that pointers can be stored after the embedded data).
+
+ Note that there's no memory wastage in doing this, as malloc has to
+ return (at worst) pointer-aligned memory anyway.
+*/
+#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
+# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
+#endif
+
+#define _PyObject_VAR_SIZE(typeobj, nitems) \
+ _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
+ (nitems)*(typeobj)->tp_itemsize, \
+ SIZEOF_VOID_P)
+
+
+/* This example code implements an object constructor with a custom
+ allocator, where PyObject_New is inlined, and shows the important
+ distinction between two steps (at least):
+ 1) the actual allocation of the object storage;
+ 2) the initialization of the Python specific fields
+ in this storage with PyObject_{Init, InitVar}.
+
+ PyObject *
+ YourObject_New(...)
+ {
+ PyObject *op;
+
+ op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
+ if (op == NULL)
+ return PyErr_NoMemory();
+
+ PyObject_Init(op, &YourTypeStruct);
+
+ op->ob_field = value;
+ ...
+ return op;
+ }
+
+ Note that in C++, the use of the new operator usually implies that
+ the 1st step is performed automatically for you, so in a C++ class
+ constructor you would start directly with PyObject_Init/InitVar. */
+
+
+/* Inline functions trading binary compatibility for speed:
+ PyObject_INIT() is the fast version of PyObject_Init(), and
+ PyObject_INIT_VAR() is the fast version of PyObject_InitVar().
+
+ These inline functions must not be called with op=NULL. */
+static inline PyObject*
+_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
+{
+ assert(op != NULL);
+ Py_SET_TYPE(op, typeobj);
+ if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
+ Py_INCREF(typeobj);
+ }
+ _Py_NewReference(op);
+ return op;
+}
+
+#define PyObject_INIT(op, typeobj) \
+ _PyObject_INIT(_PyObject_CAST(op), (typeobj))
+
+static inline PyVarObject*
+_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
+{
+ assert(op != NULL);
+ Py_SET_SIZE(op, size);
+ PyObject_INIT((PyObject *)op, typeobj);
+ return op;
+}
+
+#define PyObject_INIT_VAR(op, typeobj, size) \
+ _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size))
+
+
/* This function returns the number of allocated memory blocks, regardless of size */
PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void);
@@ -37,66 +120,16 @@ PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void);
PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void);
-/* Test if an object has a GC head */
-#define PyObject_IS_GC(o) \
- (PyType_IS_GC(Py_TYPE(o)) \
- && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
-
-/* GC information is stored BEFORE the object structure. */
-typedef struct {
- // Pointer to next object in the list.
- // 0 means the object is not tracked
- uintptr_t _gc_next;
-
- // Pointer to previous object in the list.
- // Lowest two bits are used for flags documented later.
- uintptr_t _gc_prev;
-} PyGC_Head;
-
-#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
-
-/* True if the object is currently tracked by the GC. */
-#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0)
-
-/* True if the object may be tracked by the GC in the future, or already is.
- This can be useful to implement some optimizations. */
-#define _PyObject_GC_MAY_BE_TRACKED(obj) \
- (PyObject_IS_GC(obj) && \
- (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
+/* Test if an object implements the garbage collector protocol */
+PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj);
-/* Bit flags for _gc_prev */
-/* Bit 0 is set when tp_finalize is called */
-#define _PyGC_PREV_MASK_FINALIZED (1)
-/* Bit 1 is set when the object is in generation which is GCed currently. */
-#define _PyGC_PREV_MASK_COLLECTING (2)
-/* The (N-2) most significant bits contain the real address. */
-#define _PyGC_PREV_SHIFT (2)
-#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
-
-// Lowest bit of _gc_next is used for flags only in GC.
-// But it is always 0 for normal code.
-#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next)
-#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p))
-
-// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
-#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
-#define _PyGCHead_SET_PREV(g, p) do { \
- assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
- (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
- | ((uintptr_t)(p)); \
- } while (0)
-
-#define _PyGCHead_FINALIZED(g) \
- (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
-#define _PyGCHead_SET_FINALIZED(g) \
- ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
-
-#define _PyGC_FINALIZED(o) \
- _PyGCHead_FINALIZED(_Py_AS_GC(o))
-#define _PyGC_SET_FINALIZED(o) \
- _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
-
+/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which
+ defines a different _PyGC_FINALIZED() macro. */
+#ifndef Py_BUILD_CORE
+ // Kept for backward compatibility with Python 3.8
+# define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o)
+#endif
PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size);
PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size);
@@ -105,8 +138,7 @@ PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size);
/* Test if a type supports weak references */
#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
-#define PyObject_GET_WEAKREFS_LISTPTR(o) \
- ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
+PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op);
#ifdef __cplusplus
}
diff --git a/src/external/windows/include/python/cpython/pyerrors.h b/src/external/windows/include/python/cpython/pyerrors.h
index cc16403b..f9efa158 100755
--- a/src/external/windows/include/python/cpython/pyerrors.h
+++ b/src/external/windows/include/python/cpython/pyerrors.h
@@ -75,7 +75,8 @@ typedef PyOSErrorObject PyWindowsErrorObject;
/* Error handling definitions */
PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
-_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate);
+PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate);
+PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
/* Context manipulation (PEP 3134) */
@@ -148,7 +149,10 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject(
PyObject *filename,
int lineno);
-/* Create a UnicodeEncodeError object */
+/* Create a UnicodeEncodeError object.
+ *
+ * TODO: This API will be removed in Python 3.11.
+ */
Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
const char *encoding, /* UTF-8 encoded string */
const Py_UNICODE *object,
@@ -158,7 +162,10 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
const char *reason /* UTF-8 encoded string */
);
-/* Create a UnicodeTranslateError object */
+/* Create a UnicodeTranslateError object.
+ *
+ * TODO: This API will be removed in Python 3.11.
+ */
Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
const Py_UNICODE *object,
Py_ssize_t length,
@@ -177,6 +184,17 @@ PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg(
const char *err_msg,
PyObject *obj);
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc(
+ const char *func,
+ const char *message);
+
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat(
+ const char *func,
+ const char *format,
+ ...);
+
+#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message)
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/cpython/pylifecycle.h b/src/external/windows/include/python/cpython/pylifecycle.h
index d93cd1d3..f226daca 100755
--- a/src/external/windows/include/python/cpython/pylifecycle.h
+++ b/src/external/windows/include/python/cpython/pylifecycle.h
@@ -32,14 +32,6 @@ PyAPI_FUNC(int) _Py_IsCoreInitialized(void);
PyAPI_FUNC(PyStatus) Py_InitializeFromConfig(
const PyConfig *config);
-PyAPI_FUNC(PyStatus) _Py_InitializeFromArgs(
- const PyConfig *config,
- Py_ssize_t argc,
- char * const *argv);
-PyAPI_FUNC(PyStatus) _Py_InitializeFromWideArgs(
- const PyConfig *config,
- Py_ssize_t argc,
- wchar_t * const *argv);
PyAPI_FUNC(PyStatus) _Py_InitializeMain(void);
PyAPI_FUNC(int) Py_RunMain(void);
@@ -73,6 +65,8 @@ PyAPI_FUNC(int) _Py_CoerceLegacyLocale(int warn);
PyAPI_FUNC(int) _Py_LegacyLocaleDetected(int warn);
PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category);
+PyAPI_FUNC(PyThreadState *) _Py_NewInterpreter(int isolated_subinterpreter);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/cpython/pystate.h b/src/external/windows/include/python/cpython/pystate.h
index 5addb1c3..5ce79d03 100755
--- a/src/external/windows/include/python/cpython/pystate.h
+++ b/src/external/windows/include/python/cpython/pystate.h
@@ -16,7 +16,7 @@ PyAPI_FUNC(PyObject *) _PyInterpreterState_GetMainModule(PyInterpreterState *);
/* State unique per thread */
/* Py_tracefunc return -1 when raising an exception, or 0 for success. */
-typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
+typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *);
/* The following values are used for 'what' for tracefunc functions
*
@@ -56,7 +56,7 @@ struct _ts {
PyInterpreterState *interp;
/* Borrowed reference to the current frame (it can be NULL) */
- struct _frame *frame;
+ PyFrameObject *frame;
int recursion_depth;
char overflowed; /* The stack has overflowed. Allow 50 more calls
to handle the runtime error. */
@@ -140,22 +140,17 @@ struct _ts {
};
-/* Get the current interpreter state.
+// Alias for backward compatibility with Python 3.8
+#define _PyInterpreterState_Get PyInterpreterState_Get
- Issue a fatal error if there no current Python thread state or no current
- interpreter. It cannot return NULL.
-
- The caller must hold the GIL.*/
-PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void);
-
-PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*);
-PyAPI_FUNC(void) _PyState_ClearModules(void);
PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *);
/* Similar to PyThreadState_Get(), but don't issue a fatal error
* if it is NULL. */
PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void);
+PyAPI_FUNC(PyObject *) _PyThreadState_GetDict(PyThreadState *tstate);
+
/* PyGILState */
/* Helper/diagnostic function - return 1 if the current thread
@@ -170,7 +165,7 @@ PyAPI_FUNC(int) PyGILState_Check(void);
This function doesn't check for error. Return NULL before _PyGILState_Init()
is called and after _PyGILState_Fini() is called.
- See also _PyInterpreterState_Get() and _PyInterpreterState_GET_UNSAFE(). */
+ See also _PyInterpreterState_Get() and _PyInterpreterState_GET(). */
PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void);
/* The implementation of sys._current_frames() Returns a dict mapping
@@ -185,8 +180,24 @@ PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void);
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
+PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
+
+/* Frame evaluation API */
+
+typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *, int);
+
+PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc(
+ PyInterpreterState *interp);
+PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc(
+ PyInterpreterState *interp,
+ _PyFrameEvalFunction eval_frame);
+
+PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *interp);
+
+// Get the configuration of the currrent interpreter.
+// The caller must hold the GIL.
+PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void);
-typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
/* cross-interpreter data */
diff --git a/src/external/windows/include/python/cpython/sysmodule.h b/src/external/windows/include/python/cpython/sysmodule.h
index 785940ce..e11939ae 100755
--- a/src/external/windows/include/python/cpython/sysmodule.h
+++ b/src/external/windows/include/python/cpython/sysmodule.h
@@ -13,7 +13,10 @@ PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *);
typedef int(*Py_AuditHookFunction)(const char *, PyObject *, void *);
-PyAPI_FUNC(int) PySys_Audit(const char*, const char *, ...);
+PyAPI_FUNC(int) PySys_Audit(
+ const char *event,
+ const char *argFormat,
+ ...);
PyAPI_FUNC(int) PySys_AddAuditHook(Py_AuditHookFunction, void*);
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/cpython/traceback.h b/src/external/windows/include/python/cpython/traceback.h
index 93ad6866..227aa25c 100755
--- a/src/external/windows/include/python/cpython/traceback.h
+++ b/src/external/windows/include/python/cpython/traceback.h
@@ -9,7 +9,7 @@ extern "C" {
typedef struct _traceback {
PyObject_HEAD
struct _traceback *tb_next;
- struct _frame *tb_frame;
+ PyFrameObject *tb_frame;
int tb_lasti;
int tb_lineno;
} PyTracebackObject;
diff --git a/src/external/windows/include/python/cpython/unicodeobject.h b/src/external/windows/include/python/cpython/unicodeobject.h
index 7fcdd634..f8bae0b1 100755
--- a/src/external/windows/include/python/cpython/unicodeobject.h
+++ b/src/external/windows/include/python/cpython/unicodeobject.h
@@ -22,7 +22,7 @@ extern "C" {
*/
#define Py_UNICODE_ISSPACE(ch) \
- ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch))
+ ((Py_UCS4)(ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch))
#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch)
#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
@@ -50,13 +50,18 @@ extern "C" {
Py_UNICODE_ISDIGIT(ch) || \
Py_UNICODE_ISNUMERIC(ch))
-#define Py_UNICODE_COPY(target, source, length) \
- memcpy((target), (source), (length)*sizeof(Py_UNICODE))
+Py_DEPRECATED(3.3) static inline void
+Py_UNICODE_COPY(Py_UNICODE *target, const Py_UNICODE *source, Py_ssize_t length) {
+ memcpy(target, source, (size_t)(length) * sizeof(Py_UNICODE));
+}
-#define Py_UNICODE_FILL(target, value, length) \
- do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\
- for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\
- } while (0)
+Py_DEPRECATED(3.3) static inline void
+Py_UNICODE_FILL(Py_UNICODE *target, Py_UNICODE value, Py_ssize_t length) {
+ Py_ssize_t i;
+ for (i = 0; i < length; i++) {
+ target[i] = value;
+ }
+}
/* macros to work with surrogates */
#define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
@@ -71,14 +76,6 @@ extern "C" {
/* low surrogate = bottom 10 bits added to DC00 */
#define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF))
-/* Check if substring matches at given offset. The offset must be
- valid, and the substring must not be empty. */
-
-#define Py_UNICODE_MATCH(string, offset, substring) \
- ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \
- ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \
- !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE)))
-
/* --- Unicode Type ------------------------------------------------------- */
/* ASCII-only strings created through PyUnicode_New use the PyASCIIObject
@@ -251,10 +248,6 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency(
int check_content);
/* Fast access macros */
-#define PyUnicode_WSTR_LENGTH(op) \
- (PyUnicode_IS_COMPACT_ASCII(op) ? \
- ((PyASCIIObject*)op)->length : \
- ((PyCompactUnicodeObject*)op)->wstr_length)
/* Returns the deprecated Py_UNICODE representation's size in code units
(this includes surrogate pairs as 2 units).
@@ -449,6 +442,14 @@ enum PyUnicode_Kind {
(0xffffU) : \
(0x10ffffU)))))
+Py_DEPRECATED(3.3)
+static inline Py_ssize_t _PyUnicode_get_wstr_length(PyObject *op) {
+ return PyUnicode_IS_COMPACT_ASCII(op) ?
+ ((PyASCIIObject*)op)->length :
+ ((PyCompactUnicodeObject*)op)->wstr_length;
+}
+#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op)
+
/* === Public API ========================================================= */
/* --- Plain Py_UNICODE --------------------------------------------------- */
@@ -547,7 +548,7 @@ PyAPI_FUNC(void) _PyUnicode_FastFill(
only allowed if u was set to NULL.
The buffer is copied into the new object. */
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
const Py_UNICODE *u, /* Unicode buffer */
Py_ssize_t size /* size of buffer */
);
@@ -576,13 +577,13 @@ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar (
Py_UNICODE buffer.
If the wchar_t/Py_UNICODE representation is not yet available, this
function will calculate it. */
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
PyObject *unicode /* Unicode object */
);
/* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string
contains null characters. */
-PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
+Py_DEPRECATED(3.3) PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
PyObject *unicode /* Unicode object */
);
@@ -591,7 +592,7 @@ PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode(
If the wchar_t/Py_UNICODE representation is not yet available, this
function will calculate it. */
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
+Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize(
PyObject *unicode, /* Unicode object */
Py_ssize_t *size /* location where to save the length */
);
@@ -726,12 +727,6 @@ PyAPI_FUNC(int) _PyUnicode_FormatAdvancedWriter(
Py_ssize_t start,
Py_ssize_t end);
-/* --- wchar_t support for platforms which support it --------------------- */
-
-#ifdef HAVE_WCHAR_H
-PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind);
-#endif
-
/* --- Manage the default encoding ---------------------------------------- */
/* Returns a pointer to the default encoding (UTF-8) of the
@@ -746,12 +741,6 @@ PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind);
_PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to
support the previous internal function with the same behaviour.
-
- *** This API is for interpreter INTERNAL USE ONLY and will likely
- *** be removed or changed in the future.
-
- *** If you need to access the Unicode object as UTF-8 bytes string,
- *** please use PyUnicode_AsUTF8String() instead.
*/
PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize(
@@ -771,13 +760,6 @@ PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize(
Use of this API is DEPRECATED since no size information can be
extracted from the returned data.
-
- *** This API is for interpreter INTERNAL USE ONLY and will likely
- *** be removed or changed for Python 3.1.
-
- *** If you need to access the Unicode object as UTF-8 bytes string,
- *** please use PyUnicode_AsUTF8String() instead.
-
*/
PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode);
@@ -990,7 +972,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
*/
-/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
+Py_DEPRECATED(3.3) PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
Py_UNICODE *s, /* Unicode buffer */
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
char *output, /* Output buffer; must have size >= length */
@@ -1003,7 +985,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
Returns a new Unicode string on success, NULL on failure.
*/
-/* Py_DEPRECATED(3.3) */
+Py_DEPRECATED(3.3)
PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII(
Py_UNICODE *s, /* Unicode buffer */
Py_ssize_t length /* Number of Py_UNICODE chars to transform */
@@ -1227,13 +1209,13 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy(
/* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/
PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*);
-/* Clear all static strings. */
-PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void);
/* Fast equality check when the inputs are known to be exact unicode types
and where the hash values are equal (i.e. a very probable match) */
PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *);
+PyAPI_FUNC(Py_ssize_t) _PyUnicode_ScanIdentifier(PyObject *);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/datetime.h b/src/external/windows/include/python/datetime.h
index d6483714..afb89470 100755
--- a/src/external/windows/include/python/datetime.h
+++ b/src/external/windows/include/python/datetime.h
@@ -196,19 +196,19 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL;
/* Macros for type checking when not building the Python core. */
#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType)
-#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType)
+#define PyDate_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateType)
#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType)
-#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType)
+#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateTimeType)
#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType)
-#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType)
+#define PyTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TimeType)
#define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType)
-#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType)
+#define PyDelta_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DeltaType)
#define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType)
-#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType)
+#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TZInfoType)
/* Macros for accessing constructors in a simplified fashion. */
diff --git a/src/external/windows/include/python/dictobject.h b/src/external/windows/include/python/dictobject.h
index 1febc911..54fd57a5 100755
--- a/src/external/windows/include/python/dictobject.h
+++ b/src/external/windows/include/python/dictobject.h
@@ -16,7 +16,7 @@ PyAPI_DATA(PyTypeObject) PyDict_Type;
#define PyDict_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
-#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
+#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type)
PyAPI_FUNC(PyObject *) PyDict_New(void);
PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key);
diff --git a/src/external/windows/include/python/errcode.h b/src/external/windows/include/python/errcode.h
index 68104c1c..d5fed9dd 100755
--- a/src/external/windows/include/python/errcode.h
+++ b/src/external/windows/include/python/errcode.h
@@ -29,7 +29,6 @@ extern "C" {
#define E_EOFS 23 /* EOF in triple-quoted string */
#define E_EOLS 24 /* EOL in single-quoted string */
#define E_LINECONT 25 /* Unexpected characters after a line continuation */
-#define E_IDENTIFIER 26 /* Invalid characters in identifier */
#define E_BADSINGLE 27 /* Ill-formed single statement input */
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/exports.h b/src/external/windows/include/python/exports.h
new file mode 100755
index 00000000..20a74bb9
--- /dev/null
+++ b/src/external/windows/include/python/exports.h
@@ -0,0 +1,30 @@
+#ifndef Py_EXPORTS_H
+#define Py_EXPORTS_H
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+ #define Py_IMPORTED_SYMBOL __declspec(dllimport)
+ #define Py_EXPORTED_SYMBOL __declspec(dllexport)
+ #define Py_LOCAL_SYMBOL
+#else
+/*
+ * If we only ever used gcc >= 5, we could use __has_attribute(visibility)
+ * as a cross-platform way to determine if visibility is supported. However,
+ * we may still need to support gcc >= 4, as some Ubuntu LTS and Centos versions
+ * have 4 < gcc < 5.
+ */
+ #ifndef __has_attribute
+ #define __has_attribute(x) 0 // Compatibility with non-clang compilers.
+ #endif
+ #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\
+ (defined(__clang__) && __has_attribute(visibility))
+ #define Py_IMPORTED_SYMBOL __attribute__ ((visibility ("default")))
+ #define Py_EXPORTED_SYMBOL __attribute__ ((visibility ("default")))
+ #define Py_LOCAL_SYMBOL __attribute__ ((visibility ("hidden")))
+ #else
+ #define Py_IMPORTED_SYMBOL
+ #define Py_EXPORTED_SYMBOL
+ #define Py_LOCAL_SYMBOL
+ #endif
+#endif
+
+#endif /* Py_EXPORTS_H */
diff --git a/src/external/windows/include/python/fileobject.h b/src/external/windows/include/python/fileobject.h
index 1eee8261..cf7ba8df 100755
--- a/src/external/windows/include/python/fileobject.h
+++ b/src/external/windows/include/python/fileobject.h
@@ -20,8 +20,15 @@ PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
If non-NULL, this is different than the default encoding for strings
*/
PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
+PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
+#endif
PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
+PyAPI_DATA(int) Py_UTF8Mode;
+#endif
+
/* A routine to check if a file descriptor can be select()-ed. */
#ifdef _MSC_VER
/* On Windows, any socket fd can be select()-ed, no matter how high */
diff --git a/src/external/windows/include/python/fileutils.h b/src/external/windows/include/python/fileutils.h
index 2f206e92..132a6cf5 100755
--- a/src/external/windows/include/python/fileutils.h
+++ b/src/external/windows/include/python/fileutils.h
@@ -18,167 +18,12 @@ PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
size_t *error_pos);
#endif
-
-#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
-typedef enum {
- _Py_ERROR_UNKNOWN=0,
- _Py_ERROR_STRICT,
- _Py_ERROR_SURROGATEESCAPE,
- _Py_ERROR_REPLACE,
- _Py_ERROR_IGNORE,
- _Py_ERROR_BACKSLASHREPLACE,
- _Py_ERROR_SURROGATEPASS,
- _Py_ERROR_XMLCHARREFREPLACE,
- _Py_ERROR_OTHER
-} _Py_error_handler;
-
-PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors);
-
-PyAPI_FUNC(int) _Py_DecodeLocaleEx(
- const char *arg,
- wchar_t **wstr,
- size_t *wlen,
- const char **reason,
- int current_locale,
- _Py_error_handler errors);
-
-PyAPI_FUNC(int) _Py_EncodeLocaleEx(
- const wchar_t *text,
- char **str,
- size_t *error_pos,
- const char **reason,
- int current_locale,
- _Py_error_handler errors);
-#endif
-
#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
-
-#if defined(MS_WINDOWS) || defined(__APPLE__)
- /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
- On macOS 10.13, read() and write() with more than INT_MAX bytes
- fail with EINVAL (bpo-24658). */
-# define _PY_READ_MAX INT_MAX
-# define _PY_WRITE_MAX INT_MAX
-#else
- /* write() should truncate the input to PY_SSIZE_T_MAX bytes,
- but it's safer to do it ourself to have a portable behaviour */
-# define _PY_READ_MAX PY_SSIZE_T_MAX
-# define _PY_WRITE_MAX PY_SSIZE_T_MAX
+# define Py_CPYTHON_FILEUTILS_H
+# include "cpython/fileutils.h"
+# undef Py_CPYTHON_FILEUTILS_H
#endif
-#ifdef MS_WINDOWS
-struct _Py_stat_struct {
- unsigned long st_dev;
- uint64_t st_ino;
- unsigned short st_mode;
- int st_nlink;
- int st_uid;
- int st_gid;
- unsigned long st_rdev;
- __int64 st_size;
- time_t st_atime;
- int st_atime_nsec;
- time_t st_mtime;
- int st_mtime_nsec;
- time_t st_ctime;
- int st_ctime_nsec;
- unsigned long st_file_attributes;
- unsigned long st_reparse_tag;
-};
-#else
-# define _Py_stat_struct stat
-#endif
-
-PyAPI_FUNC(int) _Py_fstat(
- int fd,
- struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_fstat_noraise(
- int fd,
- struct _Py_stat_struct *status);
-
-PyAPI_FUNC(int) _Py_stat(
- PyObject *path,
- struct stat *status);
-
-PyAPI_FUNC(int) _Py_open(
- const char *pathname,
- int flags);
-
-PyAPI_FUNC(int) _Py_open_noraise(
- const char *pathname,
- int flags);
-
-PyAPI_FUNC(FILE *) _Py_wfopen(
- const wchar_t *path,
- const wchar_t *mode);
-
-PyAPI_FUNC(FILE*) _Py_fopen(
- const char *pathname,
- const char *mode);
-
-PyAPI_FUNC(FILE*) _Py_fopen_obj(
- PyObject *path,
- const char *mode);
-
-PyAPI_FUNC(Py_ssize_t) _Py_read(
- int fd,
- void *buf,
- size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write(
- int fd,
- const void *buf,
- size_t count);
-
-PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
- int fd,
- const void *buf,
- size_t count);
-
-#ifdef HAVE_READLINK
-PyAPI_FUNC(int) _Py_wreadlink(
- const wchar_t *path,
- wchar_t *buf,
- /* Number of characters of 'buf' buffer
- including the trailing NUL character */
- size_t buflen);
-#endif
-
-#ifdef HAVE_REALPATH
-PyAPI_FUNC(wchar_t*) _Py_wrealpath(
- const wchar_t *path,
- wchar_t *resolved_path,
- /* Number of characters of 'resolved_path' buffer
- including the trailing NUL character */
- size_t resolved_path_len);
-#endif
-
-PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
- wchar_t *buf,
- /* Number of characters of 'buf' buffer
- including the trailing NUL character */
- size_t buflen);
-
-PyAPI_FUNC(int) _Py_get_inheritable(int fd);
-
-PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
- int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
- int *atomic_flag_works);
-
-PyAPI_FUNC(int) _Py_dup(int fd);
-
-#ifndef MS_WINDOWS
-PyAPI_FUNC(int) _Py_get_blocking(int fd);
-
-PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
-#endif /* !MS_WINDOWS */
-
-#endif /* Py_LIMITED_API */
-
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/floatobject.h b/src/external/windows/include/python/floatobject.h
index cc906f11..475f6add 100755
--- a/src/external/windows/include/python/floatobject.h
+++ b/src/external/windows/include/python/floatobject.h
@@ -21,7 +21,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyFloat_Type;
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
-#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
+#define PyFloat_CheckExact(op) Py_IS_TYPE(op, &PyFloat_Type)
#ifdef Py_NAN
#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN)
@@ -88,15 +88,6 @@ PyAPI_FUNC(int) _PyFloat_Pack2(double x, unsigned char *p, int le);
PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
-/* Needed for the old way for marshal to store a floating point number.
- Returns the string length copied into p, -1 on error.
- */
-PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len);
-
-/* Used to get the important decimal digits of a double */
-PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum);
-PyAPI_FUNC(void) _PyFloat_DigitsInit(void);
-
/* The unpack routines read 2, 4 or 8 bytes, starting at p. le is a bool
* argument, true if the string is in little-endian format (exponent
* last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p).
@@ -109,9 +100,6 @@ PyAPI_FUNC(double) _PyFloat_Unpack2(const unsigned char *p, int le);
PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);
-/* free list api */
-PyAPI_FUNC(int) PyFloat_ClearFreeList(void);
-
PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out);
/* Format the object based on the format_spec, as defined in PEP 3101
diff --git a/src/external/windows/include/python/frameobject.h b/src/external/windows/include/python/frameobject.h
index f0a97fcb..36e2ab33 100755
--- a/src/external/windows/include/python/frameobject.h
+++ b/src/external/windows/include/python/frameobject.h
@@ -1,92 +1,20 @@
/* Frame object interface */
-#ifndef Py_LIMITED_API
#ifndef Py_FRAMEOBJECT_H
#define Py_FRAMEOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
-typedef struct {
- int b_type; /* what kind of block this is */
- int b_handler; /* where to jump to find handler */
- int b_level; /* value stack level to pop to */
-} PyTryBlock;
+#include "pyframe.h"
-typedef struct _frame {
- PyObject_VAR_HEAD
- struct _frame *f_back; /* previous frame, or NULL */
- PyCodeObject *f_code; /* code segment */
- PyObject *f_builtins; /* builtin symbol table (PyDictObject) */
- PyObject *f_globals; /* global symbol table (PyDictObject) */
- PyObject *f_locals; /* local symbol table (any mapping) */
- PyObject **f_valuestack; /* points after the last local */
- /* Next free slot in f_valuestack. Frame creation sets to f_valuestack.
- Frame evaluation usually NULLs it, but a frame that yields sets it
- to the current stack top. */
- PyObject **f_stacktop;
- PyObject *f_trace; /* Trace function */
- char f_trace_lines; /* Emit per-line trace events? */
- char f_trace_opcodes; /* Emit per-opcode trace events? */
-
- /* Borrowed reference to a generator, or NULL */
- PyObject *f_gen;
-
- int f_lasti; /* Last instruction if called */
- /* Call PyFrame_GetLineNumber() instead of reading this field
- directly. As of 2.3 f_lineno is only valid when tracing is
- active (i.e. when f_trace is set). At other times we use
- PyCode_Addr2Line to calculate the line from the current
- bytecode index. */
- int f_lineno; /* Current line number */
- int f_iblock; /* index in f_blockstack */
- char f_executing; /* whether the frame is still executing */
- PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
- PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */
-} PyFrameObject;
-
-
-/* Standard object interface */
-
-PyAPI_DATA(PyTypeObject) PyFrame_Type;
-
-#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type)
-
-PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
- PyObject *, PyObject *);
-
-/* only internal use */
-PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *,
- PyObject *, PyObject *);
-
-
-/* The rest of the interface is specific for frame objects */
-
-/* Block management functions */
-
-PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
-PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
-
-/* Extend the value stack */
-
-PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int);
-
-/* Conversions between "fast locals" and locals in dictionary */
-
-PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
-
-PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
-PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
-
-PyAPI_FUNC(int) PyFrame_ClearFreeList(void);
-
-PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
-
-/* Return the line of code the frame is currently executing. */
-PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
+#ifndef Py_LIMITED_API
+# define Py_CPYTHON_FRAMEOBJECT_H
+# include "cpython/frameobject.h"
+# undef Py_CPYTHON_FRAMEOBJECT_H
+#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_FRAMEOBJECT_H */
-#endif /* Py_LIMITED_API */
diff --git a/src/external/windows/include/python/funcobject.h b/src/external/windows/include/python/funcobject.h
index 051c73ab..5ea1481f 100755
--- a/src/external/windows/include/python/funcobject.h
+++ b/src/external/windows/include/python/funcobject.h
@@ -43,7 +43,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyFunction_Type;
-#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
+#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type)
PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
@@ -60,12 +60,6 @@ PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
- PyObject *func,
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwargs);
-
PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall(
PyObject *func,
PyObject *const *stack,
diff --git a/src/external/windows/include/python/genericaliasobject.h b/src/external/windows/include/python/genericaliasobject.h
new file mode 100755
index 00000000..70096093
--- /dev/null
+++ b/src/external/windows/include/python/genericaliasobject.h
@@ -0,0 +1,14 @@
+// Implementation of PEP 585: support list[int] etc.
+#ifndef Py_GENERICALIASOBJECT_H
+#define Py_GENERICALIASOBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(PyObject *) Py_GenericAlias(PyObject *, PyObject *);
+PyAPI_DATA(PyTypeObject) Py_GenericAliasType;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_GENERICALIASOBJECT_H */
diff --git a/src/external/windows/include/python/genobject.h b/src/external/windows/include/python/genobject.h
index a10d9478..6139f7e4 100755
--- a/src/external/windows/include/python/genobject.h
+++ b/src/external/windows/include/python/genobject.h
@@ -10,14 +10,12 @@ extern "C" {
#include "pystate.h" /* _PyErr_StackItem */
-struct _frame; /* Avoid including frameobject.h */
-
/* _PyGenObject_HEAD defines the initial segment of generator
and coroutine objects. */
#define _PyGenObject_HEAD(prefix) \
PyObject_HEAD \
/* Note: gi_frame can be NULL if the generator is "finished" */ \
- struct _frame *prefix##_frame; \
+ PyFrameObject *prefix##_frame; \
/* True if generator is being executed. */ \
char prefix##_running; \
/* The code object backing the generator */ \
@@ -38,12 +36,11 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyGen_Type;
#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
-#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
+#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type)
-PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
-PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *,
+PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *);
+PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
PyObject *name, PyObject *qualname);
-PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *);
@@ -59,11 +56,9 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PyCoro_Type;
PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type;
-PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type;
-
-#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type)
+#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type)
PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
-PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *,
+PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
PyObject *name, PyObject *qualname);
/* Asynchronous Generators */
@@ -89,15 +84,13 @@ PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type;
PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type;
PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type;
-PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *,
+PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
PyObject *name, PyObject *qualname);
-#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type)
+#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type)
PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
-int PyAsyncGen_ClearFreeLists(void);
-
#endif
#undef _PyGenObject_HEAD
diff --git a/src/external/windows/include/python/import.h b/src/external/windows/include/python/import.h
index f59bee8b..468a6734 100755
--- a/src/external/windows/include/python/import.h
+++ b/src/external/windows/include/python/import.h
@@ -1,4 +1,3 @@
-
/* Module definition and import interface */
#ifndef Py_IMPORT_H
@@ -7,9 +6,6 @@
extern "C" {
#endif
-#ifndef Py_LIMITED_API
-PyMODINIT_FUNC PyInit__imp(void);
-#endif /* !Py_LIMITED_API */
PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
@@ -39,14 +35,6 @@ PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name);
#endif
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
-PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
-PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
- PyObject *modules);
-PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
-PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
-#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject *) PyImport_AddModuleObject(
PyObject *name
@@ -84,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
-PyAPI_FUNC(void) PyImport_Cleanup(void);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
PyObject *name
@@ -94,53 +81,15 @@ PyAPI_FUNC(int) PyImport_ImportFrozenModule(
const char *name /* UTF-8 encoded string */
);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyImport_AcquireLock(void);
-PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
-
-PyAPI_FUNC(void) _PyImport_ReInitLock(void);
-
-PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
- const char *name, /* UTF-8 encoded string */
- PyObject *modules
- );
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
- PyObject *);
-PyAPI_FUNC(int) _PyImport_FixupBuiltin(
- PyObject *mod,
- const char *name, /* UTF-8 encoded string */
- PyObject *modules
- );
-PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
- PyObject *, PyObject *);
-
-struct _inittab {
- const char *name; /* ASCII encoded string */
- PyObject* (*initfunc)(void);
-};
-PyAPI_DATA(struct _inittab *) PyImport_Inittab;
-PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
-#endif /* Py_LIMITED_API */
-
-PyAPI_DATA(PyTypeObject) PyNullImporter_Type;
-
PyAPI_FUNC(int) PyImport_AppendInittab(
const char *name, /* ASCII encoded string */
PyObject* (*initfunc)(void)
);
#ifndef Py_LIMITED_API
-struct _frozen {
- const char *name; /* ASCII encoded string */
- const unsigned char *code;
- int size;
-};
-
-/* Embedding apps may change this pointer to point to their favorite
- collection of frozen modules: */
-
-PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+# define Py_CPYTHON_IMPORT_H
+# include "cpython/import.h"
+# undef Py_CPYTHON_IMPORT_H
#endif
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/internal/pegen_interface.h b/src/external/windows/include/python/internal/pegen_interface.h
new file mode 100755
index 00000000..32133bae
--- /dev/null
+++ b/src/external/windows/include/python/internal/pegen_interface.h
@@ -0,0 +1,46 @@
+#ifndef Py_PEGENINTERFACE
+#define Py_PEGENINTERFACE
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "Python.h"
+#include "Python-ast.h"
+
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromString(
+ const char *str,
+ const char *filename,
+ int mode,
+ PyCompilerFlags *flags,
+ PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromStringObject(
+ const char *str,
+ PyObject* filename,
+ int mode,
+ PyCompilerFlags *flags,
+ PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromFileObject(
+ FILE *fp,
+ PyObject *filename_ob,
+ int mode,
+ const char *enc,
+ const char *ps1,
+ const char *ps2,
+ PyCompilerFlags *flags,
+ int *errcode,
+ PyArena *arena);
+PyAPI_FUNC(mod_ty) PyPegen_ASTFromFilename(
+ const char *filename,
+ int mode,
+ PyCompilerFlags *flags,
+ PyArena *arena);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PEGENINTERFACE*/
diff --git a/src/external/windows/include/python/internal/pycore_abstract.h b/src/external/windows/include/python/internal/pycore_abstract.h
new file mode 100755
index 00000000..15aa7f58
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_abstract.h
@@ -0,0 +1,22 @@
+#ifndef Py_INTERNAL_ABSTRACT_H
+#define Py_INTERNAL_ABSTRACT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+// Fast inlined version of PyIndex_Check()
+static inline int
+_PyIndex_Check(PyObject *obj)
+{
+ PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
+ return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_ABSTRACT_H */
diff --git a/src/external/windows/include/python/internal/pycore_atomic.h b/src/external/windows/include/python/internal/pycore_atomic.h
index ec70fd7b..973b1aa5 100755
--- a/src/external/windows/include/python/internal/pycore_atomic.h
+++ b/src/external/windows/include/python/internal/pycore_atomic.h
@@ -8,8 +8,7 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "dynamic_annotations.h"
-
+#include "dynamic_annotations.h" /* _Py_ANNOTATE_MEMORY_ORDER */
#include "pyconfig.h"
#if defined(HAVE_STD_ATOMIC)
diff --git a/src/external/windows/include/python/bytes_methods.h b/src/external/windows/include/python/internal/pycore_bytes_methods.h
similarity index 95%
rename from src/external/windows/include/python/bytes_methods.h
rename to src/external/windows/include/python/internal/pycore_bytes_methods.h
index ba3d12f0..cc3a303f 100755
--- a/src/external/windows/include/python/bytes_methods.h
+++ b/src/external/windows/include/python/internal/pycore_bytes_methods.h
@@ -2,6 +2,10 @@
#ifndef Py_BYTES_CTYPE_H
#define Py_BYTES_CTYPE_H
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
/*
* The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray)
* methods of the given names, they operate on ASCII byte strings.
diff --git a/src/external/windows/include/python/internal/pycore_byteswap.h b/src/external/windows/include/python/internal/pycore_byteswap.h
new file mode 100755
index 00000000..efd5eecb
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_byteswap.h
@@ -0,0 +1,88 @@
+/* Bytes swap functions, reverse order of bytes:
+
+ - _Py_bswap16(uint16_t)
+ - _Py_bswap32(uint32_t)
+ - _Py_bswap64(uint64_t)
+*/
+
+#ifndef Py_INTERNAL_BSWAP_H
+#define Py_INTERNAL_BSWAP_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#if defined(__GNUC__) \
+ && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))
+ /* __builtin_bswap16() is available since GCC 4.8,
+ __builtin_bswap32() is available since GCC 4.3,
+ __builtin_bswap64() is available since GCC 4.3. */
+# define _PY_HAVE_BUILTIN_BSWAP
+#endif
+
+#ifdef _MSC_VER
+ /* Get _byteswap_ushort(), _byteswap_ulong(), _byteswap_uint64() */
+# include
+#endif
+
+static inline uint16_t
+_Py_bswap16(uint16_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap16)
+ return __builtin_bswap16(word);
+#elif defined(_MSC_VER)
+ Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned short));
+ return _byteswap_ushort(word);
+#else
+ // Portable implementation which doesn't rely on circular bit shift
+ return ( ((word & UINT16_C(0x00FF)) << 8)
+ | ((word & UINT16_C(0xFF00)) >> 8));
+#endif
+}
+
+static inline uint32_t
+_Py_bswap32(uint32_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap32)
+ return __builtin_bswap32(word);
+#elif defined(_MSC_VER)
+ Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned long));
+ return _byteswap_ulong(word);
+#else
+ // Portable implementation which doesn't rely on circular bit shift
+ return ( ((word & UINT32_C(0x000000FF)) << 24)
+ | ((word & UINT32_C(0x0000FF00)) << 8)
+ | ((word & UINT32_C(0x00FF0000)) >> 8)
+ | ((word & UINT32_C(0xFF000000)) >> 24));
+#endif
+}
+
+static inline uint64_t
+_Py_bswap64(uint64_t word)
+{
+#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap64)
+ return __builtin_bswap64(word);
+#elif defined(_MSC_VER)
+ return _byteswap_uint64(word);
+#else
+ // Portable implementation which doesn't rely on circular bit shift
+ return ( ((word & UINT64_C(0x00000000000000FF)) << 56)
+ | ((word & UINT64_C(0x000000000000FF00)) << 40)
+ | ((word & UINT64_C(0x0000000000FF0000)) << 24)
+ | ((word & UINT64_C(0x00000000FF000000)) << 8)
+ | ((word & UINT64_C(0x000000FF00000000)) >> 8)
+ | ((word & UINT64_C(0x0000FF0000000000)) >> 24)
+ | ((word & UINT64_C(0x00FF000000000000)) >> 40)
+ | ((word & UINT64_C(0xFF00000000000000)) >> 56));
+#endif
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_BSWAP_H */
+
diff --git a/src/external/windows/include/python/internal/pycore_call.h b/src/external/windows/include/python/internal/pycore_call.h
new file mode 100755
index 00000000..6b301264
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_call.h
@@ -0,0 +1,39 @@
+#ifndef Py_INTERNAL_CALL_H
+#define Py_INTERNAL_CALL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
+ PyThreadState *tstate,
+ PyObject *callable,
+ PyObject *obj,
+ PyObject *args,
+ PyObject *kwargs);
+
+PyAPI_FUNC(PyObject *) _PyObject_FastCallDictTstate(
+ PyThreadState *tstate,
+ PyObject *callable,
+ PyObject *const *args,
+ size_t nargsf,
+ PyObject *kwargs);
+
+PyAPI_FUNC(PyObject *) _PyObject_Call(
+ PyThreadState *tstate,
+ PyObject *callable,
+ PyObject *args,
+ PyObject *kwargs);
+
+static inline PyObject *
+_PyObject_CallNoArgTstate(PyThreadState *tstate, PyObject *func) {
+ return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_CALL_H */
diff --git a/src/external/windows/include/python/internal/pycore_ceval.h b/src/external/windows/include/python/internal/pycore_ceval.h
index b3ba5d38..2affbf74 100755
--- a/src/external/windows/include/python/internal/pycore_ceval.h
+++ b/src/external/windows/include/python/internal/pycore_ceval.h
@@ -8,29 +8,116 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_atomic.h"
-#include "pycore_pystate.h"
-#include "pythread.h"
+/* Forward declarations */
+struct pyruntimestate;
+struct _ceval_runtime_state;
-PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *);
-PyAPI_FUNC(void) _PyEval_FiniThreads(
- struct _ceval_runtime_state *ceval);
-PyAPI_FUNC(void) _PyEval_SignalReceived(
- struct _ceval_runtime_state *ceval);
+#include "pycore_interp.h" /* PyInterpreterState.eval_frame */
+
+extern void _Py_FinishPendingCalls(PyThreadState *tstate);
+extern void _PyEval_InitRuntimeState(struct _ceval_runtime_state *);
+extern int _PyEval_InitState(struct _ceval_state *ceval);
+extern void _PyEval_FiniState(struct _ceval_state *ceval);
+PyAPI_FUNC(void) _PyEval_SignalReceived(PyInterpreterState *interp);
PyAPI_FUNC(int) _PyEval_AddPendingCall(
- PyThreadState *tstate,
- struct _ceval_runtime_state *ceval,
+ PyInterpreterState *interp,
int (*func)(void *),
void *arg);
-PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
- struct _ceval_runtime_state *ceval);
-PyAPI_FUNC(void) _PyEval_ReInitThreads(
- _PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyThreadState *tstate);
+#ifdef HAVE_FORK
+extern void _PyEval_ReInitThreads(struct pyruntimestate *runtime);
+#endif
+PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(
+ PyThreadState *tstate,
+ int new_depth);
/* Private function */
void _PyEval_Fini(void);
+static inline PyObject*
+_PyEval_EvalFrame(PyThreadState *tstate, PyFrameObject *f, int throwflag)
+{
+ return tstate->interp->eval_frame(tstate, f, throwflag);
+}
+
+extern PyObject *_PyEval_EvalCode(
+ PyThreadState *tstate,
+ PyObject *_co, PyObject *globals, PyObject *locals,
+ PyObject *const *args, Py_ssize_t argcount,
+ PyObject *const *kwnames, PyObject *const *kwargs,
+ Py_ssize_t kwcount, int kwstep,
+ PyObject *const *defs, Py_ssize_t defcount,
+ PyObject *kwdefs, PyObject *closure,
+ PyObject *name, PyObject *qualname);
+
+extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime);
+extern PyStatus _PyEval_InitGIL(PyThreadState *tstate);
+extern void _PyEval_FiniGIL(PyThreadState *tstate);
+
+extern void _PyEval_ReleaseLock(PyThreadState *tstate);
+
+
+/* --- _Py_EnterRecursiveCall() ----------------------------------------- */
+
+PyAPI_DATA(int) _Py_CheckRecursionLimit;
+
+#ifdef USE_STACKCHECK
+/* With USE_STACKCHECK macro defined, trigger stack checks in
+ _Py_CheckRecursiveCall() on every 64th call to Py_EnterRecursiveCall. */
+static inline int _Py_MakeRecCheck(PyThreadState *tstate) {
+ return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit
+ || ++tstate->stackcheck_counter > 64);
+}
+#else
+static inline int _Py_MakeRecCheck(PyThreadState *tstate) {
+ return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit);
+}
+#endif
+
+PyAPI_FUNC(int) _Py_CheckRecursiveCall(
+ PyThreadState *tstate,
+ const char *where);
+
+static inline int _Py_EnterRecursiveCall(PyThreadState *tstate,
+ const char *where) {
+ return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where));
+}
+
+static inline int _Py_EnterRecursiveCall_inline(const char *where) {
+ PyThreadState *tstate = PyThreadState_GET();
+ return _Py_EnterRecursiveCall(tstate, where);
+}
+
+#define Py_EnterRecursiveCall(where) _Py_EnterRecursiveCall_inline(where)
+
+/* Compute the "lower-water mark" for a recursion limit. When
+ * Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
+ * the overflowed flag is reset to 0. */
+static inline int _Py_RecursionLimitLowerWaterMark(int limit) {
+ if (limit > 200) {
+ return (limit - 50);
+ }
+ else {
+ return (3 * (limit >> 2));
+ }
+}
+
+static inline void _Py_LeaveRecursiveCall(PyThreadState *tstate) {
+ tstate->recursion_depth--;
+ int limit = tstate->interp->ceval.recursion_limit;
+ if (tstate->recursion_depth < _Py_RecursionLimitLowerWaterMark(limit)) {
+ tstate->overflowed = 0;
+ }
+}
+
+static inline void _Py_LeaveRecursiveCall_inline(void) {
+ PyThreadState *tstate = PyThreadState_GET();
+ _Py_LeaveRecursiveCall(tstate);
+}
+
+#define Py_LeaveRecursiveCall() _Py_LeaveRecursiveCall_inline()
+
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_context.h b/src/external/windows/include/python/internal/pycore_context.h
index ad557657..884baa9c 100755
--- a/src/external/windows/include/python/internal/pycore_context.h
+++ b/src/external/windows/include/python/internal/pycore_context.h
@@ -5,7 +5,7 @@
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_hamt.h"
+#include "pycore_hamt.h" /* PyHamtObject */
struct _pycontextobject {
PyObject_HEAD
diff --git a/src/external/windows/include/python/dtoa.h b/src/external/windows/include/python/internal/pycore_dtoa.h
similarity index 63%
rename from src/external/windows/include/python/dtoa.h
rename to src/external/windows/include/python/internal/pycore_dtoa.h
index 0901d8fb..4cf08f61 100755
--- a/src/external/windows/include/python/dtoa.h
+++ b/src/external/windows/include/python/internal/pycore_dtoa.h
@@ -1,9 +1,15 @@
-#ifndef Py_LIMITED_API
#ifndef PY_NO_SHORT_FLOAT_REPR
#ifdef __cplusplus
extern "C" {
#endif
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* These functions are used by modules compiled as C extension like math:
+ they must be exported. */
+
PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr);
PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits,
int *decpt, int *sign, char **rve);
@@ -11,9 +17,7 @@ PyAPI_FUNC(void) _Py_dg_freedtoa(char *s);
PyAPI_FUNC(double) _Py_dg_stdnan(int sign);
PyAPI_FUNC(double) _Py_dg_infinity(int sign);
-
#ifdef __cplusplus
}
#endif
-#endif
-#endif
+#endif /* !PY_NO_SHORT_FLOAT_REPR */
diff --git a/src/external/windows/include/python/internal/pycore_fileutils.h b/src/external/windows/include/python/internal/pycore_fileutils.h
index 77f0edfa..9636f252 100755
--- a/src/external/windows/include/python/internal/pycore_fileutils.h
+++ b/src/external/windows/include/python/internal/pycore_fileutils.h
@@ -48,6 +48,18 @@ PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
PyObject **decimal_point,
PyObject **thousands_sep);
+#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
+extern int _Py_LocaleUsesNonUnicodeWchar(void);
+
+extern wchar_t* _Py_DecodeNonUnicodeWchar(
+ const wchar_t* native,
+ Py_ssize_t size);
+
+extern int _Py_EncodeNonUnicodeWchar_InPlace(
+ wchar_t* unicode,
+ Py_ssize_t size);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_gc.h b/src/external/windows/include/python/internal/pycore_gc.h
new file mode 100755
index 00000000..012407a5
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_gc.h
@@ -0,0 +1,179 @@
+#ifndef Py_INTERNAL_GC_H
+#define Py_INTERNAL_GC_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* GC information is stored BEFORE the object structure. */
+typedef struct {
+ // Pointer to next object in the list.
+ // 0 means the object is not tracked
+ uintptr_t _gc_next;
+
+ // Pointer to previous object in the list.
+ // Lowest two bits are used for flags documented later.
+ uintptr_t _gc_prev;
+} PyGC_Head;
+
+#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
+
+/* True if the object is currently tracked by the GC. */
+#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0)
+
+/* True if the object may be tracked by the GC in the future, or already is.
+ This can be useful to implement some optimizations. */
+#define _PyObject_GC_MAY_BE_TRACKED(obj) \
+ (PyObject_IS_GC(obj) && \
+ (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
+
+
+/* Bit flags for _gc_prev */
+/* Bit 0 is set when tp_finalize is called */
+#define _PyGC_PREV_MASK_FINALIZED (1)
+/* Bit 1 is set when the object is in generation which is GCed currently. */
+#define _PyGC_PREV_MASK_COLLECTING (2)
+/* The (N-2) most significant bits contain the real address. */
+#define _PyGC_PREV_SHIFT (2)
+#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
+
+// Lowest bit of _gc_next is used for flags only in GC.
+// But it is always 0 for normal code.
+#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next)
+#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p))
+
+// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags.
+#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK))
+#define _PyGCHead_SET_PREV(g, p) do { \
+ assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \
+ (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \
+ | ((uintptr_t)(p)); \
+ } while (0)
+
+#define _PyGCHead_FINALIZED(g) \
+ (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0)
+#define _PyGCHead_SET_FINALIZED(g) \
+ ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED)
+
+#define _PyGC_FINALIZED(o) \
+ _PyGCHead_FINALIZED(_Py_AS_GC(o))
+#define _PyGC_SET_FINALIZED(o) \
+ _PyGCHead_SET_FINALIZED(_Py_AS_GC(o))
+
+
+/* GC runtime state */
+
+/* If we change this, we need to change the default value in the
+ signature of gc.collect. */
+#define NUM_GENERATIONS 3
+/*
+ NOTE: about untracking of mutable objects.
+
+ Certain types of container cannot participate in a reference cycle, and
+ so do not need to be tracked by the garbage collector. Untracking these
+ objects reduces the cost of garbage collections. However, determining
+ which objects may be untracked is not free, and the costs must be
+ weighed against the benefits for garbage collection.
+
+ There are two possible strategies for when to untrack a container:
+
+ i) When the container is created.
+ ii) When the container is examined by the garbage collector.
+
+ Tuples containing only immutable objects (integers, strings etc, and
+ recursively, tuples of immutable objects) do not need to be tracked.
+ The interpreter creates a large number of tuples, many of which will
+ not survive until garbage collection. It is therefore not worthwhile
+ to untrack eligible tuples at creation time.
+
+ Instead, all tuples except the empty tuple are tracked when created.
+ During garbage collection it is determined whether any surviving tuples
+ can be untracked. A tuple can be untracked if all of its contents are
+ already not tracked. Tuples are examined for untracking in all garbage
+ collection cycles. It may take more than one cycle to untrack a tuple.
+
+ Dictionaries containing only immutable objects also do not need to be
+ tracked. Dictionaries are untracked when created. If a tracked item is
+ inserted into a dictionary (either as a key or value), the dictionary
+ becomes tracked. During a full garbage collection (all generations),
+ the collector will untrack any dictionaries whose contents are not
+ tracked.
+
+ The module provides the python function is_tracked(obj), which returns
+ the CURRENT tracking status of the object. Subsequent garbage
+ collections may change the tracking status of the object.
+
+ Untracking of certain containers was introduced in issue #4688, and
+ the algorithm was refined in response to issue #14775.
+*/
+
+struct gc_generation {
+ PyGC_Head head;
+ int threshold; /* collection threshold */
+ int count; /* count of allocations or collections of younger
+ generations */
+};
+
+/* Running stats per generation */
+struct gc_generation_stats {
+ /* total number of collections */
+ Py_ssize_t collections;
+ /* total number of collected objects */
+ Py_ssize_t collected;
+ /* total number of uncollectable objects (put into gc.garbage) */
+ Py_ssize_t uncollectable;
+};
+
+struct _gc_runtime_state {
+ /* List of objects that still need to be cleaned up, singly linked
+ * via their gc headers' gc_prev pointers. */
+ PyObject *trash_delete_later;
+ /* Current call-stack depth of tp_dealloc calls. */
+ int trash_delete_nesting;
+
+ int enabled;
+ int debug;
+ /* linked lists of container objects */
+ struct gc_generation generations[NUM_GENERATIONS];
+ PyGC_Head *generation0;
+ /* a permanent generation which won't be collected */
+ struct gc_generation permanent_generation;
+ struct gc_generation_stats generation_stats[NUM_GENERATIONS];
+ /* true if we are currently running the collector */
+ int collecting;
+ /* list of uncollectable objects */
+ PyObject *garbage;
+ /* a list of callbacks to be invoked when collection is performed */
+ PyObject *callbacks;
+ /* This is the number of objects that survived the last full
+ collection. It approximates the number of long lived objects
+ tracked by the GC.
+
+ (by "full collection", we mean a collection of the oldest
+ generation). */
+ Py_ssize_t long_lived_total;
+ /* This is the number of objects that survived all "non-full"
+ collections, and are awaiting to undergo a full collection for
+ the first time. */
+ Py_ssize_t long_lived_pending;
+};
+
+PyAPI_FUNC(void) _PyGC_InitState(struct _gc_runtime_state *);
+
+
+// Functions to clear types free lists
+extern void _PyFrame_ClearFreeList(void);
+extern void _PyTuple_ClearFreeList(void);
+extern void _PyFloat_ClearFreeList(void);
+extern void _PyList_ClearFreeList(void);
+extern void _PyDict_ClearFreeList(void);
+extern void _PyAsyncGen_ClearFreeLists(void);
+extern void _PyContext_ClearFreeList(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_GC_H */
diff --git a/src/external/windows/include/python/internal/pycore_gil.h b/src/external/windows/include/python/internal/pycore_gil.h
index 0f08f4cc..e1c8923c 100755
--- a/src/external/windows/include/python/internal/pycore_gil.h
+++ b/src/external/windows/include/python/internal/pycore_gil.h
@@ -8,8 +8,8 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_condvar.h"
-#include "pycore_atomic.h"
+#include "pycore_atomic.h" /* _Py_atomic_address */
+#include "pycore_condvar.h" /* PyCOND_T */
#ifndef Py_HAVE_CONDVAR
# error You need either a POSIX-compatible or a Windows system!
diff --git a/src/external/windows/include/python/internal/pycore_hamt.h b/src/external/windows/include/python/internal/pycore_hamt.h
index 44e22e2f..f6abb113 100755
--- a/src/external/windows/include/python/internal/pycore_hamt.h
+++ b/src/external/windows/include/python/internal/pycore_hamt.h
@@ -8,7 +8,7 @@
#define _Py_HAMT_MAX_TREE_DEPTH 7
-#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type)
+#define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type)
/* Abstract tree node. */
diff --git a/src/external/windows/include/python/internal/pycore_hashtable.h b/src/external/windows/include/python/internal/pycore_hashtable.h
new file mode 100755
index 00000000..8fa411a1
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_hashtable.h
@@ -0,0 +1,148 @@
+#ifndef Py_INTERNAL_HASHTABLE_H
+#define Py_INTERNAL_HASHTABLE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+/* Single linked list */
+
+typedef struct _Py_slist_item_s {
+ struct _Py_slist_item_s *next;
+} _Py_slist_item_t;
+
+typedef struct {
+ _Py_slist_item_t *head;
+} _Py_slist_t;
+
+#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next)
+
+#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head)
+
+
+/* _Py_hashtable: table entry */
+
+typedef struct {
+ /* used by _Py_hashtable_t.buckets to link entries */
+ _Py_slist_item_t _Py_slist_item;
+
+ Py_uhash_t key_hash;
+ void *key;
+ void *value;
+} _Py_hashtable_entry_t;
+
+
+/* _Py_hashtable: prototypes */
+
+/* Forward declaration */
+struct _Py_hashtable_t;
+typedef struct _Py_hashtable_t _Py_hashtable_t;
+
+typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key);
+typedef int (*_Py_hashtable_compare_func) (const void *key1, const void *key2);
+typedef void (*_Py_hashtable_destroy_func) (void *key);
+typedef _Py_hashtable_entry_t* (*_Py_hashtable_get_entry_func)(_Py_hashtable_t *ht,
+ const void *key);
+
+typedef struct {
+ // Allocate a memory block
+ void* (*malloc) (size_t size);
+
+ // Release a memory block
+ void (*free) (void *ptr);
+} _Py_hashtable_allocator_t;
+
+
+/* _Py_hashtable: table */
+struct _Py_hashtable_t {
+ size_t nentries; // Total number of entries in the table
+ size_t nbuckets;
+ _Py_slist_t *buckets;
+
+ _Py_hashtable_get_entry_func get_entry_func;
+ _Py_hashtable_hash_func hash_func;
+ _Py_hashtable_compare_func compare_func;
+ _Py_hashtable_destroy_func key_destroy_func;
+ _Py_hashtable_destroy_func value_destroy_func;
+ _Py_hashtable_allocator_t alloc;
+};
+
+/* Hash a pointer (void*) */
+PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key);
+
+/* Comparison using memcmp() */
+PyAPI_FUNC(int) _Py_hashtable_compare_direct(
+ const void *key1,
+ const void *key2);
+
+PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new(
+ _Py_hashtable_hash_func hash_func,
+ _Py_hashtable_compare_func compare_func);
+
+PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full(
+ _Py_hashtable_hash_func hash_func,
+ _Py_hashtable_compare_func compare_func,
+ _Py_hashtable_destroy_func key_destroy_func,
+ _Py_hashtable_destroy_func value_destroy_func,
+ _Py_hashtable_allocator_t *allocator);
+
+PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht);
+
+PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht);
+
+typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht,
+ const void *key, const void *value,
+ void *user_data);
+
+/* Call func() on each entry of the hashtable.
+ Iteration stops if func() result is non-zero, in this case it's the result
+ of the call. Otherwise, the function returns 0. */
+PyAPI_FUNC(int) _Py_hashtable_foreach(
+ _Py_hashtable_t *ht,
+ _Py_hashtable_foreach_func func,
+ void *user_data);
+
+PyAPI_FUNC(size_t) _Py_hashtable_size(const _Py_hashtable_t *ht);
+
+/* Add a new entry to the hash. The key must not be present in the hash table.
+ Return 0 on success, -1 on memory error. */
+PyAPI_FUNC(int) _Py_hashtable_set(
+ _Py_hashtable_t *ht,
+ const void *key,
+ void *value);
+
+
+/* Get an entry.
+ Return NULL if the key does not exist. */
+static inline _Py_hashtable_entry_t *
+_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key)
+{
+ return ht->get_entry_func(ht, key);
+}
+
+
+/* Get value from an entry.
+ Return NULL if the entry is not found.
+
+ Use _Py_hashtable_get_entry() to distinguish entry value equal to NULL
+ and entry not found. */
+PyAPI_FUNC(void*) _Py_hashtable_get(_Py_hashtable_t *ht, const void *key);
+
+
+/* Remove a key and its associated value without calling key and value destroy
+ functions.
+
+ Return the removed value if the key was found.
+ Return NULL if the key was not found. */
+PyAPI_FUNC(void*) _Py_hashtable_steal(
+ _Py_hashtable_t *ht,
+ const void *key);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_HASHTABLE_H */
diff --git a/src/external/windows/include/python/internal/pycore_import.h b/src/external/windows/include/python/internal/pycore_import.h
new file mode 100755
index 00000000..4c5e0e5e
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_import.h
@@ -0,0 +1,22 @@
+#ifndef Py_LIMITED_API
+#ifndef Py_INTERNAL_IMPORT_H
+#define Py_INTERNAL_IMPORT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
+ PyThreadState *tstate,
+ const char *name /* UTF-8 encoded string */
+ );
+
+#ifdef HAVE_FORK
+extern void _PyImport_ReInitLock(void);
+#endif
+extern void _PyImport_Cleanup(PyThreadState *tstate);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_IMPORT_H */
+#endif /* !Py_LIMITED_API */
diff --git a/src/external/windows/include/python/internal/pycore_initconfig.h b/src/external/windows/include/python/internal/pycore_initconfig.h
index 120d85e2..855fb550 100755
--- a/src/external/windows/include/python/internal/pycore_initconfig.h
+++ b/src/external/windows/include/python/internal/pycore_initconfig.h
@@ -8,7 +8,8 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_pystate.h" /* _PyRuntimeState */
+/* Forward declaration */
+struct pyruntimestate;
/* --- PyStatus ----------------------------------------------- */
@@ -60,7 +61,7 @@ PyAPI_FUNC(PyObject*) _PyWideStringList_AsList(const PyWideStringList *list);
/* --- _PyArgv ---------------------------------------------------- */
-typedef struct {
+typedef struct _PyArgv {
Py_ssize_t argc;
int use_bytes_argv;
char * const *bytes_argv;
@@ -149,8 +150,8 @@ extern PyStatus _PyConfig_Copy(
PyConfig *config,
const PyConfig *config2);
extern PyStatus _PyConfig_InitPathConfig(PyConfig *config);
-extern void _PyConfig_Write(const PyConfig *config,
- _PyRuntimeState *runtime);
+extern PyStatus _PyConfig_Write(const PyConfig *config,
+ struct pyruntimestate *runtime);
extern PyStatus _PyConfig_SetPyArgv(
PyConfig *config,
const _PyArgv *args);
diff --git a/src/external/windows/include/python/internal/pycore_interp.h b/src/external/windows/include/python/internal/pycore_interp.h
new file mode 100755
index 00000000..1023483a
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_interp.h
@@ -0,0 +1,192 @@
+#ifndef Py_INTERNAL_INTERP_H
+#define Py_INTERNAL_INTERP_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_atomic.h" /* _Py_atomic_address */
+#include "pycore_gil.h" /* struct _gil_runtime_state */
+#include "pycore_gc.h" /* struct _gc_runtime_state */
+#include "pycore_warnings.h" /* struct _warnings_runtime_state */
+
+/* ceval state */
+
+struct _pending_calls {
+ PyThread_type_lock lock;
+ /* Request for running pending calls. */
+ _Py_atomic_int calls_to_do;
+ /* Request for looking at the `async_exc` field of the current
+ thread state.
+ Guarded by the GIL. */
+ int async_exc;
+#define NPENDINGCALLS 32
+ struct {
+ int (*func)(void *);
+ void *arg;
+ } calls[NPENDINGCALLS];
+ int first;
+ int last;
+};
+
+struct _ceval_state {
+ int recursion_limit;
+ /* Records whether tracing is on for any thread. Counts the number
+ of threads for which tstate->c_tracefunc is non-NULL, so if the
+ value is 0, we know we don't have to check this thread's
+ c_tracefunc. This speeds up the if statement in
+ _PyEval_EvalFrameDefault() after fast_next_opcode. */
+ int tracing_possible;
+ /* This single variable consolidates all requests to break out of
+ the fast path in the eval loop. */
+ _Py_atomic_int eval_breaker;
+ /* Request for dropping the GIL */
+ _Py_atomic_int gil_drop_request;
+ struct _pending_calls pending;
+};
+
+/* fs_codec.encoding is initialized to NULL.
+ Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
+struct _Py_unicode_fs_codec {
+ char *encoding; // Filesystem encoding (encoded to UTF-8)
+ int utf8; // encoding=="utf-8"?
+ char *errors; // Filesystem errors (encoded to UTF-8)
+ _Py_error_handler error_handler;
+};
+
+struct _Py_unicode_state {
+ struct _Py_unicode_fs_codec fs_codec;
+};
+
+
+/* interpreter state */
+
+#define _PY_NSMALLPOSINTS 257
+#define _PY_NSMALLNEGINTS 5
+
+// The PyInterpreterState typedef is in Include/pystate.h.
+struct _is {
+
+ struct _is *next;
+ struct _ts *tstate_head;
+
+ /* Reference to the _PyRuntime global variable. This field exists
+ to not have to pass runtime in addition to tstate to a function.
+ Get runtime from tstate: tstate->interp->runtime. */
+ struct pyruntimestate *runtime;
+
+ int64_t id;
+ int64_t id_refcount;
+ int requires_idref;
+ PyThread_type_lock id_mutex;
+
+ int finalizing;
+
+ struct _ceval_state ceval;
+ struct _gc_runtime_state gc;
+
+ PyObject *modules;
+ PyObject *modules_by_index;
+ PyObject *sysdict;
+ PyObject *builtins;
+ PyObject *importlib;
+
+ /* Used in Modules/_threadmodule.c. */
+ long num_threads;
+ /* Support for runtime thread stack size tuning.
+ A value of 0 means using the platform's default stack size
+ or the size specified by the THREAD_STACK_SIZE macro. */
+ /* Used in Python/thread.c. */
+ size_t pythread_stacksize;
+
+ PyObject *codec_search_path;
+ PyObject *codec_search_cache;
+ PyObject *codec_error_registry;
+ int codecs_initialized;
+
+ struct _Py_unicode_state unicode;
+
+ PyConfig config;
+#ifdef HAVE_DLOPEN
+ int dlopenflags;
+#endif
+
+ PyObject *dict; /* Stores per-interpreter state */
+
+ PyObject *builtins_copy;
+ PyObject *import_func;
+ /* Initialized to PyEval_EvalFrameDefault(). */
+ _PyFrameEvalFunction eval_frame;
+
+ Py_ssize_t co_extra_user_count;
+ freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
+
+#ifdef HAVE_FORK
+ PyObject *before_forkers;
+ PyObject *after_forkers_parent;
+ PyObject *after_forkers_child;
+#endif
+ /* AtExit module */
+ void (*pyexitfunc)(PyObject *);
+ PyObject *pyexitmodule;
+
+ uint64_t tstate_next_unique_id;
+
+ struct _warnings_runtime_state warnings;
+
+ PyObject *audit_hooks;
+
+ struct {
+ struct {
+ int level;
+ int atbol;
+ } listnode;
+ } parser;
+
+#if _PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS > 0
+ /* Small integers are preallocated in this array so that they
+ can be shared.
+ The integers that are preallocated are those in the range
+ -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (not inclusive).
+ */
+ PyLongObject* small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS];
+#endif
+};
+
+/* Used by _PyImport_Cleanup() */
+extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp);
+
+extern PyStatus _PyInterpreterState_SetConfig(
+ PyInterpreterState *interp,
+ const PyConfig *config);
+
+
+
+/* cross-interpreter data registry */
+
+/* For now we use a global registry of shareable classes. An
+ alternative would be to add a tp_* slot for a class's
+ crossinterpdatafunc. It would be simpler and more efficient. */
+
+struct _xidregitem;
+
+struct _xidregitem {
+ PyTypeObject *cls;
+ crossinterpdatafunc getdata;
+ struct _xidregitem *next;
+};
+
+PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(int64_t);
+
+PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *);
+PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *);
+PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_INTERP_H */
+
diff --git a/src/external/windows/include/python/internal/pycore_object.h b/src/external/windows/include/python/internal/pycore_object.h
index 7a57fa79..15497007 100755
--- a/src/external/windows/include/python/internal/pycore_object.h
+++ b/src/external/windows/include/python/internal/pycore_object.h
@@ -8,7 +8,9 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_pystate.h" /* _PyRuntime */
+#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED()
+#include "pycore_interp.h" // PyInterpreterState.gc
+#include "pycore_pystate.h" // _PyThreadState_GET()
PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type);
PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content);
@@ -18,7 +20,7 @@ PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content);
* NB: While the object is tracked by the collector, it must be safe to call the
* ob_traverse method.
*
- * Internal note: _PyRuntime.gc.generation0->_gc_prev doesn't have any bit flags
+ * Internal note: interp->gc.generation0->_gc_prev doesn't have any bit flags
* because it's not object header. So we don't use _PyGCHead_PREV() and
* _PyGCHead_SET_PREV() for it to avoid unnecessary bitwise operations.
*
@@ -37,11 +39,13 @@ static inline void _PyObject_GC_TRACK_impl(const char *filename, int lineno,
"object is in generation which is garbage collected",
filename, lineno, "_PyObject_GC_TRACK");
- PyGC_Head *last = (PyGC_Head*)(_PyRuntime.gc.generation0->_gc_prev);
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyGC_Head *generation0 = tstate->interp->gc.generation0;
+ PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
_PyGCHead_SET_NEXT(last, gc);
_PyGCHead_SET_PREV(gc, last);
- _PyGCHead_SET_NEXT(gc, _PyRuntime.gc.generation0);
- _PyRuntime.gc.generation0->_gc_prev = (uintptr_t)gc;
+ _PyGCHead_SET_NEXT(gc, generation0);
+ generation0->_gc_prev = (uintptr_t)gc;
}
#define _PyObject_GC_TRACK(op) \
@@ -75,6 +79,41 @@ static inline void _PyObject_GC_UNTRACK_impl(const char *filename, int lineno,
#define _PyObject_GC_UNTRACK(op) \
_PyObject_GC_UNTRACK_impl(__FILE__, __LINE__, _PyObject_CAST(op))
+#ifdef Py_REF_DEBUG
+extern void _PyDebug_PrintTotalRefs(void);
+#endif
+
+#ifdef Py_TRACE_REFS
+extern void _Py_AddToAllObjects(PyObject *op, int force);
+extern void _Py_PrintReferences(FILE *);
+extern void _Py_PrintReferenceAddresses(FILE *);
+#endif
+
+static inline PyObject **
+_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op)
+{
+ Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
+ return (PyObject **)((char *)op + offset);
+}
+
+// Fast inlined version of PyType_HasFeature()
+static inline int
+_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
+ return ((type->tp_flags & feature) != 0);
+}
+
+// Fast inlined version of PyObject_IS_GC()
+static inline int
+_PyObject_IS_GC(PyObject *obj)
+{
+ return (PyType_IS_GC(Py_TYPE(obj))
+ && (Py_TYPE(obj)->tp_is_gc == NULL
+ || Py_TYPE(obj)->tp_is_gc(obj)));
+}
+
+// Fast inlined version of PyType_IS_GC()
+#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_pathconfig.h b/src/external/windows/include/python/internal/pycore_pathconfig.h
index 887fbe4a..8f706fe6 100755
--- a/src/external/windows/include/python/internal/pycore_pathconfig.h
+++ b/src/external/windows/include/python/internal/pycore_pathconfig.h
@@ -47,8 +47,6 @@ PyAPI_DATA(wchar_t*) _Py_dll_path;
#endif
extern void _PyPathConfig_ClearGlobal(void);
-extern PyStatus _PyPathConfig_SetGlobal(
- const struct _PyPathConfig *pathconfig);
extern PyStatus _PyPathConfig_Calculate(
_PyPathConfig *pathconfig,
@@ -56,11 +54,10 @@ extern PyStatus _PyPathConfig_Calculate(
extern int _PyPathConfig_ComputeSysPath0(
const PyWideStringList *argv,
PyObject **path0);
-extern int _Py_FindEnvConfigValue(
+extern PyStatus _Py_FindEnvConfigValue(
FILE *env_file,
const wchar_t *key,
- wchar_t *value,
- size_t value_size);
+ wchar_t **value_p);
#ifdef MS_WINDOWS
extern wchar_t* _Py_GetDLLPath(void);
diff --git a/src/external/windows/include/python/internal/pycore_pyerrors.h b/src/external/windows/include/python/internal/pycore_pyerrors.h
index 337bb979..6140cf37 100755
--- a/src/external/windows/include/python/internal/pycore_pyerrors.h
+++ b/src/external/windows/include/python/internal/pycore_pyerrors.h
@@ -10,7 +10,22 @@ extern "C" {
static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
{
- return tstate == NULL ? NULL : tstate->curexc_type;
+ assert(tstate != NULL);
+ return tstate->curexc_type;
+}
+
+static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state)
+{
+ PyObject *t, *v, *tb;
+ t = exc_state->exc_type;
+ v = exc_state->exc_value;
+ tb = exc_state->exc_traceback;
+ exc_state->exc_type = NULL;
+ exc_state->exc_value = NULL;
+ exc_state->exc_traceback = NULL;
+ Py_XDECREF(t);
+ Py_XDECREF(v);
+ Py_XDECREF(tb);
}
@@ -35,10 +50,15 @@ PyAPI_FUNC(void) _PyErr_SetObject(
PyObject *type,
PyObject *value);
+PyAPI_FUNC(void) _PyErr_ChainStackItem(
+ _PyErr_StackItem *exc_info);
+
PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
+PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate);
+
PyAPI_FUNC(void) _PyErr_SetString(
PyThreadState *tstate,
PyObject *exception,
@@ -56,6 +76,14 @@ PyAPI_FUNC(void) _PyErr_NormalizeException(
PyObject **val,
PyObject **tb);
+PyAPI_FUNC(PyObject *) _PyErr_FormatFromCauseTstate(
+ PyThreadState *tstate,
+ PyObject *exception,
+ const char *format,
+ ...);
+
+PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_pylifecycle.h b/src/external/windows/include/python/internal/pycore_pylifecycle.h
index f4c28d69..89f99a41 100755
--- a/src/external/windows/include/python/internal/pycore_pylifecycle.h
+++ b/src/external/windows/include/python/internal/pycore_pylifecycle.h
@@ -8,8 +8,9 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pycore_initconfig.h" /* _PyArgv */
-#include "pycore_pystate.h" /* _PyRuntimeState */
+/* Forward declarations */
+struct _PyArgv;
+struct pyruntimestate;
/* True if the main interpreter thread exited due to an unhandled
* KeyboardInterrupt exception, suggesting the user pressed ^C. */
@@ -32,74 +33,69 @@ PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc);
extern PyStatus _PyUnicode_Init(void);
extern int _PyStructSequence_Init(void);
-extern int _PyLong_Init(void);
+extern int _PyLong_Init(PyThreadState *tstate);
extern PyStatus _PyFaulthandler_Init(int enable);
extern int _PyTraceMalloc_Init(int enable);
-extern PyObject * _PyBuiltin_Init(void);
+extern PyObject * _PyBuiltin_Init(PyThreadState *tstate);
extern PyStatus _PySys_Create(
- _PyRuntimeState *runtime,
- PyInterpreterState *interp,
+ PyThreadState *tstate,
PyObject **sysmod_p);
-extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict);
extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
-extern int _PySys_InitMain(
- _PyRuntimeState *runtime,
- PyInterpreterState *interp);
-extern PyStatus _PyImport_Init(PyInterpreterState *interp);
+extern int _PySys_InitMain(PyThreadState *tstate);
extern PyStatus _PyExc_Init(void);
extern PyStatus _PyErr_Init(void);
extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod);
-extern PyStatus _PyImportHooks_Init(void);
+extern PyStatus _PyImportHooks_Init(PyThreadState *tstate);
extern int _PyFloat_Init(void);
extern PyStatus _Py_HashRandomization_Init(const PyConfig *);
extern PyStatus _PyTypes_Init(void);
-extern PyStatus _PyImportZip_Init(PyInterpreterState *interp);
+extern PyStatus _PyTypes_InitSlotDefs(void);
+extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
+extern PyStatus _PyGC_Init(PyThreadState *tstate);
/* Various internal finalizers */
-extern void PyMethod_Fini(void);
-extern void PyFrame_Fini(void);
-extern void PyCFunction_Fini(void);
-extern void PyDict_Fini(void);
-extern void PyTuple_Fini(void);
-extern void PyList_Fini(void);
-extern void PySet_Fini(void);
-extern void PyBytes_Fini(void);
-extern void PyFloat_Fini(void);
+extern void _PyFrame_Fini(void);
+extern void _PyDict_Fini(void);
+extern void _PyTuple_Fini(void);
+extern void _PyList_Fini(void);
+extern void _PySet_Fini(void);
+extern void _PyBytes_Fini(void);
+extern void _PyFloat_Fini(void);
+extern void _PySlice_Fini(void);
+extern void _PyAsyncGen_Fini(void);
+
+extern int _PySignal_Init(int install_signal_handlers);
extern void PyOS_FiniInterrupts(void);
-extern void PySlice_Fini(void);
-extern void PyAsyncGen_Fini(void);
extern void _PyExc_Fini(void);
extern void _PyImport_Fini(void);
extern void _PyImport_Fini2(void);
-extern void _PyGC_Fini(_PyRuntimeState *runtime);
+extern void _PyGC_Fini(PyThreadState *tstate);
extern void _PyType_Fini(void);
extern void _Py_HashRandomization_Fini(void);
-extern void _PyUnicode_Fini(void);
-extern void PyLong_Fini(void);
+extern void _PyUnicode_Fini(PyThreadState *tstate);
+extern void _PyLong_Fini(PyThreadState *tstate);
extern void _PyFaulthandler_Fini(void);
extern void _PyHash_Fini(void);
extern void _PyTraceMalloc_Fini(void);
extern void _PyWarnings_Fini(PyInterpreterState *interp);
+extern void _PyAST_Fini(void);
-extern void _PyGILState_Init(
- _PyRuntimeState *runtime,
- PyInterpreterState *interp,
- PyThreadState *tstate);
-extern void _PyGILState_Fini(_PyRuntimeState *runtime);
+extern PyStatus _PyGILState_Init(PyThreadState *tstate);
+extern void _PyGILState_Fini(PyThreadState *tstate);
-PyAPI_FUNC(void) _PyGC_DumpShutdownStats(_PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyGC_DumpShutdownStats(PyThreadState *tstate);
PyAPI_FUNC(PyStatus) _Py_PreInitializeFromPyArgv(
const PyPreConfig *src_config,
- const _PyArgv *args);
+ const struct _PyArgv *args);
PyAPI_FUNC(PyStatus) _Py_PreInitializeFromConfig(
const PyConfig *config,
- const _PyArgv *args);
+ const struct _PyArgv *args);
PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p);
@@ -110,6 +106,8 @@ PyAPI_FUNC(void) _PyErr_Print(PyThreadState *tstate);
PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception,
PyObject *value, PyObject *tb);
+PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_pymem.h b/src/external/windows/include/python/internal/pycore_pymem.h
index 9ceb1297..98e25396 100755
--- a/src/external/windows/include/python/internal/pycore_pymem.h
+++ b/src/external/windows/include/python/internal/pycore_pymem.h
@@ -8,144 +8,7 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "objimpl.h"
-#include "pymem.h"
-
-
-/* GC runtime state */
-
-/* If we change this, we need to change the default value in the
- signature of gc.collect. */
-#define NUM_GENERATIONS 3
-
-/*
- NOTE: about the counting of long-lived objects.
-
- To limit the cost of garbage collection, there are two strategies;
- - make each collection faster, e.g. by scanning fewer objects
- - do less collections
- This heuristic is about the latter strategy.
-
- In addition to the various configurable thresholds, we only trigger a
- full collection if the ratio
- long_lived_pending / long_lived_total
- is above a given value (hardwired to 25%).
-
- The reason is that, while "non-full" collections (i.e., collections of
- the young and middle generations) will always examine roughly the same
- number of objects -- determined by the aforementioned thresholds --,
- the cost of a full collection is proportional to the total number of
- long-lived objects, which is virtually unbounded.
-
- Indeed, it has been remarked that doing a full collection every
- of object creations entails a dramatic performance
- degradation in workloads which consist in creating and storing lots of
- long-lived objects (e.g. building a large list of GC-tracked objects would
- show quadratic performance, instead of linear as expected: see issue #4074).
-
- Using the above ratio, instead, yields amortized linear performance in
- the total number of objects (the effect of which can be summarized
- thusly: "each full garbage collection is more and more costly as the
- number of objects grows, but we do fewer and fewer of them").
-
- This heuristic was suggested by Martin von Löwis on python-dev in
- June 2008. His original analysis and proposal can be found at:
- http://mail.python.org/pipermail/python-dev/2008-June/080579.html
-*/
-
-/*
- NOTE: about untracking of mutable objects.
-
- Certain types of container cannot participate in a reference cycle, and
- so do not need to be tracked by the garbage collector. Untracking these
- objects reduces the cost of garbage collections. However, determining
- which objects may be untracked is not free, and the costs must be
- weighed against the benefits for garbage collection.
-
- There are two possible strategies for when to untrack a container:
-
- i) When the container is created.
- ii) When the container is examined by the garbage collector.
-
- Tuples containing only immutable objects (integers, strings etc, and
- recursively, tuples of immutable objects) do not need to be tracked.
- The interpreter creates a large number of tuples, many of which will
- not survive until garbage collection. It is therefore not worthwhile
- to untrack eligible tuples at creation time.
-
- Instead, all tuples except the empty tuple are tracked when created.
- During garbage collection it is determined whether any surviving tuples
- can be untracked. A tuple can be untracked if all of its contents are
- already not tracked. Tuples are examined for untracking in all garbage
- collection cycles. It may take more than one cycle to untrack a tuple.
-
- Dictionaries containing only immutable objects also do not need to be
- tracked. Dictionaries are untracked when created. If a tracked item is
- inserted into a dictionary (either as a key or value), the dictionary
- becomes tracked. During a full garbage collection (all generations),
- the collector will untrack any dictionaries whose contents are not
- tracked.
-
- The module provides the python function is_tracked(obj), which returns
- the CURRENT tracking status of the object. Subsequent garbage
- collections may change the tracking status of the object.
-
- Untracking of certain containers was introduced in issue #4688, and
- the algorithm was refined in response to issue #14775.
-*/
-
-struct gc_generation {
- PyGC_Head head;
- int threshold; /* collection threshold */
- int count; /* count of allocations or collections of younger
- generations */
-};
-
-/* Running stats per generation */
-struct gc_generation_stats {
- /* total number of collections */
- Py_ssize_t collections;
- /* total number of collected objects */
- Py_ssize_t collected;
- /* total number of uncollectable objects (put into gc.garbage) */
- Py_ssize_t uncollectable;
-};
-
-struct _gc_runtime_state {
- /* List of objects that still need to be cleaned up, singly linked
- * via their gc headers' gc_prev pointers. */
- PyObject *trash_delete_later;
- /* Current call-stack depth of tp_dealloc calls. */
- int trash_delete_nesting;
-
- int enabled;
- int debug;
- /* linked lists of container objects */
- struct gc_generation generations[NUM_GENERATIONS];
- PyGC_Head *generation0;
- /* a permanent generation which won't be collected */
- struct gc_generation permanent_generation;
- struct gc_generation_stats generation_stats[NUM_GENERATIONS];
- /* true if we are currently running the collector */
- int collecting;
- /* list of uncollectable objects */
- PyObject *garbage;
- /* a list of callbacks to be invoked when collection is performed */
- PyObject *callbacks;
- /* This is the number of objects that survived the last full
- collection. It approximates the number of long lived objects
- tracked by the GC.
-
- (by "full collection", we mean a collection of the oldest
- generation). */
- Py_ssize_t long_lived_total;
- /* This is the number of objects that survived all "non-full"
- collections, and are awaiting to undergo a full collection for
- the first time. */
- Py_ssize_t long_lived_pending;
-};
-
-PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *);
+#include "pymem.h" // PyMemAllocatorName
/* Set the memory allocator of the specified domain to the default.
@@ -179,7 +42,7 @@ PyAPI_FUNC(int) _PyMem_SetDefaultAllocator(
fills newly allocated memory with CLEANBYTE (0xCD) and newly freed memory
with DEADBYTE (0xDD). Detect also "untouchable bytes" marked
with FORBIDDENBYTE (0xFD). */
-static inline int _PyMem_IsPtrFreed(void *ptr)
+static inline int _PyMem_IsPtrFreed(const void *ptr)
{
uintptr_t value = (uintptr_t)ptr;
#if SIZEOF_VOID_P == 8
@@ -206,6 +69,35 @@ PyAPI_FUNC(int) _PyMem_GetAllocatorName(
PYMEM_ALLOCATOR_NOT_SET does nothing. */
PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator);
+/* bpo-35053: Expose _Py_tracemalloc_config for _Py_NewReference()
+ which access directly _Py_tracemalloc_config.tracing for best
+ performances. */
+struct _PyTraceMalloc_Config {
+ /* Module initialized?
+ Variable protected by the GIL */
+ enum {
+ TRACEMALLOC_NOT_INITIALIZED,
+ TRACEMALLOC_INITIALIZED,
+ TRACEMALLOC_FINALIZED
+ } initialized;
+
+ /* Is tracemalloc tracing memory allocations?
+ Variable protected by the GIL */
+ int tracing;
+
+ /* limit of the number of frames in a traceback, 1 by default.
+ Variable protected by the GIL. */
+ int max_nframe;
+};
+
+#define _PyTraceMalloc_Config_INIT \
+ {.initialized = TRACEMALLOC_NOT_INITIALIZED, \
+ .tracing = 0, \
+ .max_nframe = 1}
+
+PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config;
+
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/internal/pycore_pystate.h b/src/external/windows/include/python/internal/pycore_pystate.h
index 32252278..2088d511 100755
--- a/src/external/windows/include/python/internal/pycore_pystate.h
+++ b/src/external/windows/include/python/internal/pycore_pystate.h
@@ -8,270 +8,52 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "cpython/initconfig.h"
-#include "fileobject.h"
-#include "pystate.h"
-#include "pythread.h"
-#include "sysmodule.h"
-
-#include "pycore_gil.h" /* _gil_runtime_state */
-#include "pycore_pathconfig.h"
-#include "pycore_pymem.h"
-#include "pycore_warnings.h"
+#include "pycore_runtime.h" /* PyRuntimeState */
-/* ceval state */
-
-struct _pending_calls {
- int finishing;
- PyThread_type_lock lock;
- /* Request for running pending calls. */
- _Py_atomic_int calls_to_do;
- /* Request for looking at the `async_exc` field of the current
- thread state.
- Guarded by the GIL. */
- int async_exc;
-#define NPENDINGCALLS 32
- struct {
- int (*func)(void *);
- void *arg;
- } calls[NPENDINGCALLS];
- int first;
- int last;
-};
-
-struct _ceval_runtime_state {
- int recursion_limit;
- /* Records whether tracing is on for any thread. Counts the number
- of threads for which tstate->c_tracefunc is non-NULL, so if the
- value is 0, we know we don't have to check this thread's
- c_tracefunc. This speeds up the if statement in
- PyEval_EvalFrameEx() after fast_next_opcode. */
- int tracing_possible;
- /* This single variable consolidates all requests to break out of
- the fast path in the eval loop. */
- _Py_atomic_int eval_breaker;
- /* Request for dropping the GIL */
- _Py_atomic_int gil_drop_request;
- struct _pending_calls pending;
- /* Request for checking signals. */
- _Py_atomic_int signals_pending;
- struct _gil_runtime_state gil;
-};
-
-/* interpreter state */
-
-typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
-
-// The PyInterpreterState typedef is in Include/pystate.h.
-struct _is {
-
- struct _is *next;
- struct _ts *tstate_head;
-
- int64_t id;
- int64_t id_refcount;
- int requires_idref;
- PyThread_type_lock id_mutex;
-
- int finalizing;
-
- PyObject *modules;
- PyObject *modules_by_index;
- PyObject *sysdict;
- PyObject *builtins;
- PyObject *importlib;
-
- /* Used in Python/sysmodule.c. */
- int check_interval;
-
- /* Used in Modules/_threadmodule.c. */
- long num_threads;
- /* Support for runtime thread stack size tuning.
- A value of 0 means using the platform's default stack size
- or the size specified by the THREAD_STACK_SIZE macro. */
- /* Used in Python/thread.c. */
- size_t pythread_stacksize;
-
- PyObject *codec_search_path;
- PyObject *codec_search_cache;
- PyObject *codec_error_registry;
- int codecs_initialized;
-
- /* fs_codec.encoding is initialized to NULL.
- Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */
- struct {
- char *encoding; /* Filesystem encoding (encoded to UTF-8) */
- char *errors; /* Filesystem errors (encoded to UTF-8) */
- _Py_error_handler error_handler;
- } fs_codec;
-
- PyConfig config;
-#ifdef HAVE_DLOPEN
- int dlopenflags;
-#endif
-
- PyObject *dict; /* Stores per-interpreter state */
-
- PyObject *builtins_copy;
- PyObject *import_func;
- /* Initialized to PyEval_EvalFrameDefault(). */
- _PyFrameEvalFunction eval_frame;
-
- Py_ssize_t co_extra_user_count;
- freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
-
-#ifdef HAVE_FORK
- PyObject *before_forkers;
- PyObject *after_forkers_parent;
- PyObject *after_forkers_child;
-#endif
- /* AtExit module */
- void (*pyexitfunc)(PyObject *);
- PyObject *pyexitmodule;
-
- uint64_t tstate_next_unique_id;
-
- struct _warnings_runtime_state warnings;
-
- PyObject *audit_hooks;
-};
-
-PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T);
-
-PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *);
-PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *);
-PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *);
+/* Check if the current thread is the main thread.
+ Use _Py_IsMainInterpreter() to check if it's the main interpreter. */
+static inline int
+_Py_IsMainThread(void)
+{
+ unsigned long thread = PyThread_get_thread_ident();
+ return (thread == _PyRuntime.main_thread);
+}
-/* cross-interpreter data registry */
-
-/* For now we use a global registry of shareable classes. An
- alternative would be to add a tp_* slot for a class's
- crossinterpdatafunc. It would be simpler and more efficient. */
-
-struct _xidregitem;
-
-struct _xidregitem {
- PyTypeObject *cls;
- crossinterpdatafunc getdata;
- struct _xidregitem *next;
-};
-
-/* runtime audit hook state */
-
-typedef struct _Py_AuditHookEntry {
- struct _Py_AuditHookEntry *next;
- Py_AuditHookFunction hookCFunction;
- void *userData;
-} _Py_AuditHookEntry;
-
-/* GIL state */
-
-struct _gilstate_runtime_state {
- int check_enabled;
- /* Assuming the current thread holds the GIL, this is the
- PyThreadState for the current thread. */
- _Py_atomic_address tstate_current;
- PyThreadFrameGetter getframe;
- /* The single PyInterpreterState used by this process'
- GILState implementation
- */
- /* TODO: Given interp_main, it may be possible to kill this ref */
- PyInterpreterState *autoInterpreterState;
- Py_tss_t autoTSSkey;
-};
-
-/* hook for PyEval_GetFrame(), requested for Psyco */
-#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe
-
-/* Issue #26558: Flag to disable PyGILState_Check().
- If set to non-zero, PyGILState_Check() always return 1. */
-#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled
+static inline int
+_Py_IsMainInterpreter(PyThreadState* tstate)
+{
+ /* Use directly _PyRuntime rather than tstate->interp->runtime, since
+ this function is used in performance critical code path (ceval) */
+ return (tstate->interp == _PyRuntime.interpreters.main);
+}
-/* Full Python runtime state */
+/* Only handle signals on the main thread of the main interpreter. */
+static inline int
+_Py_ThreadCanHandleSignals(PyInterpreterState *interp)
+{
+ return (_Py_IsMainThread() && interp == _PyRuntime.interpreters.main);
+}
-typedef struct pyruntimestate {
- /* Is running Py_PreInitialize()? */
- int preinitializing;
- /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */
- int preinitialized;
-
- /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */
- int core_initialized;
-
- /* Is Python fully initialized? Set to 1 by Py_Initialize() */
- int initialized;
-
- /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize()
- is called again. */
- PyThreadState *finalizing;
-
- struct pyinterpreters {
- PyThread_type_lock mutex;
- PyInterpreterState *head;
- PyInterpreterState *main;
- /* _next_interp_id is an auto-numbered sequence of small
- integers. It gets initialized in _PyInterpreterState_Init(),
- which is called in Py_Initialize(), and used in
- PyInterpreterState_New(). A negative interpreter ID
- indicates an error occurred. The main interpreter will
- always have an ID of 0. Overflow results in a RuntimeError.
- If that becomes a problem later then we can adjust, e.g. by
- using a Python int. */
- int64_t next_id;
- } interpreters;
- // XXX Remove this field once we have a tp_* slot.
- struct _xidregistry {
- PyThread_type_lock mutex;
- struct _xidregitem *head;
- } xidregistry;
-
- unsigned long main_thread;
-
-#define NEXITFUNCS 32
- void (*exitfuncs[NEXITFUNCS])(void);
- int nexitfuncs;
-
- struct _gc_runtime_state gc;
- struct _ceval_runtime_state ceval;
- struct _gilstate_runtime_state gilstate;
-
- PyPreConfig preconfig;
-
- Py_OpenCodeHookFunction open_code_hook;
- void *open_code_userdata;
- _Py_AuditHookEntry *audit_hook_head;
-
- // XXX Consolidate globals found via the check-c-globals script.
-} _PyRuntimeState;
-
-#define _PyRuntimeState_INIT \
- {.preinitialized = 0, .core_initialized = 0, .initialized = 0}
-/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */
-
-PyAPI_DATA(_PyRuntimeState) _PyRuntime;
-PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime);
-PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime);
-
-/* Initialize _PyRuntimeState.
- Return NULL on success, or return an error message on failure. */
-PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void);
-
-PyAPI_FUNC(void) _PyRuntime_Finalize(void);
-
-#define _Py_CURRENTLY_FINALIZING(runtime, tstate) \
- (runtime->finalizing == tstate)
+/* Only execute pending calls on the main thread. */
+static inline int
+_Py_ThreadCanHandlePendingCalls(void)
+{
+ return _Py_IsMainThread();
+}
/* Variable and macro for in-line access to current thread
and interpreter state */
-#define _PyRuntimeState_GetThreadState(runtime) \
- ((PyThreadState*)_Py_atomic_load_relaxed(&(runtime)->gilstate.tstate_current))
+static inline PyThreadState*
+_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime)
+{
+ return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current);
+}
/* Get the current Python thread state.
@@ -282,12 +64,31 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void);
The caller must hold the GIL.
See also PyThreadState_Get() and PyThreadState_GET(). */
-#define _PyThreadState_GET() _PyRuntimeState_GetThreadState(&_PyRuntime)
+static inline PyThreadState*
+_PyThreadState_GET(void)
+{
+ return _PyRuntimeState_GetThreadState(&_PyRuntime);
+}
/* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */
#undef PyThreadState_GET
#define PyThreadState_GET() _PyThreadState_GET()
+PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func);
+
+static inline void
+_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate)
+{
+ if (tstate == NULL) {
+ _Py_FatalError_TstateNULL(func);
+ }
+}
+
+// Call Py_FatalError() if tstate is NULL
+#define _Py_EnsureTstateNotNULL(tstate) \
+ _Py_EnsureFuncTstateNotNULL(__func__, tstate)
+
+
/* Get the current interpreter state.
The macro is unsafe: it does not check for error and it can return NULL.
@@ -296,13 +97,18 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void);
See also _PyInterpreterState_Get()
and _PyGILState_GetInterpreterStateUnsafe(). */
-#define _PyInterpreterState_GET_UNSAFE() (_PyThreadState_GET()->interp)
+static inline PyInterpreterState* _PyInterpreterState_GET(void) {
+ PyThreadState *tstate = _PyThreadState_GET();
+#ifdef Py_DEBUG
+ _Py_EnsureTstateNotNULL(tstate);
+#endif
+ return tstate->interp;
+}
/* Other */
PyAPI_FUNC(void) _PyThreadState_Init(
- _PyRuntimeState *runtime,
PyThreadState *tstate);
PyAPI_FUNC(void) _PyThreadState_DeleteExcept(
_PyRuntimeState *runtime,
@@ -318,6 +124,12 @@ PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime);
PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime);
+PyAPI_FUNC(int) _PyState_AddModule(
+ PyThreadState *tstate,
+ PyObject* module,
+ struct PyModuleDef* def);
+
+
PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate);
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/internal/pycore_runtime.h b/src/external/windows/include/python/internal/pycore_runtime.h
new file mode 100755
index 00000000..f0dff829
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_runtime.h
@@ -0,0 +1,144 @@
+#ifndef Py_INTERNAL_RUNTIME_H
+#define Py_INTERNAL_RUNTIME_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+#include "pycore_atomic.h" /* _Py_atomic_address */
+#include "pycore_gil.h" // struct _gil_runtime_state
+
+/* ceval state */
+
+struct _ceval_runtime_state {
+ /* Request for checking signals. It is shared by all interpreters (see
+ bpo-40513). Any thread of any interpreter can receive a signal, but only
+ the main thread of the main interpreter can handle signals: see
+ _Py_ThreadCanHandleSignals(). */
+ _Py_atomic_int signals_pending;
+ struct _gil_runtime_state gil;
+};
+
+/* GIL state */
+
+struct _gilstate_runtime_state {
+ /* bpo-26558: Flag to disable PyGILState_Check().
+ If set to non-zero, PyGILState_Check() always return 1. */
+ int check_enabled;
+ /* Assuming the current thread holds the GIL, this is the
+ PyThreadState for the current thread. */
+ _Py_atomic_address tstate_current;
+ /* The single PyInterpreterState used by this process'
+ GILState implementation
+ */
+ /* TODO: Given interp_main, it may be possible to kill this ref */
+ PyInterpreterState *autoInterpreterState;
+ Py_tss_t autoTSSkey;
+};
+
+/* Runtime audit hook state */
+
+typedef struct _Py_AuditHookEntry {
+ struct _Py_AuditHookEntry *next;
+ Py_AuditHookFunction hookCFunction;
+ void *userData;
+} _Py_AuditHookEntry;
+
+/* Full Python runtime state */
+
+typedef struct pyruntimestate {
+ /* Is running Py_PreInitialize()? */
+ int preinitializing;
+
+ /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */
+ int preinitialized;
+
+ /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */
+ int core_initialized;
+
+ /* Is Python fully initialized? Set to 1 by Py_Initialize() */
+ int initialized;
+
+ /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize()
+ is called again.
+
+ Use _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing()
+ to access it, don't access it directly. */
+ _Py_atomic_address _finalizing;
+
+ struct pyinterpreters {
+ PyThread_type_lock mutex;
+ PyInterpreterState *head;
+ PyInterpreterState *main;
+ /* _next_interp_id is an auto-numbered sequence of small
+ integers. It gets initialized in _PyInterpreterState_Init(),
+ which is called in Py_Initialize(), and used in
+ PyInterpreterState_New(). A negative interpreter ID
+ indicates an error occurred. The main interpreter will
+ always have an ID of 0. Overflow results in a RuntimeError.
+ If that becomes a problem later then we can adjust, e.g. by
+ using a Python int. */
+ int64_t next_id;
+ } interpreters;
+ // XXX Remove this field once we have a tp_* slot.
+ struct _xidregistry {
+ PyThread_type_lock mutex;
+ struct _xidregitem *head;
+ } xidregistry;
+
+ unsigned long main_thread;
+
+#define NEXITFUNCS 32
+ void (*exitfuncs[NEXITFUNCS])(void);
+ int nexitfuncs;
+
+ struct _ceval_runtime_state ceval;
+ struct _gilstate_runtime_state gilstate;
+
+ PyPreConfig preconfig;
+
+ Py_OpenCodeHookFunction open_code_hook;
+ void *open_code_userdata;
+ _Py_AuditHookEntry *audit_hook_head;
+
+ // XXX Consolidate globals found via the check-c-globals script.
+} _PyRuntimeState;
+
+#define _PyRuntimeState_INIT \
+ {.preinitialized = 0, .core_initialized = 0, .initialized = 0}
+/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */
+
+
+PyAPI_DATA(_PyRuntimeState) _PyRuntime;
+
+PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime);
+
+#ifdef HAVE_FORK
+PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime);
+#endif
+
+/* Initialize _PyRuntimeState.
+ Return NULL on success, or return an error message on failure. */
+PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void);
+
+PyAPI_FUNC(void) _PyRuntime_Finalize(void);
+
+
+static inline PyThreadState*
+_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) {
+ return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->_finalizing);
+}
+
+static inline void
+_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) {
+ _Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate);
+}
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_RUNTIME_H */
diff --git a/src/external/windows/include/python/internal/pycore_sysmodule.h b/src/external/windows/include/python/internal/pycore_sysmodule.h
new file mode 100755
index 00000000..363eb873
--- /dev/null
+++ b/src/external/windows/include/python/internal/pycore_sysmodule.h
@@ -0,0 +1,24 @@
+#ifndef Py_INTERNAL_SYSMODULE_H
+#define Py_INTERNAL_SYSMODULE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+PyAPI_FUNC(int) _PySys_Audit(
+ PyThreadState *tstate,
+ const char *event,
+ const char *argFormat,
+ ...);
+
+/* We want minimal exposure of this function, so use extern rather than
+ PyAPI_FUNC() to not export the symbol. */
+extern void _PySys_ClearAuditHooks(PyThreadState *tstate);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_SYSMODULE_H */
diff --git a/src/external/windows/include/python/internal/pycore_traceback.h b/src/external/windows/include/python/internal/pycore_traceback.h
index 701a83c1..274e2d0d 100755
--- a/src/external/windows/include/python/internal/pycore_traceback.h
+++ b/src/external/windows/include/python/internal/pycore_traceback.h
@@ -8,7 +8,8 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "pystate.h" /* PyInterpreterState */
+/* Forward declaration */
+struct _is;
/* Write the Python traceback into the file 'fd'. For example:
@@ -56,7 +57,7 @@ PyAPI_FUNC(void) _Py_DumpTraceback(
PyAPI_FUNC(const char*) _Py_DumpTracebackThreads(
int fd,
- PyInterpreterState *interp,
+ struct _is *interp,
PyThreadState *current_tstate);
/* Write a Unicode object into the file descriptor fd. Encode the string to
@@ -88,7 +89,7 @@ PyAPI_FUNC(void) _Py_DumpHexadecimal(
PyAPI_FUNC(PyObject*) _PyTraceBack_FromFrame(
PyObject *tb_next,
- struct _frame *frame);
+ PyFrameObject *frame);
#ifdef __cplusplus
}
diff --git a/src/external/windows/include/python/internal/pycore_tupleobject.h b/src/external/windows/include/python/internal/pycore_tupleobject.h
index 7607921a..10772fe3 100755
--- a/src/external/windows/include/python/internal/pycore_tupleobject.h
+++ b/src/external/windows/include/python/internal/pycore_tupleobject.h
@@ -8,7 +8,7 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "tupleobject.h"
+#include "tupleobject.h" /* _PyTuple_CAST() */
#define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item)
PyAPI_FUNC(PyObject *) _PyTuple_FromArray(PyObject *const *, Py_ssize_t);
diff --git a/src/external/windows/include/python/internal/pycore_warnings.h b/src/external/windows/include/python/internal/pycore_warnings.h
index 94277931..23c50d66 100755
--- a/src/external/windows/include/python/internal/pycore_warnings.h
+++ b/src/external/windows/include/python/internal/pycore_warnings.h
@@ -8,8 +8,6 @@ extern "C" {
# error "this header requires Py_BUILD_CORE define"
#endif
-#include "object.h"
-
struct _warnings_runtime_state {
/* Both 'filters' and 'onceregistry' can be set in warnings.py;
get_warnings_attr() will reset these variables accordingly. */
@@ -19,6 +17,8 @@ struct _warnings_runtime_state {
long filters_version;
};
+extern PyStatus _PyWarnings_InitState(PyThreadState *tstate);
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/iterobject.h b/src/external/windows/include/python/iterobject.h
index 610362ad..8022a6ea 100755
--- a/src/external/windows/include/python/iterobject.h
+++ b/src/external/windows/include/python/iterobject.h
@@ -7,14 +7,13 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PySeqIter_Type;
PyAPI_DATA(PyTypeObject) PyCallIter_Type;
-PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type;
-#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type)
+#define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type)
PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *);
-#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type)
+#define PyCallIter_Check(op) Py_IS_TYPE(op, &PyCallIter_Type)
PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *);
diff --git a/src/external/windows/include/python/listobject.h b/src/external/windows/include/python/listobject.h
index 867f179d..28273493 100755
--- a/src/external/windows/include/python/listobject.h
+++ b/src/external/windows/include/python/listobject.h
@@ -1,16 +1,14 @@
+/* List object interface
-/* List object interface */
+ Another generally useful object type is a list of object pointers.
+ This is a mutable type: the list items can be changed, and items can be
+ added or removed. Out-of-range indices or non-list objects are ignored.
-/*
-Another generally useful object type is a list of object pointers.
-This is a mutable type: the list items can be changed, and items can be
-added or removed. Out-of-range indices or non-list objects are ignored.
-
-*** WARNING *** PyList_SetItem does not increment the new item's reference
-count, but does decrement the reference count of the item it replaces,
-if not nil. It does *decrement* the reference count if it is *not*
-inserted in the list. Similarly, PyList_GetItem does not increment the
-returned item's reference count.
+ WARNING: PyList_SetItem does not increment the new item's reference count,
+ but does decrement the reference count of the item it replaces, if not nil.
+ It does *decrement* the reference count if it is *not* inserted in the list.
+ Similarly, PyList_GetItem does not increment the returned item's reference
+ count.
*/
#ifndef Py_LISTOBJECT_H
@@ -19,60 +17,33 @@ returned item's reference count.
extern "C" {
#endif
-#ifndef Py_LIMITED_API
-typedef struct {
- PyObject_VAR_HEAD
- /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
- PyObject **ob_item;
-
- /* ob_item contains space for 'allocated' elements. The number
- * currently in use is ob_size.
- * Invariants:
- * 0 <= ob_size <= allocated
- * len(list) == ob_size
- * ob_item == NULL implies ob_size == allocated == 0
- * list.sort() temporarily sets allocated to -1 to detect mutations.
- *
- * Items must normally not be NULL, except during construction when
- * the list is not yet visible outside the function that builds it.
- */
- Py_ssize_t allocated;
-} PyListObject;
-#endif
-
PyAPI_DATA(PyTypeObject) PyList_Type;
PyAPI_DATA(PyTypeObject) PyListIter_Type;
PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
-PyAPI_DATA(PyTypeObject) PySortWrapper_Type;
#define PyList_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
-#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type)
+#define PyList_CheckExact(op) Py_IS_TYPE(op, &PyList_Type)
PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size);
PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *);
+
PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t);
PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *);
PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *);
PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
+
PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
+
PyAPI_FUNC(int) PyList_Sort(PyObject *);
PyAPI_FUNC(int) PyList_Reverse(PyObject *);
PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
-PyAPI_FUNC(int) PyList_ClearFreeList(void);
-PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
-#endif
-
-/* Macro, trading safety for speed */
#ifndef Py_LIMITED_API
-#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
-#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
-#define PyList_GET_SIZE(op) (assert(PyList_Check(op)),Py_SIZE(op))
-#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item)
+# define Py_CPYTHON_LISTOBJECT_H
+# include "cpython/listobject.h"
+# undef Py_CPYTHON_LISTOBJECT_H
#endif
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/longobject.h b/src/external/windows/include/python/longobject.h
index 962e22b5..3ff911a1 100755
--- a/src/external/windows/include/python/longobject.h
+++ b/src/external/windows/include/python/longobject.h
@@ -13,7 +13,7 @@ PyAPI_DATA(PyTypeObject) PyLong_Type;
#define PyLong_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
-#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type)
+#define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type)
PyAPI_FUNC(PyObject *) PyLong_FromLong(long);
PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long);
@@ -74,7 +74,7 @@ PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *);
#endif
/* Used by Python/mystrtoul.c, _PyBytes_FromHex(),
- _PyBytes_DecodeEscapeRecode(), etc. */
+ _PyBytes_DecodeEscape(), etc. */
#ifndef Py_LIMITED_API
PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
#endif
diff --git a/src/external/windows/include/python/memoryobject.h b/src/external/windows/include/python/memoryobject.h
index 82c5f5bd..3a7f2c20 100755
--- a/src/external/windows/include/python/memoryobject.h
+++ b/src/external/windows/include/python/memoryobject.h
@@ -11,7 +11,7 @@ PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
#endif
PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
-#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
+#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type)
#ifndef Py_LIMITED_API
/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
diff --git a/src/external/windows/include/python/methodobject.h b/src/external/windows/include/python/methodobject.h
index 2e502f04..a90a2b5f 100755
--- a/src/external/windows/include/python/methodobject.h
+++ b/src/external/windows/include/python/methodobject.h
@@ -13,7 +13,8 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyCFunction_Type;
-#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type)
+#define PyCFunction_CheckExact(op) Py_IS_TYPE(op, &PyCFunction_Type)
+#define PyCFunction_Check(op) PyObject_TypeCheck(op, &PyCFunction_Type)
typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t);
@@ -22,31 +23,14 @@ typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *,
PyObject *const *, Py_ssize_t,
PyObject *);
-typedef PyObject *(*PyNoArgsFunction)(PyObject *);
+typedef PyObject *(*PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *,
+ size_t, PyObject *);
PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *);
PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *);
PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *);
-/* Macros for direct access to these values. Type checks are *not*
- done, so use with care. */
-#ifndef Py_LIMITED_API
-#define PyCFunction_GET_FUNCTION(func) \
- (((PyCFunctionObject *)func) -> m_ml -> ml_meth)
-#define PyCFunction_GET_SELF(func) \
- (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \
- NULL : ((PyCFunctionObject *)func) -> m_self)
-#define PyCFunction_GET_FLAGS(func) \
- (((PyCFunctionObject *)func) -> m_ml -> ml_flags)
-#endif
-PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
-
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func,
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwargs);
-#endif
+Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
struct PyMethodDef {
const char *ml_name; /* The name of the built-in function/method */
@@ -61,6 +45,13 @@ typedef struct PyMethodDef PyMethodDef;
PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
PyObject *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
+PyAPI_FUNC(PyObject *) PyCMethod_New(PyMethodDef *, PyObject *,
+ PyObject *, PyTypeObject *);
+#endif
+
+
/* Flag passed to newmethodobject */
/* #define METH_OLDARGS 0x0000 -- unsupported now */
#define METH_VARARGS 0x0001
@@ -93,36 +84,24 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
#define METH_STACKLESS 0x0000
#endif
-#ifndef Py_LIMITED_API
-typedef struct {
- PyObject_HEAD
- PyMethodDef *m_ml; /* Description of the C function to call */
- PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */
- PyObject *m_module; /* The __module__ attribute, can be anything */
- PyObject *m_weakreflist; /* List of weak references */
- vectorcallfunc vectorcall;
-} PyCFunctionObject;
+/* METH_METHOD means the function stores an
+ * additional reference to the class that defines it;
+ * both self and class are passed to it.
+ * It uses PyCMethodObject instead of PyCFunctionObject.
+ * May not be combined with METH_NOARGS, METH_O, METH_CLASS or METH_STATIC.
+ */
-PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict(
- PyMethodDef *method,
- PyObject *self,
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwargs);
-
-PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords(
- PyMethodDef *method,
- PyObject *self,
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwnames);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+#define METH_METHOD 0x0200
#endif
-PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out);
-PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out);
+
+#define Py_CPYTHON_METHODOBJECT_H
+#include "cpython/methodobject.h"
+#undef Py_CPYTHON_METHODOBJECT_H
+
#endif
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/modsupport.h b/src/external/windows/include/python/modsupport.h
index 51f112b1..79911626 100755
--- a/src/external/windows/include/python/modsupport.h
+++ b/src/external/windows/include/python/modsupport.h
@@ -60,9 +60,12 @@ PyAPI_FUNC(int) _PyArg_UnpackStack(
...);
PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs);
+PyAPI_FUNC(int) _PyArg_NoKwnames(const char *funcname, PyObject *kwnames);
PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
#define _PyArg_NoKeywords(funcname, kwargs) \
((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
+#define _PyArg_NoKwnames(funcname, kwnames) \
+ ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
#define _PyArg_NoPositional(funcname, args) \
((args) == NULL || _PyArg_NoPositional((funcname), (args)))
@@ -136,6 +139,10 @@ void _PyArg_Fini(void);
PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+PyAPI_FUNC(int) PyModule_AddType(PyObject *module, PyTypeObject *type);
+#endif /* Py_LIMITED_API */
#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
diff --git a/src/external/windows/include/python/moduleobject.h b/src/external/windows/include/python/moduleobject.h
index bba2d41f..f02e32bb 100755
--- a/src/external/windows/include/python/moduleobject.h
+++ b/src/external/windows/include/python/moduleobject.h
@@ -10,7 +10,7 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyModule_Type;
#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
-#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
+#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type)
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject *) PyModule_NewObject(
diff --git a/src/external/windows/include/python/node.h b/src/external/windows/include/python/node.h
index a56e98be..8db6298d 100755
--- a/src/external/windows/include/python/node.h
+++ b/src/external/windows/include/python/node.h
@@ -31,7 +31,6 @@ PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n);
#define NCH(n) ((n)->n_nchildren)
#define CHILD(n, i) (&(n)->n_child[i])
-#define RCHILD(n, i) (CHILD(n, NCH(n) + i))
#define TYPE(n) ((n)->n_type)
#define STR(n) ((n)->n_str)
#define LINENO(n) ((n)->n_lineno)
diff --git a/src/external/windows/include/python/object.h b/src/external/windows/include/python/object.h
index 090bf58a..b07337f6 100755
--- a/src/external/windows/include/python/object.h
+++ b/src/external/windows/include/python/object.h
@@ -1,8 +1,6 @@
#ifndef Py_OBJECT_H
#define Py_OBJECT_H
-#include "pymem.h" /* _Py_tracemalloc_config */
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -63,6 +61,9 @@ whose size is determined when the object is allocated.
#error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG
#endif
+/* PyTypeObject structure is defined in cpython/object.h.
+ In Py_LIMITED_API, PyTypeObject is an opaque structure. */
+typedef struct _typeobject PyTypeObject;
#ifdef Py_TRACE_REFS
/* Define pointers to support a doubly-linked list of all live heap objects. */
@@ -104,11 +105,12 @@ whose size is determined when the object is allocated.
typedef struct _object {
_PyObject_HEAD_EXTRA
Py_ssize_t ob_refcnt;
- struct _typeobject *ob_type;
+ PyTypeObject *ob_type;
} PyObject;
/* Cast argument to PyObject* type. */
#define _PyObject_CAST(op) ((PyObject*)(op))
+#define _PyObject_CAST_CONST(op) ((const PyObject*)(op))
typedef struct {
PyObject ob_base;
@@ -122,6 +124,27 @@ typedef struct {
#define Py_TYPE(ob) (_PyObject_CAST(ob)->ob_type)
#define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size)
+static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) {
+ return ob->ob_type == type;
+}
+#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type)
+
+static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
+ ob->ob_refcnt = refcnt;
+}
+#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt)
+
+static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) {
+ ob->ob_type = type;
+}
+#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type)
+
+static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) {
+ ob->ob_size = size;
+}
+#define Py_SET_SIZE(ob, size) _Py_SET_SIZE(_PyVarObject_CAST(ob), size)
+
+
/*
Type objects contain a string containing the type name (to help somewhat
in debugging), the allocation parameters (see PyObject_New() and
@@ -167,15 +190,8 @@ typedef PyObject *(*iternextfunc) (PyObject *);
typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
-typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
-typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
-
-#ifdef Py_LIMITED_API
-/* In Py_LIMITED_API, PyTypeObject is an opaque structure. */
-typedef struct _typeobject PyTypeObject;
-#else
-/* PyTypeObject is defined in cpython/object.h */
-#endif
+typedef PyObject *(*newfunc)(PyTypeObject *, PyObject *, PyObject *);
+typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t);
typedef struct{
int slot; /* slot id, see below */
@@ -195,30 +211,31 @@ PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*);
PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
-PyAPI_FUNC(void*) PyType_GetSlot(struct _typeobject*, int);
+PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int);
+#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+PyAPI_FUNC(PyObject*) PyType_FromModuleAndSpec(PyObject *, PyType_Spec *, PyObject *);
+PyAPI_FUNC(PyObject *) PyType_GetModule(struct _typeobject *);
+PyAPI_FUNC(void *) PyType_GetModuleState(struct _typeobject *);
#endif
/* Generic type check */
-PyAPI_FUNC(int) PyType_IsSubtype(struct _typeobject *, struct _typeobject *);
+PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
#define PyObject_TypeCheck(ob, tp) \
- (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
+ (Py_IS_TYPE(ob, tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
-PyAPI_DATA(struct _typeobject) PyType_Type; /* built-in 'type' */
-PyAPI_DATA(struct _typeobject) PyBaseObject_Type; /* built-in 'object' */
-PyAPI_DATA(struct _typeobject) PySuper_Type; /* built-in 'super' */
+PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
+PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */
+PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */
-PyAPI_FUNC(unsigned long) PyType_GetFlags(struct _typeobject*);
+PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*);
-#define PyType_Check(op) \
- PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS)
-#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type)
-
-PyAPI_FUNC(int) PyType_Ready(struct _typeobject *);
-PyAPI_FUNC(PyObject *) PyType_GenericAlloc(struct _typeobject *, Py_ssize_t);
-PyAPI_FUNC(PyObject *) PyType_GenericNew(struct _typeobject *,
+PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
+PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
+PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
PyObject *, PyObject *);
PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
-PyAPI_FUNC(void) PyType_Modified(struct _typeobject *);
+PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
/* Generic operations on objects */
PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
@@ -235,8 +252,7 @@ PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *);
-PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *,
- PyObject *, PyObject *);
+PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *);
#endif
@@ -290,7 +306,9 @@ given type object has a specified feature.
/* Set if the type implements the vectorcall protocol (PEP 590) */
#ifndef Py_LIMITED_API
-#define _Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
+#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
+// Backwards compatibility alias for API that was provisional in Python 3.8
+#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL
#endif
/* Set if the type is 'ready' -- fully initialized */
@@ -337,19 +355,14 @@ given type object has a specified feature.
/* NOTE: The following flags reuse lower bits (removed as part of the
* Python 3.0 transition). */
-/* The following flag is kept for compatibility. Starting with 3.8,
- * binary compatibility of C extensions accross feature releases of
+/* The following flag is kept for compatibility. Starting with 3.8,
+ * binary compatibility of C extensions across feature releases of
* Python is not supported anymore, except when using the stable ABI.
*/
/* Type structure has tp_finalize member (3.4) */
#define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0)
-#ifdef Py_LIMITED_API
-# define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0)
-#endif
-#define PyType_FastSubclass(t,f) PyType_HasFeature(t,f)
-
/*
The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement
@@ -379,94 +392,33 @@ decision that's up to the implementer of each new type so if you want,
you can count such references to the type object.)
*/
-/* First define a pile of simple helper macros, one set per special
- * build symbol. These either expand to the obvious things, or to
- * nothing at all when the special mode isn't in effect. The main
- * macros can later be defined just once then, yet expand to different
- * things depending on which special build options are and aren't in effect.
- * Trust me : while painful, this is 20x easier to understand than,
- * e.g, defining _Py_NewReference five different times in a maze of nested
- * #ifdefs (we used to do that -- it was impenetrable).
- */
#ifdef Py_REF_DEBUG
PyAPI_DATA(Py_ssize_t) _Py_RefTotal;
PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno,
PyObject *op);
-PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void);
-#define _Py_INC_REFTOTAL _Py_RefTotal++
-#define _Py_DEC_REFTOTAL _Py_RefTotal--
-
-/* Py_REF_DEBUG also controls the display of refcounts and memory block
- * allocations at the interactive prompt and at interpreter shutdown
- */
-PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void);
-#else
-#define _Py_INC_REFTOTAL
-#define _Py_DEC_REFTOTAL
#endif /* Py_REF_DEBUG */
-#ifdef COUNT_ALLOCS
-PyAPI_FUNC(void) _Py_inc_count(struct _typeobject *);
-PyAPI_FUNC(void) _Py_dec_count(struct _typeobject *);
-#define _Py_INC_TPALLOCS(OP) _Py_inc_count(Py_TYPE(OP))
-#define _Py_INC_TPFREES(OP) _Py_dec_count(Py_TYPE(OP))
-#define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees--
-#define _Py_COUNT_ALLOCS_COMMA ,
-#else
-#define _Py_INC_TPALLOCS(OP)
-#define _Py_INC_TPFREES(OP)
-#define _Py_DEC_TPFREES(OP)
-#define _Py_COUNT_ALLOCS_COMMA
-#endif /* COUNT_ALLOCS */
-
-/* Update the Python traceback of an object. This function must be called
- when a memory block is reused from a free list. */
-PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op);
-
-#ifdef Py_TRACE_REFS
-/* Py_TRACE_REFS is such major surgery that we call external routines. */
-PyAPI_FUNC(void) _Py_NewReference(PyObject *);
-PyAPI_FUNC(void) _Py_ForgetReference(PyObject *);
-PyAPI_FUNC(void) _Py_PrintReferences(FILE *);
-PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *);
-PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
-#else
-/* Without Py_TRACE_REFS, there's little enough to do that we expand code
- inline. */
-static inline void _Py_NewReference(PyObject *op)
-{
- if (_Py_tracemalloc_config.tracing) {
- _PyTraceMalloc_NewReference(op);
- }
- _Py_INC_TPALLOCS(op);
- _Py_INC_REFTOTAL;
- Py_REFCNT(op) = 1;
-}
-
-static inline void _Py_ForgetReference(PyObject *op)
-{
- (void)op; /* may be unused, shut up -Wunused-parameter */
- _Py_INC_TPFREES(op);
-}
-#endif /* !Py_TRACE_REFS */
-
-
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
static inline void _Py_INCREF(PyObject *op)
{
- _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal++;
+#endif
op->ob_refcnt++;
}
#define Py_INCREF(op) _Py_INCREF(_PyObject_CAST(op))
-static inline void _Py_DECREF(const char *filename, int lineno,
- PyObject *op)
+static inline void _Py_DECREF(
+#ifdef Py_REF_DEBUG
+ const char *filename, int lineno,
+#endif
+ PyObject *op)
{
- (void)filename; /* may be unused, shut up -Wunused-parameter */
- (void)lineno; /* may be unused, shut up -Wunused-parameter */
- _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
if (--op->ob_refcnt != 0) {
#ifdef Py_REF_DEBUG
if (op->ob_refcnt < 0) {
@@ -479,7 +431,11 @@ static inline void _Py_DECREF(const char *filename, int lineno,
}
}
-#define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
+#ifdef Py_REF_DEBUG
+# define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op))
+#else
+# define Py_DECREF(op) _Py_DECREF(_PyObject_CAST(op))
+#endif
/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
@@ -654,99 +610,38 @@ it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at
times.
*/
-
-/* Trashcan mechanism, thanks to Christian Tismer.
-
-When deallocating a container object, it's possible to trigger an unbounded
-chain of deallocations, as each Py_DECREF in turn drops the refcount on "the
-next" object in the chain to 0. This can easily lead to stack overflows,
-especially in threads (which typically have less stack space to work with).
-
-A container object can avoid this by bracketing the body of its tp_dealloc
-function with a pair of macros:
-
-static void
-mytype_dealloc(mytype *p)
-{
- ... declarations go here ...
-
- PyObject_GC_UnTrack(p); // must untrack first
- Py_TRASHCAN_BEGIN(p, mytype_dealloc)
- ... The body of the deallocator goes here, including all calls ...
- ... to Py_DECREF on contained objects. ...
- Py_TRASHCAN_END // there should be no code after this
-}
-
-CAUTION: Never return from the middle of the body! If the body needs to
-"get out early", put a label immediately before the Py_TRASHCAN_END
-call, and goto it. Else the call-depth counter (see below) will stay
-above 0 forever, and the trashcan will never get emptied.
-
-How it works: The BEGIN macro increments a call-depth counter. So long
-as this counter is small, the body of the deallocator is run directly without
-further ado. But if the counter gets large, it instead adds p to a list of
-objects to be deallocated later, skips the body of the deallocator, and
-resumes execution after the END macro. The tp_dealloc routine then returns
-without deallocating anything (and so unbounded call-stack depth is avoided).
-
-When the call stack finishes unwinding again, code generated by the END macro
-notices this, and calls another routine to deallocate all the objects that
-may have been added to the list of deferred deallocations. In effect, a
-chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces,
-with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL.
-
-Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base
-class, we need to ensure that the trashcan is only triggered on the tp_dealloc
-of the actual class being deallocated. Otherwise we might end up with a
-partially-deallocated object. To check this, the tp_dealloc function must be
-passed as second argument to Py_TRASHCAN_BEGIN().
-*/
-
-/* The new thread-safe private API, invoked by the macros below. */
-PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*);
-PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
-
-#define PyTrash_UNWIND_LEVEL 50
-
-#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
- do { \
- PyThreadState *_tstate = NULL; \
- /* If "cond" is false, then _tstate remains NULL and the deallocator \
- * is run normally without involving the trashcan */ \
- if (cond) { \
- _tstate = PyThreadState_GET(); \
- if (_tstate->trash_delete_nesting >= PyTrash_UNWIND_LEVEL) { \
- /* Store the object (to be deallocated later) and jump past \
- * Py_TRASHCAN_END, skipping the body of the deallocator */ \
- _PyTrash_thread_deposit_object(_PyObject_CAST(op)); \
- break; \
- } \
- ++_tstate->trash_delete_nesting; \
- }
- /* The body of the deallocator is here. */
-#define Py_TRASHCAN_END \
- if (_tstate) { \
- --_tstate->trash_delete_nesting; \
- if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \
- _PyTrash_thread_destroy_chain(); \
- } \
- } while (0);
-
-#define Py_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_BEGIN_CONDITION(op, \
- Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))
-
-/* For backwards compatibility, these macros enable the trashcan
- * unconditionally */
-#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1)
-#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END
-
-
#ifndef Py_LIMITED_API
# define Py_CPYTHON_OBJECT_H
# include "cpython/object.h"
# undef Py_CPYTHON_OBJECT_H
#endif
+
+static inline int
+PyType_HasFeature(PyTypeObject *type, unsigned long feature)
+{
+ unsigned long flags;
+#ifdef Py_LIMITED_API
+ // PyTypeObject is opaque in the limited C API
+ flags = PyType_GetFlags(type);
+#else
+ flags = type->tp_flags;
+#endif
+ return ((flags & feature) != 0);
+}
+
+#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag)
+
+static inline int _PyType_Check(PyObject *op) {
+ return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
+}
+#define PyType_Check(op) _PyType_Check(_PyObject_CAST(op))
+
+static inline int _PyType_CheckExact(PyObject *op) {
+ return Py_IS_TYPE(op, &PyType_Type);
+}
+#define PyType_CheckExact(op) _PyType_CheckExact(_PyObject_CAST(op))
+
#ifdef __cplusplus
}
#endif
diff --git a/src/external/windows/include/python/objimpl.h b/src/external/windows/include/python/objimpl.h
index 02f460b6..3045213e 100755
--- a/src/external/windows/include/python/objimpl.h
+++ b/src/external/windows/include/python/objimpl.h
@@ -122,103 +122,32 @@ PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *,
PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *);
PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
-#define PyObject_New(type, typeobj) \
- ( (type *) _PyObject_New(typeobj) )
+#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
+
+// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly
+// PyObject_MALLOC() with _PyObject_SIZE().
+#define PyObject_NEW(type, typeobj) PyObject_New(type, typeobj)
+
#define PyObject_NewVar(type, typeobj, n) \
( (type *) _PyObject_NewVar((typeobj), (n)) )
-/* Inline functions trading binary compatibility for speed:
- PyObject_INIT() is the fast version of PyObject_Init(), and
- PyObject_INIT_VAR() is the fast version of PyObject_InitVar.
- See also pymem.h.
+// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly
+// PyObject_MALLOC() with _PyObject_VAR_SIZE().
+#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, typeobj, n)
- These inline functions expect non-NULL object pointers. */
-static inline PyObject*
-_PyObject_INIT(PyObject *op, PyTypeObject *typeobj)
-{
- assert(op != NULL);
- Py_TYPE(op) = typeobj;
- if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) {
- Py_INCREF(typeobj);
- }
- _Py_NewReference(op);
- return op;
-}
-#define PyObject_INIT(op, typeobj) \
- _PyObject_INIT(_PyObject_CAST(op), (typeobj))
-
-static inline PyVarObject*
-_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size)
-{
- assert(op != NULL);
- Py_SIZE(op) = size;
- PyObject_INIT((PyObject *)op, typeobj);
- return op;
-}
-
-#define PyObject_INIT_VAR(op, typeobj, size) \
- _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size))
-
-#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
-
-/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
- vrbl-size object with nitems items, exclusive of gc overhead (if any). The
- value is rounded up to the closest multiple of sizeof(void *), in order to
- ensure that pointer fields at the end of the object are correctly aligned
- for the platform (this is of special importance for subclasses of, e.g.,
- str or int, so that pointers can be stored after the embedded data).
-
- Note that there's no memory wastage in doing this, as malloc has to
- return (at worst) pointer-aligned memory anyway.
-*/
-#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
-# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
+#ifdef Py_LIMITED_API
+/* Define PyObject_INIT() and PyObject_INIT_VAR() as aliases to PyObject_Init()
+ and PyObject_InitVar() in the limited C API for compatibility with the
+ CPython C API. */
+# define PyObject_INIT(op, typeobj) \
+ PyObject_Init(_PyObject_CAST(op), (typeobj))
+# define PyObject_INIT_VAR(op, typeobj, size) \
+ PyObject_InitVar(_PyVarObject_CAST(op), (typeobj), (size))
+#else
+/* PyObject_INIT() and PyObject_INIT_VAR() are defined in cpython/objimpl.h */
#endif
-#define _PyObject_VAR_SIZE(typeobj, nitems) \
- _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
- (nitems)*(typeobj)->tp_itemsize, \
- SIZEOF_VOID_P)
-
-#define PyObject_NEW(type, typeobj) \
-( (type *) PyObject_Init( \
- (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) )
-
-#define PyObject_NEW_VAR(type, typeobj, n) \
-( (type *) PyObject_InitVar( \
- (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\
- (typeobj), (n)) )
-
-/* This example code implements an object constructor with a custom
- allocator, where PyObject_New is inlined, and shows the important
- distinction between two steps (at least):
- 1) the actual allocation of the object storage;
- 2) the initialization of the Python specific fields
- in this storage with PyObject_{Init, InitVar}.
-
- PyObject *
- YourObject_New(...)
- {
- PyObject *op;
-
- op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
- if (op == NULL)
- return PyErr_NoMemory();
-
- PyObject_Init(op, &YourTypeStruct);
-
- op->ob_field = value;
- ...
- return op;
- }
-
- Note that in C++, the use of the new operator usually implies that
- the 1st step is performed automatically for you, so in a C++ class
- constructor you would start directly with PyObject_Init/InitVar
-*/
-
-
/*
* Garbage Collection Support
@@ -257,6 +186,8 @@ PyAPI_FUNC(void) PyObject_GC_Del(void *);
#define PyObject_GC_NewVar(type, typeobj, n) \
( (type *) _PyObject_GC_NewVar((typeobj), (n)) )
+PyAPI_FUNC(int) PyObject_GC_IsTracked(PyObject *);
+PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *);
/* Utility macro to help write tp_traverse functions.
* To use this macro, the tp_traverse function must name its arguments
diff --git a/src/external/windows/include/python/odictobject.h b/src/external/windows/include/python/odictobject.h
index a5570cba..881e7ebc 100755
--- a/src/external/windows/include/python/odictobject.h
+++ b/src/external/windows/include/python/odictobject.h
@@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyODictItems_Type;
PyAPI_DATA(PyTypeObject) PyODictValues_Type;
#define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type)
-#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type)
+#define PyODict_CheckExact(op) Py_IS_TYPE(op, &PyODict_Type)
#define PyODict_SIZE(op) PyDict_GET_SIZE((op))
PyAPI_FUNC(PyObject *) PyODict_New(void);
diff --git a/src/external/windows/include/python/opcode.h b/src/external/windows/include/python/opcode.h
index cd8f3ad1..f86c2f93 100755
--- a/src/external/windows/include/python/opcode.h
+++ b/src/external/windows/include/python/opcode.h
@@ -30,10 +30,11 @@ extern "C" {
#define BINARY_TRUE_DIVIDE 27
#define INPLACE_FLOOR_DIVIDE 28
#define INPLACE_TRUE_DIVIDE 29
+#define RERAISE 48
+#define WITH_EXCEPT_START 49
#define GET_AITER 50
#define GET_ANEXT 51
#define BEFORE_ASYNC_WITH 52
-#define BEGIN_FINALLY 53
#define END_ASYNC_FOR 54
#define INPLACE_ADD 55
#define INPLACE_SUBTRACT 56
@@ -53,19 +54,18 @@ extern "C" {
#define LOAD_BUILD_CLASS 71
#define YIELD_FROM 72
#define GET_AWAITABLE 73
+#define LOAD_ASSERTION_ERROR 74
#define INPLACE_LSHIFT 75
#define INPLACE_RSHIFT 76
#define INPLACE_AND 77
#define INPLACE_XOR 78
#define INPLACE_OR 79
-#define WITH_CLEANUP_START 81
-#define WITH_CLEANUP_FINISH 82
+#define LIST_TO_TUPLE 82
#define RETURN_VALUE 83
#define IMPORT_STAR 84
#define SETUP_ANNOTATIONS 85
#define YIELD_VALUE 86
#define POP_BLOCK 87
-#define END_FINALLY 88
#define POP_EXCEPT 89
#define HAVE_ARGUMENT 90
#define STORE_NAME 90
@@ -94,6 +94,9 @@ extern "C" {
#define POP_JUMP_IF_FALSE 114
#define POP_JUMP_IF_TRUE 115
#define LOAD_GLOBAL 116
+#define IS_OP 117
+#define CONTAINS_OP 118
+#define JUMP_IF_NOT_EXC_MATCH 121
#define SETUP_FINALLY 122
#define LOAD_FAST 124
#define STORE_FAST 125
@@ -114,20 +117,16 @@ extern "C" {
#define SET_ADD 146
#define MAP_ADD 147
#define LOAD_CLASSDEREF 148
-#define BUILD_LIST_UNPACK 149
-#define BUILD_MAP_UNPACK 150
-#define BUILD_MAP_UNPACK_WITH_CALL 151
-#define BUILD_TUPLE_UNPACK 152
-#define BUILD_SET_UNPACK 153
#define SETUP_ASYNC_WITH 154
#define FORMAT_VALUE 155
#define BUILD_CONST_KEY_MAP 156
#define BUILD_STRING 157
-#define BUILD_TUPLE_UNPACK_WITH_CALL 158
#define LOAD_METHOD 160
#define CALL_METHOD 161
-#define CALL_FINALLY 162
-#define POP_FINALLY 163
+#define LIST_EXTEND 162
+#define SET_UPDATE 163
+#define DICT_MERGE 164
+#define DICT_UPDATE 165
/* EXCEPT_HANDLER is a special, implicit block type which is created when
entering an except handler. It is not an opcode but we define it here
@@ -135,11 +134,6 @@ extern "C" {
remaining private.*/
#define EXCEPT_HANDLER 257
-
-enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE,
- PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN,
- PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
-
#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/patchlevel.h b/src/external/windows/include/python/patchlevel.h
index 627a5337..afb4c012 100755
--- a/src/external/windows/include/python/patchlevel.h
+++ b/src/external/windows/include/python/patchlevel.h
@@ -17,13 +17,13 @@
/* Version parsed out into numeric values */
/*--start constants--*/
#define PY_MAJOR_VERSION 3
-#define PY_MINOR_VERSION 8
-#define PY_MICRO_VERSION 5
+#define PY_MINOR_VERSION 9
+#define PY_MICRO_VERSION 7
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
#define PY_RELEASE_SERIAL 0
/* Version as a string */
-#define PY_VERSION "3.8.5"
+#define PY_VERSION "3.9.7"
/*--end constants--*/
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/src/external/windows/include/python/picklebufobject.h b/src/external/windows/include/python/picklebufobject.h
index 1f13a98a..5d0b0cfa 100755
--- a/src/external/windows/include/python/picklebufobject.h
+++ b/src/external/windows/include/python/picklebufobject.h
@@ -12,7 +12,7 @@ extern "C" {
PyAPI_DATA(PyTypeObject) PyPickleBuffer_Type;
-#define PyPickleBuffer_Check(op) (Py_TYPE(op) == &PyPickleBuffer_Type)
+#define PyPickleBuffer_Check(op) Py_IS_TYPE(op, &PyPickleBuffer_Type)
/* Create a PickleBuffer redirecting to the given buffer-enabled object */
PyAPI_FUNC(PyObject *) PyPickleBuffer_FromObject(PyObject *);
diff --git a/src/external/windows/include/python/py_curses.h b/src/external/windows/include/python/py_curses.h
index 4bcd27ea..b65aaa7b 100755
--- a/src/external/windows/include/python/py_curses.h
+++ b/src/external/windows/include/python/py_curses.h
@@ -64,7 +64,7 @@ typedef struct {
char *encoding;
} PyCursesWindowObject;
-#define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type)
+#define PyCursesWindow_Check(v) Py_IS_TYPE(v, &PyCursesWindow_Type)
#define PyCurses_CAPSULE_NAME "_curses._C_API"
@@ -97,4 +97,3 @@ static const char catchall_NULL[] = "curses function returned NULL";
#endif /* !defined(Py_CURSES_H) */
-
diff --git a/src/external/windows/include/python/pycapsule.h b/src/external/windows/include/python/pycapsule.h
index 358501e3..9387a1c7 100755
--- a/src/external/windows/include/python/pycapsule.h
+++ b/src/external/windows/include/python/pycapsule.h
@@ -22,7 +22,7 @@ PyAPI_DATA(PyTypeObject) PyCapsule_Type;
typedef void (*PyCapsule_Destructor)(PyObject *);
-#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type)
+#define PyCapsule_CheckExact(op) Py_IS_TYPE(op, &PyCapsule_Type)
PyAPI_FUNC(PyObject *) PyCapsule_New(
diff --git a/src/external/windows/include/python/pyconfig.h b/src/external/windows/include/python/pyconfig.h
index 8c77b4f7..0d5ac77f 100755
--- a/src/external/windows/include/python/pyconfig.h
+++ b/src/external/windows/include/python/pyconfig.h
@@ -135,9 +135,9 @@ WIN32 is still required for the locale module.
#endif /* MS_WIN64 */
/* set the version macros for the windows headers */
-/* Python 3.5+ requires Windows Vista or greater */
-#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */
-#define Py_NTDDI NTDDI_VISTA
+/* Python 3.9+ requires Windows 8 or greater */
+#define Py_WINVER 0x0602 /* _WIN32_WINNT_WIN8 */
+#define Py_NTDDI NTDDI_WIN8
/* We only set these values when building Python - we don't want to force
these values on extensions, as that will affect the prototypes and
@@ -193,12 +193,6 @@ typedef int pid_t;
#define Py_IS_NAN _isnan
#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X))
#define Py_IS_FINITE(X) _finite(X)
-#define copysign _copysign
-
-/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/
-#if _MSC_VER >= 1400 && _MSC_VER < 1600
-#define HAVE_SXS 1
-#endif
/* define some ANSI types that are not defined in earlier Win headers */
#if _MSC_VER >= 1200
@@ -274,11 +268,11 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
file in their Makefile (other compilers are
generally taken care of by distutils.) */
# if defined(_DEBUG)
-# pragma comment(lib,"python38_d.lib")
+# pragma comment(lib,"python39_d.lib")
# elif defined(Py_LIMITED_API)
# pragma comment(lib,"python3.lib")
# else
-# pragma comment(lib,"python38.lib")
+# pragma comment(lib,"python39.lib")
# endif /* _DEBUG */
# endif /* _MSC_VER */
# endif /* Py_BUILD_CORE */
@@ -296,7 +290,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
# define SIZEOF_HKEY 8
# define SIZEOF_SIZE_T 8
/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff
- sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t).
+ sizeof(off_t) > sizeof(long), and sizeof(long long) >= sizeof(off_t).
On Win64 the second condition is not true, but if fpos_t replaces off_t
then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64
should define this. */
@@ -688,4 +682,6 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
/* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */
#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1
+#define PLATLIBDIR "lib"
+
#endif /* !Py_CONFIG_H */
diff --git a/src/external/windows/include/python/pyctype.h b/src/external/windows/include/python/pyctype.h
index ee22795a..8f4bd79c 100755
--- a/src/external/windows/include/python/pyctype.h
+++ b/src/external/windows/include/python/pyctype.h
@@ -1,6 +1,9 @@
#ifndef Py_LIMITED_API
#ifndef PYCTYPE_H
#define PYCTYPE_H
+#ifdef __cplusplus
+extern "C" {
+#endif
#define PY_CTF_LOWER 0x01
#define PY_CTF_UPPER 0x02
@@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256];
#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
#define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)])
+#ifdef __cplusplus
+}
+#endif
#endif /* !PYCTYPE_H */
#endif /* !Py_LIMITED_API */
diff --git a/src/external/windows/include/python/pydebug.h b/src/external/windows/include/python/pydebug.h
index c983d0a9..e34cf907 100755
--- a/src/external/windows/include/python/pydebug.h
+++ b/src/external/windows/include/python/pydebug.h
@@ -5,8 +5,6 @@
extern "C" {
#endif
-/* These global variable are defined in pylifecycle.c */
-/* XXX (ncoghlan): move these declarations to pylifecycle.h? */
PyAPI_DATA(int) Py_DebugFlag;
PyAPI_DATA(int) Py_VerboseFlag;
PyAPI_DATA(int) Py_QuietFlag;
diff --git a/src/external/windows/include/python/pyerrors.h b/src/external/windows/include/python/pyerrors.h
index 6b7895f4..bd634e71 100755
--- a/src/external/windows/include/python/pyerrors.h
+++ b/src/external/windows/include/python/pyerrors.h
@@ -4,6 +4,8 @@
extern "C" {
#endif
+#include // va_list
+
/* Error handling definitions */
PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
@@ -21,7 +23,11 @@ PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **);
PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
#endif
-/* Defined in Python/pylifecycle.c */
+/* Defined in Python/pylifecycle.c
+
+ The Py_FatalError() function is replaced with a macro which logs
+ automatically the name of the current function, unless the Py_LIMITED_API
+ macro is defined. */
PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message);
#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
@@ -54,11 +60,11 @@ PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
#define PyExceptionInstance_Check(x) \
- PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS)
+ PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *);
-#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type))
+#define PyExceptionInstance_Class(x) ((PyObject*)Py_TYPE(x))
/* Predefined exceptions */
@@ -303,21 +309,6 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
const char *reason /* UTF-8 encoded string */
);
-/* These APIs aren't really part of the error implementation, but
- often needed to format error messages; the native C lib APIs are
- not available on all platforms, which is why we provide emulations
- for those platforms in Python/mysnprintf.c,
- WARNING: The return value of snprintf varies across platforms; do
- not rely on any particular behavior; eventually the C99 defn may
- be reliable.
-*/
-#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
-# define HAVE_SNPRINTF
-# define snprintf _snprintf
-# define vsnprintf _vsnprintf
-#endif
-
-#include
PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...)
Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
diff --git a/src/external/windows/include/python/pyfpe.h b/src/external/windows/include/python/pyfpe.h
index 30baacaa..d5a52617 100755
--- a/src/external/windows/include/python/pyfpe.h
+++ b/src/external/windows/include/python/pyfpe.h
@@ -1,5 +1,7 @@
#ifndef Py_PYFPE_H
#define Py_PYFPE_H
+/* Header excluded from the stable API */
+#ifndef Py_LIMITED_API
/* These macros used to do something when Python was built with --with-fpectl,
* but support for that was dropped in 3.7. We continue to define them though,
@@ -9,4 +11,5 @@
#define PyFPE_START_PROTECT(err_string, leave_stmt)
#define PyFPE_END_PROTECT(v)
+#endif /* !defined(Py_LIMITED_API) */
#endif /* !Py_PYFPE_H */
diff --git a/src/external/windows/include/python/pyframe.h b/src/external/windows/include/python/pyframe.h
new file mode 100755
index 00000000..a2576902
--- /dev/null
+++ b/src/external/windows/include/python/pyframe.h
@@ -0,0 +1,22 @@
+/* Limited C API of PyFrame API
+ *
+ * Include "frameobject.h" to get the PyFrameObject structure.
+ */
+
+#ifndef Py_PYFRAME_H
+#define Py_PYFRAME_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _frame PyFrameObject;
+
+/* Return the line of code the frame is currently executing. */
+PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
+
+PyAPI_FUNC(PyCodeObject *) PyFrame_GetCode(PyFrameObject *frame);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_PYFRAME_H */
diff --git a/src/external/windows/include/python/pyhash.h b/src/external/windows/include/python/pyhash.h
index c6a14ffb..fe42fa8c 100755
--- a/src/external/windows/include/python/pyhash.h
+++ b/src/external/windows/include/python/pyhash.h
@@ -8,7 +8,9 @@ extern "C" {
/* Helpers for hash functions */
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double);
-PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*);
+PyAPI_FUNC(Py_hash_t) _Py_HashPointer(const void*);
+// Similar to _Py_HashPointer(), but don't replace -1 with -2
+PyAPI_FUNC(Py_hash_t) _Py_HashPointerRaw(const void*);
PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t);
#endif
diff --git a/src/external/windows/include/python/pylifecycle.h b/src/external/windows/include/python/pylifecycle.h
index d1b79ae6..2084b26b 100755
--- a/src/external/windows/include/python/pylifecycle.h
+++ b/src/external/windows/include/python/pylifecycle.h
@@ -32,6 +32,8 @@ PyAPI_FUNC(void) _Py_NO_RETURN Py_Exit(int);
/* Bootstrap __main__ (defined in Modules/main.c) */
PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
+PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv);
+
PyAPI_FUNC(int) Py_BytesMain(int argc, char **argv);
/* In pathconfig.c */
diff --git a/src/external/windows/include/python/pymacro.h b/src/external/windows/include/python/pymacro.h
index acd14da4..7bfee70e 100755
--- a/src/external/windows/include/python/pymacro.h
+++ b/src/external/windows/include/python/pymacro.h
@@ -100,7 +100,33 @@
# define Py_UNUSED(name) _unused_ ## name
#endif
-#define Py_UNREACHABLE() \
+#if defined(RANDALL_WAS_HERE)
+# define Py_UNREACHABLE() \
+ Py_FatalError( \
+ "If you're seeing this, the code is in what I thought was\n" \
+ "an unreachable state.\n\n" \
+ "I could give you advice for what to do, but honestly, why\n" \
+ "should you trust me? I clearly screwed this up. I'm writing\n" \
+ "a message that should never appear, yet I know it will\n" \
+ "probably appear someday.\n\n" \
+ "On a deep level, I know I'm not up to this task.\n" \
+ "I'm so sorry.\n" \
+ "https://xkcd.com/2200")
+#elif defined(Py_DEBUG)
+# define Py_UNREACHABLE() \
+ Py_FatalError( \
+ "We've reached an unreachable state. Anything is possible.\n" \
+ "The limits were in our heads all along. Follow your dreams.\n" \
+ "https://xkcd.com/2200")
+#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+# define Py_UNREACHABLE() __builtin_unreachable()
+#elif defined(__clang__) || defined(__INTEL_COMPILER)
+# define Py_UNREACHABLE() __builtin_unreachable()
+#elif defined(_MSC_VER)
+# define Py_UNREACHABLE() __assume(0)
+#else
+# define Py_UNREACHABLE() \
Py_FatalError("Unreachable C code path reached")
+#endif
#endif /* Py_PYMACRO_H */
diff --git a/src/external/windows/include/python/pymath.h b/src/external/windows/include/python/pymath.h
index f4a7f852..4d305990 100755
--- a/src/external/windows/include/python/pymath.h
+++ b/src/external/windows/include/python/pymath.h
@@ -125,7 +125,7 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short);
/* Py_IS_FINITE(X)
* Return 1 if float or double arg is neither infinite nor NAN, else 0.
- * Some compilers (e.g. VisualStudio) have intrisics for this, so a special
+ * Some compilers (e.g. VisualStudio) have intrinsics for this, so a special
* macro for this particular test is useful
* Note: PC/pyconfig.h defines Py_IS_FINITE as _finite
*/
@@ -227,4 +227,12 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short);
* behavior. */
#define _Py_InIntegralTypeRange(type, v) (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type))
+/* Return the smallest integer k such that n < 2**k, or 0 if n == 0.
+ * Equivalent to floor(log2(x))+1. Also equivalent to: bitwidth_of_type -
+ * count_leading_zero_bits(x)
+ */
+#ifndef Py_LIMITED_API
+PyAPI_FUNC(unsigned int) _Py_bit_length(unsigned long d);
+#endif
+
#endif /* Py_PYMATH_H */
diff --git a/src/external/windows/include/python/pymem.h b/src/external/windows/include/python/pymem.h
index c1837db7..a2c8c255 100755
--- a/src/external/windows/include/python/pymem.h
+++ b/src/external/windows/include/python/pymem.h
@@ -101,41 +101,6 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr);
#define PyMem_Del PyMem_Free
#define PyMem_DEL PyMem_FREE
-/* bpo-35053: expose _Py_tracemalloc_config for performance:
- _Py_NewReference() needs an efficient check to test if tracemalloc is
- tracing.
-
- It has to be defined in pymem.h, before object.h is included. */
-struct _PyTraceMalloc_Config {
- /* Module initialized?
- Variable protected by the GIL */
- enum {
- TRACEMALLOC_NOT_INITIALIZED,
- TRACEMALLOC_INITIALIZED,
- TRACEMALLOC_FINALIZED
- } initialized;
-
- /* Is tracemalloc tracing memory allocations?
- Variable protected by the GIL */
- int tracing;
-
- /* limit of the number of frames in a traceback, 1 by default.
- Variable protected by the GIL. */
- int max_nframe;
-
- /* use domain in trace key?
- Variable protected by the GIL. */
- int use_domain;
-};
-
-PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config;
-
-#define _PyTraceMalloc_Config_INIT \
- {.initialized = TRACEMALLOC_NOT_INITIALIZED, \
- .tracing = 0, \
- .max_nframe = 1, \
- .use_domain = 0}
-
#ifndef Py_LIMITED_API
# define Py_CPYTHON_PYMEM_H
diff --git a/src/external/windows/include/python/pyport.h b/src/external/windows/include/python/pyport.h
index 471cb7f1..49a67d90 100755
--- a/src/external/windows/include/python/pyport.h
+++ b/src/external/windows/include/python/pyport.h
@@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t;
/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf
* format to convert an argument with the width of a size_t or Py_ssize_t.
- * C99 introduced "z" for this purpose, but not all platforms support that;
- * e.g., MS compilers use "I" instead.
+ * C99 introduced "z" for this purpose, but old MSVCs had not supported it.
+ * Since MSVC supports "z" since (at least) 2015, we can just use "z"
+ * for new code.
*
* These "high level" Python format functions interpret "z" correctly on
* all platforms (Python interprets the format string itself, and does whatever
@@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t;
* Py_ssize_t index;
* fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index);
*
- * That will expand to %ld, or %Id, or to something else correct for a
- * Py_ssize_t on the platform.
+ * That will expand to %zd or to something else correct for a Py_ssize_t on
+ * the platform.
*/
#ifndef PY_FORMAT_SIZE_T
-# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__)
-# define PY_FORMAT_SIZE_T ""
-# elif SIZEOF_SIZE_T == SIZEOF_LONG
-# define PY_FORMAT_SIZE_T "l"
-# elif defined(MS_WINDOWS)
-# define PY_FORMAT_SIZE_T "I"
-# else
-# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T"
-# endif
+# define PY_FORMAT_SIZE_T "z"
#endif
/* Py_LOCAL can be used instead of static to get the fastest possible calling
@@ -520,6 +513,26 @@ extern "C" {
#define Py_DEPRECATED(VERSION_UNUSED)
#endif
+#if defined(__clang__)
+#define _Py_COMP_DIAG_PUSH _Pragma("clang diagnostic push")
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \
+ _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
+#define _Py_COMP_DIAG_POP _Pragma("clang diagnostic pop")
+#elif defined(__GNUC__) \
+ && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6))
+#define _Py_COMP_DIAG_PUSH _Pragma("GCC diagnostic push")
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \
+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
+#define _Py_COMP_DIAG_POP _Pragma("GCC diagnostic pop")
+#elif defined(_MSC_VER)
+#define _Py_COMP_DIAG_PUSH __pragma(warning(push))
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS __pragma(warning(disable: 4996))
+#define _Py_COMP_DIAG_POP __pragma(warning(pop))
+#else
+#define _Py_COMP_DIAG_PUSH
+#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS
+#define _Py_COMP_DIAG_POP
+#endif
/* _Py_HOT_FUNCTION
* The hot attribute on a function is used to inform the compiler that the
@@ -645,16 +658,18 @@ extern char * _getpty(int *, int, mode_t, int);
# define HAVE_DECLSPEC_DLL
#endif
+#include "exports.h"
+
/* only get special linkage if built as shared or platform is Cygwin */
#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__)
# if defined(HAVE_DECLSPEC_DLL)
# if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
-# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE
-# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE
+# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE
+# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE
/* module init functions inside the core need no external linkage */
/* except for Cygwin to handle embedding */
# if defined(__CYGWIN__)
-# define PyMODINIT_FUNC __declspec(dllexport) PyObject*
+# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
# else /* __CYGWIN__ */
# define PyMODINIT_FUNC PyObject*
# endif /* __CYGWIN__ */
@@ -665,14 +680,14 @@ extern char * _getpty(int *, int, mode_t, int);
/* failures similar to those described at the bottom of 4.1: */
/* http://docs.python.org/extending/windows.html#a-cookbook-approach */
# if !defined(__CYGWIN__)
-# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE
+# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE
# endif /* !__CYGWIN__ */
-# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE
+# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE
/* module init functions outside the core must be exported */
# if defined(__cplusplus)
-# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject*
+# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject*
# else /* __cplusplus */
-# define PyMODINIT_FUNC __declspec(dllexport) PyObject*
+# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
# endif /* __cplusplus */
# endif /* Py_BUILD_CORE */
# endif /* HAVE_DECLSPEC_DLL */
@@ -680,16 +695,16 @@ extern char * _getpty(int *, int, mode_t, int);
/* If no external linkage macros defined by now, create defaults */
#ifndef PyAPI_FUNC
-# define PyAPI_FUNC(RTYPE) RTYPE
+# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE
#endif
#ifndef PyAPI_DATA
-# define PyAPI_DATA(RTYPE) extern RTYPE
+# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE
#endif
#ifndef PyMODINIT_FUNC
# if defined(__cplusplus)
-# define PyMODINIT_FUNC extern "C" PyObject*
+# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject*
# else /* __cplusplus */
-# define PyMODINIT_FUNC PyObject*
+# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
# endif /* __cplusplus */
#endif
@@ -773,11 +788,11 @@ extern char * _getpty(int *, int, mode_t, int);
*/
#ifdef WORDS_BIGENDIAN
-#define PY_BIG_ENDIAN 1
-#define PY_LITTLE_ENDIAN 0
+# define PY_BIG_ENDIAN 1
+# define PY_LITTLE_ENDIAN 0
#else
-#define PY_BIG_ENDIAN 0
-#define PY_LITTLE_ENDIAN 1
+# define PY_BIG_ENDIAN 0
+# define PY_LITTLE_ENDIAN 1
#endif
#ifdef Py_BUILD_CORE
@@ -834,8 +849,9 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
#endif
/* Mark a function which cannot return. Example:
+ PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
- PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); */
+ XLC support is intentionally omitted due to bpo-40244 */
#if defined(__clang__) || \
(defined(__GNUC__) && \
((__GNUC__ >= 3) || \
@@ -847,4 +863,16 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler;
# define _Py_NO_RETURN
#endif
+
+// Preprocessor check for a builtin preprocessor function. Always return 0
+// if __has_builtin() macro is not defined.
+//
+// __has_builtin() is available on clang and GCC 10.
+#ifdef __has_builtin
+# define _Py__has_builtin(x) __has_builtin(x)
+#else
+# define _Py__has_builtin(x) 0
+#endif
+
+
#endif /* Py_PYPORT_H */
diff --git a/src/external/windows/include/python/pystate.h b/src/external/windows/include/python/pystate.h
index 956fc2e8..d9f31e36 100755
--- a/src/external/windows/include/python/pystate.h
+++ b/src/external/windows/include/python/pystate.h
@@ -7,27 +7,35 @@
extern "C" {
#endif
-#include "pythread.h"
-
/* This limitation is for performance and simplicity. If needed it can be
removed (with effort). */
#define MAX_CO_EXTRA_USERS 255
/* Forward declarations for PyFrameObject, PyThreadState
and PyInterpreterState */
-struct _frame;
struct _ts;
struct _is;
/* struct _ts is defined in cpython/pystate.h */
typedef struct _ts PyThreadState;
-/* struct _is is defined in internal/pycore_pystate.h */
+/* struct _is is defined in internal/pycore_interp.h */
typedef struct _is PyInterpreterState;
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void);
PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *);
PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+/* Get the current interpreter state.
+
+ Issue a fatal error if there no current Python thread state or no current
+ interpreter. It cannot return NULL.
+
+ The caller must hold the GIL. */
+PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Get(void);
+#endif
+
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
/* New in 3.8 */
PyAPI_FUNC(PyObject *) PyInterpreterState_GetDict(PyInterpreterState *);
@@ -50,7 +58,6 @@ PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*);
PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *);
PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *);
PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
-PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
/* Get the current thread state.
@@ -77,6 +84,13 @@ PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *);
PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void);
PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *);
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* New in 3.9 */
+PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate);
+PyAPI_FUNC(PyFrameObject*) PyThreadState_GetFrame(PyThreadState *tstate);
+PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate);
+#endif
+
typedef
enum {PyGILState_LOCKED, PyGILState_UNLOCKED}
PyGILState_STATE;
diff --git a/src/external/windows/include/python/pythonrun.h b/src/external/windows/include/python/pythonrun.h
index 8e86c402..ecd35c60 100755
--- a/src/external/windows/include/python/pythonrun.h
+++ b/src/external/windows/include/python/pythonrun.h
@@ -72,16 +72,23 @@ PyAPI_FUNC(struct _mod *) PyParser_ASTFromFileObject(
#define PyParser_SimpleParseFile(FP, S, B) \
PyParser_SimpleParseFileFlags(FP, S, B, 0)
#endif
-PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int,
- int);
+
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
+PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, int);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *,
const char *,
int, int);
#endif
-PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *,
- int, int);
-
+#ifndef Py_BUILD_CORE
+Py_DEPRECATED(3.9)
+#endif
+PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, int, int);
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *,
PyObject *, PyCompilerFlags *);
diff --git a/src/external/windows/include/python/pythread.h b/src/external/windows/include/python/pythread.h
index c9d73ded..739594a8 100755
--- a/src/external/windows/include/python/pythread.h
+++ b/src/external/windows/include/python/pythread.h
@@ -3,7 +3,6 @@
#define Py_PYTHREAD_H
typedef void *PyThread_type_lock;
-typedef void *PyThread_type_sema;
#ifdef __cplusplus
extern "C" {
@@ -37,6 +36,15 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int);
#define WAIT_LOCK 1
#define NOWAIT_LOCK 0
+#ifndef Py_LIMITED_API
+#ifdef HAVE_FORK
+/* Private function to reinitialize a lock at fork in the child process.
+ Reset the lock to the unlocked state.
+ Return 0 on success, return -1 on error. */
+PyAPI_FUNC(int) _PyThread_at_fork_reinit(PyThread_type_lock *lock);
+#endif /* HAVE_FORK */
+#endif /* !Py_LIMITED_API */
+
/* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting
on a lock (see PyThread_acquire_lock_timed() below).
PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that
@@ -51,16 +59,16 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int);
#if defined(_POSIX_THREADS)
/* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000),
convert microseconds to nanoseconds. */
-# define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000)
+# define PY_TIMEOUT_MAX (LLONG_MAX / 1000)
#elif defined (NT_THREADS)
/* In the NT API, the timeout is a DWORD and is expressed in milliseconds */
-# if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX
+# if 0xFFFFFFFFLL * 1000 < LLONG_MAX
# define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000)
# else
-# define PY_TIMEOUT_MAX PY_LLONG_MAX
+# define PY_TIMEOUT_MAX LLONG_MAX
# endif
#else
-# define PY_TIMEOUT_MAX PY_LLONG_MAX
+# define PY_TIMEOUT_MAX LLONG_MAX
#endif
diff --git a/src/external/windows/include/python/rangeobject.h b/src/external/windows/include/python/rangeobject.h
index b9a136d0..d2105d02 100755
--- a/src/external/windows/include/python/rangeobject.h
+++ b/src/external/windows/include/python/rangeobject.h
@@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyRange_Type;
PyAPI_DATA(PyTypeObject) PyRangeIter_Type;
PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type;
-#define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type)
+#define PyRange_Check(op) Py_IS_TYPE(op, &PyRange_Type)
#ifdef __cplusplus
}
diff --git a/src/external/windows/include/python/setobject.h b/src/external/windows/include/python/setobject.h
index b2f79639..24ae8f4d 100755
--- a/src/external/windows/include/python/setobject.h
+++ b/src/external/windows/include/python/setobject.h
@@ -70,7 +70,6 @@ PyAPI_DATA(PyObject *) _PySet_Dummy;
PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash);
PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
-PyAPI_FUNC(int) PySet_ClearFreeList(void);
#endif /* Section excluded by Py_LIMITED_API */
@@ -88,18 +87,18 @@ PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key);
PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set);
PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset);
-#define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type)
+#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE(ob, &PyFrozenSet_Type)
#define PyAnySet_CheckExact(ob) \
- (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type)
+ (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type))
#define PyAnySet_Check(ob) \
- (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \
+ (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
#define PySet_Check(ob) \
- (Py_TYPE(ob) == &PySet_Type || \
+ (Py_IS_TYPE(ob, &PySet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
#define PyFrozenSet_Check(ob) \
- (Py_TYPE(ob) == &PyFrozenSet_Type || \
+ (Py_IS_TYPE(ob, &PyFrozenSet_Type) || \
PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
#ifdef __cplusplus
diff --git a/src/external/windows/include/python/sliceobject.h b/src/external/windows/include/python/sliceobject.h
index 7c778a55..c4150604 100755
--- a/src/external/windows/include/python/sliceobject.h
+++ b/src/external/windows/include/python/sliceobject.h
@@ -28,7 +28,7 @@ typedef struct {
PyAPI_DATA(PyTypeObject) PySlice_Type;
PyAPI_DATA(PyTypeObject) PyEllipsis_Type;
-#define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type)
+#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type)
PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
PyObject* step);
diff --git a/src/external/windows/include/python/structseq.h b/src/external/windows/include/python/structseq.h
index 3a6b2693..e67bfda7 100755
--- a/src/external/windows/include/python/structseq.h
+++ b/src/external/windows/include/python/structseq.h
@@ -19,7 +19,7 @@ typedef struct PyStructSequence_Desc {
int n_in_sequence;
} PyStructSequence_Desc;
-extern char* PyStructSequence_UnnamedField;
+extern const char * const PyStructSequence_UnnamedField;
#ifndef Py_LIMITED_API
PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type,
diff --git a/src/external/windows/include/python/symtable.h b/src/external/windows/include/python/symtable.h
index f1331722..5f490df2 100755
--- a/src/external/windows/include/python/symtable.h
+++ b/src/external/windows/include/python/symtable.h
@@ -69,7 +69,7 @@ typedef struct _symtable_entry {
PyAPI_DATA(PyTypeObject) PySTEntry_Type;
-#define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type)
+#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type)
PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *);
diff --git a/src/external/windows/include/python/token.h b/src/external/windows/include/python/token.h
index 092eebf3..80c3e251 100755
--- a/src/external/windows/include/python/token.h
+++ b/src/external/windows/include/python/token.h
@@ -78,6 +78,10 @@ extern "C" {
#define ISTERMINAL(x) ((x) < NT_OFFSET)
#define ISNONTERMINAL(x) ((x) >= NT_OFFSET)
#define ISEOF(x) ((x) == ENDMARKER)
+#define ISWHITESPACE(x) ((x) == ENDMARKER || \
+ (x) == NEWLINE || \
+ (x) == INDENT || \
+ (x) == DEDENT)
PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */
diff --git a/src/external/windows/include/python/traceback.h b/src/external/windows/include/python/traceback.h
index 39eadf92..b4466f51 100755
--- a/src/external/windows/include/python/traceback.h
+++ b/src/external/windows/include/python/traceback.h
@@ -4,16 +4,14 @@
extern "C" {
#endif
-struct _frame;
-
/* Traceback interface */
-PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);
+PyAPI_FUNC(int) PyTraceBack_Here(PyFrameObject *);
PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
/* Reveal traceback type so we can typecheck traceback objects */
PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
-#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type)
+#define PyTraceBack_Check(v) Py_IS_TYPE(v, &PyTraceBack_Type)
#ifndef Py_LIMITED_API
diff --git a/src/external/windows/include/python/tupleobject.h b/src/external/windows/include/python/tupleobject.h
index 4e0d1f12..19f9997e 100755
--- a/src/external/windows/include/python/tupleobject.h
+++ b/src/external/windows/include/python/tupleobject.h
@@ -25,7 +25,7 @@ PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
#define PyTuple_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
-#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type)
+#define PyTuple_CheckExact(op) Py_IS_TYPE(op, &PyTuple_Type)
PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size);
PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
@@ -34,8 +34,6 @@ PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
-PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
-
#ifndef Py_LIMITED_API
# define Py_CPYTHON_TUPLEOBJECT_H
# include "cpython/tupleobject.h"
diff --git a/src/external/windows/include/python/typeslots.h b/src/external/windows/include/python/typeslots.h
index bf382f07..29111f94 100755
--- a/src/external/windows/include/python/typeslots.h
+++ b/src/external/windows/include/python/typeslots.h
@@ -1,7 +1,12 @@
/* Do not renumber the file; these numbers are part of the stable ABI. */
+#if defined(Py_LIMITED_API)
/* Disabled, see #10181 */
#undef Py_bf_getbuffer
#undef Py_bf_releasebuffer
+#else
+#define Py_bf_getbuffer 1
+#define Py_bf_releasebuffer 2
+#endif
#define Py_mp_ass_subscript 3
#define Py_mp_length 4
#define Py_mp_subscript 5
diff --git a/src/external/windows/include/python/unicodeobject.h b/src/external/windows/include/python/unicodeobject.h
index 28c600b6..4213945b 100755
--- a/src/external/windows/include/python/unicodeobject.h
+++ b/src/external/windows/include/python/unicodeobject.h
@@ -113,7 +113,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
#define PyUnicode_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
-#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type)
+#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type)
/* --- Constants ---------------------------------------------------------- */
@@ -328,17 +328,6 @@ PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString(
PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal);
-/* --- Free-list management ----------------------------------------------- */
-
-/* Clear the free list used by the Unicode implementation.
-
- This can be used to release memory used for objects on the free
- list back to the Python memory allocator.
-
-*/
-
-PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
-
/* === Builtin Codecs =====================================================
Many of these APIs take two arguments encoding and errors. These
diff --git a/src/external/windows/include/python/weakrefobject.h b/src/external/windows/include/python/weakrefobject.h
index 87acf95c..36890820 100755
--- a/src/external/windows/include/python/weakrefobject.h
+++ b/src/external/windows/include/python/weakrefobject.h
@@ -46,10 +46,10 @@ PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType;
#define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType)
#define PyWeakref_CheckRefExact(op) \
- (Py_TYPE(op) == &_PyWeakref_RefType)
+ Py_IS_TYPE(op, &_PyWeakref_RefType)
#define PyWeakref_CheckProxy(op) \
- ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \
- (Py_TYPE(op) == &_PyWeakref_CallableProxyType))
+ (Py_IS_TYPE(op, &_PyWeakref_ProxyType) || \
+ Py_IS_TYPE(op, &_PyWeakref_CallableProxyType))
#define PyWeakref_Check(op) \
(PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
diff --git a/src/external/windows/lib/Win32/python38.lib b/src/external/windows/lib/Win32/python38.lib
deleted file mode 100755
index 42bdb7d6..00000000
Binary files a/src/external/windows/lib/Win32/python38.lib and /dev/null differ
diff --git a/src/external/windows/lib/Win32/python38_d.lib b/src/external/windows/lib/Win32/python38_d.lib
deleted file mode 100755
index da93addd..00000000
Binary files a/src/external/windows/lib/Win32/python38_d.lib and /dev/null differ
diff --git a/src/external/windows/lib/Win32/python39.lib b/src/external/windows/lib/Win32/python39.lib
new file mode 100755
index 00000000..b02c9ef2
Binary files /dev/null and b/src/external/windows/lib/Win32/python39.lib differ
diff --git a/src/external/windows/lib/Win32/python39_d.lib b/src/external/windows/lib/Win32/python39_d.lib
new file mode 100755
index 00000000..06e781b8
Binary files /dev/null and b/src/external/windows/lib/Win32/python39_d.lib differ
diff --git a/src/external/windows/lib/x64/python38.lib b/src/external/windows/lib/x64/python38.lib
deleted file mode 100755
index daa1122a..00000000
Binary files a/src/external/windows/lib/x64/python38.lib and /dev/null differ
diff --git a/src/external/windows/lib/x64/python38_d.lib b/src/external/windows/lib/x64/python38_d.lib
deleted file mode 100755
index c0867c19..00000000
Binary files a/src/external/windows/lib/x64/python38_d.lib and /dev/null differ
diff --git a/src/external/windows/lib/x64/python39.lib b/src/external/windows/lib/x64/python39.lib
new file mode 100755
index 00000000..9fa64b3f
Binary files /dev/null and b/src/external/windows/lib/x64/python39.lib differ
diff --git a/src/external/windows/lib/x64/python39_d.lib b/src/external/windows/lib/x64/python39_d.lib
new file mode 100755
index 00000000..40d93645
Binary files /dev/null and b/src/external/windows/lib/x64/python39_d.lib differ
diff --git a/src/meta/bameta/python_embedded/binding.py b/src/meta/bameta/python_embedded/binding.py
index 5e113e5e..4ef39ca1 100644
--- a/src/meta/bameta/python_embedded/binding.py
+++ b/src/meta/bameta/python_embedded/binding.py
@@ -27,10 +27,10 @@ from bastd.ui.onscreenkeyboard import OnScreenKeyboardWindow
from bastd.ui import party
if TYPE_CHECKING:
- from typing import Tuple, Any
+ from typing import Any
-def get_binding_values() -> Tuple[Any, ...]:
+def get_binding_values() -> tuple[Any, ...]:
return (
ba.app, # kApp
tuple(), # kEmptyTuple
diff --git a/src/meta/bameta/python_embedded/bootstrap.py b/src/meta/bameta/python_embedded/bootstrap.py
index e42f9a5a..8688d2db 100644
--- a/src/meta/bameta/python_embedded/bootstrap.py
+++ b/src/meta/bameta/python_embedded/bootstrap.py
@@ -11,14 +11,14 @@ from typing import TYPE_CHECKING
import _ba
if TYPE_CHECKING:
- from typing import Any, TextIO, Callable, List
+ from typing import Any, TextIO, Callable
class _BAConsoleRedirect:
def __init__(self, original: TextIO, call: Callable[[str], None]) -> None:
self._lock = threading.Lock()
- self._linebits: List[str] = []
+ self._linebits: list[str] = []
self._original = original
self._call = call
self._pending_ship = False
diff --git a/tests/test_efro/test_dataclassio.py b/tests/test_efro/test_dataclassio.py
index c275b26b..5b53a1a0 100644
--- a/tests/test_efro/test_dataclassio.py
+++ b/tests/test_efro/test_dataclassio.py
@@ -7,10 +7,8 @@ from __future__ import annotations
from enum import Enum
import datetime
from dataclasses import field, dataclass
-from typing import (TYPE_CHECKING, Optional, List, Set, Any, Dict, Sequence,
- Union, Tuple)
+from typing import TYPE_CHECKING, Optional, Any, Sequence, Union, Annotated
-from typing_extensions import Annotated
import pytest
from efro.util import utc_now
@@ -50,7 +48,7 @@ class _BadEnum2(Enum):
class _NestedClass:
ival: int = 0
sval: str = 'foo'
- dval: Dict[int, str] = field(default_factory=dict)
+ dval: dict[int, str] = field(default_factory=dict)
def test_assign() -> None:
@@ -72,15 +70,15 @@ def test_assign() -> None:
obval: Optional[bool] = None
ofval: Optional[float] = None
oenval: Optional[_EnumTest] = _EnumTest.TEST1
- lsval: List[str] = field(default_factory=list)
- lival: List[int] = field(default_factory=list)
- lbval: List[bool] = field(default_factory=list)
- lfval: List[float] = field(default_factory=list)
- lenval: List[_EnumTest] = field(default_factory=list)
- ssval: Set[str] = field(default_factory=set)
+ lsval: list[str] = field(default_factory=list)
+ lival: list[int] = field(default_factory=list)
+ lbval: list[bool] = field(default_factory=list)
+ lfval: list[float] = field(default_factory=list)
+ lenval: list[_EnumTest] = field(default_factory=list)
+ ssval: set[str] = field(default_factory=set)
anyval: Any = 1
- dictval: Dict[int, str] = field(default_factory=dict)
- tupleval: Tuple[int, str, bool] = (1, 'foo', False)
+ dictval: dict[int, str] = field(default_factory=dict)
+ tupleval: tuple[int, str, bool] = (1, 'foo', False)
datetimeval: Optional[datetime.datetime] = None
class _TestClass2:
@@ -367,36 +365,36 @@ def test_prep() -> None:
@ioprepped
@dataclass
class _TestClass7:
- dval: Dict[float, int]
+ dval: dict[float, int]
@ioprepped
@dataclass
class _TestClass8:
- dval: Dict[str, int]
+ dval: dict[str, int]
@ioprepped
@dataclass
class _TestClass9:
- dval: Dict[_GoodEnum, int]
+ dval: dict[_GoodEnum, int]
@ioprepped
@dataclass
class _TestClass10:
- dval: Dict[_GoodEnum2, int]
+ dval: dict[_GoodEnum2, int]
with pytest.raises(TypeError):
@ioprepped
@dataclass
class _TestClass11:
- dval: Dict[_BadEnum1, int]
+ dval: dict[_BadEnum1, int]
with pytest.raises(TypeError):
@ioprepped
@dataclass
class _TestClass12:
- dval: Dict[_BadEnum2, int]
+ dval: dict[_BadEnum2, int]
def test_validate() -> None:
@@ -468,7 +466,7 @@ def test_ioattrs() -> None:
@ioprepped
@dataclass
class _TestClass:
- dval: Annotated[Dict, IOAttrs('d')]
+ dval: Annotated[dict, IOAttrs('d')]
obj = _TestClass(dval={'foo': 'bar'})
@@ -482,12 +480,12 @@ def test_ioattrs() -> None:
@ioprepped
@dataclass
class _TestClass2:
- dval: Annotated[Dict, IOAttrs('d', store_default=False)]
+ dval: Annotated[dict, IOAttrs('d', store_default=False)]
@ioprepped
@dataclass
class _TestClass3:
- dval: Annotated[Dict, IOAttrs('d', store_default=False)] = field(
+ dval: Annotated[dict, IOAttrs('d', store_default=False)] = field(
default_factory=dict)
ival: Annotated[int, IOAttrs('i', store_default=False)] = 123
@@ -584,7 +582,7 @@ def test_dict() -> None:
@ioprepped
@dataclass
class _TestClass2:
- dval: Dict[int, float]
+ dval: dict[int, float]
obj2 = _TestClass2(dval={1: 2.34})
out = dataclass_to_dict(obj2)
@@ -599,7 +597,7 @@ def test_dict() -> None:
@ioprepped
@dataclass
class _TestClass3:
- dval: Dict[_GoodEnum, int]
+ dval: dict[_GoodEnum, int]
obj3 = _TestClass3(dval={_GoodEnum.VAL1: 123})
out = dataclass_to_dict(obj3)
@@ -611,7 +609,7 @@ def test_dict() -> None:
@ioprepped
@dataclass
class _TestClass4:
- dval: Dict[_GoodEnum2, int]
+ dval: dict[_GoodEnum2, int]
obj4 = _TestClass4(dval={_GoodEnum2.VAL1: 125})
out = dataclass_to_dict(obj4)
diff --git a/tests/test_efro/test_message.py b/tests/test_efro/test_message.py
index 5efd7760..cf8eb7aa 100644
--- a/tests/test_efro/test_message.py
+++ b/tests/test_efro/test_message.py
@@ -19,7 +19,7 @@ from efro.message import (Message, Response, MessageProtocol, MessageSender,
BoundMessageReceiver)
if TYPE_CHECKING:
- from typing import List, Type, Any, Callable, Optional, Awaitable
+ from typing import Any, Callable, Optional, Awaitable
@ioprepped
@@ -29,7 +29,7 @@ class _TMsg1(Message):
ival: int
@classmethod
- def get_response_types(cls) -> List[Type[Response]]:
+ def get_response_types(cls) -> list[type[Response]]:
return [_TResp1]
@@ -40,7 +40,7 @@ class _TMsg2(Message):
sval: str
@classmethod
- def get_response_types(cls) -> List[Type[Response]]:
+ def get_response_types(cls) -> list[type[Response]]:
return [_TResp1, _TResp2]
diff --git a/tools/bacloud b/tools/bacloud
index c9424b09..9a50cdd4 100755
--- a/tools/bacloud
+++ b/tools/bacloud
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""A tool for interacting with ballistica's cloud services.
@@ -22,7 +22,7 @@ from efro.error import CleanError
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import Optional, Dict, Tuple, List, BinaryIO
+ from typing import Optional, BinaryIO
# Version is sent to the master-server with all commands. Can be incremented
# if we need to change behavior server-side to go along with client changes.
@@ -86,16 +86,16 @@ class Response:
login: Optional[str] = None
logout: bool = False
dir_manifest: Optional[str] = None
- uploads: Optional[Tuple[List[str], str, Dict]] = None
- uploads_inline: Optional[List[str]] = None
- downloads_inline: Optional[Dict[str, str]] = None
- deletes: Optional[List[str]] = None
+ uploads: Optional[tuple[list[str], str, dict]] = None
+ uploads_inline: Optional[list[str]] = None
+ downloads_inline: Optional[dict[str, str]] = None
+ deletes: Optional[list[str]] = None
dir_prune_empty: Optional[str] = None
open_url: Optional[str] = None
- input_prompt: Optional[Tuple[str, bool]] = None
+ input_prompt: Optional[tuple[str, bool]] = None
end_message: Optional[str] = None
end_message_end: str = '\n'
- end_command: Optional[Tuple[str, Dict]] = None
+ end_command: Optional[tuple[str, dict]] = None
def get_tz_offset_seconds() -> float:
@@ -120,7 +120,7 @@ class DirManifest:
def __init__(self) -> None:
self.path = Path('')
- self.files: Dict[str, DirManifestFile] = {}
+ self.files: dict[str, DirManifestFile] = {}
@classmethod
def load_from_disk(cls, path: Path) -> DirManifest:
@@ -129,7 +129,7 @@ class DirManifest:
package.path = path
packagepathstr = str(path)
- paths: List[str] = []
+ paths: list[str] = []
# Simply return empty manifests if the given path isn't a dir.
# (the server may intend to create it and is just asking what's
@@ -146,7 +146,7 @@ class DirManifest:
from concurrent.futures import ThreadPoolExecutor
from multiprocessing import cpu_count
- def _get_file_info(filepath: str) -> Tuple[str, DirManifestFile]:
+ def _get_file_info(filepath: str) -> tuple[str, DirManifestFile]:
sha = hashlib.sha256()
fullfilepath = os.path.join(packagepathstr, filepath)
if not os.path.isfile(fullfilepath):
@@ -172,7 +172,7 @@ class App:
def __init__(self) -> None:
self._state = StateData()
self._project_root: Optional[Path] = None
- self._end_command_args: Dict = {}
+ self._end_command_args: dict = {}
def run(self) -> None:
"""Run the tool."""
@@ -231,8 +231,8 @@ class App:
def _servercmd(self,
cmd: str,
- data: Dict,
- files: Dict[str, BinaryIO] = None) -> Response:
+ data: dict,
+ files: dict[str, BinaryIO] = None) -> Response:
"""Issue a command to the server and get a response."""
response_raw_2 = requests.post(
@@ -267,7 +267,7 @@ class App:
return response
- def _upload_file(self, filename: str, call: str, args: Dict) -> None:
+ def _upload_file(self, filename: str, call: str, args: dict) -> None:
print(f'{Clr.BLU}Uploading {filename}{Clr.RST}', flush=True)
with tempfile.TemporaryDirectory() as tempdir:
srcpath = Path(filename)
@@ -276,7 +276,7 @@ class App:
shell=True,
check=True)
with open(gzpath, 'rb') as infile:
- putfiles: Dict = {'file': infile}
+ putfiles: dict = {'file': infile}
_response = self._servercmd(
call,
args,
@@ -293,7 +293,7 @@ class App:
for key, val in manifest.files.items()}
}
- def _handle_uploads(self, uploads: Tuple[List[str], str, Dict]) -> None:
+ def _handle_uploads(self, uploads: tuple[list[str], str, dict]) -> None:
from concurrent.futures import ThreadPoolExecutor
assert len(uploads) == 3
filenames, uploadcmd, uploadargs = uploads
@@ -312,7 +312,7 @@ class App:
# exceptions that occurred.
list(executor.map(_do_filename, filenames))
- def _handle_downloads_inline(self, downloads_inline: Dict[str,
+ def _handle_downloads_inline(self, downloads_inline: dict[str,
str]) -> None:
"""Handle inline file data to be saved to the client."""
import base64
@@ -326,16 +326,16 @@ class App:
with open(fname, 'wb') as outfile:
outfile.write(data)
- def _handle_deletes(self, deletes: List[str]) -> None:
+ def _handle_deletes(self, deletes: list[str]) -> None:
"""Handle file deletes."""
for fname in deletes:
os.unlink(fname)
- def _handle_uploads_inline(self, uploads_inline: List[str]) -> None:
+ def _handle_uploads_inline(self, uploads_inline: list[str]) -> None:
"""Handle uploading files inline."""
import base64
import zlib
- files: Dict[str, str] = {}
+ files: dict[str, str] = {}
for filepath in uploads_inline:
if not os.path.exists(filepath):
raise CleanError(f'File not found: {filepath}')
@@ -373,11 +373,11 @@ class App:
print(prompt, end='', flush=True)
self._end_command_args['input'] = input()
- def run_user_command(self, args: List[str]) -> None:
+ def run_user_command(self, args: list[str]) -> None:
"""Run a single user command to completion."""
# pylint: disable=too-many-branches
- nextcall: Optional[Tuple[str, Dict]] = ('user', {'a': args})
+ nextcall: Optional[tuple[str, dict]] = ('user', {'a': args})
# Now talk to the server in a loop until there's nothing left to do.
while nextcall is not None:
diff --git a/tools/bacommon/assets.py b/tools/bacommon/assets.py
index e3f572c7..311852d4 100644
--- a/tools/bacommon/assets.py
+++ b/tools/bacommon/assets.py
@@ -5,11 +5,9 @@
from __future__ import annotations
from dataclasses import dataclass, field
-from typing import TYPE_CHECKING, Dict, Optional, List
+from typing import TYPE_CHECKING, Optional, Annotated
from enum import Enum
-from typing_extensions import Annotated
-
from efro.dataclassio import ioprepped, IOAttrs
if TYPE_CHECKING:
@@ -40,7 +38,7 @@ class AssetType(Enum):
@dataclass
class AssetPackageFlavorManifest:
"""A manifest of asset info for a specific flavor of an asset package."""
- assetfiles: Annotated[Dict[str, str],
+ assetfiles: Annotated[dict[str, str],
IOAttrs('assetfiles')] = field(default_factory=dict)
@@ -50,7 +48,7 @@ class AssetPackageBuildState:
"""Contains info about an in-progress asset cloud build."""
# Asset names still being built.
- in_progress_builds: Annotated[List[str],
+ in_progress_builds: Annotated[list[str],
IOAttrs('b')] = field(default_factory=list)
# The initial number of assets needing to be built.
diff --git a/tools/bacommon/net.py b/tools/bacommon/net.py
index 6a1f6335..bd4ef1c9 100644
--- a/tools/bacommon/net.py
+++ b/tools/bacommon/net.py
@@ -4,11 +4,9 @@
from __future__ import annotations
-from typing import TYPE_CHECKING, Optional, List, Dict, Any, Tuple
+from typing import TYPE_CHECKING, Optional, Any, Annotated
from dataclasses import dataclass, field
-from typing_extensions import Annotated
-
from efro.dataclassio import ioprepped, IOAttrs
if TYPE_CHECKING:
@@ -33,7 +31,7 @@ class ServerNodeQueryResponse:
error: Annotated[Optional[str], IOAttrs('e', store_default=False)] = None
# The set of servernodes.
- servers: Annotated[List[ServerNodeEntry],
+ servers: Annotated[list[ServerNodeEntry],
IOAttrs('s', store_default=False)] = field(
default_factory=list)
@@ -57,10 +55,10 @@ class PrivateHostingConfig:
playlist_name: str = 'Unknown'
randomize: bool = False
tutorial: bool = False
- custom_team_names: Optional[Tuple[str, str]] = None
- custom_team_colors: Optional[Tuple[Tuple[float, float, float],
- Tuple[float, float, float]]] = None
- playlist: Optional[List[Dict[str, Any]]] = None
+ custom_team_names: Optional[tuple[str, str]] = None
+ custom_team_colors: Optional[tuple[tuple[float, float, float],
+ tuple[float, float, float]]] = None
+ playlist: Optional[list[dict[str, Any]]] = None
exit_minutes: float = 120.0
exit_minutes_unclean: float = 180.0
exit_minutes_idle: float = 10.0
diff --git a/tools/bacommon/servermanager.py b/tools/bacommon/servermanager.py
index 0ae3005c..b767006a 100644
--- a/tools/bacommon/servermanager.py
+++ b/tools/bacommon/servermanager.py
@@ -5,7 +5,7 @@ from __future__ import annotations
from enum import Enum
from dataclasses import field, dataclass
-from typing import TYPE_CHECKING, List, Optional, Tuple, Dict, Any
+from typing import TYPE_CHECKING, Optional, Any
from efro.dataclassio import ioprepped
@@ -33,7 +33,7 @@ class ServerConfig:
# IDs of server admins. Server admins are not kickable through the default
# kick vote system and they are able to kick players without a vote. To get
# your account id, enter 'getaccountid' in settings->advanced->enter-code.
- admins: List[str] = field(default_factory=list)
+ admins: list[str] = field(default_factory=list)
# Whether the default kick-voting system is enabled.
enable_default_kick_voting: bool = True
@@ -64,7 +64,7 @@ class ServerConfig:
# Alternately, you can embed playlist data here instead of using codes.
# Make sure to set session_type to the correct type for the data here.
- playlist_inline: Optional[List[Dict[str, Any]]] = None
+ playlist_inline: Optional[list[dict[str, Any]]] = None
# Whether to shuffle the playlist or play its games in designated order.
playlist_shuffle: bool = True
@@ -131,11 +131,11 @@ class ServerConfig:
show_tutorial: bool = False
# Team names (teams mode only).
- team_names: Optional[Tuple[str, str]] = None
+ team_names: Optional[tuple[str, str]] = None
# Team colors (teams mode only).
- team_colors: Optional[Tuple[Tuple[float, float, float],
- Tuple[float, float, float]]] = None
+ team_colors: Optional[tuple[tuple[float, float, float],
+ tuple[float, float, float]]] = None
# (internal) stress-testing mode.
stress_test_players: Optional[int] = None
@@ -171,15 +171,15 @@ class ShutdownCommand(ServerCommand):
class ChatMessageCommand(ServerCommand):
"""Chat message from the server."""
message: str
- clients: Optional[List[int]]
+ clients: Optional[list[int]]
@dataclass
class ScreenMessageCommand(ServerCommand):
"""Screen-message from the server."""
message: str
- color: Optional[Tuple[float, float, float]]
- clients: Optional[List[int]]
+ color: Optional[tuple[float, float, float]]
+ clients: Optional[list[int]]
@dataclass
diff --git a/tools/batools/android.py b/tools/batools/android.py
index e7d640fa..9bc3144b 100644
--- a/tools/batools/android.py
+++ b/tools/batools/android.py
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
import efrotools
if TYPE_CHECKING:
- from typing import List, Optional, Set
+ pass
def androidaddr(archive_dir: str, arch: str, addr: str) -> None:
diff --git a/tools/batools/androidsdkutils.py b/tools/batools/androidsdkutils.py
index 5bfcebe5..5c1aaf5e 100755
--- a/tools/batools/androidsdkutils.py
+++ b/tools/batools/androidsdkutils.py
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
from efro.error import CleanError
if TYPE_CHECKING:
- from typing import List
+ pass
def _parse_lprop_file(local_properties_path: str) -> str:
@@ -76,7 +76,7 @@ def _gen_lprop_file(local_properties_path: str) -> str:
return sdk_dir
-def run(projroot: str, args: List[str]) -> None:
+def run(projroot: str, args: list[str]) -> None:
"""Main script entry point."""
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
diff --git a/tools/batools/assetsmakefile.py b/tools/batools/assetsmakefile.py
index e64065e4..f6604ac9 100755
--- a/tools/batools/assetsmakefile.py
+++ b/tools/batools/assetsmakefile.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""Updates assets/Makefile based on source assets present."""
@@ -13,15 +13,15 @@ from typing import TYPE_CHECKING
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import List, Set
+ pass
-PYC_SUFFIX = '.cpython-38.opt-1.pyc'
+PYC_SUFFIX = '.cpython-39.opt-1.pyc'
def _get_targets(varname: str,
inext: str,
outext: str,
- all_targets: Set,
+ all_targets: set,
limit_to_prefix: str = None) -> str:
"""Generic function to map source extension to dst files."""
@@ -48,14 +48,14 @@ def _get_targets(varname: str,
return '\n' + varname + ' = \\\n ' + ' \\\n '.join(sorted(targets))
-def _get_py_targets(src: str, dst: str, py_targets: List[str],
- pyc_targets: List[str], all_targets: Set[str],
+def _get_py_targets(src: str, dst: str, py_targets: list[str],
+ pyc_targets: list[str], all_targets: set[str],
subset: str) -> None:
# pylint: disable=too-many-branches
py_generated_root = 'assets/src/ba_data/python/ba/_generated'
- def _do_get_targets(root: str, fnames: List[str]) -> None:
+ def _do_get_targets(root: str, fnames: list[str]) -> None:
# Special case: ignore temp py files in data src.
if root == 'assets/src/ba_data/data/maps':
return
@@ -122,7 +122,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str],
# Now create targets for any of our dynamically generated stuff that
# lives under this dir.
- meta_targets: List[str] = []
+ meta_targets: list[str] = []
for mantype in ['public', 'private']:
with open(f'src/meta/.meta_manifest_{mantype}.json',
encoding='utf-8') as infile:
@@ -137,7 +137,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str],
fnames=[os.path.basename(target)])
-def _get_py_targets_subset(all_targets: Set[str], subset: str,
+def _get_py_targets_subset(all_targets: set[str], subset: str,
suffix: str) -> str:
if subset == 'public_tools':
src = 'tools'
@@ -149,8 +149,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str,
copyrule = 'build/%.py : src/%.py'
# Separate these into '1' and '2'.
- py_targets: List[str] = []
- pyc_targets: List[str] = []
+ py_targets: list[str] = []
+ pyc_targets: list[str] = []
_get_py_targets(src,
dst,
@@ -213,8 +213,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str,
return out
-def _get_extras_targets_win(all_targets: Set[str], platform: str) -> str:
- targets: List[str] = []
+def _get_extras_targets_win(all_targets: set[str], platform: str) -> str:
+ targets: list[str] = []
base = 'assets/src/windows'
dstbase = 'build/windows'
for root, _dnames, fnames in os.walk(base):
@@ -292,8 +292,8 @@ def update_assets_makefile(projroot: str, check: bool) -> None:
auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__')
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__')
- all_targets_public: Set[str] = set()
- all_targets_private: Set[str] = set()
+ all_targets_public: set[str] = set()
+ all_targets_private: set[str] = set()
# We always auto-generate the public section.
our_lines_public = [
@@ -380,7 +380,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None:
all_targets_private, check)
-def _write_manifest(manifest_path: str, all_targets: Set[str],
+def _write_manifest(manifest_path: str, all_targets: set[str],
check: bool) -> None:
# Lastly, write a simple manifest of the things we expect to have
# in build. We can use this to clear out orphaned files as part of builds.
diff --git a/tools/batools/assetstaging.py b/tools/batools/assetstaging.py
index d5f18435..9c231bc7 100755
--- a/tools/batools/assetstaging.py
+++ b/tools/batools/assetstaging.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""Stage assets for a build."""
@@ -15,7 +15,7 @@ from typing import TYPE_CHECKING
from efrotools import PYVER
if TYPE_CHECKING:
- from typing import Optional, List
+ from typing import Optional
from pathlib import Path
# Suffix for the pyc files we include in stagings.
@@ -53,7 +53,7 @@ class Config:
self.is_payload_full = False
self.debug: Optional[bool] = None
- def _parse_android_args(self, args: List[str]) -> None:
+ def _parse_android_args(self, args: list[str]) -> None:
# On Android we get nitpicky with what
# we want to copy in since we can speed up
# iterations by installing stripped down
@@ -100,7 +100,7 @@ class Config:
elif arg == '-audio':
self.include_audio = True
- def _parse_win_platform(self, platform: str, args: List[str]) -> None:
+ def _parse_win_platform(self, platform: str, args: list[str]) -> None:
"""Parse sub-args in the windows platform string."""
winempty, wintype, winplt, wincfg = platform.split('-')
self.win_platform = winplt
@@ -133,7 +133,7 @@ class Config:
else:
raise RuntimeError(f'Invalid wincfg: "{wincfg}"')
- def parse_args(self, args: List[str]) -> None:
+ def parse_args(self, args: list[str]) -> None:
"""Parse args and apply to the cfg."""
if len(args) < 1:
raise RuntimeError('Expected a platform argument.')
@@ -275,7 +275,7 @@ def _sync_windows_extras(cfg: Config) -> None:
# We could technically copy everything over but this keeps staging
# dirs a bit tidier.
dbgsfx = '_d' if cfg.debug else ''
- toplevelfiles: List[str] = [f'python38{dbgsfx}.dll']
+ toplevelfiles: list[str] = [f'python39{dbgsfx}.dll']
if cfg.win_type == 'win':
toplevelfiles += [
@@ -469,7 +469,7 @@ def stage_server_file(projroot: str, mode: str, infilename: str,
raise RuntimeError(f"Unknown server file for staging: '{basename}'.")
-def main(projroot: str, args: Optional[List[str]] = None) -> None:
+def main(projroot: str, args: Optional[list[str]] = None) -> None:
"""Stage assets for a build."""
if args is None:
diff --git a/tools/batools/build.py b/tools/batools/build.py
index 7c914573..f3c6a63a 100644
--- a/tools/batools/build.py
+++ b/tools/batools/build.py
@@ -16,7 +16,7 @@ from efro.error import CleanError
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import List, Sequence, Optional, Any, Dict
+ from typing import Sequence, Optional, Any
# Python pip packages we require for this project.
@@ -24,7 +24,7 @@ if TYPE_CHECKING:
class PipRequirement:
"""A pip package required by our project."""
modulename: Optional[str] = None
- minversion: Optional[List[int]] = None # None implies no min version.
+ minversion: Optional[list[int]] = None # None implies no min version.
pipname: Optional[str] = None # None implies same as modulename.
@@ -50,7 +50,7 @@ PIP_REQUIREMENTS = [
# Parts of full-tests suite we only run on particular days.
# (This runs in listed order so should be randomized by hand to avoid
# clustering similar tests too much)
-SPARSE_TEST_BUILDS: List[List[str]] = [
+SPARSE_TEST_BUILDS: list[list[str]] = [
['ios.pylibs.debug', 'android.pylibs.arm'],
['linux.package', 'android.pylibs.arm64'],
['windows.package', 'mac.pylibs'],
@@ -88,7 +88,7 @@ class PrefabTarget(Enum):
SERVER_RELEASE = 'server-release'
-def _lazybuild_check_paths(inpaths: List[str], category: SourceCategory,
+def _lazybuild_check_paths(inpaths: list[str], category: SourceCategory,
target: str) -> bool:
# pylint: disable=too-many-branches
@@ -170,7 +170,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None:
Note that target's mod-time will *always* be updated to match the newest
source regardless of whether the build itself was triggered.
"""
- paths: List[str]
+ paths: list[str]
# Everything possibly affecting meta builds.
if category is SourceCategory.META:
@@ -214,7 +214,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None:
def archive_old_builds(ssh_server: str, builds_dir: str,
- ssh_args: List[str]) -> None:
+ ssh_args: list[str]) -> None:
"""Stuff our old public builds into the 'old' dir.
(called after we push newer ones)
@@ -295,7 +295,8 @@ def gen_fulltest_buildfile_android() -> None:
cspre = 'tools/cloudshell linbeast --env android --'
# This is currently broken; turning off.
- do_py_android = False
+ # Update: should be working again; hooray!
+ do_py_android = True
for extra in extras:
if extra == 'android.pylibs.arm':
@@ -347,7 +348,7 @@ def gen_fulltest_buildfile_windows() -> None:
dayoffset = datetime.datetime.now().timetuple().tm_yday
- lines: List[str] = []
+ lines: list[str] = []
# We want to do one regular, one headless, and one oculus build,
# but let's switch up 32 or 64 bit based on the day.
@@ -571,7 +572,7 @@ def checkenv() -> None:
assert 'Package' in piplist[0] and 'Version' in piplist[0]
assert '--------' in piplist[1]
piplist = piplist[2:]
- pipvers: Dict[str, List[int]] = {}
+ pipvers: dict[str, list[int]] = {}
for line in piplist:
pname, pverraw = line.split()[:2]
pver = [int(x) if x.isdigit() else 0 for x in pverraw.split('.')]
@@ -648,9 +649,9 @@ def checkenv() -> None:
print(f'{Clr.BLD}Environment ok.{Clr.RST}', flush=True)
-def get_pip_reqs() -> List[str]:
+def get_pip_reqs() -> list[str]:
"""Return the pip requirements needed to build/run stuff."""
- out: List[str] = []
+ out: list[str] = []
for req in PIP_REQUIREMENTS:
name = req.modulename if req.pipname is None else req.pipname
assert isinstance(name, str)
@@ -712,7 +713,7 @@ def _get_server_config_template_yaml(projroot: str) -> str:
# pylint: disable=too-many-branches
import yaml
lines_in = _get_server_config_raw_contents(projroot).splitlines()
- lines_out: List[str] = []
+ lines_out: list[str] = []
ignore_vars = {'stress_test_players'}
for line in lines_in:
if any(line.startswith(f'{var}:') for var in ignore_vars):
@@ -869,7 +870,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
name: str
current_value: str
- entries: List[Entry] = []
+ entries: list[Entry] = []
# Start fresh if cmake version changes.
cmake_ver_output = subprocess.run(['cmake', '--version'],
@@ -911,7 +912,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
verfilename = os.path.join(dirname, '.ba_cmake_env')
title = 'cmake_prep_dir'
- versions: Dict[str, str]
+ versions: dict[str, str]
if os.path.isfile(verfilename):
with open(verfilename, encoding='utf-8') as infile:
versions = json.loads(infile.read())
diff --git a/tools/batools/docs.py b/tools/batools/docs.py
index 6beed9b6..7e840575 100755
--- a/tools/batools/docs.py
+++ b/tools/batools/docs.py
@@ -11,7 +11,7 @@ import datetime
import inspect
import subprocess
from dataclasses import dataclass
-from typing import TYPE_CHECKING, List, Union, cast
+from typing import TYPE_CHECKING, Union, cast
from enum import Enum
from efro.error import CleanError
@@ -19,8 +19,7 @@ from efro.terminal import Clr
if TYPE_CHECKING:
from types import ModuleType
- from typing import (Type, Optional, Tuple, Callable, Dict, Any, Sequence,
- Set)
+ from typing import Optional, Callable, Any, Sequence
CATEGORY_STRING = 'Category:'
@@ -61,15 +60,15 @@ class ClassInfo:
"""Info about a class of functions/classes."""
name: str
category: str
- methods: List[FunctionInfo]
- inherited_methods: List[FunctionInfo]
- attributes: List[AttributeInfo]
- parents: List[str]
+ methods: list[FunctionInfo]
+ inherited_methods: list[FunctionInfo]
+ attributes: list[AttributeInfo]
+ parents: list[str]
docs: Optional[str]
- enum_values: Optional[List[str]]
+ enum_values: Optional[list[str]]
-def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str:
+def parse_docs_attrs(attrs: list[AttributeInfo], docs: str) -> str:
"""Given a docs str, parses attribute descriptions contained within."""
docs_lines = docs.splitlines()
attr_line = None
@@ -115,14 +114,14 @@ def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str:
return docs
-def _get_defining_class(cls: Type, name: str) -> Optional[Type]:
+def _get_defining_class(cls: type, name: str) -> Optional[type]:
for i in cls.mro()[1:]:
if hasattr(i, name):
return i
return None
-def _get_bases(cls: Type) -> List[str]:
+def _get_bases(cls: type) -> list[str]:
bases = []
for par in cls.mro()[1:]:
if par is not object:
@@ -199,7 +198,7 @@ def _split_into_paragraphs(docs: str, filter_type: str, indent: int) -> str:
return docs
-def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]:
+def _filter_type_settings(filter_type: str) -> tuple[Optional[Callable], int]:
get_category_href_func = None
if filter_type == 'class':
indent = 30
@@ -216,7 +215,7 @@ def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]:
return get_category_href_func, indent
-def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]:
+def _get_defining_class_backwards(cls: type, name: str) -> Optional[type]:
mro = cls.mro()
mro.reverse()
for i in mro:
@@ -225,7 +224,7 @@ def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]:
return None
-def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]:
+def _get_module_classes(module: ModuleType) -> list[tuple[str, type]]:
names = dir(module)
# Look for all public classes in the provided module.
@@ -250,7 +249,7 @@ def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]:
return classes_by_name
-def _is_inherited(cls: Type, name: str) -> bool:
+def _is_inherited(cls: type, name: str) -> bool:
method = getattr(cls, name)
@@ -314,7 +313,7 @@ def _get_category(docs: str, category_type: CategoryType) -> str:
return category
-def _print_child_classes(category_classes: List[ClassInfo], parent: str,
+def _print_child_classes(category_classes: list[ClassInfo], parent: str,
indent: int) -> str:
out = ''
valid_classes = []
@@ -349,8 +348,8 @@ def _print_child_classes(category_classes: List[ClassInfo], parent: str,
return out
-def _add_inner_classes(class_objs: Sequence[Type],
- classes_by_name: List[Tuple[str, Type]]) -> None:
+def _add_inner_classes(class_objs: Sequence[type],
+ classes_by_name: list[tuple[str, type]]) -> None:
# Ok, now go through all existing classes and look for classes
# defined within.
@@ -371,21 +370,21 @@ class Generator:
"""class which handles docs generation."""
def __init__(self) -> None:
- self._index_keys: List[str] = []
+ self._index_keys: list[str] = []
# Make a list of missing stuff so we can warn about it in one
# big chunk at the end (so the user can batch their corrections).
- self._errors: List[Any] = []
- self._index: Dict[str, Tuple[str, Union[ClassInfo, FunctionInfo,
+ self._errors: list[Any] = []
+ self._index: dict[str, tuple[str, Union[ClassInfo, FunctionInfo,
AttributeInfo]]] = {}
self._out = ''
- self._classes: List[ClassInfo] = []
- self._functions: List[FunctionInfo] = []
- self._merged_categories: List[Tuple[str, str,
- List[Union[ClassInfo,
+ self._classes: list[ClassInfo] = []
+ self._functions: list[FunctionInfo] = []
+ self._merged_categories: list[tuple[str, str,
+ list[Union[ClassInfo,
FunctionInfo]]]] = []
- def name_variants(self, name: str) -> List[str]:
+ def name_variants(self, name: str) -> list[str]:
"""Return variants of a word (such as plural) for linking."""
# Do 'ies' plural for words ending in y.
# (but not things like foo.y or display or prey)
@@ -397,7 +396,7 @@ class Generator:
def _add_index_links(self,
docs: str,
- ignore_links: Optional[List[str]] = None) -> str:
+ ignore_links: Optional[list[str]] = None) -> str:
"""Add links to indexed classes/methods/etc found in a docstr."""
sub_num = 0
subs = {}
@@ -446,14 +445,14 @@ class Generator:
docs = docs.replace(sub_name, sub_val)
return docs
- def _get_all_attrs_for_class(self, cls: Type,
- docs: str) -> Tuple[str, List[AttributeInfo]]:
+ def _get_all_attrs_for_class(self, cls: type,
+ docs: str) -> tuple[str, list[AttributeInfo]]:
"""
if there's an 'Attributes' section in the docs, strip it out and
create attributes entries out of it.
Returns the stripped down docs as well as detected attrs.
"""
- attrs: List[AttributeInfo] = []
+ attrs: list[AttributeInfo] = []
# Start by pulling any type info we find in the doc str.
# (necessary in many non-property cases since there's no other way
@@ -473,7 +472,7 @@ class Generator:
return docs, attrs
def _get_class_level_types_for_doc_attrs(
- self, cls: Type, attrs: List[AttributeInfo]) -> None:
+ self, cls: type, attrs: list[AttributeInfo]) -> None:
# Take note of all the attrs that we're aware of already;
# these are the ones we can potentially provide type info for.
existing_attrs_by_name = {a.name: a for a in attrs}
@@ -494,8 +493,8 @@ class Generator:
' should just have one')
existing_attrs_by_name[aname].attr_type = aval
- def _get_property_attrs_for_class(self, cls: Type,
- attrs: List[AttributeInfo]) -> None:
+ def _get_property_attrs_for_class(self, cls: type,
+ attrs: list[AttributeInfo]) -> None:
for attrname in dir(cls):
attr = getattr(cls, attrname)
@@ -527,7 +526,7 @@ class Generator:
docs=attrdocs,
attr_type=attrtype))
- def _get_base_docs_for_class(self, cls: Type) -> str:
+ def _get_base_docs_for_class(self, cls: type) -> str:
if cls.__doc__ is not None:
docs = cls.__doc__
docs_lines = docs.splitlines()
@@ -556,13 +555,13 @@ class Generator:
self._errors.append(f'base docs for class {cls}')
return docs
- def _get_enum_values_for_class(self, cls: Type) -> Optional[List[str]]:
+ def _get_enum_values_for_class(self, cls: type) -> Optional[list[str]]:
if issubclass(cls, Enum):
return [val.name for val in cls]
return None
def _get_methods_for_class(
- self, cls: Type) -> Tuple[List[FunctionInfo], List[FunctionInfo]]:
+ self, cls: type) -> tuple[list[FunctionInfo], list[FunctionInfo]]:
import types
method_types = [
@@ -576,8 +575,8 @@ class Generator:
and '_no_init' not in name
]
- methods: List[FunctionInfo] = []
- inherited_methods: List[FunctionInfo] = []
+ methods: list[FunctionInfo] = []
+ inherited_methods: list[FunctionInfo] = []
for mth in methods_raw:
# Protocols seem to give this...
@@ -616,8 +615,8 @@ class Generator:
is_class_method=is_class_method))
return methods, inherited_methods
- def _python_method_docs(self, cls: Type,
- mth: Callable) -> Tuple[str, bool]:
+ def _python_method_docs(self, cls: type,
+ mth: Callable) -> tuple[str, bool]:
import pydoc
mdocs_lines = pydoc.plain(pydoc.render_doc(mth)).splitlines()[2:]
@@ -664,9 +663,9 @@ class Generator:
mdocs = '\n'.join(mdocs_lines)
return mdocs, is_class_method
- def _handle_single_line_method_docs(self, cls: Type,
- mdocs_lines: List[str],
- mth: Callable) -> List[str]:
+ def _handle_single_line_method_docs(self, cls: type,
+ mdocs_lines: list[str],
+ mth: Callable) -> list[str]:
import pydoc
for testclass in cls.mro()[1:]:
testm = getattr(testclass, mth.__name__, None)
@@ -734,7 +733,7 @@ class Generator:
# ones are searched first (such as nested classes like ba.Foo.Bar).
self._index_keys.reverse()
- def _write_inherited_attrs(self, inherited_attrs: Dict[str, str]) -> None:
+ def _write_inherited_attrs(self, inherited_attrs: dict[str, str]) -> None:
style = (' style="padding-left: 0px;"' if DO_STYLES else '')
self._out += f'Attributes Inherited: \n'
style = (' style="padding-left: 30px;"' if DO_STYLES else '')
@@ -749,7 +748,7 @@ class Generator:
self._out += '\n'
def _write_attrs(self, cls: ClassInfo,
- attributes: List[AttributeInfo]) -> None:
+ attributes: list[AttributeInfo]) -> None:
# Include a block of links to our attrs if we have more
# than one.
if len(attributes) > 1:
@@ -788,8 +787,8 @@ class Generator:
self._out += ' \n'
def _write_class_attrs_all(self, cls: ClassInfo,
- attributes: List[AttributeInfo],
- inherited_attrs: Dict[str, str]) -> None:
+ attributes: list[AttributeInfo],
+ inherited_attrs: dict[str, str]) -> None:
# If this class has no non-inherited attrs, just print a link to
# the base class instead of repeating everything.
# Nevermind for now; we never have many attrs so this isn't as
@@ -852,7 +851,7 @@ class Generator:
self._out += '\n'
def _write_methods_for_class(self, cls: ClassInfo,
- methods: List[FunctionInfo]) -> None:
+ methods: list[FunctionInfo]) -> None:
"""Dump methods for a class."""
if cls.methods:
# Just say "methods" if we had no inherited ones.
@@ -973,8 +972,8 @@ class Generator:
'<top level class> \n')
def _get_inherited_attrs(self, cls: ClassInfo,
- attr_name_set: Set[str]) -> Dict[str, str]:
- inherited_attrs: Dict[str, str] = {}
+ attr_name_set: set[str]) -> dict[str, str]:
+ inherited_attrs: dict[str, str] = {}
for par in cls.parents:
if par in self._index:
parent_class = self._index[par][1]
@@ -1110,7 +1109,7 @@ class Generator:
self._out += (f'\n')
- classes_sorted = cast(List[ClassInfo], cmembers)
+ classes_sorted = cast(list[ClassInfo], cmembers)
classes_sorted.sort(key=lambda x: x.name.lower())
pcc = _print_child_classes(classes_sorted, '', 0)
self._out += pcc
@@ -1121,7 +1120,7 @@ class Generator:
_get_function_category_href(cname) + '">' +
cname + '\n'
'\n')
- funcs = cast(List[FunctionInfo], cmembers)
+ funcs = cast(list[FunctionInfo], cmembers)
funcs.sort(key=lambda x: x.name.lower())
for fnc in funcs:
self._out += (' '):
sig = ('# Show that ur return type varies based on "doraise" value:\n'
'@overload\n'
- 'def getdelegate(self, type: Type[_T],'
+ 'def getdelegate(self, type: type[_T],'
' doraise: Literal[False] = False) -> Optional[_T]:\n'
' ...\n'
'\n'
'@overload\n'
- 'def getdelegate(self, type: Type[_T],'
+ 'def getdelegate(self, type: type[_T],'
' doraise: Literal[True]) -> _T:\n'
' ...\n'
'\n'
@@ -210,29 +210,29 @@ def _writefuncs(parent: Any, funcnames: Sequence[str], indent: int,
# We use 'object' when we mean "can vary"
# don't want pylint making assumptions in this case.
returnstr = 'return _uninferrable()'
- elif returns == 'Tuple[float, float]':
+ elif returns == 'tuple[float, float]':
returnstr = 'return (0.0, 0.0)'
elif returns == 'Optional[str]':
returnstr = "return ''"
- elif returns == 'Tuple[float, float, float, float]':
+ elif returns == 'tuple[float, float, float, float]':
returnstr = 'return (0.0, 0.0, 0.0, 0.0)'
elif returns == 'Optional[ba.Widget]':
returnstr = 'return Widget()'
elif returns == 'Optional[ba.InputDevice]':
returnstr = 'return InputDevice()'
- elif returns == 'List[ba.Widget]':
+ elif returns == 'list[ba.Widget]':
returnstr = 'return [Widget()]'
- elif returns == 'Tuple[float, ...]':
+ elif returns == 'tuple[float, ...]':
returnstr = 'return (0.0, 0.0, 0.0)'
- elif returns == 'List[str]':
+ elif returns == 'list[str]':
returnstr = "return ['blah', 'blah2']"
elif returns == 'Union[float, int]':
returnstr = 'return 0.0'
- elif returns == 'Dict[str, Any]':
+ elif returns == 'dict[str, Any]':
returnstr = "return {'foo': 'bar'}"
- elif returns in ('Optional[Tuple[int, int]]', 'Tuple[int, int]'):
+ elif returns in ('Optional[tuple[int, int]]', 'tuple[int, int]'):
returnstr = 'return (0, 0)'
- elif returns == 'List[Dict[str, Any]]':
+ elif returns == 'list[dict[str, Any]]':
returnstr = "return [{'foo': 'bar'}]"
elif returns in [
'session.Session', 'team.Team', '_app.App',
@@ -531,7 +531,7 @@ def _writeclasses(module: ModuleType, classnames: Sequence[str]) -> str:
# Scan its doc-string for attribute info; drop in typed
# declarations for any that we find.
- attrs: List[AttributeInfo] = []
+ attrs: list[AttributeInfo] = []
parse_docs_attrs(attrs, docstr)
if attrs:
for attr in attrs:
@@ -628,8 +628,7 @@ def generate(sources_hash: str, outfilename: str) -> None:
'from ba._generated.enums import TimeFormat, TimeType\n'
'\n'
'if TYPE_CHECKING:\n'
- ' from typing import (Any, Dict, Callable, Tuple, '
- ' List, Optional, Union, List, Type, Literal)\n'
+ ' from typing import Any, Callable, Optional, Union, Literal\n'
' from ba._app import App\n'
' import ba\n'
'\n'
@@ -663,7 +662,7 @@ def generate(sources_hash: str, outfilename: str) -> None:
check=True)
-def _dummy_module_dirty() -> Tuple[bool, str]:
+def _dummy_module_dirty() -> tuple[bool, str]:
"""Test hashes on the dummy module to see if it needs updates."""
# Let's generate a hash from all sources under the python source dir.
diff --git a/tools/batools/meta.py b/tools/batools/meta.py
index a4f1b1e8..2eb2e2a5 100644
--- a/tools/batools/meta.py
+++ b/tools/batools/meta.py
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import List, Sequence, Optional, Any, Dict
+ from typing import Optional
def gen_flat_data_code(projroot: str, in_path: str, out_path: str,
diff --git a/tools/batools/metamakefile.py b/tools/batools/metamakefile.py
index 168e9586..fd157ebb 100755
--- a/tools/batools/metamakefile.py
+++ b/tools/batools/metamakefile.py
@@ -19,7 +19,7 @@ from efro.terminal import Clr
from efrotools import getconfig
if TYPE_CHECKING:
- from typing import Optional, Set, List, Dict, Any, Tuple
+ from typing import Optional, Any
# These paths need to be relative to the dir we're writing the Makefile to.
TOOLS_DIR = '../../tools'
@@ -31,7 +31,7 @@ OUT_DIR_PYTHON = '../../assets/src/ba_data/python/ba/_generated'
@dataclass
class Target:
"""A target to be added to the Makefile."""
- src: List[str]
+ src: list[str]
dst: str
cmd: str
mkdir: bool = False
@@ -45,10 +45,10 @@ class Target:
return out
-def _emit_group_build_lines(targets: List[Target], basename: str) -> List[str]:
+def _emit_group_build_lines(targets: list[Target], basename: str) -> list[str]:
"""Gen a group build target."""
del basename # Unused.
- out: List[str] = []
+ out: list[str] = []
if not targets:
return out
all_dsts = set()
@@ -59,9 +59,9 @@ def _emit_group_build_lines(targets: List[Target], basename: str) -> List[str]:
return out
-def _emit_group_efrocache_lines(targets: List[Target]) -> List[str]:
+def _emit_group_efrocache_lines(targets: list[Target]) -> list[str]:
"""Gen a group clean target."""
- out: List[str] = []
+ out: list[str] = []
if not targets:
return out
all_dsts = set()
@@ -81,7 +81,7 @@ def _emit_group_efrocache_lines(targets: List[Target]) -> List[str]:
return out
-def _add_enums_module_target(targets: List[Target]) -> None:
+def _add_enums_module_target(targets: list[Target]) -> None:
targets.append(
Target(
src=[
@@ -93,7 +93,7 @@ def _add_enums_module_target(targets: List[Target]) -> None:
))
-def _add_init_module_target(targets: List[Target]) -> None:
+def _add_init_module_target(targets: list[Target]) -> None:
targets.append(
Target(
src=[os.path.join(TOOLS_DIR, 'batools', 'pcommand.py')],
@@ -102,7 +102,7 @@ def _add_init_module_target(targets: List[Target]) -> None:
))
-def _add_python_embedded_targets(targets: List[Target]) -> None:
+def _add_python_embedded_targets(targets: list[Target]) -> None:
pkg = 'bameta'
# Note: sort to keep things deterministic.
for fname in sorted(os.listdir(f'src/meta/{pkg}/python_embedded')):
@@ -128,7 +128,7 @@ def _add_python_embedded_targets(targets: List[Target]) -> None:
cmd=f'$(PCOMMAND) gen_flat_data_code $< $@ {name}_code'))
-def _add_python_embedded_targets_internal(targets: List[Target]) -> None:
+def _add_python_embedded_targets_internal(targets: list[Target]) -> None:
pkg = 'bametainternal'
# Note: sort to keep things deterministic.
for fname in sorted(os.listdir(f'src/meta/{pkg}/python_embedded')):
@@ -147,7 +147,7 @@ def _add_python_embedded_targets_internal(targets: List[Target]) -> None:
cmd='$(PCOMMAND) gen_encrypted_python_code $< $@'))
-def _empty_line_if(condition: bool) -> List[str]:
+def _empty_line_if(condition: bool) -> list[str]:
return [''] if condition else []
@@ -188,8 +188,8 @@ def update(projroot: str, check: bool) -> None:
# We'll generate manifests of all public/private files we generate
# (not private-internal though).
- all_dsts_public: Set[str] = set()
- all_dsts_private: Set[str] = set()
+ all_dsts_public: set[str] = set()
+ all_dsts_private: set[str] = set()
auto_start_public = lines.index('#__AUTOGENERATED_PUBLIC_BEGIN__')
auto_end_public = lines.index('#__AUTOGENERATED_PUBLIC_END__')
@@ -197,7 +197,7 @@ def update(projroot: str, check: bool) -> None:
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__')
# Public targets (full sources available in public)
- targets: List[Target] = []
+ targets: list[Target] = []
pubtargets = targets
basename = 'public'
_add_python_embedded_targets(targets)
diff --git a/tools/batools/pcommand.py b/tools/batools/pcommand.py
index 47eb4bb7..0e8e6495 100644
--- a/tools/batools/pcommand.py
+++ b/tools/batools/pcommand.py
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
from efrotools.pcommand import PROJROOT
if TYPE_CHECKING:
- from typing import Optional, List, Set, Dict
+ from typing import Optional
def stage_server_file() -> None:
@@ -361,6 +361,13 @@ def python_android_patch() -> None:
pybuild.android_patch()
+def python_apple_patch() -> None:
+ """Patches Python to prep for building for Apple platforms."""
+ from efrotools import pybuild
+ arch = sys.argv[2]
+ pybuild.apple_patch(arch)
+
+
def python_gather() -> None:
"""Gather build python components into the project.
@@ -685,7 +692,7 @@ def android_archive_unstripped_libs() -> None:
subprocess.run(['rm', dstpath], check=True)
-def _camel_case_split(string: str) -> List[str]:
+def _camel_case_split(string: str) -> list[str]:
words = [[string[0]]]
for char in string[1:]:
if words[-1][-1].islower() and char.isupper():
@@ -702,7 +709,7 @@ def efro_gradle() -> None:
from efrotools.android import filter_gradle_file
args = ['./gradlew'] + sys.argv[2:]
print(f'{Clr.BLU}Running gradle with args:{Clr.RST} {args}.', flush=True)
- enabled_tags: Set[str] = {'true'}
+ enabled_tags: set[str] = {'true'}
target_words = [w.lower() for w in _camel_case_split(args[-1])]
if 'google' in target_words:
enabled_tags = {'google', 'crashlytics'}
@@ -859,7 +866,7 @@ def win_ci_install_prereqs() -> None:
# build to succeed. Normally this would happen through our Makefile
# targets but we can't use them under raw window so we need to just
# hard-code whatever we need here.
- needed_targets: Set[str] = {
+ needed_targets: set[str] = {
'build/prefab/lib/windows/Debug_Win32/'
'BallisticaCoreGenericInternal.lib',
'build/prefab/lib/windows/Debug_Win32/'
@@ -871,10 +878,10 @@ def win_ci_install_prereqs() -> None:
# and pick out anything we need for our basic builds/tests.
with open('src/meta/.meta_manifest_public.json',
encoding='utf-8') as infile:
- meta_public: List[str] = json.loads(infile.read())
+ meta_public: list[str] = json.loads(infile.read())
with open('src/meta/.meta_manifest_private.json',
encoding='utf-8') as infile:
- meta_private: List[str] = json.loads(infile.read())
+ meta_private: list[str] = json.loads(infile.read())
for target in meta_public + meta_private:
if (target.startswith('src/ballistica/generated/') or
target.startswith('assets/src/ba_data/python/ba/_generated/')):
diff --git a/tools/batools/project.py b/tools/batools/project.py
index 6a7e0c2c..7352e45e 100755
--- a/tools/batools/project.py
+++ b/tools/batools/project.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""General project related functionality."""
@@ -15,7 +15,7 @@ from efro.error import CleanError
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import Optional, Tuple, List, Dict, Set
+ from typing import Optional
def project_centric_path(projroot: str, path: str) -> str:
@@ -52,23 +52,23 @@ class Updater:
self._check = check
self._fix = fix
self._checkarg = ' --check' if self._check else ''
- self._checkarglist: List[str] = ['--check'] if self._check else []
+ self._checkarglist: list[str] = ['--check'] if self._check else []
# We behave differently in the public repo
self._public = getconfig(Path('.'))['public']
assert isinstance(self._public, bool)
- self._source_files: List[str] = []
- self._header_files: List[str] = []
+ self._source_files: list[str] = []
+ self._header_files: list[str] = []
- self._line_corrections: Dict[str, List[LineChange]] = {}
- self._file_changes: Dict[str, str] = {}
+ self._line_corrections: dict[str, list[LineChange]] = {}
+ self._file_changes: dict[str, str] = {}
self._license_line_checks = bool(
getlocalconfig(Path('.')).get('license_line_checks', True))
- self._internal_source_dirs: Optional[Set[str]] = None
- self._internal_source_files: Optional[Set[str]] = None
+ self._internal_source_dirs: Optional[set[str]] = None
+ self._internal_source_files: Optional[set[str]] = None
def run(self) -> None:
"""Do the thing."""
@@ -118,13 +118,13 @@ class Updater:
else:
print(f'{Clr.GRN}Update-Project: SUCCESS!{Clr.RST}')
- def _get_internal_source_files(self) -> Set[str]:
+ def _get_internal_source_files(self) -> set[str]:
from pathlib import Path
from efrotools import getconfig
# Fetch/calc just once and cache results.
if self._internal_source_files is None:
- sources: List[str]
+ sources: list[str]
if self._public:
sources = []
else:
@@ -135,13 +135,13 @@ class Updater:
self._internal_source_files = set(sources)
return self._internal_source_files
- def _get_internal_source_dirs(self) -> Set[str]:
+ def _get_internal_source_dirs(self) -> set[str]:
from pathlib import Path
from efrotools import getconfig
# Fetch/calc just once and cache results.
if self._internal_source_dirs is None:
- sources: List[str]
+ sources: list[str]
if self._public:
sources = []
else:
@@ -181,8 +181,8 @@ class Updater:
def _apply_line_changes(self) -> None:
# Build a flat list of entries that can and can-not be auto applied.
- manual_changes: List[Tuple[str, LineChange]] = []
- auto_changes: List[Tuple[str, LineChange]] = []
+ manual_changes: list[tuple[str, LineChange]] = []
+ auto_changes: list[tuple[str, LineChange]] = []
for fname, entries in self._line_corrections.items():
for entry in entries:
if entry.can_auto_update:
@@ -271,7 +271,7 @@ class Updater:
expected=expected,
can_auto_update=can_auto_update))
- def _check_c_license(self, fname: str, lines: List[str]) -> None:
+ def _check_c_license(self, fname: str, lines: list[str]) -> None:
from efrotools import get_public_license
# Look for public license line (public or private repo)
@@ -493,11 +493,11 @@ class Updater:
self._update_visual_studio_project_filters(filtered, fname, src_root)
- def _update_visual_studio_project_filters(self, lines_in: List[str],
+ def _update_visual_studio_project_filters(self, lines_in: list[str],
fname: str,
src_root: str) -> None:
- filterpaths: Set[str] = set()
- filterlines: List[str] = [
+ filterpaths: set[str] = set()
+ filterlines: list[str] = [
'',
'',
diff --git a/tools/batools/pythonenumsmodule.py b/tools/batools/pythonenumsmodule.py
index 08b02b77..dbd56d2d 100755
--- a/tools/batools/pythonenumsmodule.py
+++ b/tools/batools/pythonenumsmodule.py
@@ -15,7 +15,7 @@ from efro.terminal import Clr
from efrotools import get_public_license
if TYPE_CHECKING:
- from typing import Optional, List, Tuple
+ from typing import Optional
def camel_case_convert(name: str) -> str:
@@ -26,7 +26,7 @@ def camel_case_convert(name: str) -> str:
def _gen_enums(infilename: str) -> str:
out = ''
- enum_lnums: List[int] = []
+ enum_lnums: list[int] = []
with open(infilename, encoding='utf-8') as infile:
lines = infile.read().splitlines()
@@ -56,7 +56,7 @@ def _gen_enums(infilename: str) -> str:
for line in out.splitlines()) + '\n')
-def _parse_name(lines: List[str], lnum: int) -> str:
+def _parse_name(lines: list[str], lnum: int) -> str:
bits = lines[lnum].split(' ')
if (len(bits) != 4 or bits[0] != 'enum' or bits[1] != 'class'
or bits[3] != '{'):
@@ -65,7 +65,7 @@ def _parse_name(lines: List[str], lnum: int) -> str:
return enum_name
-def _parse_values(lines: List[str], lnum: int, lnumend: int, out: str) -> str:
+def _parse_values(lines: list[str], lnum: int, lnumend: int, out: str) -> str:
val = 0
for i in range(lnum + 1, lnumend):
line = lines[i]
@@ -108,7 +108,7 @@ def _parse_values(lines: List[str], lnum: int, lnumend: int, out: str) -> str:
return out
-def _find_enum_end(lines: List[str], lnum: int) -> int:
+def _find_enum_end(lines: list[str], lnum: int) -> int:
lnumend = lnum + 1
while True:
if lnumend > len(lines) - 1:
@@ -119,10 +119,10 @@ def _find_enum_end(lines: List[str], lnum: int) -> int:
return lnumend
-def _parse_doc_lines(lines: List[str], lnum: int) -> Tuple[List[str], int]:
+def _parse_doc_lines(lines: list[str], lnum: int) -> tuple[list[str], int]:
# First parse the doc-string
- doclines: List[str] = []
+ doclines: list[str] = []
lnumorig = lnum
while True:
if lnum > len(lines) - 1:
diff --git a/tools/batools/resourcesmakefile.py b/tools/batools/resourcesmakefile.py
index d18b5f0b..31048bdd 100755
--- a/tools/batools/resourcesmakefile.py
+++ b/tools/batools/resourcesmakefile.py
@@ -16,13 +16,13 @@ from efro.error import CleanError
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import Optional, List, Dict
+ pass
@dataclass
class Target:
"""A target to be added to the Makefile."""
- src: List[str]
+ src: list[str]
dst: str
cmd: str
mkdir: bool = False
@@ -36,10 +36,10 @@ class Target:
return out
-def _emit_group_build_lines(targets: List[Target], basename: str) -> List[str]:
+def _emit_group_build_lines(targets: list[Target], basename: str) -> list[str]:
"""Gen a group build target."""
del basename # Unused.
- out: List[str] = []
+ out: list[str] = []
if not targets:
return out
all_dsts = set()
@@ -50,9 +50,9 @@ def _emit_group_build_lines(targets: List[Target], basename: str) -> List[str]:
return out
-def _emit_group_clean_lines(targets: List[Target], basename: str) -> List[str]:
+def _emit_group_clean_lines(targets: list[Target], basename: str) -> list[str]:
"""Gen a group clean target."""
- out: List[str] = []
+ out: list[str] = []
if not targets:
return out
out.append(f'clean: clean-{basename}\n')
@@ -65,9 +65,9 @@ def _emit_group_clean_lines(targets: List[Target], basename: str) -> List[str]:
return out
-def _emit_group_efrocache_lines(targets: List[Target]) -> List[str]:
+def _emit_group_efrocache_lines(targets: list[Target]) -> list[str]:
"""Gen a group clean target."""
- out: List[str] = []
+ out: list[str] = []
if not targets:
return out
all_dsts = set()
@@ -94,7 +94,7 @@ RES_DIR = '.'
RESIZE_CMD = os.path.join(TOOLS_DIR, 'pcommand resize_image')
-def _add_windows_icon(targets: List[Target], generic: bool, oculus: bool,
+def _add_windows_icon(targets: list[Target], generic: bool, oculus: bool,
inputs: bool) -> None:
sizes = [256, 128, 96, 64, 48, 32, 16]
@@ -125,7 +125,7 @@ def _add_windows_icon(targets: List[Target], generic: bool, oculus: bool,
targets.append(Target(src=all_icons, dst=path, cmd=cmd))
-def _add_ios_app_icon(targets: List[Target]) -> None:
+def _add_ios_app_icon(targets: list[Target]) -> None:
sizes = [(20, 2), (20, 3), (29, 2), (29, 3), (40, 2), (40, 3), (60, 2),
(60, 3), (20, 1), (29, 1), (40, 1), (76, 1), (76, 2), (83.5, 2),
(1024, 1)]
@@ -143,7 +143,7 @@ def _add_ios_app_icon(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd))
-def _add_macos_app_icon(targets: List[Target]) -> None:
+def _add_macos_app_icon(targets: list[Target]) -> None:
sizes = [(16, 1), (16, 2), (32, 1), (32, 2), (128, 1), (128, 2), (256, 1),
(256, 2), (512, 1), (512, 2)]
for size in sizes:
@@ -164,7 +164,7 @@ def _add_macos_app_icon(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd))
-def _add_android_app_icon(targets: List[Target],
+def _add_android_app_icon(targets: list[Target],
src_name: str = 'icon_clipped.png',
variant_name: str = 'main') -> None:
sizes = [('mdpi', 48), ('hdpi', 72), ('xhdpi', 96), ('xxhdpi', 144),
@@ -182,7 +182,7 @@ def _add_android_app_icon(targets: List[Target],
targets.append(Target(src=[src], dst=dst, cmd=cmd, mkdir=True))
-def _add_android_app_icon_new(targets: List[Target],
+def _add_android_app_icon_new(targets: list[Target],
src_fg_name: str = 'icon_android_layered_fg.png',
src_bg_name: str = 'icon_android_layered_bg.png',
variant_name: str = 'main') -> None:
@@ -214,19 +214,19 @@ def _add_android_app_icon_new(targets: List[Target],
targets.append(Target(src=[src], dst=dst, cmd=cmd, mkdir=True))
-def _add_android_cardboard_app_icon(targets: List[Target]) -> None:
+def _add_android_cardboard_app_icon(targets: list[Target]) -> None:
_add_android_app_icon(targets=targets,
src_name='icon_clipped_vr.png',
variant_name='cardboard')
-def _add_android_cardboard_app_icon_new(targets: List[Target]) -> None:
+def _add_android_cardboard_app_icon_new(targets: list[Target]) -> None:
_add_android_app_icon_new(targets=targets,
src_fg_name='icon_android_layered_fg_vr.png',
variant_name='cardboard')
-def _add_android_tv_banner(targets: List[Target]) -> None:
+def _add_android_tv_banner(targets: list[Target]) -> None:
res = (320, 180)
src = os.path.join(RES_DIR, 'src', 'banner', 'banner_16x9.png')
dst = os.path.join(
@@ -247,7 +247,7 @@ def _add_android_tv_banner(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd, mkdir=True))
-def _add_apple_tv_top_shelf(targets: List[Target]) -> None:
+def _add_apple_tv_top_shelf(targets: list[Target]) -> None:
instances = [('24x9', '', '', 1920, 720),
('29x9', ' Wide', '_wide', 2320, 720)]
for instance in instances:
@@ -272,7 +272,7 @@ def _add_apple_tv_top_shelf(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd))
-def _add_apple_tv_3d_icon(targets: List[Target]) -> None:
+def _add_apple_tv_3d_icon(targets: list[Target]) -> None:
res = (400, 240)
for layer in ['Layer1', 'Layer2', 'Layer3', 'Layer4', 'Layer5']:
for scale in [1, 2]:
@@ -297,7 +297,7 @@ def _add_apple_tv_3d_icon(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd))
-def _add_apple_tv_store_icon(targets: List[Target]) -> None:
+def _add_apple_tv_store_icon(targets: list[Target]) -> None:
res = (1280, 768)
for layer in ['Layer1', 'Layer2', 'Layer3', 'Layer4', 'Layer5']:
for scale in [1]:
@@ -322,7 +322,7 @@ def _add_apple_tv_store_icon(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd))
-def _add_google_vr_icon(targets: List[Target]) -> None:
+def _add_google_vr_icon(targets: list[Target]) -> None:
res = (512, 512)
for layer in ['vr_icon_background', 'vr_icon']:
src = os.path.join(RES_DIR, 'src', 'icon_googlevr', layer + '.png')
@@ -344,7 +344,7 @@ def _add_google_vr_icon(targets: List[Target]) -> None:
targets.append(Target(src=[src], dst=dst, cmd=cmd, mkdir=True))
-def _empty_line_if(condition: bool) -> List[str]:
+def _empty_line_if(condition: bool) -> list[str]:
return [''] if condition else []
@@ -372,7 +372,7 @@ def update(projroot: str, check: bool) -> None:
auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__')
# Public targets (full sources available in public)
- targets: List[Target] = []
+ targets: list[Target] = []
basename = 'public'
our_lines_public = (_empty_line_if(bool(targets)) +
_emit_group_build_lines(targets, basename) +
diff --git a/tools/batools/xcode.py b/tools/batools/xcode.py
index e1f89338..8d5ce148 100755
--- a/tools/batools/xcode.py
+++ b/tools/batools/xcode.py
@@ -16,7 +16,7 @@ import time
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Dict, Any, Optional
+ from typing import Any, Optional
def project_build_path(projroot: str, project_path: str,
@@ -26,7 +26,7 @@ def project_build_path(projroot: str, project_path: str,
config_path = os.path.join(projroot, '.cache', 'xcode_build_path')
out_path = None
- config: Dict[str, Dict[str, Any]] = {}
+ config: dict[str, dict[str, Any]] = {}
build_dir: Optional[str] = None
diff --git a/tools/efro/dataclassio/__init__.py b/tools/efro/dataclassio/__init__.py
index f8eff835..82e46ade 100644
--- a/tools/efro/dataclassio/__init__.py
+++ b/tools/efro/dataclassio/__init__.py
@@ -19,7 +19,7 @@ from efro.dataclassio._prep import ioprep, ioprepped, is_ioprepped_dataclass
from efro.dataclassio._pathcapture import DataclassFieldLookup
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any
__all__ = [
'Codec', 'IOAttrs', 'ioprep', 'ioprepped', 'is_ioprepped_dataclass',
@@ -73,7 +73,7 @@ def dataclass_to_json(obj: Any,
return json.dumps(jdict, separators=(',', ':'))
-def dataclass_from_dict(cls: Type[T],
+def dataclass_from_dict(cls: type[T],
values: dict,
codec: Codec = Codec.JSON,
coerce_to_float: bool = True,
@@ -109,7 +109,7 @@ def dataclass_from_dict(cls: Type[T],
discard_unknown_attrs=discard_unknown_attrs).run(values)
-def dataclass_from_json(cls: Type[T],
+def dataclass_from_json(cls: type[T],
json_str: str,
coerce_to_float: bool = True,
allow_unknown_attrs: bool = True,
diff --git a/tools/efro/dataclassio/_base.py b/tools/efro/dataclassio/_base.py
index 24318c06..492a8d46 100644
--- a/tools/efro/dataclassio/_base.py
+++ b/tools/efro/dataclassio/_base.py
@@ -8,10 +8,9 @@ import dataclasses
import typing
import datetime
from enum import Enum
-from typing import TYPE_CHECKING
-# Note: can pull this from typing once we update to Python 3.9+
+from typing import TYPE_CHECKING, get_args
# noinspection PyProtectedMember
-from typing_extensions import get_args, _AnnotatedAlias
+from typing import _AnnotatedAlias # type: ignore
_pytz_utc: Any
@@ -23,7 +22,7 @@ except ModuleNotFoundError:
_pytz_utc = None # pylint: disable=invalid-name
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any, Optional
# Types which we can pass through as-is.
SIMPLE_TYPES = {int, bool, str, float, type(None)}
@@ -41,8 +40,8 @@ def _ensure_datetime_is_timezone_aware(value: datetime.datetime) -> None:
'datetime values must have timezone set as timezone.utc')
-def _raise_type_error(fieldpath: str, valuetype: Type,
- expected: Tuple[Type, ...]) -> None:
+def _raise_type_error(fieldpath: str, valuetype: type,
+ expected: tuple[type, ...]) -> None:
"""Raise an error when a field value's type does not match expected."""
assert isinstance(expected, tuple)
assert all(isinstance(e, type) for e in expected)
@@ -121,7 +120,7 @@ class IOAttrs:
if whole_hours != cls.whole_hours:
self.whole_hours = whole_hours
- def validate_for_field(self, cls: Type, field: dataclasses.Field) -> None:
+ def validate_for_field(self, cls: type, field: dataclasses.Field) -> None:
"""Ensure the IOAttrs instance is ok to use with the provided field."""
# Turning off store_default requires the field to have either
@@ -161,7 +160,7 @@ def _get_origin(anntype: Any) -> Any:
return anntype if origin is None else origin
-def _parse_annotated(anntype: Any) -> Tuple[Any, Optional[IOAttrs]]:
+def _parse_annotated(anntype: Any) -> tuple[Any, Optional[IOAttrs]]:
"""Parse Annotated() constructs, returning annotated type & IOAttrs."""
# If we get an Annotated[foo, bar, eep] we take
# foo as the actual type and we look for IOAttrs instances in
diff --git a/tools/efro/dataclassio/_inputter.py b/tools/efro/dataclassio/_inputter.py
index 80a94f4b..911fe4f0 100644
--- a/tools/efro/dataclassio/_inputter.py
+++ b/tools/efro/dataclassio/_inputter.py
@@ -22,7 +22,7 @@ from efro.dataclassio._base import (Codec, _parse_annotated, EXTRA_ATTRS_ATTR,
from efro.dataclassio._prep import PrepSession
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any, Optional
from efro.dataclassio._base import IOAttrs
T = TypeVar('T')
@@ -31,7 +31,7 @@ T = TypeVar('T')
class _Inputter(Generic[T]):
def __init__(self,
- cls: Type[T],
+ cls: type[T],
codec: Codec,
coerce_to_float: bool,
allow_unknown_attrs: bool = True,
@@ -52,7 +52,7 @@ class _Inputter(Generic[T]):
assert isinstance(out, self._cls)
return out
- def _value_from_input(self, cls: Type, fieldpath: str, anntype: Any,
+ def _value_from_input(self, cls: type, fieldpath: str, anntype: Any,
value: Any, ioattrs: Optional[IOAttrs]) -> Any:
"""Convert an assigned value to what a dataclass field expects."""
# pylint: disable=too-many-return-statements
@@ -122,7 +122,7 @@ class _Inputter(Generic[T]):
raise TypeError(
f"Field '{fieldpath}' of type '{anntype}' is unsupported here.")
- def _bytes_from_input(self, cls: Type, fieldpath: str,
+ def _bytes_from_input(self, cls: type, fieldpath: str,
value: Any) -> bytes:
"""Given input data, returns bytes."""
import base64
@@ -142,7 +142,7 @@ class _Inputter(Generic[T]):
f' on {cls.__name__}; got a {type(value)}.')
return base64.b64decode(value)
- def _dataclass_from_input(self, cls: Type, fieldpath: str,
+ def _dataclass_from_input(self, cls: type, fieldpath: str,
values: dict) -> Any:
"""Given a dict, instantiates a dataclass of the given type.
@@ -165,7 +165,7 @@ class _Inputter(Generic[T]):
# noinspection PyDataclass
fields = dataclasses.fields(cls)
fields_by_name = {f.name: f for f in fields}
- args: Dict[str, Any] = {}
+ args: dict[str, Any] = {}
for rawkey, value in values.items():
key = prep.storage_names_to_attr_names.get(rawkey, rawkey)
field = fields_by_name.get(key)
@@ -206,7 +206,7 @@ class _Inputter(Generic[T]):
setattr(out, EXTRA_ATTRS_ATTR, extra_attrs)
return out
- def _dict_from_input(self, cls: Type, fieldpath: str, anntype: Any,
+ def _dict_from_input(self, cls: type, fieldpath: str, anntype: Any,
value: Any, ioattrs: Optional[IOAttrs]) -> Any:
# pylint: disable=too-many-branches
# pylint: disable=too-many-locals
@@ -219,7 +219,7 @@ class _Inputter(Generic[T]):
childtypes = typing.get_args(anntype)
assert len(childtypes) in (0, 2)
- out: Dict
+ out: dict
# We treat 'Any' dicts simply as json; we don't do any translating.
if not childtypes or childtypes[0] is typing.Any:
@@ -305,8 +305,8 @@ class _Inputter(Generic[T]):
return out
- def _sequence_from_input(self, cls: Type, fieldpath: str, anntype: Any,
- value: Any, seqtype: Type,
+ def _sequence_from_input(self, cls: type, fieldpath: str, anntype: Any,
+ value: Any, seqtype: type,
ioattrs: Optional[IOAttrs]) -> Any:
# Because we are json-centric, we expect a list for all sequences.
@@ -332,7 +332,7 @@ class _Inputter(Generic[T]):
self._value_from_input(cls, fieldpath, childanntype, i, ioattrs)
for i in value)
- def _datetime_from_input(self, cls: Type, fieldpath: str, value: Any,
+ def _datetime_from_input(self, cls: type, fieldpath: str, value: Any,
ioattrs: Optional[IOAttrs]) -> Any:
# For firestore we expect a datetime object.
@@ -364,10 +364,10 @@ class _Inputter(Generic[T]):
ioattrs.validate_datetime(out, fieldpath)
return out
- def _tuple_from_input(self, cls: Type, fieldpath: str, anntype: Any,
+ def _tuple_from_input(self, cls: type, fieldpath: str, anntype: Any,
value: Any, ioattrs: Optional[IOAttrs]) -> Any:
- out: List = []
+ out: list = []
# Because we are json-centric, we expect a list for all sequences.
if type(value) is not list:
diff --git a/tools/efro/dataclassio/_outputter.py b/tools/efro/dataclassio/_outputter.py
index d46c9359..9dc193e8 100644
--- a/tools/efro/dataclassio/_outputter.py
+++ b/tools/efro/dataclassio/_outputter.py
@@ -21,7 +21,7 @@ from efro.dataclassio._base import (Codec, _parse_annotated, EXTRA_ATTRS_ATTR,
from efro.dataclassio._prep import PrepSession
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any, Optional
from efro.dataclassio._base import IOAttrs
@@ -39,13 +39,13 @@ class _Outputter:
"""Do the thing."""
return self._process_dataclass(type(self._obj), self._obj, '')
- def _process_dataclass(self, cls: Type, obj: Any, fieldpath: str) -> Any:
+ def _process_dataclass(self, cls: type, obj: Any, fieldpath: str) -> Any:
# pylint: disable=too-many-locals
# pylint: disable=too-many-branches
prep = PrepSession(explicit=False).prep_dataclass(type(obj),
recursion_level=0)
fields = dataclasses.fields(obj)
- out: Optional[Dict[str, Any]] = {} if self._create else None
+ out: Optional[dict[str, Any]] = {} if self._create else None
for field in fields:
fieldname = field.name
if fieldpath:
@@ -95,7 +95,7 @@ class _Outputter:
out.update(extra_attrs)
return out
- def _process_value(self, cls: Type, fieldpath: str, anntype: Any,
+ def _process_value(self, cls: type, fieldpath: str, anntype: Any,
value: Any, ioattrs: Optional[IOAttrs]) -> Any:
# pylint: disable=too-many-return-statements
# pylint: disable=too-many-branches
@@ -259,7 +259,7 @@ class _Outputter:
raise TypeError(
f"Field '{fieldpath}' of type '{anntype}' is unsupported here.")
- def _process_bytes(self, cls: Type, fieldpath: str, value: bytes) -> Any:
+ def _process_bytes(self, cls: type, fieldpath: str, value: bytes) -> Any:
import base64
if not isinstance(value, bytes):
raise TypeError(
@@ -276,7 +276,7 @@ class _Outputter:
assert self._codec is Codec.FIRESTORE
return value
- def _process_dict(self, cls: Type, fieldpath: str, anntype: Any,
+ def _process_dict(self, cls: type, fieldpath: str, anntype: Any,
value: dict, ioattrs: Optional[IOAttrs]) -> Any:
# pylint: disable=too-many-branches
if not isinstance(value, dict):
@@ -299,7 +299,7 @@ class _Outputter:
# Ok; we've got a definite key type (which we verified as valid
# during prep). Make sure all keys match it.
- out: Optional[Dict] = {} if self._create else None
+ out: Optional[dict] = {} if self._create else None
keyanntype, valanntype = childtypes
# str keys we just export directly since that's supported by json.
diff --git a/tools/efro/dataclassio/_pathcapture.py b/tools/efro/dataclassio/_pathcapture.py
index cd781dae..d325b6a9 100644
--- a/tools/efro/dataclassio/_pathcapture.py
+++ b/tools/efro/dataclassio/_pathcapture.py
@@ -11,7 +11,7 @@ from efro.dataclassio._base import _parse_annotated, _get_origin
from efro.dataclassio._prep import PrepSession
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set, Callable
+ from typing import Any, Callable
T = TypeVar('T')
@@ -19,7 +19,7 @@ T = TypeVar('T')
class _PathCapture:
"""Utility for obtaining dataclass storage paths in a type safe way."""
- def __init__(self, obj: Any, pathparts: List[str] = None):
+ def __init__(self, obj: Any, pathparts: list[str] = None):
self._is_dataclass = dataclasses.is_dataclass(obj)
if pathparts is None:
pathparts = []
@@ -55,7 +55,7 @@ class _PathCapture:
class DataclassFieldLookup(Generic[T]):
"""Get info about nested dataclass fields in type-safe way."""
- def __init__(self, cls: Type[T]) -> None:
+ def __init__(self, cls: type[T]) -> None:
self.cls = cls
def path(self, callback: Callable[[T], Any]) -> str:
@@ -85,7 +85,7 @@ class DataclassFieldLookup(Generic[T]):
return out.path
return ''
- def paths(self, callback: Callable[[T], List[Any]]) -> List[str]:
+ def paths(self, callback: Callable[[T], list[Any]]) -> list[str]:
"""Look up multiple paths on child dataclass fields.
Functionality is identical to path() but for multiple paths at once.
@@ -93,7 +93,7 @@ class DataclassFieldLookup(Generic[T]):
example:
DataclassFieldLookup(MyType).paths(lambda obj: [obj.foo, obj.bar])
"""
- outvals: List[str] = []
+ outvals: list[str] = []
if not TYPE_CHECKING:
outs = callback(_PathCapture(self.cls))
assert isinstance(outs, list)
diff --git a/tools/efro/dataclassio/_prep.py b/tools/efro/dataclassio/_prep.py
index 5285ef94..55cc814f 100644
--- a/tools/efro/dataclassio/_prep.py
+++ b/tools/efro/dataclassio/_prep.py
@@ -13,15 +13,13 @@ from enum import Enum
import dataclasses
import typing
import datetime
-from typing import TYPE_CHECKING, TypeVar
-# Note: can pull this from typing once we update to Python 3.9+
-# noinspection PyProtectedMember
-from typing_extensions import get_type_hints
+from typing import TYPE_CHECKING, TypeVar, get_type_hints
+# noinspection PyProtectedMember
from efro.dataclassio._base import _parse_annotated, _get_origin, SIMPLE_TYPES
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any
T = TypeVar('T')
@@ -33,7 +31,7 @@ MAX_RECURSION = 10
PREP_ATTR = '_DCIOPREP'
-def ioprep(cls: Type) -> None:
+def ioprep(cls: type) -> None:
"""Prep a dataclass type for use with this module's functionality.
Prepping ensures that all types contained in a data class as well as
@@ -53,7 +51,7 @@ def ioprep(cls: Type) -> None:
PrepSession(explicit=True).prep_dataclass(cls, recursion_level=0)
-def ioprepped(cls: Type[T]) -> Type[T]:
+def ioprepped(cls: type[T]) -> type[T]:
"""Class decorator for easily prepping a dataclass at definition time.
Note that in some cases it may not be possible to prep a dataclass
@@ -80,10 +78,10 @@ class PrepData:
"""
# Resolved annotation data with 'live' classes.
- annotations: Dict[str, Any]
+ annotations: dict[str, Any]
# Map of storage names to attr names.
- storage_names_to_attr_names: Dict[str, str]
+ storage_names_to_attr_names: dict[str, str]
class PrepSession:
@@ -92,7 +90,7 @@ class PrepSession:
def __init__(self, explicit: bool):
self.explicit = explicit
- def prep_dataclass(self, cls: Type, recursion_level: int) -> PrepData:
+ def prep_dataclass(self, cls: type, recursion_level: int) -> PrepData:
"""Run prep on a dataclass if necessary and return its prep data."""
# We should only need to do this once per dataclass.
@@ -123,7 +121,6 @@ class PrepSession:
try:
# NOTE: Now passing the class' __dict__ (vars()) as locals
# which allows us to pick up nested classes, etc.
- # pylint: disable=unexpected-keyword-arg
resolved_annotations = get_type_hints(cls,
localns=vars(cls),
include_extras=True)
@@ -140,8 +137,8 @@ class PrepSession:
fields = dataclasses.fields(cls)
fields_by_name = {f.name: f for f in fields}
- all_storage_names: Set[str] = set()
- storage_names_to_attr_names: Dict[str, str] = {}
+ all_storage_names: set[str] = set()
+ storage_names_to_attr_names: dict[str, str] = {}
# Ok; we've resolved actual types for this dataclass.
# now recurse through them, verifying that we support all contained
@@ -180,7 +177,7 @@ class PrepSession:
setattr(cls, PREP_ATTR, prepdata)
return prepdata
- def prep_type(self, cls: Type, attrname: str, anntype: Any,
+ def prep_type(self, cls: type, attrname: str, anntype: Any,
recursion_level: int) -> None:
"""Run prep on a dataclass."""
# pylint: disable=too-many-return-statements
@@ -301,7 +298,7 @@ class PrepSession:
f" type '{anntype}'"
f' which is not supported by dataclassio.')
- def prep_union(self, cls: Type, attrname: str, anntype: Any,
+ def prep_union(self, cls: type, attrname: str, anntype: Any,
recursion_level: int) -> None:
"""Run prep on a Union type."""
typeargs = typing.get_args(anntype)
@@ -317,7 +314,7 @@ class PrepSession:
childtype,
recursion_level=recursion_level + 1)
- def prep_enum(self, enumtype: Type[Enum]) -> None:
+ def prep_enum(self, enumtype: type[Enum]) -> None:
"""Run prep on an enum type."""
valtype: Any = None
diff --git a/tools/efro/dataclassio/extras.py b/tools/efro/dataclassio/extras.py
index 1d30b228..ed63939f 100644
--- a/tools/efro/dataclassio/extras.py
+++ b/tools/efro/dataclassio/extras.py
@@ -8,7 +8,7 @@ import dataclasses
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Any, Dict, Type, Tuple, Optional, List, Set
+ from typing import Any, Optional
def dataclass_diff(obj1: Any, obj2: Any) -> str:
@@ -42,7 +42,7 @@ def _diff(obj1: Any, obj2: Any, indent: int) -> str:
if type(obj1) is not type(obj2):
raise TypeError(f'Passed objects are not of the same'
f' type ({type(obj1)} and {type(obj2)}).')
- bits: List[str] = []
+ bits: list[str] = []
indentstr = ' ' * indent
fields = dataclasses.fields(obj1)
for field in fields:
diff --git a/tools/efro/message.py b/tools/efro/message.py
index b209e26e..8d9bbfcc 100644
--- a/tools/efro/message.py
+++ b/tools/efro/message.py
@@ -6,7 +6,7 @@ Supports static typing for message types and possible return types.
from __future__ import annotations
-from typing import TYPE_CHECKING, TypeVar
+from typing import TYPE_CHECKING, TypeVar, Annotated
from dataclasses import dataclass
from enum import Enum
import inspect
@@ -14,15 +14,12 @@ import logging
import json
import traceback
-from typing_extensions import Annotated
-
from efro.error import CleanError, RemoteError
from efro.dataclassio import (ioprepped, is_ioprepped_dataclass, IOAttrs,
dataclass_to_dict, dataclass_from_dict)
if TYPE_CHECKING:
- from typing import (Dict, Type, Tuple, List, Any, Callable, Optional, Set,
- Sequence, Union, Awaitable)
+ from typing import Any, Callable, Optional, Sequence, Union, Awaitable
TM = TypeVar('TM', bound='MessageSender')
@@ -31,7 +28,7 @@ class Message:
"""Base class for messages."""
@classmethod
- def get_response_types(cls) -> List[Type[Response]]:
+ def get_response_types(cls) -> list[type[Response]]:
"""Return all message types this Message can result in when sent.
The default implementation specifies EmptyResponse, so messages with
@@ -102,8 +99,8 @@ class MessageProtocol:
"""
def __init__(self,
- message_types: Dict[int, Type[Message]],
- response_types: Dict[int, Type[Response]],
+ message_types: dict[int, type[Message]],
+ response_types: dict[int, type[Response]],
type_key: Optional[str] = None,
preserve_clean_errors: bool = True,
log_remote_exceptions: bool = True,
@@ -127,10 +124,10 @@ class MessageProtocol:
be included in the responses if errors occur.
"""
# pylint: disable=too-many-locals
- self.message_types_by_id: Dict[int, Type[Message]] = {}
- self.message_ids_by_type: Dict[Type[Message], int] = {}
- self.response_types_by_id: Dict[int, Type[Response]] = {}
- self.response_ids_by_type: Dict[Type[Response], int] = {}
+ self.message_types_by_id: dict[int, type[Message]] = {}
+ self.message_ids_by_type: dict[type[Message], int] = {}
+ self.response_types_by_id: dict[int, type[Response]] = {}
+ self.response_ids_by_type: dict[type[Response], int] = {}
for m_id, m_type in message_types.items():
# Make sure only valid message types were passed and each
@@ -155,7 +152,7 @@ class MessageProtocol:
# Go ahead and auto-register a few common response types
# if the user has not done so explicitly. Use unique IDs which
# will never change or overlap with user ids.
- def _reg_if_not(reg_tp: Type[Response], reg_id: int) -> None:
+ def _reg_if_not(reg_tp: type[Response], reg_id: int) -> None:
if reg_tp in self.response_ids_by_type:
return
assert self.response_types_by_id.get(reg_id) is None
@@ -170,7 +167,7 @@ class MessageProtocol:
if __debug__:
# Make sure all Message types' return types are valid
# and have been assigned an ID as well.
- all_response_types: Set[Type[Response]] = set()
+ all_response_types: set[type[Response]] = set()
for m_id, m_type in message_types.items():
m_rtypes = m_type.get_response_types()
assert isinstance(m_rtypes, list)
@@ -208,7 +205,7 @@ class MessageProtocol:
"""Encode a response to a json string for transport."""
return self._encode(response, self.response_ids_by_type, 'response')
- def _encode(self, message: Any, ids_by_type: Dict[Type, int],
+ def _encode(self, message: Any, ids_by_type: dict[type, int],
opname: str) -> str:
"""Encode a message to a json string for transport."""
@@ -242,7 +239,9 @@ class MessageProtocol:
assert isinstance(out, (Response, type(None)))
return out
- def _decode(self, data: str, types_by_id: Dict[int, Type],
+ # Weeeird; we get mypy errors returning dict[int, type] but
+ # dict[int, typing.Type] or dict[int, type[Any]] works..
+ def _decode(self, data: str, types_by_id: dict[int, type[Any]],
opname: str) -> Any:
"""Decode a message from a json string."""
msgfull = json.loads(data)
@@ -283,8 +282,8 @@ class MessageProtocol:
"""Return common parts of generated modules."""
# pylint: disable=too-many-locals, too-many-branches
import textwrap
- tpimports: Dict[str, List[str]] = {}
- imports: Dict[str, List[str]] = {}
+ tpimports: dict[str, list[str]] = {}
+ imports: dict[str, list[str]] = {}
single_message_type = len(self.message_ids_by_type) == 1
@@ -390,7 +389,7 @@ class MessageProtocol:
f'class {ppre}Bound{basename}(BoundMessageSender):\n'
f' """Protocol-specific bound sender."""\n')
- def _filt_tp_name(rtype: Type[Response]) -> str:
+ def _filt_tp_name(rtype: type[Response]) -> str:
# We accept None to equal EmptyResponse so reflect that
# in the type annotation.
return 'None' if rtype is EmptyResponse else rtype.__name__
@@ -485,7 +484,7 @@ class MessageProtocol:
# Define handler() overloads for all registered message types.
- def _filt_tp_name(rtype: Type[Response]) -> str:
+ def _filt_tp_name(rtype: type[Response]) -> str:
# We accept None to equal EmptyResponse so reflect that
# in the type annotation.
return 'None' if rtype is EmptyResponse else rtype.__name__
@@ -705,7 +704,7 @@ class MessageReceiver:
def __init__(self, protocol: MessageProtocol) -> None:
self.protocol = protocol
- self._handlers: Dict[Type[Message], Callable] = {}
+ self._handlers: dict[type[Message], Callable] = {}
# noinspection PyProtectedMember
def register_handler(
@@ -750,7 +749,7 @@ class MessageReceiver:
assert issubclass(msgtype, Message)
ret = anns.get('return')
- responsetypes: Tuple[Union[Type[Any], Type[None]], ...]
+ responsetypes: tuple[Union[type[Any], type[None]], ...]
# Return types can be a single type or a union of types.
if isinstance(ret, _GenericAlias):
@@ -807,7 +806,7 @@ class MessageReceiver:
raise TypeError(msg)
def _decode_incoming_message(self,
- msg: str) -> Tuple[Message, Type[Message]]:
+ msg: str) -> tuple[Message, type[Message]]:
# Decode the incoming message.
msg_decoded = self.protocol.decode_message(msg)
msgtype = type(msg_decoded)
@@ -815,7 +814,7 @@ class MessageReceiver:
return msg_decoded, msgtype
def _encode_response(self, response: Optional[Response],
- msgtype: Type[Message]) -> str:
+ msgtype: type[Message]) -> str:
# A return value of None equals EmptyResponse.
if response is None:
@@ -982,7 +981,7 @@ def create_receiver_module(basename: str,
def _protocol_from_code(protocol_create_code: str) -> MessageProtocol:
- env: Dict = {}
+ env: dict = {}
exec(protocol_create_code, env) # pylint: disable=exec-used
protocol = env.get('protocol')
if not isinstance(protocol, MessageProtocol):
diff --git a/tools/efro/terminal.py b/tools/efro/terminal.py
index 2fad6898..1b4aaa65 100644
--- a/tools/efro/terminal.py
+++ b/tools/efro/terminal.py
@@ -9,7 +9,7 @@ from enum import Enum, unique
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Any, ClassVar, Type
+ from typing import Any, ClassVar
@unique
@@ -113,7 +113,7 @@ def _windows_enable_color() -> bool:
fdout = os.open('CONOUT$', os.O_RDWR)
try:
hout = msvcrt.get_osfhandle(fdout) # type: ignore
- old_mode = wintypes.DWORD()
+ old_mode = wintypes.DWORD() # pylint: disable=E1120
kernel32.GetConsoleMode(hout, ctypes.byref(old_mode))
mode = (new_mode & mask) | (old_mode.value & ~mask)
kernel32.SetConsoleMode(hout, mode)
@@ -298,7 +298,7 @@ class ClrNever(ClrBase):
_envval = os.environ.get('EFRO_TERMCOLORS')
_color_enabled: bool = (True if _envval == '1' else
False if _envval == '0' else _default_color_enabled())
-Clr: Type[ClrBase]
+Clr: type[ClrBase]
if _color_enabled:
Clr = ClrAlways
else:
diff --git a/tools/efro/util.py b/tools/efro/util.py
index 250e9344..e2b9f899 100644
--- a/tools/efro/util.py
+++ b/tools/efro/util.py
@@ -14,8 +14,7 @@ from typing import TYPE_CHECKING, cast, TypeVar, Generic
if TYPE_CHECKING:
import asyncio
from efro.call import Call as Call # 'as Call' so we re-export.
- from weakref import ReferenceType
- from typing import Any, Dict, Callable, Optional, Type
+ from typing import Any, Callable, Optional
T = TypeVar('T')
TVAL = TypeVar('TVAL')
@@ -35,7 +34,7 @@ else:
Call = functools.partial
-def enum_by_value(cls: Type[TENUM], value: Any) -> TENUM:
+def enum_by_value(cls: type[TENUM], value: Any) -> TENUM:
"""Create an enum from a value.
This is basically the same as doing 'obj = EnumType(value)' except
@@ -93,7 +92,7 @@ def utc_this_hour() -> datetime.datetime:
tzinfo=now.tzinfo)
-def empty_weakref(objtype: Type[T]) -> ReferenceType[T]:
+def empty_weakref(objtype: type[T]) -> weakref.ref[T]:
"""Return an invalidated weak-reference for the specified type."""
# At runtime, all weakrefs are the same; our type arg is just
# for the static type checker.
@@ -233,7 +232,7 @@ class DispatchMethodWrapper(Generic[TARG, TRET]):
def register(func: Callable[[Any, Any], TRET]) -> Callable:
"""Register a new dispatch handler for this dispatch-method."""
- registry: Dict[Any, Callable]
+ registry: dict[Any, Callable]
# noinspection PyProtectedMember,PyTypeHints
@@ -294,7 +293,7 @@ class ValueDispatcher(Generic[TVAL, TRET]):
def __init__(self, call: Callable[[TVAL], TRET]) -> None:
self._base_call = call
- self._handlers: Dict[TVAL, Callable[[], TRET]] = {}
+ self._handlers: dict[TVAL, Callable[[], TRET]] = {}
def __call__(self, value: TVAL) -> TRET:
handler = self._handlers.get(value)
@@ -325,7 +324,7 @@ class ValueDispatcher1Arg(Generic[TVAL, TARG, TRET]):
def __init__(self, call: Callable[[TVAL, TARG], TRET]) -> None:
self._base_call = call
- self._handlers: Dict[TVAL, Callable[[TARG], TRET]] = {}
+ self._handlers: dict[TVAL, Callable[[TARG], TRET]] = {}
def __call__(self, value: TVAL, arg: TARG) -> TRET:
handler = self._handlers.get(value)
@@ -370,7 +369,7 @@ def valuedispatchmethod(
# in the function call dict and simply return a call.
_base_call = call
- _handlers: Dict[TVAL, Callable[[TSELF], TRET]] = {}
+ _handlers: dict[TVAL, Callable[[TSELF], TRET]] = {}
def _add_handler(value: TVAL, addcall: Callable[[TSELF], TRET]) -> None:
if value in _handlers:
@@ -427,39 +426,79 @@ def make_hash(obj: Any) -> int:
return hash(tuple(frozenset(sorted(new_obj.items()))))
-def asserttype(obj: Any, typ: Type[T]) -> T:
+def asserttype(obj: Any, typ: type[T]) -> T:
"""Return an object typed as a given type.
Assert is used to check its actual type, so only use this when
failures are not expected. Otherwise use checktype.
"""
+ assert isinstance(typ, type), 'only actual types accepted'
assert isinstance(obj, typ)
return obj
-def checktype(obj: Any, typ: Type[T]) -> T:
+def asserttype_o(obj: Any, typ: type[T]) -> Optional[T]:
+ """Return an object typed as a given optional type.
+
+ Assert is used to check its actual type, so only use this when
+ failures are not expected. Otherwise use checktype.
+ """
+ assert isinstance(typ, type), 'only actual types accepted'
+ assert isinstance(obj, (typ, type(None)))
+ return obj
+
+
+def checktype(obj: Any, typ: type[T]) -> T:
"""Return an object typed as a given type.
Always checks the type at runtime with isinstance and throws a TypeError
on failure. Use asserttype for more efficient (but less safe) equivalent.
"""
+ assert isinstance(typ, type), 'only actual types accepted'
if not isinstance(obj, typ):
raise TypeError(f'Expected a {typ}; got a {type(obj)}.')
return obj
-def warntype(obj: Any, typ: Type[T]) -> T:
+def checktype_o(obj: Any, typ: type[T]) -> Optional[T]:
+ """Return an object typed as a given optional type.
+
+ Always checks the type at runtime with isinstance and throws a TypeError
+ on failure. Use asserttype for more efficient (but less safe) equivalent.
+ """
+ assert isinstance(typ, type), 'only actual types accepted'
+ if not isinstance(obj, (typ, type(None))):
+ raise TypeError(f'Expected a {typ} or None; got a {type(obj)}.')
+ return obj
+
+
+def warntype(obj: Any, typ: type[T]) -> T:
"""Return an object typed as a given type.
Always checks the type at runtime and simply logs a warning if it is
not what is expected.
"""
+ assert isinstance(typ, type), 'only actual types accepted'
if not isinstance(obj, typ):
import logging
logging.warning('warntype: expected a %s, got a %s', typ, type(obj))
return obj # type: ignore
+def warntype_o(obj: Any, typ: type[T]) -> Optional[T]:
+ """Return an object typed as a given type.
+
+ Always checks the type at runtime and simply logs a warning if it is
+ not what is expected.
+ """
+ assert isinstance(typ, type), 'only actual types accepted'
+ if not isinstance(obj, (typ, type(None))):
+ import logging
+ logging.warning('warntype: expected a %s or None, got a %s', typ,
+ type(obj))
+ return obj # type: ignore
+
+
def assert_non_optional(obj: Optional[T]) -> T:
"""Return an object with Optional typing removed.
diff --git a/tools/efrotools/__init__.py b/tools/efrotools/__init__.py
index fb80880a..d39baec3 100644
--- a/tools/efrotools/__init__.py
+++ b/tools/efrotools/__init__.py
@@ -19,10 +19,10 @@ from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Dict, Union, Sequence, Optional, Any, Literal
+ from typing import Union, Sequence, Optional, Any, Literal
# Python major version we're using for all this stuff.
-PYVER = '3.8'
+PYVER = '3.9'
# Python binary assumed by these tools.
PYTHON_BIN = f'python{PYVER}' if platform.system() != 'Windows' else 'python'
@@ -33,9 +33,9 @@ def explicit_bool(value: bool) -> bool:
return value
-def getlocalconfig(projroot: Path) -> Dict[str, Any]:
+def getlocalconfig(projroot: Path) -> dict[str, Any]:
"""Return a project's localconfig contents (or default if missing)."""
- localconfig: Dict[str, Any]
+ localconfig: dict[str, Any]
try:
with open(Path(projroot, 'config/localconfig.json'),
encoding='utf-8') as infile:
@@ -45,9 +45,9 @@ def getlocalconfig(projroot: Path) -> Dict[str, Any]:
return localconfig
-def getconfig(projroot: Path) -> Dict[str, Any]:
+def getconfig(projroot: Path) -> dict[str, Any]:
"""Return a project's config contents (or default if missing)."""
- config: Dict[str, Any]
+ config: dict[str, Any]
try:
with open(Path(projroot, 'config/config.json'),
encoding='utf-8') as infile:
@@ -57,7 +57,7 @@ def getconfig(projroot: Path) -> Dict[str, Any]:
return config
-def setconfig(projroot: Path, config: Dict[str, Any]) -> None:
+def setconfig(projroot: Path, config: dict[str, Any]) -> None:
"""Set the project config contents."""
os.makedirs(Path(projroot, 'config'), exist_ok=True)
with Path(projroot,
diff --git a/tools/efrotools/android.py b/tools/efrotools/android.py
index 83b17631..bd3ccc7c 100644
--- a/tools/efrotools/android.py
+++ b/tools/efrotools/android.py
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING
from dataclasses import dataclass
if TYPE_CHECKING:
- from typing import List, Optional, Set
+ from typing import Optional
@dataclass
@@ -18,10 +18,10 @@ class GradleFilterSection:
lastline: int
-def filter_gradle_file(buildfilename: str, enabled_tags: Set[str]) -> None:
+def filter_gradle_file(buildfilename: str, enabled_tags: set[str]) -> None:
"""Filter 'EFRO_IF' sections in a gradle file."""
- sections: List[GradleFilterSection] = []
+ sections: list[GradleFilterSection] = []
with open(buildfilename, encoding='utf-8') as infile:
original = infile.read()
diff --git a/tools/efrotools/code.py b/tools/efrotools/code.py
index 9fe29f6c..92ec456d 100644
--- a/tools/efrotools/code.py
+++ b/tools/efrotools/code.py
@@ -13,7 +13,7 @@ from typing import TYPE_CHECKING
from efrotools.filecache import FileCache
if TYPE_CHECKING:
- from typing import Set, List, Dict, Any, Union, Optional
+ from typing import Any, Union, Optional
def format_clang_format(projroot: Path, full: bool) -> None:
@@ -35,7 +35,7 @@ def format_clang_format(projroot: Path, full: bool) -> None:
dirtyfiles = cache.get_dirty_files()
- def format_file(filename: str) -> Dict[str, Any]:
+ def format_file(filename: str) -> dict[str, Any]:
start_time = time.time()
# Note: seems os.system does not unlock the gil;
@@ -78,7 +78,7 @@ def check_cpplint(projroot: Path, full: bool) -> None:
raise Exception(f'Found space in path {fpath}; unexpected.')
# Check the config for a list of ones to ignore.
- code_blacklist: List[str] = getconfig(projroot).get(
+ code_blacklist: list[str] = getconfig(projroot).get(
'cpplint_blacklist', [])
# Just pretend blacklisted ones don't exist.
@@ -99,7 +99,7 @@ def check_cpplint(projroot: Path, full: bool) -> None:
print(f'{Clr.BLU}CppLint checking'
f' {len(dirtyfiles)} file(s)...{Clr.RST}')
- disabled_filters: List[str] = [
+ disabled_filters: list[str] = [
'build/include_what_you_use',
'build/c++11',
'readability/nolint',
@@ -128,7 +128,7 @@ def check_cpplint(projroot: Path, full: bool) -> None:
flush=True)
-def get_code_filenames(projroot: Path) -> List[str]:
+def get_code_filenames(projroot: Path) -> list[str]:
"""Return the list of files to lint-check or auto-formatting."""
from efrotools import getconfig
exts = ('.h', '.c', '.cc', '.cpp', '.cxx', '.m', '.mm')
@@ -219,7 +219,7 @@ def _should_include_script(fnamefull: str) -> bool:
return False
-def get_script_filenames(projroot: Path) -> List[str]:
+def get_script_filenames(projroot: Path) -> list[str]:
"""Return the Python filenames to lint-check or auto-format."""
from efrotools import getconfig
filenames = set()
@@ -238,7 +238,7 @@ def get_script_filenames(projroot: Path) -> List[str]:
return sorted(list(f for f in filenames if 'flycheck_' not in f))
-def runpylint(projroot: Path, filenames: List[str]) -> None:
+def runpylint(projroot: Path, filenames: list[str]) -> None:
"""Run Pylint explicitly on files."""
pylintrc = Path(projroot, '.pylintrc')
@@ -266,7 +266,7 @@ def pylint(projroot: Path, full: bool, fast: bool) -> None:
if any(' ' in name for name in filenames):
raise Exception('found space in path; unexpected')
- script_blacklist: List[str] = []
+ script_blacklist: list[str] = []
filenames = [f for f in filenames if f not in script_blacklist]
cachebasename = 'check_pylint_fast' if fast else 'check_pylint'
@@ -280,7 +280,7 @@ def pylint(projroot: Path, full: bool, fast: bool) -> None:
# Do a recursive dependency check and mark all files who are
# either dirty or have a dependency that is dirty.
- filestates: Dict[str, bool] = {}
+ filestates: dict[str, bool] = {}
for fname in filenames:
_dirty_dep_check(fname, filestates, cache, fast, 0)
@@ -306,7 +306,7 @@ def pylint(projroot: Path, full: bool, fast: bool) -> None:
cache.write()
-def _dirty_dep_check(fname: str, filestates: Dict[str, bool], cache: FileCache,
+def _dirty_dep_check(fname: str, filestates: dict[str, bool], cache: FileCache,
fast: bool, recursion: int) -> bool:
"""Recursively check a file's deps and return whether it is dirty."""
# pylint: disable=too-many-branches
@@ -366,8 +366,8 @@ def _dirty_dep_check(fname: str, filestates: Dict[str, bool], cache: FileCache,
def _run_pylint(projroot: Path, pylintrc: Union[Path, str],
- cache: Optional[FileCache], dirtyfiles: List[str],
- allfiles: Optional[List[str]]) -> Dict[str, Any]:
+ cache: Optional[FileCache], dirtyfiles: list[str],
+ allfiles: Optional[list[str]]) -> dict[str, Any]:
import time
from pylint import lint
from efro.error import CleanError
@@ -402,8 +402,8 @@ def _run_pylint(projroot: Path, pylintrc: Union[Path, str],
return {'f': dirtyfiles, 't': duration}
-def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
- allfiles: List[str], cache: FileCache) -> int:
+def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: list[str],
+ allfiles: list[str], cache: FileCache) -> int:
# pylint: disable=too-many-locals
# pylint: disable=too-many-branches
# pylint: disable=too-many-statements
@@ -413,8 +413,8 @@ def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
# First off, build a map of dirtyfiles to module names
# (and the corresponding reverse map).
- paths_to_names: Dict[str, str] = {}
- names_to_paths: Dict[str, str] = {}
+ paths_to_names: dict[str, str] = {}
+ names_to_paths: dict[str, str] = {}
for fname in allfiles:
try:
mpath = modutils.modpath_from_file(fname)
@@ -447,7 +447,7 @@ def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
for key, val in run.linter.stats['dependencies'].items():
sval = [_filter_module_name(m) for m in val]
reversedeps[_filter_module_name(key)] = sval
- deps: Dict[str, Set[str]] = {}
+ deps: dict[str, set[str]] = {}
untracked_deps = set()
for mname, mallimportedby in reversedeps.items():
for mimportedby in mallimportedby:
@@ -456,11 +456,29 @@ def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
else:
untracked_deps.add(mname)
- ignored_untracked_deps: List[str] = getconfig(projroot).get(
- 'pylint_ignored_untracked_deps', [])
+ ignored_untracked_deps: set[str] = set(
+ getconfig(projroot).get('pylint_ignored_untracked_deps', []))
# Add a few that this package itself triggers.
- ignored_untracked_deps += ['pylint.lint', 'astroid.modutils', 'astroid']
+ ignored_untracked_deps |= {'pylint.lint', 'astroid.modutils', 'astroid'}
+
+ # EW; as of Python 3.9, suddenly I'm seeing system modules showing up
+ # here where I wasn't before. I wonder what changed. Anyway, explicitly
+ # suppressing them here but should come up with a more robust system
+ # as I feel this will get annoying fast.
+ ignored_untracked_deps |= {
+ 're', 'importlib', 'os', 'xml.dom', 'weakref', 'random',
+ 'collections.abc', 'textwrap', 'webbrowser', 'signal', 'pathlib',
+ 'zlib', 'json', 'pydoc', 'base64', 'functools', 'asyncio', 'xml',
+ '__future__', 'traceback', 'typing', 'urllib.parse', 'ctypes.wintypes',
+ 'code', 'urllib.error', 'threading', 'xml.etree.ElementTree', 'pickle',
+ 'dataclasses', 'enum', 'py_compile', 'urllib.request', 'math',
+ 'multiprocessing', 'socket', 'getpass', 'hashlib', 'ctypes', 'inspect',
+ 'rlcompleter', 'http.client', 'readline', 'platform', 'datetime',
+ 'copy', 'concurrent.futures', 'ast', 'subprocess', 'numbers',
+ 'logging', 'xml.dom.minidom', 'uuid', 'types', 'tempfile', 'shutil',
+ 'shlex', 'stat', 'wave', 'html', 'binascii'
+ }
# Ignore some specific untracked deps; complain about any others.
untracked_deps = set(dep for dep in untracked_deps
@@ -481,7 +499,7 @@ def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
# Since this code is a bit flaky, lets always announce when we
# come up empty and keep a whitelist of expected values to ignore.
no_deps_modules.add(fmod)
- depsval: List[str] = []
+ depsval: list[str] = []
else:
# Our deps here are module names; store paths.
depsval = [names_to_paths[dep] for dep in deps[fmod]]
@@ -499,7 +517,7 @@ def _apply_pylint_run_to_cache(projroot: Path, run: Any, dirtyfiles: List[str],
# error info for them in the run stats.
# Once again need to convert any foo.bar.__init__ to foo.bar.
- stats_by_module: Dict[str, Any] = {
+ stats_by_module: dict[str, Any] = {
_filter_module_name(key): val
for key, val in run.linter.stats['by_module'].items()
}
@@ -536,7 +554,7 @@ def _filter_module_name(mpath: str) -> str:
def runmypy(projroot: Path,
- filenames: List[str],
+ filenames: list[str],
full: bool = False,
check: bool = True) -> None:
"""Run MyPy on provided filenames."""
@@ -631,7 +649,7 @@ def _parse_idea_results(path: Path) -> int:
def _run_idea_inspections(projroot: Path,
- scripts: List[str],
+ scripts: list[str],
displayname: str,
inspect: Path,
verbose: bool,
@@ -702,7 +720,7 @@ def _run_idea_inspections(projroot: Path,
def _run_idea_inspections_cached(cachepath: Path,
- filenames: List[str],
+ filenames: list[str],
full: bool,
projroot: Path,
displayname: str,
diff --git a/tools/efrotools/efrocache.py b/tools/efrotools/efrocache.py
index 27aabc14..11458210 100644
--- a/tools/efrotools/efrocache.py
+++ b/tools/efrotools/efrocache.py
@@ -20,7 +20,7 @@ from concurrent.futures import ThreadPoolExecutor
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import List, Dict, Tuple, Set
+ pass
BASE_URL = 'https://files.ballistica.net/cache/ba1/'
@@ -172,13 +172,13 @@ def filter_makefile(makefile_dir: str, contents: str) -> str:
return '\n'.join(lines) + '\n'
-def update_cache(makefile_dirs: List[str]) -> None:
+def update_cache(makefile_dirs: list[str]) -> None:
"""Given a list of directories containing Makefiles, update caches."""
import multiprocessing
cpus = multiprocessing.cpu_count()
- fnames1: List[str] = []
- fnames2: List[str] = []
+ fnames1: list[str] = []
+ fnames2: list[str] = []
for path in makefile_dirs:
cdp = f'cd {path} && ' if path else ''
@@ -238,13 +238,13 @@ def update_cache(makefile_dirs: List[str]) -> None:
outfile.write(hashes)
-def _upload_cache(fnames1: List[str], fnames2: List[str], hashes_str: str,
+def _upload_cache(fnames1: list[str], fnames2: list[str], hashes_str: str,
hashes_existing_str: str) -> None:
from efrotools import run
# First, if we've run before, print the files causing us to re-run:
if hashes_existing_str != '':
- changed_files: Set[str] = set()
+ changed_files: set[str] = set()
hashes = json.loads(hashes_str)
hashes_existing = json.loads(hashes_existing_str)
for fname, ftime in hashes.items():
@@ -281,10 +281,10 @@ def _upload_cache(fnames1: List[str], fnames2: List[str], hashes_str: str,
' "cd files.ballistica.net/cache/ba1 && python3 genstartercache.py"')
-def _gen_hashes(fnames: List[str]) -> str:
+def _gen_hashes(fnames: list[str]) -> str:
import hashlib
- def _get_file_hash(fname: str) -> Tuple[str, str]:
+ def _get_file_hash(fname: str) -> tuple[str, str]:
md5 = hashlib.md5()
with open(fname, mode='rb') as infile:
md5.update(infile.read())
@@ -297,12 +297,12 @@ def _gen_hashes(fnames: List[str]) -> str:
return json.dumps(hashes, separators=(',', ':'))
-def _write_cache_files(fnames1: List[str], fnames2: List[str],
+def _write_cache_files(fnames1: list[str], fnames2: list[str],
staging_dir: str, mapping_file: str) -> None:
import functools
- fhashes1: Set[str] = set()
- fhashes2: Set[str] = set()
- mapping: Dict[str, str] = {}
+ fhashes1: set[str] = set()
+ fhashes2: set[str] = set()
+ mapping: dict[str, str] = {}
call = functools.partial(_write_cache_file, staging_dir)
# Do the first set.
@@ -360,7 +360,7 @@ def _write_cache_files(fnames1: List[str], fnames2: List[str],
outfile.write(json.dumps(mapping, indent=2, sort_keys=True))
-def _write_cache_file(staging_dir: str, fname: str) -> Tuple[str, str]:
+def _write_cache_file(staging_dir: str, fname: str) -> tuple[str, str]:
import hashlib
from efrotools import run
print(f'Caching {fname}')
@@ -386,7 +386,7 @@ def _write_cache_file(staging_dir: str, fname: str) -> Tuple[str, str]:
return fname, hashpath
-def _check_warm_start_entry(entry: Tuple[str, str]) -> None:
+def _check_warm_start_entry(entry: tuple[str, str]) -> None:
import hashlib
fname, filehash = entry
md5 = hashlib.md5()
@@ -401,7 +401,7 @@ def _check_warm_start_entry(entry: Tuple[str, str]) -> None:
os.utime(fname, None)
-def _check_warm_start_entries(entries: List[Tuple[str, str]]) -> None:
+def _check_warm_start_entries(entries: list[tuple[str, str]]) -> None:
with ThreadPoolExecutor(max_workers=cpu_count()) as executor:
# Converting this to a list pulls results and propagates errors)
list(executor.map(_check_warm_start_entry, entries))
@@ -437,12 +437,12 @@ def warm_start_cache() -> None:
# second per file, it adds up when done for thousands of assets
# each time the cache map changes. It is much more efficient to do
# it in one go here.
- cachemap: Dict[str, str]
+ cachemap: dict[str, str]
with open(CACHE_MAP_NAME, encoding='utf-8') as infile:
cachemap = json.loads(infile.read())
assert isinstance(cachemap, dict)
cachemap_mtime = os.path.getmtime(CACHE_MAP_NAME)
- entries: List[Tuple[str, str]] = []
+ entries: list[tuple[str, str]] = []
for fname, url in cachemap.items():
# File hasn't been pulled from cache yet = ignore.
diff --git a/tools/efrotools/filecache.py b/tools/efrotools/filecache.py
index bf3764d8..7854d108 100644
--- a/tools/efrotools/filecache.py
+++ b/tools/efrotools/filecache.py
@@ -17,7 +17,7 @@ from efrotools import get_files_hash
# pylint: enable=useless-suppression
if TYPE_CHECKING:
- from typing import Dict, Optional, Sequence, Any
+ from typing import Optional, Sequence, Any
from pathlib import Path
@@ -26,9 +26,9 @@ class FileCache:
def __init__(self, path: Path):
self._path = path
- self.curhashes: Dict[str, Optional[str]] = {}
- self.mtimes: Dict[str, float] = {}
- self.entries: Dict[str, Any]
+ self.curhashes: dict[str, Optional[str]] = {}
+ self.mtimes: dict[str, float] = {}
+ self.entries: dict[str, Any]
if not os.path.exists(path):
self.entries = {}
else:
diff --git a/tools/efrotools/jsontools.py b/tools/efrotools/jsontools.py
index 9a6a011e..d6c2c7e5 100644
--- a/tools/efrotools/jsontools.py
+++ b/tools/efrotools/jsontools.py
@@ -8,7 +8,7 @@ import json
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Dict, Any
+ from typing import Any
class NoIndent:
@@ -28,7 +28,7 @@ class NoIndentEncoder(json.JSONEncoder):
super().__init__(*args, **kwargs)
self.kwargs = dict(kwargs)
del self.kwargs['indent']
- self._replacement_map: Dict = {}
+ self._replacement_map: dict = {}
def default(self, o: Any) -> Any:
import uuid
diff --git a/tools/efrotools/makefile.py b/tools/efrotools/makefile.py
index 9412ada9..a840c0fd 100644
--- a/tools/efrotools/makefile.py
+++ b/tools/efrotools/makefile.py
@@ -9,14 +9,14 @@ from dataclasses import dataclass
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Optional, List, Tuple
+ from typing import Optional
@dataclass
class Section:
"""Represents a section of a Makefile."""
name: Optional[str]
- paragraphs: List[Paragraph]
+ paragraphs: list[Paragraph]
@dataclass
@@ -24,7 +24,7 @@ class Paragraph:
"""Represents a continuous set of non-blank lines in a Makefile."""
contents: str
- def get_logical_lines(self) -> List[str]:
+ def get_logical_lines(self) -> list[str]:
"""Return contents broken into logical lines.
Lines joined by continuation chars are considered a single line.
@@ -40,16 +40,16 @@ class Makefile:
def __init__(self, contents: str):
- self.sections: List[Section] = []
+ self.sections: list[Section] = []
self._original = copy.copy(contents)
lines = contents.splitlines()
- paragraphs: List[Paragraph] = []
+ paragraphs: list[Paragraph] = []
# First off, break into paragraphs (continuous sets of lines)
- plines: List[str] = []
+ plines: list[str] = []
for line in lines:
if line.strip() == '':
@@ -81,12 +81,12 @@ class Makefile:
else:
section.paragraphs.append(paragraph)
- def find_assigns(self, name: str) -> List[Tuple[Section, int]]:
+ def find_assigns(self, name: str) -> list[tuple[Section, int]]:
"""Return section/index pairs for paragraphs containing an assign.
Note that the paragraph may contain other statements as well.
"""
- found: List[Tuple[Section, int]] = []
+ found: list[tuple[Section, int]] = []
for section in self.sections:
for i, paragraph in enumerate(section.paragraphs):
if any(
@@ -95,12 +95,12 @@ class Makefile:
found.append((section, i))
return found
- def find_targets(self, name: str) -> List[Tuple[Section, int]]:
+ def find_targets(self, name: str) -> list[tuple[Section, int]]:
"""Return section/index pairs for paragraphs containing a target.
Note that the paragraph may contain other statements as well.
"""
- found: List[Tuple[Section, int]] = []
+ found: list[tuple[Section, int]] = []
for section in self.sections:
for i, paragraph in enumerate(section.paragraphs):
if any(line.split()[0] == name + ':'
diff --git a/tools/efrotools/message.py b/tools/efrotools/message.py
index dc75e319..6ea37489 100644
--- a/tools/efrotools/message.py
+++ b/tools/efrotools/message.py
@@ -11,7 +11,7 @@ from typing import TYPE_CHECKING
from efrotools.code import format_yapf_str
if TYPE_CHECKING:
- from typing import Set, List, Dict, Any, Union, Optional
+ pass
def standard_message_sender_gen_pcommand(
diff --git a/tools/efrotools/pcommand.py b/tools/efrotools/pcommand.py
index 7422fe1d..f071a531 100644
--- a/tools/efrotools/pcommand.py
+++ b/tools/efrotools/pcommand.py
@@ -15,13 +15,13 @@ from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
- from typing import Dict, Any, List
+ from typing import Any
# Absolute path of the project root.
PROJROOT = Path(__file__).resolve().parents[2]
-def pcommand_main(globs: Dict[str, Any]) -> None:
+def pcommand_main(globs: dict[str, Any]) -> None:
"""Run a snippet contained in the pcommand script.
We simply look for all public functions and call
@@ -114,7 +114,7 @@ def _trim_docstring(docstring: str) -> str:
return '\n'.join(trimmed)
-def _spelling(words: List[str]) -> None:
+def _spelling(words: list[str]) -> None:
import os
num_modded_dictionaries = 0
for fname in [
@@ -600,7 +600,7 @@ def makefile_target_list() -> None:
with open(sys.argv[2], encoding='utf-8') as infile:
lines = infile.readlines()
- def _docstr(lines2: List[str], linenum: int) -> str:
+ def _docstr(lines2: list[str], linenum: int) -> str:
doc = ''
j = linenum - 1
while j >= 0 and lines2[j].startswith('#'):
@@ -614,7 +614,7 @@ def makefile_target_list() -> None:
'Available Make Targets\n'
'----------------------')
- entries: List[_Entry] = []
+ entries: list[_Entry] = []
for i, line in enumerate(lines):
# Targets.
@@ -648,7 +648,7 @@ def echo() -> None:
from efro.terminal import Clr
clrnames = {n for n in dir(Clr) if n.isupper() and not n.startswith('_')}
first = True
- out: List[str] = []
+ out: list[str] = []
for arg in sys.argv[2:]:
if arg in clrnames:
out.append(getattr(Clr, arg))
diff --git a/tools/efrotools/pybuild.py b/tools/efrotools/pybuild.py
index 8b1b63d3..1c46ab39 100644
--- a/tools/efrotools/pybuild.py
+++ b/tools/efrotools/pybuild.py
@@ -10,10 +10,13 @@ from typing import TYPE_CHECKING
from efrotools import PYVER, run, readfile, writefile, replace_one
if TYPE_CHECKING:
- from typing import List, Dict, Any, Optional
+ from typing import Any
ENABLE_OPENSSL = True
-PY38 = True
+NEWER_PY_TEST = True
+
+PY_VER_EXACT_ANDROID = '3.9.7'
+PY_VER_EXACT_APPLE = '3.9.6'
# Filenames we prune from Python lib dirs in source repo to cut down on size.
PRUNE_LIB_NAMES = [
@@ -29,8 +32,6 @@ PRUNE_DLL_NAMES = ['*.ico']
def build_apple(arch: str, debug: bool = False) -> None:
"""Run a build for the provided apple arch (mac, ios, or tvos)."""
- # pylint: disable=too-many-branches
- # pylint: disable=too-many-statements
import platform
import subprocess
from efro.error import CleanError
@@ -61,84 +62,6 @@ def build_apple(arch: str, debug: bool = False) -> None:
# run('git checkout bf1ed73d0d5ff46862ba69dd5eb2ffaeff6f19b6')
run(f'git checkout {PYVER}')
- # On mac we currently have to add the _scproxy module or urllib will
- # fail.
- txt = readfile('patch/Python/Setup.embedded')
- if arch == 'mac':
- txt += ('\n'
- '# ericf added - mac urllib needs this\n'
- '_scproxy _scproxy.c '
- '-framework SystemConfiguration '
- '-framework CoreFoundation')
-
- # Turn off sqlite module. (scratch that; leaving it in.)
- # txt = replace_one(txt, '_sqlite3 -I$(', '#_sqlite3 -I$(')
- # txt = txt.replace(' _sqlite/', '# _sqlite/')
-
- # Turn off xz compression module. (scratch that; leaving it in.)
- # txt = replace_one(txt, '_lzma _', '#_lzma _')
-
- # Turn off bzip2 module.
- # txt = replace_one(txt, '_bz2 _b', '#_bz2 _b')
-
- # Turn off openssl module (only if not doing openssl).
- if not ENABLE_OPENSSL:
- txt = replace_one(txt, '_hashlib _hashopenssl.c',
- '#_hashlib _hashopenssl.c')
-
- # Turn off various other stuff we don't use.
- for line in [
- '_codecs _codecsmodule.c',
- '_codecs_cn cjkcodecs/_codecs_cn.c',
- '_codecs_hk cjkcodecs/_codecs_hk.c',
- '_codecs_iso2022 cjkcodecs/',
- '_codecs_jp cjkcodecs/_codecs_jp.c',
- '_codecs_jp cjkcodecs/_codecs_jp.c',
- '_codecs_kr cjkcodecs/_codecs_kr.c',
- '_codecs_tw cjkcodecs/_codecs_tw.c',
- '_lsprof _lsprof.c rotatingtree.c',
- '_multibytecodec cjkcodecs/multibytecodec.c',
- '_multiprocessing _multiprocessing/multiprocessing.c',
- '_opcode _opcode.c',
- 'audioop audioop.c',
- 'grp grpmodule.c',
- 'mmap mmapmodule.c',
- 'parser parsermodule.c',
- 'pyexpat expat/xmlparse.c',
- ' expat/xmlrole.c ',
- ' expat/xmltok.c ',
- ' pyexpat.c ',
- ' -I$(srcdir)/Modules/expat ',
- ' -DHAVE_EXPAT_CONFIG_H -DUSE_PYEXPAT_CAPI'
- ' -DXML_DEV_URANDOM',
- 'resource resource.c',
- 'syslog syslogmodule.c',
- 'termios termios.c',
- '_ctypes_test _ctypes/_ctypes_test.c',
- '_testbuffer _testbuffer.c',
- '_testimportmultiple _testimportmultiple.c',
- '_crypt _cryptmodule.c', # not on android so disabling here too
- ]:
- txt = replace_one(txt, line, '#' + line)
-
- if ENABLE_OPENSSL:
-
- # _md5 and _sha modules are normally only built if the
- # system does not have the OpenSSL libs containing an optimized
- # version.
- # Note: seems we still need sha3 or we get errors
- for line in [
- '_md5 md5module.c',
- '_sha1 sha1module.c',
- # '_sha3 _sha3/sha3module.c',
- '_sha256 sha256module.c',
- '_sha512 sha512module.c',
- ]:
- txt = replace_one(txt, line, '#' + line)
- else:
- txt = replace_one(txt, '_ssl _ssl.c', '#_ssl _ssl.c')
- writefile('patch/Python/Setup.embedded', txt)
-
txt = readfile('Makefile')
# Fix a bug where spaces in PATH cause errors (darn you vmware fusion!)
@@ -146,31 +69,6 @@ def build_apple(arch: str, debug: bool = False) -> None:
txt, '&& PATH=$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH) .',
'&& PATH="$(PROJECT_DIR)/$(PYTHON_DIR-macOS)/dist/bin:$(PATH)" .')
- # Remove makefile dependencies so we don't build the
- # libs we're not using.
- srctxt = '$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: '
- if PY38:
- # Note: now just keeping everything on.
- assert ENABLE_OPENSSL
- if bool(False):
- txt = replace_one(
- txt, srctxt,
- '$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER).a: ' +
- ('build/$2/Support/OpenSSL ' if ENABLE_OPENSSL else '') +
- 'build/$2/Support/XZ $$(PYTHON_DIR-$1)/Makefile\n#' + srctxt)
- else:
- txt = replace_one(
- txt, srctxt,
- '$$(PYTHON_DIR-$1)/dist/lib/libpython$(PYTHON_VER)m.a: ' +
- ('build/$2/Support/OpenSSL ' if ENABLE_OPENSSL else '') +
- 'build/$2/Support/XZ $$(PYTHON_DIR-$1)/Makefile\n#' + srctxt)
- srctxt = ('dist/Python-$(PYTHON_VER)-$1-support.'
- '$(BUILD_NUMBER).tar.gz: ')
- txt = replace_one(
- txt, srctxt,
- 'dist/Python-$(PYTHON_VER)-$1-support.$(BUILD_NUMBER).tar.gz:'
- ' $$(PYTHON_FRAMEWORK-$1)\n#' + srctxt)
-
# Turn doc strings on; looks like it only adds a few hundred k.
txt = txt.replace('--without-doc-strings', '--with-doc-strings')
@@ -197,35 +95,59 @@ def build_apple(arch: str, debug: bool = False) -> None:
# Debug has a different name.
# (Currently expect to replace 12 instances of this).
- dline = 'python$(PYTHON_VER)' if PY38 else 'python$(PYTHON_VER)m'
+ dline = ('python$(PYTHON_VER)'
+ if NEWER_PY_TEST else 'python$(PYTHON_VER)m')
splitlen = len(txt.split(dline))
if splitlen != 13:
raise RuntimeError(f'Unexpected configure line count {splitlen}.')
txt = txt.replace(
- dline, 'python$(PYTHON_VER)d' if PY38 else 'python$(PYTHON_VER)dm')
+ dline, 'python$(PYTHON_VER)d'
+ if NEWER_PY_TEST else 'python$(PYTHON_VER)dm')
+ # Inject our custom modifications to fire before building.
+ txt = txt.replace(
+ ' # Configure target Python\n',
+ ' cd $$(PYTHON_DIR-$1) && '
+ f'../../../../../tools/pcommand python_apple_patch {arch}\n'
+ ' # Configure target Python\n',
+ )
writefile('Makefile', txt)
# Ok; let 'er rip.
# (we run these in parallel so limit to 1 job a piece;
# otherwise they inherit the -j12 or whatever from the top level)
# (also this build seems to fail with multiple threads)
- run('make -j1 ' + {
- 'mac': 'Python-macOS',
- 'ios': 'Python-iOS',
- 'tvos': 'Python-tvOS'
- }[arch])
+ run(
+ 'make -j1 ' + {
+ 'mac': 'Python-macOS',
+ # 'mac': 'build/macOS/Python-3.9.6-macOS/Makefile',
+ 'ios': 'Python-iOS',
+ 'tvos': 'Python-tvOS'
+ }[arch])
print('python build complete! (apple/' + arch + ')')
+def apple_patch(arch: str) -> None:
+ """Run necessary patches on an apple archive before building."""
+
+ # Here's the deal: we want our custom static python libraries to
+ # be as similar as possible on apple platforms and android, so let's
+ # blow away all the tweaks that this setup does to Setup.local and
+ # instead apply our very similar ones directly to Setup, just as we
+ # do for android.
+ with open('Modules/Setup.local', 'w', encoding='utf-8') as outfile:
+ outfile.write('# cleared by efrotools build\n')
+
+ _patch_setup_file('apple', arch)
+
+
def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
"""Run a build for android with the given architecture.
(can be arm, arm64, x86, or x86_64)
"""
- # pylint: disable=too-many-statements
import subprocess
- import platform
+
builddir = 'build/python_android_' + arch + ('_debug' if debug else '')
run('rm -rf "' + builddir + '"')
run('mkdir -p build')
@@ -233,228 +155,178 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
'https://github.com/yan12125/python3-android.git "' + builddir + '"')
os.chdir(builddir)
- # It seems we now need 'autopoint' as part of this build, but on mac it
- # is not available on the normal path, but only as part of the keg-only
- # gettext homebrew formula.
- if platform.system() == 'Darwin':
- if (subprocess.run('which autopoint', shell=True,
- check=False).returncode != 0):
- print('Updating path for mac autopoint...')
- appath = subprocess.run('brew ls gettext | grep bin/autopoint',
- shell=True,
- check=True,
- capture_output=True)
- appathout = os.path.dirname(appath.stdout.decode().strip())
- os.environ['PATH'] += (':' + appathout)
- print(f'ADDED "{appathout}" TO SYS PATH...')
-
- # Commit from Jan 8, 2020. Right after this, the build system was switched
- # a a completely new minimal one which will take some work to update here.
- # Punting on that for now... (tentative plan is to try and adopt the new
- # one when we update for Python 3.10 in a year or two).
- if True: # pylint: disable=using-constant-test
- run('git checkout 9adbcfaca37f40b7a86381f83f0f6af4187233ae')
- ftxt = readfile('pybuild/env.py')
-
- # Set the packages we build.
- ftxt = replace_one(
- ftxt, 'packages = (', "packages = ('zlib', 'sqlite', 'xz'," +
- (" 'openssl'" if ENABLE_OPENSSL else '') + ')\n# packages = (')
-
- # Don't wanna bother with gpg signing stuff.
- ftxt = replace_one(ftxt, 'verify_source = True', 'verify_source = False')
-
- # Sub in the min api level we're targeting.
- ftxt = replace_one(ftxt, 'android_api_level = 21',
- 'android_api_level = 21')
- ftxt = replace_one(ftxt, "target_arch = 'arm'",
- "target_arch = '" + arch + "'")
- writefile('pybuild/env.py', ftxt)
- ftxt = readfile('Makefile')
-
- # This needs to be python3 for us.
- ftxt = replace_one(ftxt, 'PYTHON?=python\n', 'PYTHON?=python3\n')
- writefile('Makefile', ftxt)
- ftxt = readfile('pybuild/packages/python.py')
-
- # We currently build as a static lib.
- ftxt = replace_one(ftxt, " '--enable-shared',\n", '')
- ftxt = replace_one(
- ftxt, "super().__init__('https://github.com/python/cpython/')",
- "super().__init__('https://github.com/python/cpython/'"
- f", branch='{PYVER}')")
-
- # Turn ipv6 on (curious why its turned off here?...)
- # Also, turn on low level debugging features for our debug builds.
- ftxt = replace_one(ftxt, "'--disable-ipv6',", "'--enable-ipv6',")
- if debug:
- ftxt = replace_one(ftxt, "'./configure',",
- "'./configure', '--with-pydebug',")
-
- # We don't use this stuff so lets strip it out to simplify.
- ftxt = replace_one(ftxt, "'--without-ensurepip',", '')
-
- # This builds all modules as dynamic libs, but we want to be consistent
- # with our other embedded builds and just static-build the ones we
- # need... so to change that we'll need to add a hook for ourself after
- # python is downloaded but before it is built so we can muck with it.
- ftxt = replace_one(
- ftxt, ' def build(self):',
- ' def build(self):\n import os\n'
- ' if os.system(\'"' + rootdir +
- '/tools/pcommand" python_android_patch "' + os.getcwd() +
- '"\') != 0: raise Exception("patch apply failed")')
-
- writefile('pybuild/packages/python.py', ftxt)
-
- # Set these to particular releases to use those.
- # py_commit = '580fbb018fd0844806119614d752b41fc69660f9' # 3.8.5
- # py_commit = '6503f05dd59e26a9986bdea097b3da9b3546f45b' # 3.8.7
- py_commit = 'c3ffbbdf3d5645ee07c22649f2028f9dffc762ba' # 3.8.11
-
- # cpython-source-deps stuff started failing for OpenSSL on Jan 8 2021.
- # Pinning it to an older one for now.
- if bool(False):
- # From 6/12/20
- py_ssl_commit: Optional[str] = (
- '7f34c3085feb4692bbbb6c8b19d053ebc5049dad')
- else:
- py_ssl_commit = None
-
- commit_lines = ''
- if py_commit is not None:
- commit_lines += (' if self.source_url == '
- "'https://github.com/python/cpython/':\n"
- " run_in_dir(['git', 'checkout', '" +
- py_commit + "'], self.source_dir)\n")
- if py_ssl_commit is not None:
- commit_lines += (f' if self.source_url == '
- f"'https://github.com/python/cpython-source-deps'"
- f" and self.branch == 'openssl-1.1.1':\n"
- f" run_in_dir(['git', 'checkout', '"
- f"{py_ssl_commit}'], self.source_dir)\n")
-
- # Complaint about patch already being applied...
- if bool(True):
- ftxt = readfile('pybuild/packages/openssl.py')
- ftxt = replace_one(
- ftxt,
- ' LocalPatch(\'lld-issue32518\'),\n',
- ' # LocalPatch(\'lld-issue32518\'),\n',
- )
- writefile('pybuild/packages/openssl.py', ftxt)
-
- ftxt = readfile('pybuild/source.py')
-
- # Check out a particular commit right after the clone.
- ftxt = replace_one(
- ftxt, "'git', 'clone', '--single-branch', '-b',"
- ' self.branch, self.source_url, self.dest])', "'git', 'clone', '-b',"
- ' self.branch, self.source_url, self.dest])\n'
- ' # efro: hack to get exact commits we want.\n'
- " print('DOING URL', self.source_url)\n" + commit_lines)
- writefile('pybuild/source.py', ftxt)
- ftxt = readfile('pybuild/util.py')
-
- # Still don't wanna bother with gpg signing stuff.
- ftxt = replace_one(
- ftxt, 'def gpg_verify_file(sig_filename, filename, validpgpkeys):\n',
- 'def gpg_verify_file(sig_filename, filename, validpgpkeys):\n'
- ' print("gpg-verify disabled by ericf")\n'
- ' return\n')
- writefile('pybuild/util.py', ftxt)
-
- # These builds require ANDROID_NDK to be set, so make sure that's
- # the case.
+ # These builds require ANDROID_NDK to be set; make sure that's the case.
os.environ['ANDROID_NDK'] = subprocess.check_output(
[f'{rootdir}/tools/pcommand', 'android_sdk_utils',
'get-ndk-path']).decode().strip()
+ # Disable builds for dependencies we don't use.
+ ftxt = readfile('Android/build_deps.py')
+ # ftxt = replace_one(ftxt, ' NCurses,\n',
+ # '# NCurses,\n',)
+ ftxt = replace_one(
+ ftxt,
+ ' '
+ 'BZip2, GDBM, LibFFI, LibUUID, OpenSSL, Readline, SQLite, XZ, ZLib,\n',
+ ' '
+ 'BZip2, LibUUID, OpenSSL, SQLite, XZ, ZLib,\n',
+ )
+
+ # Older ssl seems to choke on newer ndk layouts.
+ ftxt = replace_one(
+ ftxt,
+ "source = 'https://www.openssl.org/source/openssl-1.1.1h.tar.gz'",
+ "source = 'https://www.openssl.org/source/openssl-1.1.1l.tar.gz'")
+ writefile('Android/build_deps.py', ftxt)
+
+ # Tweak some things in the base build script; grab the right version
+ # of Python and also inject some code to modify bits of python
+ # after it is extracted.
+ ftxt = readfile('build.sh')
+ ftxt = replace_one(ftxt, 'PYVER=3.9.0', f'PYVER={PY_VER_EXACT_ANDROID}')
+ ftxt = replace_one(
+ ftxt, ' popd\n', f' ../../../tools/pcommand'
+ f' python_android_patch Python-{PY_VER_EXACT_ANDROID}\n popd\n')
+ writefile('build.sh', ftxt)
+
# Ok, let 'er rip
# (we often run these builds in parallel so limit to 1 job a piece;
# otherwise they each inherit the -j12 or whatever from the top level).
- run('make -j1')
+ exargs = ' --with-pydebug' if debug else ''
+ run(f'ARCH={arch} ANDROID_API=21 ./build.sh{exargs}')
print('python build complete! (android/' + arch + ')')
def android_patch() -> None:
"""Run necessary patches on an android archive before building."""
- if PY38:
- fname = 'src/cpython/Modules/Setup'
+ _patch_setup_file('android', '?')
+
+
+def _patch_setup_file(platform: str, arch: str) -> None:
+ # pylint: disable=too-many-locals
+ # pylint: disable=too-many-statements
+ fname = 'Modules/Setup'
+ ftxt = readfile(fname)
+
+ if platform == 'android':
+ prefix = '$(srcdir)/Android/sysroot/usr'
+ uuid_ex = f' -L{prefix}/lib -luuid'
+ zlib_ex = f' -I{prefix}/include -L{prefix}/lib -lz'
+ bz2_ex = f' -I{prefix}/include -L{prefix}/lib -lbz2'
+ ssl_ex = f' -DUSE_SSL -I{prefix}/include -L{prefix}/lib -lssl -lcrypto'
+ sqlite_ex = f' -I{prefix}/include -L{prefix}/lib'
+ hash_ex = ' -DUSE_SSL -lssl -lcrypto'
+ lzma_ex = ' -llzma'
+ elif platform == 'apple':
+ prefix = '$(srcdir)/Android/sysroot/usr'
+ uuid_ex = ''
+ zlib_ex = ' -I$(prefix)/include -lz'
+ bz2_ex = (' -I$(srcdir)/../Support/BZip2/Headers'
+ ' -L$(srcdir)/../Support/BZip2 -lbzip2')
+ ssl_ex = (' -I$(srcdir)/../Support/OpenSSL/Headers'
+ ' -L$(srcdir)/../Support/OpenSSL -lOpenSSL -DUSE_SSL')
+ sqlite_ex = ' -I$(srcdir)/Modules/_sqlite'
+ hash_ex = (' -I$(srcdir)/../Support/OpenSSL/Headers'
+ ' -L$(srcdir)/../Support/OpenSSL -lOpenSSL -DUSE_SSL')
+ lzma_ex = (' -I$(srcdir)/../Support/XZ/Headers'
+ ' -L$(srcdir)/../Support/XZ/ -lxz')
else:
- fname = 'src/cpython/Modules/Setup.dist'
- txt = readfile(fname)
+ raise RuntimeError(f'Unknown platform {platform}')
- # Need to switch some flags on this one.
- txt = replace_one(txt, '#zlib zlibmodule.c',
- 'zlib zlibmodule.c -lz\n#zlib zlibmodule.c')
- # Just turn all these on.
- for enable in [
- '#array arraymodule.c',
- '#cmath cmathmodule.c _math.c',
- '#math mathmodule.c',
- '#_contextvars _contextvarsmodule.c',
- '#_struct _struct.c',
- '#_weakref _weakref.c',
- # '#_testcapi _testcapimodule.c',
- '#_random _randommodule.c',
- '#_elementtree -I',
- '#_pickle _pickle.c',
- '#_datetime _datetimemodule.c',
- '#_bisect _bisectmodule.c',
- '#_heapq _heapqmodule.c',
- '#_asyncio _asynciomodule.c',
- '#unicodedata unicodedata.c',
- '#fcntl fcntlmodule.c',
- '#select selectmodule.c',
- '#_csv _csv.c',
- '#_socket socketmodule.c',
- '#_blake2 _blake2/blake2module.c',
- '#binascii binascii.c',
- '#_posixsubprocess _posixsubprocess.c',
- '#_sha3 _sha3/sha3module.c'
- ]:
- txt = replace_one(txt, enable, enable[1:])
- if ENABLE_OPENSSL:
- txt = replace_one(txt, '#_ssl _ssl.c \\',
- '_ssl _ssl.c -DUSE_SSL -lssl -lcrypto')
- else:
- # Note that the _md5 and _sha modules are normally only built if the
- # system does not have the OpenSSL libs containing an optimized
- # version.
- for enable in [
- '#_md5 md5module.c', '#_sha1 sha1module.c',
- '#_sha256 sha256module.c', '#_sha512 sha512module.c'
- ]:
- txt = replace_one(txt, enable, enable[1:])
+ # This list should contain all possible compiled modules to start.
+ # If any .so files are coming out of builds, their names should be
+ # added here to stop that.
+ cmodules = [
+ '_asyncio', '_bisect', '_blake2', '_codecs_cn', '_codecs_hk',
+ '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw',
+ '_contextvars', '_crypt', '_csv', '_ctypes_test', '_ctypes',
+ '_curses_panel', '_curses', '_datetime', '_decimal', '_elementtree',
+ '_heapq', '_json', '_lsprof', '_lzma', '_md5', '_multibytecodec',
+ '_multiprocessing', '_opcode', '_pickle', '_posixsubprocess', '_queue',
+ '_random', '_sha1', '_sha3', '_sha256', '_sha512', '_socket',
+ '_statistics', '_struct', '_testbuffer', '_testcapi',
+ '_testimportmultiple', '_testinternalcapi', '_testmultiphase', '_uuid',
+ '_xxsubinterpreters', '_xxtestfuzz', '_zoneinfo', 'array', 'audioop',
+ 'binascii', 'cmath', 'fcntl', 'grp', 'math', 'mmap', 'ossaudiodev',
+ 'parser', 'pyexpat', 'resource', 'select', 'syslog', 'termios',
+ 'unicodedata', 'xxlimited', 'zlib'
+ ]
- # Turn this off (its just an example module).
- txt = replace_one(txt, 'xxsubtype xxsubtype.c', '#xxsubtype xxsubtype.c')
+ # Selectively uncomment some existing modules for static compilation.
+ enables = [
+ '_asyncio', 'array', 'cmath', 'math', '_contextvars', '_struct',
+ '_random', '_elementtree', '_pickle', '_datetime', '_zoneinfo',
+ '_bisect', '_heapq', '_json', '_statistics', 'unicodedata', 'fcntl',
+ 'select', 'mmap', '_csv', '_socket', '_sha3', '_blake2', 'binascii',
+ '_posixsubprocess'
+ ]
+ # Note that the _md5 and _sha modules are normally only built if the
+ # system does not have the OpenSSL libs containing an optimized
+ # version.
+ if bool(False):
+ enables += ['_md5']
- # For whatever reason this stuff isn't in there at all; add it.
- txt += '\n_json _json.c\n'
+ for enable in enables:
+ ftxt = replace_one(ftxt, f'#{enable} ', f'{enable} ')
+ cmodules.remove(enable)
- txt += '\n_lzma _lzmamodule.c -llzma\n'
+ # Disable ones that were enabled:
+ disables = ['xxsubtype']
+ for disable in disables:
+ ftxt = replace_one(ftxt, f'\n{disable} ', f'\n#{disable} ')
- txt += ('\n_sqlite3 -I$(srcdir)/Modules/_sqlite'
- ' -DMODULE_NAME=\'\\"sqlite3\\"\' -DSQLITE_OMIT_LOAD_EXTENSION'
- ' -lsqlite3 \\\n'
- ' _sqlite/cache.c \\\n'
- ' _sqlite/connection.c \\\n'
- ' _sqlite/cursor.c \\\n'
- ' _sqlite/microprotocols.c \\\n'
- ' _sqlite/module.c \\\n'
- ' _sqlite/prepare_protocol.c \\\n'
- ' _sqlite/row.c \\\n'
- ' _sqlite/statement.c \\\n'
- ' _sqlite/util.c\n')
+ # Additions:
+ ftxt += '\n# Additions by efrotools:\n'
- if ENABLE_OPENSSL:
- txt += '\n\n_hashlib _hashopenssl.c -DUSE_SSL -lssl -lcrypto\n'
+ if bool(True):
+ ftxt += f'_uuid _uuidmodule.c{uuid_ex}\n'
+ cmodules.remove('_uuid')
- txt += '\n\n*disabled*\n_ctypes _crypt grp'
+ ftxt += f'zlib zlibmodule.c{zlib_ex}\n'
- writefile(fname, txt)
+ cmodules.remove('zlib')
+
+ # Why isn't this getting built as a shared lib by default?
+ # Do we need it for sure?
+ ftxt += f'_hashlib _hashopenssl.c{hash_ex}\n'
+
+ ftxt += f'_lzma _lzmamodule.c{lzma_ex}\n'
+ cmodules.remove('_lzma')
+
+ ftxt += f'_bz2 _bz2module.c{bz2_ex}\n'
+
+ ftxt += f'_ssl _ssl.c{ssl_ex}\n'
+
+ ftxt += (f'_sqlite3'
+ f' _sqlite/cache.c'
+ f' _sqlite/connection.c'
+ f' _sqlite/cursor.c'
+ f' _sqlite/microprotocols.c'
+ f' _sqlite/module.c'
+ f' _sqlite/prepare_protocol.c'
+ f' _sqlite/row.c'
+ f' _sqlite/statement.c'
+ f' _sqlite/util.c'
+ f'{sqlite_ex}'
+ f' -DMODULE_NAME=\'\\"sqlite3\\"\''
+ f' -DSQLITE_OMIT_LOAD_EXTENSION'
+ f' -lsqlite3\n')
+
+ # Mac needs this:
+ if arch == 'mac':
+ ftxt += ('\n'
+ '# efrotools: mac urllib needs this:\n'
+ '_scproxy _scproxy.c '
+ '-framework SystemConfiguration '
+ '-framework CoreFoundation\n')
+
+ # Explicitly mark the remaining ones as disabled
+ # (so Python won't try to build them as dynamic libs).
+ remaining_disabled = ' '.join(cmodules)
+ ftxt += ('\n# Disabled by efrotools build:\n'
+ '*disabled*\n'
+ f'{remaining_disabled}\n')
+ writefile(fname, ftxt)
# Ok, this is weird.
# When applying the module Setup, python looks for any line containing *=*
@@ -462,62 +334,19 @@ def android_patch() -> None:
# This breaks things for our static sqlite compile above.
# The check used to look for [A-Z]*=* which didn't break, so let' just
# change it back to that for now.
- fname = 'src/cpython/Modules/makesetup'
+ # UPDATE: Currently this seems to only be necessary on Android;
+ # perhaps this broke between 3.9.6 and 3.9.7 or perhaps the apple
+ # bundle already patches it ¯\_(ツ)_/¯
+ fname = 'Modules/makesetup'
txt = readfile(fname)
- txt = replace_one(txt, ' *=*)'
- ' DEFS="$line$NL$DEFS"; continue;;',
- ' [A-Z]*=*) DEFS="$line$NL$DEFS";'
- ' continue;;')
+ if platform == 'android':
+ txt = replace_one(txt, ' *=*)'
+ ' DEFS="$line$NL$DEFS"; continue;;',
+ ' [A-Z]*=*) DEFS="$line$NL$DEFS";'
+ ' continue;;')
+ assert txt.count('[A-Z]*=*') == 1
writefile(fname, txt)
- # Add custom callbacks to Python's PyParser_ParseFileObject
- # and PyParser_ParseString calls to debug a crash.
- fname = 'src/cpython/Parser/parsetok.c'
- txt = readfile(fname)
- txt = replace_one(
- txt, 'node *\n'
- 'PyParser_ParseFileObject(FILE *fp, PyObject *filename,\n'
- ' const char *enc, grammar *g, int start,\n'
- ' const char *ps1, const char *ps2,\n'
- ' perrdetail *err_ret, int *flags)\n'
- '{\n', 'void (*PyParser_ParseFileObject_EfroCB)'
- '(FILE *fp, PyObject *filename,\n'
- ' const char *enc, grammar *g, int start,\n'
- ' const char *ps1, const char *ps2,\n'
- ' perrdetail *err_ret, int *flags) = NULL;\n'
- 'node *\n'
- 'PyParser_ParseFileObject(FILE *fp, PyObject *filename,\n'
- ' const char *enc, grammar *g, int start,\n'
- ' const char *ps1, const char *ps2,\n'
- ' perrdetail *err_ret, int *flags)\n'
- '{\n'
- ' if (PyParser_ParseFileObject_EfroCB != NULL) {\n'
- ' PyParser_ParseFileObject_EfroCB(fp, filename, enc, g,\n'
- ' start, ps1, ps2,\n'
- ' err_ret, flags);\n'
- ' }\n')
- txt = replace_one(
- txt, 'node *\n'
- 'PyParser_ParseStringObject(const char *s, PyObject *filename,\n'
- ' grammar *g, int start,\n'
- ' perrdetail *err_ret, int *flags)\n'
- '{\n', 'void (*PyParser_ParseStringObject_EfroCB)'
- '(const char *s, PyObject *filename,\n'
- ' grammar *g, int start,\n'
- ' perrdetail *err_ret, int *flags) = NULL;\n'
- 'node *\n'
- 'PyParser_ParseStringObject(const char *s, PyObject *filename,\n'
- ' grammar *g, int start,\n'
- ' perrdetail *err_ret, int *flags)\n'
- '{\n'
- ' if (PyParser_ParseStringObject_EfroCB != NULL) {\n'
- ' PyParser_ParseStringObject_EfroCB(s, filename, g, start,\n'
- ' err_ret, flags);\n'
- ' }\n')
- writefile(fname, txt)
-
- print('APPLIED EFROTOOLS ANDROID BUILD PATCHES.')
-
def winprune() -> None:
"""Prune unneeded files from windows python dists."""
@@ -540,6 +369,8 @@ def gather() -> None:
"""
# pylint: disable=too-many-locals
+ do_android = True
+
# First off, clear out any existing output.
existing_dirs = [
os.path.join('src/external', d) for d in os.listdir('src/external')
@@ -549,44 +380,51 @@ def gather() -> None:
os.path.join('assets/src', d) for d in os.listdir('assets/src')
if d.startswith('pylib-')
]
+ if not do_android:
+ existing_dirs = [d for d in existing_dirs if 'android' not in d]
+
for existing_dir in existing_dirs:
run('rm -rf "' + existing_dir + '"')
+ apost2 = f'src/Python-{PY_VER_EXACT_ANDROID}/Android/sysroot'
for buildtype in ['debug', 'release']:
debug = buildtype == 'debug'
bsuffix = '_debug' if buildtype == 'debug' else ''
bsuffix2 = '-debug' if buildtype == 'debug' else ''
-
libname = 'python' + PYVER + ('d' if debug else '')
bases = {
- 'mac':
- f'build/python_apple_mac{bsuffix}/build/macOS',
- 'ios':
- f'build/python_apple_ios{bsuffix}/build/iOS',
- 'tvos':
- f'build/python_apple_tvos{bsuffix}/build/tvOS',
- 'android_arm':
- f'build/python_android_arm{bsuffix}/build/sysroot',
- 'android_arm64':
- f'build/python_android_arm64{bsuffix}/build/sysroot',
- 'android_x86':
- f'build/python_android_x86{bsuffix}/build/sysroot',
- 'android_x86_64':
- f'build/python_android_x86_64{bsuffix}/build/sysroot'
+ 'mac': f'build/python_apple_mac{bsuffix}/build/macOS',
+ 'ios': f'build/python_apple_ios{bsuffix}/build/iOS',
+ 'tvos': f'build/python_apple_tvos{bsuffix}/build/tvOS',
+ 'android_arm': f'build/python_android_arm{bsuffix}/build',
+ 'android_arm64': f'build/python_android_arm64{bsuffix}/build',
+ 'android_x86': f'build/python_android_x86{bsuffix}/build',
+ 'android_x86_64': f'build/python_android_x86_64{bsuffix}/build'
+ }
+ bases2 = {
+ 'android_arm': f'build/python_android_arm{bsuffix}/{apost2}',
+ 'android_arm64': f'build/python_android_arm64{bsuffix}/{apost2}',
+ 'android_x86': f'build/python_android_x86{bsuffix}/{apost2}',
+ 'android_x86_64': f'build/python_android_x86_64{bsuffix}/{apost2}'
}
# Note: only need pylib for the first in each group.
- builds: List[Dict[str, Any]] = [{
- 'name': 'macos',
- 'group': 'apple',
- 'headers': bases['mac'] + '/Support/Python/Headers',
+ builds: list[dict[str, Any]] = [{
+ 'name':
+ 'macos',
+ 'group':
+ 'apple',
+ 'headers':
+ bases['mac'] + '/Support/Python/Headers',
'libs': [
bases['mac'] + '/Support/Python/libPython.a',
bases['mac'] + '/Support/OpenSSL/libOpenSSL.a',
- bases['mac'] + '/Support/XZ/libxz.a'
+ bases['mac'] + '/Support/XZ/libxz.a',
+ bases['mac'] + '/Support/BZip2/libbzip2.a',
],
- 'pylib': (bases['mac'] + '/python/lib/python' + PYVER),
+ 'pylib':
+ (bases['mac'] + f'/Python-{PY_VER_EXACT_APPLE}-macOS/lib'),
}, {
'name':
'ios',
@@ -597,7 +435,8 @@ def gather() -> None:
'libs': [
bases['ios'] + '/Support/Python/libPython.a',
bases['ios'] + '/Support/OpenSSL/libOpenSSL.a',
- bases['ios'] + '/Support/XZ/libxz.a'
+ bases['ios'] + '/Support/XZ/libxz.a',
+ bases['ios'] + '/Support/BZip2/libbzip2.a',
],
}, {
'name':
@@ -609,7 +448,8 @@ def gather() -> None:
'libs': [
bases['tvos'] + '/Support/Python/libPython.a',
bases['tvos'] + '/Support/OpenSSL/libOpenSSL.a',
- bases['tvos'] + '/Support/XZ/libxz.a'
+ bases['tvos'] + '/Support/XZ/libxz.a',
+ bases['tvos'] + '/Support/BZip2/libbzip2.a',
],
}, {
'name': 'android_arm',
@@ -617,10 +457,12 @@ def gather() -> None:
'headers': bases['android_arm'] + f'/usr/include/{libname}',
'libs': [
bases['android_arm'] + f'/usr/lib/lib{libname}.a',
- bases['android_arm'] + '/usr/lib/libssl.a',
- bases['android_arm'] + '/usr/lib/libcrypto.a',
- bases['android_arm'] + '/usr/lib/liblzma.a',
- bases['android_arm'] + '/usr/lib/libsqlite3.a'
+ bases2['android_arm'] + '/usr/lib/libssl.a',
+ bases2['android_arm'] + '/usr/lib/libcrypto.a',
+ bases2['android_arm'] + '/usr/lib/liblzma.a',
+ bases2['android_arm'] + '/usr/lib/libsqlite3.a',
+ bases2['android_arm'] + '/usr/lib/libbz2.a',
+ bases2['android_arm'] + '/usr/lib/libuuid.a',
],
'libinst': 'android_armeabi-v7a',
'pylib': (bases['android_arm'] + '/usr/lib/python' + PYVER),
@@ -630,10 +472,12 @@ def gather() -> None:
'headers': bases['android_arm64'] + f'/usr/include/{libname}',
'libs': [
bases['android_arm64'] + f'/usr/lib/lib{libname}.a',
- bases['android_arm64'] + '/usr/lib/libssl.a',
- bases['android_arm64'] + '/usr/lib/libcrypto.a',
- bases['android_arm64'] + '/usr/lib/liblzma.a',
- bases['android_arm64'] + '/usr/lib/libsqlite3.a'
+ bases2['android_arm64'] + '/usr/lib/libssl.a',
+ bases2['android_arm64'] + '/usr/lib/libcrypto.a',
+ bases2['android_arm64'] + '/usr/lib/liblzma.a',
+ bases2['android_arm64'] + '/usr/lib/libsqlite3.a',
+ bases2['android_arm64'] + '/usr/lib/libbz2.a',
+ bases2['android_arm64'] + '/usr/lib/libuuid.a',
],
'libinst': 'android_arm64-v8a',
}, {
@@ -642,10 +486,12 @@ def gather() -> None:
'headers': bases['android_x86'] + f'/usr/include/{libname}',
'libs': [
bases['android_x86'] + f'/usr/lib/lib{libname}.a',
- bases['android_x86'] + '/usr/lib/libssl.a',
- bases['android_x86'] + '/usr/lib/libcrypto.a',
- bases['android_x86'] + '/usr/lib/liblzma.a',
- bases['android_x86'] + '/usr/lib/libsqlite3.a'
+ bases2['android_x86'] + '/usr/lib/libssl.a',
+ bases2['android_x86'] + '/usr/lib/libcrypto.a',
+ bases2['android_x86'] + '/usr/lib/liblzma.a',
+ bases2['android_x86'] + '/usr/lib/libsqlite3.a',
+ bases2['android_x86'] + '/usr/lib/libbz2.a',
+ bases2['android_x86'] + '/usr/lib/libuuid.a',
],
'libinst': 'android_x86',
}, {
@@ -654,17 +500,20 @@ def gather() -> None:
'headers': bases['android_x86_64'] + f'/usr/include/{libname}',
'libs': [
bases['android_x86_64'] + f'/usr/lib/lib{libname}.a',
- bases['android_x86_64'] + '/usr/lib/libssl.a',
- bases['android_x86_64'] + '/usr/lib/libcrypto.a',
- bases['android_x86_64'] + '/usr/lib/liblzma.a',
- bases['android_x86_64'] + '/usr/lib/libsqlite3.a'
+ bases2['android_x86_64'] + '/usr/lib/libssl.a',
+ bases2['android_x86_64'] + '/usr/lib/libcrypto.a',
+ bases2['android_x86_64'] + '/usr/lib/liblzma.a',
+ bases2['android_x86_64'] + '/usr/lib/libsqlite3.a',
+ bases2['android_x86_64'] + '/usr/lib/libbz2.a',
+ bases2['android_x86_64'] + '/usr/lib/libuuid.a',
],
'libinst': 'android_x86_64',
}]
for build in builds:
-
grp = build['group']
+ if not do_android and grp == 'android':
+ continue
builddir = f'src/external/python-{grp}{bsuffix2}'
header_dst = os.path.join(builddir, 'include')
lib_dst = os.path.join(builddir, 'lib')
diff --git a/tools/efrotools/pylintplugins.py b/tools/efrotools/pylintplugins.py
index c099cc88..f2793134 100644
--- a/tools/efrotools/pylintplugins.py
+++ b/tools/efrotools/pylintplugins.py
@@ -9,8 +9,8 @@ from typing import TYPE_CHECKING
import astroid
if TYPE_CHECKING:
+ from typing import Any
from astroid import nodes as nc
- from typing import Set, Dict, Any, List
VERBOSE = False
@@ -20,7 +20,7 @@ def register(linter: Any) -> None:
del linter # Unused.
-failed_imports: Set[str] = set()
+failed_imports: set[str] = set()
def failed_import_hook(modname: str) -> None:
@@ -248,7 +248,7 @@ def class_generics_filter(node: nc.NodeNG) -> nc.NodeNG:
return node
# Now strip subscripts from base classes.
- new_bases: List[nc.NodeNG] = []
+ new_bases: list[nc.NodeNG] = []
for base in node.bases:
if _is_strippable_subscript(base):
new_bases.append(base.value)
diff --git a/tools/efrotools/statictest.py b/tools/efrotools/statictest.py
index 50bbb17e..0a1e0ebb 100644
--- a/tools/efrotools/statictest.py
+++ b/tools/efrotools/statictest.py
@@ -11,7 +11,7 @@ import subprocess
import logging
if TYPE_CHECKING:
- from typing import Any, Type, Dict, Optional, List, Union
+ from typing import Any, Optional, Union
# Global state:
# We maintain a single temp dir where our mypy cache and our temp
@@ -20,7 +20,7 @@ if TYPE_CHECKING:
# filter it a bit to add reveal_type() statements, and run mypy on it.
# The temp dir should tear itself down when Python exits.
_tempdir: Optional[tempfile.TemporaryDirectory] = None
-_statictestfiles: Dict[str, StaticTestFile] = {}
+_statictestfiles: dict[str, StaticTestFile] = {}
_nextfilenum: int = 1
@@ -40,10 +40,10 @@ class StaticTestFile:
_nextfilenum += 1
# Types we *want* for lines
- self.linetypes_wanted: Dict[int, str] = {}
+ self.linetypes_wanted: dict[int, str] = {}
# Types Mypy gave us for lines
- self.linetypes_mypy: Dict[int, str] = {}
+ self.linetypes_mypy: dict[int, str] = {}
print(f'Running Mypy static testing on "{filename}"...')
with open(filename, 'r', encoding='utf-8') as infile:
@@ -95,7 +95,7 @@ class StaticTestFile:
"""Filter the provided file contents and take note of type checks."""
import ast
lines = contents.splitlines()
- lines_out: List[str] = []
+ lines_out: list[str] = []
for lineno, line in enumerate(lines):
if 'static_type_equals(' not in line:
lines_out.append(line)
@@ -155,7 +155,7 @@ class StaticTestFile:
return '\n'.join(lines_out) + '\n'
-def static_type_equals(value: Any, statictype: Union[Type, None, str]) -> bool:
+def static_type_equals(value: Any, statictype: Union[type, None, str]) -> bool:
"""Check a type statically using mypy.
If a string is passed as statictype, it is checked against the mypy
diff --git a/tools/efrotools/sync.py b/tools/efrotools/sync.py
index b295016d..db37d9a1 100644
--- a/tools/efrotools/sync.py
+++ b/tools/efrotools/sync.py
@@ -15,7 +15,7 @@ from typing import TYPE_CHECKING
from efro.terminal import Clr
if TYPE_CHECKING:
- from typing import List, Tuple, Optional, Sequence
+ from typing import Optional, Sequence
class Mode(Enum):
@@ -98,10 +98,10 @@ def sync_paths(src_proj: str, src: Path, dst: Path, mode: Mode) -> int:
if not (src.is_dir() or src.is_file()):
raise ValueError(f'src path is not a dir or file: {src}')
- changed_error_dst_files: List[Path] = []
+ changed_error_dst_files: list[Path] = []
# Build a list of all valid source files and their equivalent paths in dst.
- allpaths: List[Tuple[Path, Path]] = []
+ allpaths: list[tuple[Path, Path]] = []
if src.is_file():
if not _valid_filename(src.name):
@@ -199,7 +199,7 @@ def sync_paths(src_proj: str, src: Path, dst: Path, mode: Mode) -> int:
# Now, if dst is a dir, iterate through and kill anything not in src.
if dst.is_dir():
- killpaths: List[Path] = []
+ killpaths: list[Path] = []
for root, dirnames, fnames in os.walk(dst):
for name in dirnames + fnames:
if (name.startswith('.') or '__pycache__' in root
@@ -235,7 +235,7 @@ def sync_paths(src_proj: str, src: Path, dst: Path, mode: Mode) -> int:
def check_path(dst: Path) -> int:
"""Verify files under dst have not changed from their last sync."""
- allpaths: List[Path] = []
+ allpaths: list[Path] = []
for root, _dirs, fnames in os.walk(dst):
for fname in fnames:
if _valid_filename(fname):
@@ -285,7 +285,7 @@ def string_hash(data: str) -> str:
return str(int.from_bytes(md5.digest(), byteorder='big'))
-def get_dst_file_info(dstfile: Path) -> Tuple[str, str, str]:
+def get_dst_file_info(dstfile: Path) -> tuple[str, str, str]:
"""Given a path, returns embedded marker hash and its actual hash."""
with dstfile.open() as infile:
dstdata = infile.read()
diff --git a/tools/pcommand b/tools/pcommand
index 0dc6db84..7768fa0c 100755
--- a/tools/pcommand
+++ b/tools/pcommand
@@ -1,4 +1,4 @@
-#!/usr/bin/env python3.8
+#!/usr/bin/env python3.9
# Released under the MIT License. See LICENSE for details.
#
"""A collection of commands for use with this project.
@@ -31,12 +31,12 @@ from batools.pcommand import (
gen_fulltest_buildfile_android, gen_fulltest_buildfile_windows,
gen_fulltest_buildfile_apple, gen_fulltest_buildfile_linux,
python_build_apple, python_build_apple_debug, python_build_android,
- python_build_android_debug, python_android_patch, python_gather,
- python_winprune, capitalize, upper, efrocache_update, efrocache_get,
- get_modern_make, warm_start_asset_build, gendocs, update_docs_md,
- list_pip_reqs, install_pip_reqs, checkenv, ensure_prefab_platform,
- prefab_run_var, make_prefab, update_makebob, lazybuild,
- android_archive_unstripped_libs, efro_gradle, stage_assets,
+ python_build_android_debug, python_android_patch, python_apple_patch,
+ python_gather, python_winprune, capitalize, upper, efrocache_update,
+ efrocache_get, get_modern_make, warm_start_asset_build, gendocs,
+ update_docs_md, list_pip_reqs, install_pip_reqs, checkenv,
+ ensure_prefab_platform, prefab_run_var, make_prefab, update_makebob,
+ lazybuild, android_archive_unstripped_libs, efro_gradle, stage_assets,
update_assets_makefile, update_project, update_cmake_prefab_lib,
cmake_prep_dir, gen_binding_code, gen_flat_data_code, wsl_path_to_win,
wsl_build_check_win_drive, win_ci_binary_build, genchangelog,