fixed broken v1 networking

This commit is contained in:
Eric 2023-09-06 11:44:12 -07:00
parent 183c5abf60
commit cd098866ea
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
12 changed files with 447 additions and 315 deletions

288
.efrocachemap generated
View File

@ -2594,14 +2594,14 @@
"build/assets/pylib-android/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8", "build/assets/pylib-android/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8",
"build/assets/pylib-android/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61", "build/assets/pylib-android/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61",
"build/assets/pylib-android/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3", "build/assets/pylib-android/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3",
"build/assets/pylib-android/_sysconfigdata__linux_aarch64-linux-android.py": "3d0400e723f4dad156512d4229270993", "build/assets/pylib-android/_sysconfigdata__linux_aarch64-linux-android.py": "cb9a77b04173c8776365999b57186e36",
"build/assets/pylib-android/_sysconfigdata__linux_arm-linux-androideabi.py": "506b3106270f7f7ae33e195d1f5caa55", "build/assets/pylib-android/_sysconfigdata__linux_arm-linux-androideabi.py": "6d50596ec7f4858a0c6a5edefde21f7a",
"build/assets/pylib-android/_sysconfigdata__linux_i686-linux-android.py": "f38a2b60f9cbf0524885e5c1c99164c1", "build/assets/pylib-android/_sysconfigdata__linux_i686-linux-android.py": "bf9358a2243aa7884b8e80d85c969fa5",
"build/assets/pylib-android/_sysconfigdata__linux_x86_64-linux-android.py": "d67f056bcaf3d491d68254c206067d19", "build/assets/pylib-android/_sysconfigdata__linux_x86_64-linux-android.py": "45eee0efbc2441535b94a8ad5acf4d2e",
"build/assets/pylib-android/_sysconfigdata_d_linux_aarch64-linux-android.py": "e4322948686ce1d4b37a1a3f8000e2dc", "build/assets/pylib-android/_sysconfigdata_d_linux_aarch64-linux-android.py": "f8ff271cf6df0b5b4d46d9c548abb84e",
"build/assets/pylib-android/_sysconfigdata_d_linux_arm-linux-androideabi.py": "a4d14baa8cfc0019363742349449942b", "build/assets/pylib-android/_sysconfigdata_d_linux_arm-linux-androideabi.py": "da171b290c06a34d6a5cfbb296c22c34",
"build/assets/pylib-android/_sysconfigdata_d_linux_i686-linux-android.py": "2ad6c96209fd69a4eef4a7d730cd16e8", "build/assets/pylib-android/_sysconfigdata_d_linux_i686-linux-android.py": "dde2516b5ac29412dfbebaa7b3de0d0d",
"build/assets/pylib-android/_sysconfigdata_d_linux_x86_64-linux-android.py": "bf6ce8f2788661352014e973351f35cf", "build/assets/pylib-android/_sysconfigdata_d_linux_x86_64-linux-android.py": "7df452144c6630afb96951487c1257a0",
"build/assets/pylib-android/_threading_local.py": "4a9688e3987d7d692db46feb9214945e", "build/assets/pylib-android/_threading_local.py": "4a9688e3987d7d692db46feb9214945e",
"build/assets/pylib-android/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7", "build/assets/pylib-android/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7",
"build/assets/pylib-android/abc.py": "a0daa1ed187eee8690c1e8438b97da90", "build/assets/pylib-android/abc.py": "a0daa1ed187eee8690c1e8438b97da90",
@ -2612,13 +2612,13 @@
"build/assets/pylib-android/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3", "build/assets/pylib-android/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3",
"build/assets/pylib-android/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822", "build/assets/pylib-android/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822",
"build/assets/pylib-android/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e", "build/assets/pylib-android/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e",
"build/assets/pylib-android/asyncio/base_events.py": "9f7758e7f013043a50c693e5e8d068b5", "build/assets/pylib-android/asyncio/base_events.py": "8494c7bc5f5fe98fd64d882ed4cc4722",
"build/assets/pylib-android/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0", "build/assets/pylib-android/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0",
"build/assets/pylib-android/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1", "build/assets/pylib-android/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1",
"build/assets/pylib-android/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa", "build/assets/pylib-android/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa",
"build/assets/pylib-android/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b", "build/assets/pylib-android/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b",
"build/assets/pylib-android/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52", "build/assets/pylib-android/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52",
"build/assets/pylib-android/asyncio/events.py": "07c04d04b5e255fc5b79698715f4dc4e", "build/assets/pylib-android/asyncio/events.py": "3063d6b0d1fcbb50f8142f8ce58531fb",
"build/assets/pylib-android/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333", "build/assets/pylib-android/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333",
"build/assets/pylib-android/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a", "build/assets/pylib-android/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a",
"build/assets/pylib-android/asyncio/futures.py": "297232981f201edac774ec3a49a0845b", "build/assets/pylib-android/asyncio/futures.py": "297232981f201edac774ec3a49a0845b",
@ -2632,7 +2632,7 @@
"build/assets/pylib-android/asyncio/selector_events.py": "a108fbd3a49f967da245f39cebf7694e", "build/assets/pylib-android/asyncio/selector_events.py": "a108fbd3a49f967da245f39cebf7694e",
"build/assets/pylib-android/asyncio/sslproto.py": "2ec1b21e523055147d94c8c634154aab", "build/assets/pylib-android/asyncio/sslproto.py": "2ec1b21e523055147d94c8c634154aab",
"build/assets/pylib-android/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366", "build/assets/pylib-android/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366",
"build/assets/pylib-android/asyncio/streams.py": "e9c609b92b4e9bd3383cf4004c6186c6", "build/assets/pylib-android/asyncio/streams.py": "f00ddd2b2fd74554ae1d3088bd9d2bfd",
"build/assets/pylib-android/asyncio/subprocess.py": "edb8d98278300b6c99f36cd08643c743", "build/assets/pylib-android/asyncio/subprocess.py": "edb8d98278300b6c99f36cd08643c743",
"build/assets/pylib-android/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56", "build/assets/pylib-android/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56",
"build/assets/pylib-android/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca", "build/assets/pylib-android/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca",
@ -2657,16 +2657,16 @@
"build/assets/pylib-android/code.py": "5d47099984013b933c96b02ef16981b8", "build/assets/pylib-android/code.py": "5d47099984013b933c96b02ef16981b8",
"build/assets/pylib-android/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec", "build/assets/pylib-android/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec",
"build/assets/pylib-android/codeop.py": "d375467fb29fccd43ab94d15a2e63085", "build/assets/pylib-android/codeop.py": "d375467fb29fccd43ab94d15a2e63085",
"build/assets/pylib-android/collections/__init__.py": "44999193e5c3d379e3feaa50ddf5147d", "build/assets/pylib-android/collections/__init__.py": "dcffbb6ee2cadd0c05ad22f2ef41f89b",
"build/assets/pylib-android/collections/abc.py": "15f410d3821352033a90a04539c99060", "build/assets/pylib-android/collections/abc.py": "15f410d3821352033a90a04539c99060",
"build/assets/pylib-android/colorsys.py": "1452923f15188287bc677e7128cb6b31", "build/assets/pylib-android/colorsys.py": "ca8f117785bf7606c3919ef0f4b828ae",
"build/assets/pylib-android/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b", "build/assets/pylib-android/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b",
"build/assets/pylib-android/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85", "build/assets/pylib-android/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85",
"build/assets/pylib-android/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a", "build/assets/pylib-android/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a",
"build/assets/pylib-android/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e", "build/assets/pylib-android/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e",
"build/assets/pylib-android/concurrent/futures/process.py": "4725abe3e780075ac264da12a1db5714", "build/assets/pylib-android/concurrent/futures/process.py": "a44e8618e158f8f351dafcb566a02544",
"build/assets/pylib-android/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13", "build/assets/pylib-android/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13",
"build/assets/pylib-android/configparser.py": "a6b19c20d70861eea310e5504621e562", "build/assets/pylib-android/configparser.py": "914afd2b2cec90bbca0b94fd176b5176",
"build/assets/pylib-android/contextlib.py": "6f52eac914e438ef54407760def8305f", "build/assets/pylib-android/contextlib.py": "6f52eac914e438ef54407760def8305f",
"build/assets/pylib-android/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e", "build/assets/pylib-android/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e",
"build/assets/pylib-android/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74", "build/assets/pylib-android/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74",
@ -2692,33 +2692,33 @@
"build/assets/pylib-android/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4", "build/assets/pylib-android/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4",
"build/assets/pylib-android/difflib.py": "6b3c8fd541b2b8d0320727025cd25275", "build/assets/pylib-android/difflib.py": "6b3c8fd541b2b8d0320727025cd25275",
"build/assets/pylib-android/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba", "build/assets/pylib-android/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba",
"build/assets/pylib-android/doctest.py": "eb60b2b39e0deb976ecbc69a8c2392ee", "build/assets/pylib-android/doctest.py": "8a18c35f3aa66130955a6a3bf1bfead4",
"build/assets/pylib-android/email/__init__.py": "7ebfab5c51b6bc698aca92ad4903346c", "build/assets/pylib-android/email/__init__.py": "4ff603eeeb4ce0302c8bd1b220fc5e13",
"build/assets/pylib-android/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a", "build/assets/pylib-android/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a",
"build/assets/pylib-android/email/_header_value_parser.py": "982718787815084548747d4b078902e6", "build/assets/pylib-android/email/_header_value_parser.py": "982718787815084548747d4b078902e6",
"build/assets/pylib-android/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa", "build/assets/pylib-android/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa",
"build/assets/pylib-android/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa", "build/assets/pylib-android/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa",
"build/assets/pylib-android/email/base64mime.py": "a1ac31203212f2963b4c07629a3b919c", "build/assets/pylib-android/email/base64mime.py": "d3e4fc07d04833487677dd2a888c3826",
"build/assets/pylib-android/email/charset.py": "7bb5baa9bbd627097d1f32f1a3b503c8", "build/assets/pylib-android/email/charset.py": "1d101758464f75bf2b93fb17fec9542f",
"build/assets/pylib-android/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572", "build/assets/pylib-android/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572",
"build/assets/pylib-android/email/encoders.py": "f1c581f5c146c31168f6ff4a2a6591f7", "build/assets/pylib-android/email/encoders.py": "d401cf76e52f0205393dd8bb1ae28b46",
"build/assets/pylib-android/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0", "build/assets/pylib-android/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0",
"build/assets/pylib-android/email/feedparser.py": "88d35aee820e997f40f6c28cf930979b", "build/assets/pylib-android/email/feedparser.py": "623788306ab3b5d75df1145484045edc",
"build/assets/pylib-android/email/generator.py": "e0cc1d119427110da5de96a4e7b6bb5b", "build/assets/pylib-android/email/generator.py": "073bac3c4874c3ab74d4e6a9e9317fb2",
"build/assets/pylib-android/email/header.py": "f72b2b6140c11b89c0ae3f7b24b0a861", "build/assets/pylib-android/email/header.py": "09923b7b77bf91bed41a71b6e3c6e4d9",
"build/assets/pylib-android/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869", "build/assets/pylib-android/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869",
"build/assets/pylib-android/email/iterators.py": "9b67a6ab50d2bdbdbc4588e10ea1c64a", "build/assets/pylib-android/email/iterators.py": "752ece28a18545e70fa67a7cf2fe3ef3",
"build/assets/pylib-android/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28", "build/assets/pylib-android/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28",
"build/assets/pylib-android/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-android/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
"build/assets/pylib-android/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7", "build/assets/pylib-android/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7",
"build/assets/pylib-android/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16", "build/assets/pylib-android/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16",
"build/assets/pylib-android/email/mime/base.py": "e4ac5d17e69e73a2cb4cc873474991c2", "build/assets/pylib-android/email/mime/base.py": "3b9c795fe3b6e9d3f7b6dda3e1c8e1ea",
"build/assets/pylib-android/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef", "build/assets/pylib-android/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef",
"build/assets/pylib-android/email/mime/message.py": "72935a387c0c12840359c2b0b8f588ac", "build/assets/pylib-android/email/mime/message.py": "0bf18b4f07a68b646e45b10d7e31c6c7",
"build/assets/pylib-android/email/mime/multipart.py": "8157be08dbd84825bf2abaefa39dc3a0", "build/assets/pylib-android/email/mime/multipart.py": "69577df977b7b36f5e175661dd7095bc",
"build/assets/pylib-android/email/mime/nonmultipart.py": "1187993d0366b808a3afea751cd37d81", "build/assets/pylib-android/email/mime/nonmultipart.py": "a96d8d31156781a7511cec04e46a95f6",
"build/assets/pylib-android/email/mime/text.py": "eb387b8f3a686bc7587b860782761a52", "build/assets/pylib-android/email/mime/text.py": "21928b3afec29cb55ae1ae7682b8fbe1",
"build/assets/pylib-android/email/parser.py": "19466563eaac6984c48f734a8f2cf3fc", "build/assets/pylib-android/email/parser.py": "f0cdd5c8491cbff0948672784fca1e8f",
"build/assets/pylib-android/email/policy.py": "69a5f116b77b6a70e7761309c5592557", "build/assets/pylib-android/email/policy.py": "69a5f116b77b6a70e7761309c5592557",
"build/assets/pylib-android/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765", "build/assets/pylib-android/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765",
"build/assets/pylib-android/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6", "build/assets/pylib-android/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6",
@ -2844,7 +2844,7 @@
"build/assets/pylib-android/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de", "build/assets/pylib-android/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de",
"build/assets/pylib-android/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6", "build/assets/pylib-android/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6",
"build/assets/pylib-android/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9", "build/assets/pylib-android/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9",
"build/assets/pylib-android/enum.py": "62a341268ae3fef3c4affc625c2e68d2", "build/assets/pylib-android/enum.py": "73b214a43ceef88aff7098b83623ed09",
"build/assets/pylib-android/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353", "build/assets/pylib-android/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353",
"build/assets/pylib-android/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101", "build/assets/pylib-android/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101",
"build/assets/pylib-android/fnmatch.py": "a1bc67633695d4defd4c0886428c5363", "build/assets/pylib-android/fnmatch.py": "a1bc67633695d4defd4c0886428c5363",
@ -2854,7 +2854,7 @@
"build/assets/pylib-android/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a", "build/assets/pylib-android/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a",
"build/assets/pylib-android/getopt.py": "d630bf22334ba037143a3dca69088ee1", "build/assets/pylib-android/getopt.py": "d630bf22334ba037143a3dca69088ee1",
"build/assets/pylib-android/getpass.py": "c19e383e949c147a30ecc554b8598e91", "build/assets/pylib-android/getpass.py": "c19e383e949c147a30ecc554b8598e91",
"build/assets/pylib-android/gettext.py": "6e24985f9e985660751c70436cfefa75", "build/assets/pylib-android/gettext.py": "245a4d4c7ba79febb5423a49ebdc019a",
"build/assets/pylib-android/glob.py": "0607521b67b32c59f30a9e1b238d5c1a", "build/assets/pylib-android/glob.py": "0607521b67b32c59f30a9e1b238d5c1a",
"build/assets/pylib-android/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9", "build/assets/pylib-android/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9",
"build/assets/pylib-android/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780", "build/assets/pylib-android/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780",
@ -2908,7 +2908,7 @@
"build/assets/pylib-android/locale.py": "42f3f48fed6a16da350de46aa85b446a", "build/assets/pylib-android/locale.py": "42f3f48fed6a16da350de46aa85b446a",
"build/assets/pylib-android/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d", "build/assets/pylib-android/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d",
"build/assets/pylib-android/logging/config.py": "f811372496ec5ae34e8047f0280686be", "build/assets/pylib-android/logging/config.py": "f811372496ec5ae34e8047f0280686be",
"build/assets/pylib-android/logging/handlers.py": "ab3881444783ab84f3859e022b356989", "build/assets/pylib-android/logging/handlers.py": "55d604de088570f8bd5edb62f64682fb",
"build/assets/pylib-android/lzma.py": "d7388640aa6af4c64fdc821471930f57", "build/assets/pylib-android/lzma.py": "d7388640aa6af4c64fdc821471930f57",
"build/assets/pylib-android/mailbox.py": "d9db3c7510e38484ade3d88446b8f231", "build/assets/pylib-android/mailbox.py": "d9db3c7510e38484ade3d88446b8f231",
"build/assets/pylib-android/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6", "build/assets/pylib-android/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6",
@ -2916,7 +2916,7 @@
"build/assets/pylib-android/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea", "build/assets/pylib-android/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea",
"build/assets/pylib-android/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3", "build/assets/pylib-android/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3",
"build/assets/pylib-android/nntplib.py": "4926aa991bd4b96b9318d6242135abf9", "build/assets/pylib-android/nntplib.py": "4926aa991bd4b96b9318d6242135abf9",
"build/assets/pylib-android/ntpath.py": "57eacdf2824f306ae2b03d5818294c94", "build/assets/pylib-android/ntpath.py": "d53ff21dc0ef0cd939cc865ae1fb011e",
"build/assets/pylib-android/nturl2path.py": "937624c4b6f213b652addea66296ccc4", "build/assets/pylib-android/nturl2path.py": "937624c4b6f213b652addea66296ccc4",
"build/assets/pylib-android/numbers.py": "0cdcb42317422500d514ec67d496a06e", "build/assets/pylib-android/numbers.py": "0cdcb42317422500d514ec67d496a06e",
"build/assets/pylib-android/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980", "build/assets/pylib-android/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980",
@ -2939,7 +2939,7 @@
"build/assets/pylib-android/pty.py": "c97b51147360cf7fd92c364ab8068a2b", "build/assets/pylib-android/pty.py": "c97b51147360cf7fd92c364ab8068a2b",
"build/assets/pylib-android/py_compile.py": "772b429c589d2e005e8bd79b12f55a92", "build/assets/pylib-android/py_compile.py": "772b429c589d2e005e8bd79b12f55a92",
"build/assets/pylib-android/pyclbr.py": "bf1989a2c73108005e874a640760476a", "build/assets/pylib-android/pyclbr.py": "bf1989a2c73108005e874a640760476a",
"build/assets/pylib-android/pydoc.py": "0f8a4b2f4a9d23e429c01660a4290bd8", "build/assets/pylib-android/pydoc.py": "b17a6d227db749f91434253248fa6384",
"build/assets/pylib-android/queue.py": "1e90a0b87965a2642946621db162f441", "build/assets/pylib-android/queue.py": "1e90a0b87965a2642946621db162f441",
"build/assets/pylib-android/quopri.py": "5d58010dd1f96b37a167c6d305372881", "build/assets/pylib-android/quopri.py": "5d58010dd1f96b37a167c6d305372881",
"build/assets/pylib-android/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f", "build/assets/pylib-android/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f",
@ -2947,7 +2947,7 @@
"build/assets/pylib-android/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938", "build/assets/pylib-android/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938",
"build/assets/pylib-android/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112", "build/assets/pylib-android/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112",
"build/assets/pylib-android/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989", "build/assets/pylib-android/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989",
"build/assets/pylib-android/re/_parser.py": "df712815c6dba2e12c1875ca1bc02400", "build/assets/pylib-android/re/_parser.py": "1afe14ae4219eadb32ba0fd3ac1b921a",
"build/assets/pylib-android/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a", "build/assets/pylib-android/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a",
"build/assets/pylib-android/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414", "build/assets/pylib-android/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414",
"build/assets/pylib-android/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82", "build/assets/pylib-android/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82",
@ -2956,7 +2956,7 @@
"build/assets/pylib-android/selectors.py": "98e0d83849452cbc2cc1381555bd5024", "build/assets/pylib-android/selectors.py": "98e0d83849452cbc2cc1381555bd5024",
"build/assets/pylib-android/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a", "build/assets/pylib-android/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a",
"build/assets/pylib-android/shlex.py": "0873fac90a491702950816ead0e59dd0", "build/assets/pylib-android/shlex.py": "0873fac90a491702950816ead0e59dd0",
"build/assets/pylib-android/shutil.py": "ed25b38eacc66c9059651e6666ec1869", "build/assets/pylib-android/shutil.py": "a5d0ee9f28244b42a06e682312d0e3fa",
"build/assets/pylib-android/signal.py": "114ef47b1798fca6f56ac8a250974b3e", "build/assets/pylib-android/signal.py": "114ef47b1798fca6f56ac8a250974b3e",
"build/assets/pylib-android/site.py": "2a99f7de2702aa8411d35acbb91fe926", "build/assets/pylib-android/site.py": "2a99f7de2702aa8411d35acbb91fe926",
"build/assets/pylib-android/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4", "build/assets/pylib-android/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4",
@ -2970,18 +2970,18 @@
"build/assets/pylib-android/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8", "build/assets/pylib-android/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8",
"build/assets/pylib-android/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63", "build/assets/pylib-android/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63",
"build/assets/pylib-android/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91", "build/assets/pylib-android/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91",
"build/assets/pylib-android/ssl.py": "3c4c838c1c298d69871154e80f45cad1", "build/assets/pylib-android/ssl.py": "ed512664b82e23aa157fc69f97df9d01",
"build/assets/pylib-android/stat.py": "185f17736cdb40bd3e7400ad8cedef84", "build/assets/pylib-android/stat.py": "185f17736cdb40bd3e7400ad8cedef84",
"build/assets/pylib-android/statistics.py": "9807c60eb942bf320ee85a2016ba4516", "build/assets/pylib-android/statistics.py": "9807c60eb942bf320ee85a2016ba4516",
"build/assets/pylib-android/string.py": "c072d3a2d0337386d3235ba72f292752", "build/assets/pylib-android/string.py": "c072d3a2d0337386d3235ba72f292752",
"build/assets/pylib-android/stringprep.py": "6a5635711a838f76fee7b52537bf8b45", "build/assets/pylib-android/stringprep.py": "6a5635711a838f76fee7b52537bf8b45",
"build/assets/pylib-android/struct.py": "4fd288bd6537effd1d5edbba9d44dde2", "build/assets/pylib-android/struct.py": "4fd288bd6537effd1d5edbba9d44dde2",
"build/assets/pylib-android/subprocess.py": "4d6522342cab21c558e60b2f50c5cedc", "build/assets/pylib-android/subprocess.py": "4932fae7e87da40d7661100b6871a005",
"build/assets/pylib-android/sunau.py": "a034779289fef0b2221345f40e042680", "build/assets/pylib-android/sunau.py": "a034779289fef0b2221345f40e042680",
"build/assets/pylib-android/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7", "build/assets/pylib-android/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7",
"build/assets/pylib-android/sysconfig.py": "9ffad6cfff49bc09fe36a33a5446c59d", "build/assets/pylib-android/sysconfig.py": "9ffad6cfff49bc09fe36a33a5446c59d",
"build/assets/pylib-android/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a", "build/assets/pylib-android/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a",
"build/assets/pylib-android/tarfile.py": "a6dfd478cf3917a29020944bff1a6f2d", "build/assets/pylib-android/tarfile.py": "e2fc4eca5c2d39b6f44b9e622a32f602",
"build/assets/pylib-android/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea", "build/assets/pylib-android/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea",
"build/assets/pylib-android/tempfile.py": "436007fbe6821c864a53861bd73b4d43", "build/assets/pylib-android/tempfile.py": "436007fbe6821c864a53861bd73b4d43",
"build/assets/pylib-android/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c", "build/assets/pylib-android/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c",
@ -2999,10 +2999,10 @@
"build/assets/pylib-android/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf", "build/assets/pylib-android/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf",
"build/assets/pylib-android/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d", "build/assets/pylib-android/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d",
"build/assets/pylib-android/types.py": "78f8942c08dbfc9c582f1bb8d5206639", "build/assets/pylib-android/types.py": "78f8942c08dbfc9c582f1bb8d5206639",
"build/assets/pylib-android/typing.py": "89e0654fda4fd2a09e93391179859cf0", "build/assets/pylib-android/typing.py": "17aaeea16cbfdb93cb4c5b87f535e341",
"build/assets/pylib-android/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-android/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
"build/assets/pylib-android/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0", "build/assets/pylib-android/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0",
"build/assets/pylib-android/urllib/parse.py": "dc735bb3e0b069762ad988c1b55ce6e3", "build/assets/pylib-android/urllib/parse.py": "28e09ecc3b696bae8ac5589b9cd64f63",
"build/assets/pylib-android/urllib/request.py": "09b8666fe8319542f7247bb9f8573806", "build/assets/pylib-android/urllib/request.py": "09b8666fe8319542f7247bb9f8573806",
"build/assets/pylib-android/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93", "build/assets/pylib-android/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93",
"build/assets/pylib-android/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb", "build/assets/pylib-android/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb",
@ -3039,7 +3039,7 @@
"build/assets/pylib-android/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405", "build/assets/pylib-android/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405",
"build/assets/pylib-android/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6", "build/assets/pylib-android/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6",
"build/assets/pylib-android/zipapp.py": "d92ea793f092af6383a6383678cf7b73", "build/assets/pylib-android/zipapp.py": "d92ea793f092af6383a6383678cf7b73",
"build/assets/pylib-android/zipfile.py": "2cd1a57574daf0ec6456dc2d0858952d", "build/assets/pylib-android/zipfile.py": "00671f5cdb9a5ad667efa1dccf0129d3",
"build/assets/pylib-android/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1", "build/assets/pylib-android/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1",
"build/assets/pylib-android/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff", "build/assets/pylib-android/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff",
"build/assets/pylib-android/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2", "build/assets/pylib-android/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2",
@ -3060,45 +3060,45 @@
"build/assets/pylib-apple/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8", "build/assets/pylib-apple/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8",
"build/assets/pylib-apple/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61", "build/assets/pylib-apple/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61",
"build/assets/pylib-apple/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3", "build/assets/pylib-apple/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3",
"build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "1deb8b4ea385ac52e2fc30eb5b7486d9", "build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "851eda9bce1b25dcba0ed272da9a25c1",
"build/assets/pylib-apple/_sysconfigdata__ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2", "build/assets/pylib-apple/_sysconfigdata__ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2",
"build/assets/pylib-apple/_sysconfigdata__ios_iphoneos_arm64.py": "13cdaf0612cecdfdea79507be605b5fa", "build/assets/pylib-apple/_sysconfigdata__ios_iphoneos_arm64.py": "b323d9e0ce8d23039fe55a55a85a7f03",
"build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519", "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519",
"build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_arm64.py": "1fd694958588a382f0e872584c66123e", "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_arm64.py": "a546cdaf5cd7c96b7494ea604ba7ce43",
"build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_x86_64.py": "0be4ff9720b1366519a2acc44bde9564", "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_x86_64.py": "56abcd261de3ab910cf340623328a7c0",
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719",
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvos_arm64.py": "798569299d9edde6167a23741c9239fb", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvos_arm64.py": "aca63835009f6ddd207d25fac7af21f9",
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394",
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_arm64.py": "bf5e3b80c0bd0f6e8d00372d4f6f1ae5", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_arm64.py": "f3fbbf1e8541363be49ddfe5b7f42a5c",
"build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_x86_64.py": "4828cee78f35df83a94a308919080918", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_x86_64.py": "8af232f8b1f956a2ec0bad2dc44f1f59",
"build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "9eb91d9cd5328d59ceb9047d210beaba", "build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "7b82990a773d8bfdc56a4d0587e767dc",
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2",
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos_arm64.py": "11622b9e1d51ef4a4225099acb1e8200", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos_arm64.py": "8d5c7003e7ebc454dc0919524c643b81",
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519",
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_arm64.py": "54a8feabddfe2d0cc7a28db1d4ebd881", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_arm64.py": "4fcbe87958cfa21d5bba4fc96dd8514e",
"build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_x86_64.py": "f86a4410017799af3c0297cd8786058a", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_x86_64.py": "038f6c0ae9ebd4585ba3d71ac9a6f46b",
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719",
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos_arm64.py": "72e93b38c02e8d9cae4fbf5fb66ebf3d", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos_arm64.py": "370c439fe07fbf0d11a00654eee2cab0",
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394",
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_arm64.py": "a395bfca36c03e6e77af0c0ca58c148d", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_arm64.py": "35c66716d8e2d2c93a4fffd7fd6143e2",
"build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_x86_64.py": "77074e38c080ebf0f969c62f5dab628e", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_x86_64.py": "3b59c71925adf541ceaccb165cd57067",
"build/assets/pylib-apple/_threading_local.py": "4a9688e3987d7d692db46feb9214945e", "build/assets/pylib-apple/_threading_local.py": "4a9688e3987d7d692db46feb9214945e",
"build/assets/pylib-apple/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7", "build/assets/pylib-apple/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7",
"build/assets/pylib-apple/abc.py": "a9661fcfe6c12211ec1b16391247947c", "build/assets/pylib-apple/abc.py": "a0daa1ed187eee8690c1e8438b97da90",
"build/assets/pylib-apple/aifc.py": "1b9134c72b1e542417bee5bf345a1d0a", "build/assets/pylib-apple/aifc.py": "1b9134c72b1e542417bee5bf345a1d0a",
"build/assets/pylib-apple/antigravity.py": "6d56bedf73be574cb6d7117caf5d334c", "build/assets/pylib-apple/antigravity.py": "6d56bedf73be574cb6d7117caf5d334c",
"build/assets/pylib-apple/argparse.py": "2dc7f53a0390532cfabb416e25e72035", "build/assets/pylib-apple/argparse.py": "e22cac9b12c09592929d57eb982fc554",
"build/assets/pylib-apple/ast.py": "3aaa1b0e56b21b28155707c54bc225a8", "build/assets/pylib-apple/ast.py": "3aaa1b0e56b21b28155707c54bc225a8",
"build/assets/pylib-apple/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3", "build/assets/pylib-apple/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3",
"build/assets/pylib-apple/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822", "build/assets/pylib-apple/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822",
"build/assets/pylib-apple/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e", "build/assets/pylib-apple/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e",
"build/assets/pylib-apple/asyncio/base_events.py": "9f7758e7f013043a50c693e5e8d068b5", "build/assets/pylib-apple/asyncio/base_events.py": "8494c7bc5f5fe98fd64d882ed4cc4722",
"build/assets/pylib-apple/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0", "build/assets/pylib-apple/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0",
"build/assets/pylib-apple/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1", "build/assets/pylib-apple/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1",
"build/assets/pylib-apple/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa", "build/assets/pylib-apple/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa",
"build/assets/pylib-apple/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b", "build/assets/pylib-apple/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b",
"build/assets/pylib-apple/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52", "build/assets/pylib-apple/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52",
"build/assets/pylib-apple/asyncio/events.py": "07c04d04b5e255fc5b79698715f4dc4e", "build/assets/pylib-apple/asyncio/events.py": "3063d6b0d1fcbb50f8142f8ce58531fb",
"build/assets/pylib-apple/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333", "build/assets/pylib-apple/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333",
"build/assets/pylib-apple/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a", "build/assets/pylib-apple/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a",
"build/assets/pylib-apple/asyncio/futures.py": "297232981f201edac774ec3a49a0845b", "build/assets/pylib-apple/asyncio/futures.py": "297232981f201edac774ec3a49a0845b",
@ -3109,26 +3109,26 @@
"build/assets/pylib-apple/asyncio/protocols.py": "b8aa105b79d24f88c7a2c2cdbc8e7814", "build/assets/pylib-apple/asyncio/protocols.py": "b8aa105b79d24f88c7a2c2cdbc8e7814",
"build/assets/pylib-apple/asyncio/queues.py": "f63be54780730992e2377c51ac373126", "build/assets/pylib-apple/asyncio/queues.py": "f63be54780730992e2377c51ac373126",
"build/assets/pylib-apple/asyncio/runners.py": "f184754fba961e4ea6e77a9aec633afc", "build/assets/pylib-apple/asyncio/runners.py": "f184754fba961e4ea6e77a9aec633afc",
"build/assets/pylib-apple/asyncio/selector_events.py": "f7ee7809d8b807ccda22db7870f508ac", "build/assets/pylib-apple/asyncio/selector_events.py": "a108fbd3a49f967da245f39cebf7694e",
"build/assets/pylib-apple/asyncio/sslproto.py": "3a639532c92e12c9bf06fd131a6fc419", "build/assets/pylib-apple/asyncio/sslproto.py": "2ec1b21e523055147d94c8c634154aab",
"build/assets/pylib-apple/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366", "build/assets/pylib-apple/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366",
"build/assets/pylib-apple/asyncio/streams.py": "e9c609b92b4e9bd3383cf4004c6186c6", "build/assets/pylib-apple/asyncio/streams.py": "f00ddd2b2fd74554ae1d3088bd9d2bfd",
"build/assets/pylib-apple/asyncio/subprocess.py": "a5ff69004c02e2f47d0077a77803c06b", "build/assets/pylib-apple/asyncio/subprocess.py": "edb8d98278300b6c99f36cd08643c743",
"build/assets/pylib-apple/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56", "build/assets/pylib-apple/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56",
"build/assets/pylib-apple/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca", "build/assets/pylib-apple/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca",
"build/assets/pylib-apple/asyncio/threads.py": "7bbf81d424901524510e07b5d20e4a50", "build/assets/pylib-apple/asyncio/threads.py": "7bbf81d424901524510e07b5d20e4a50",
"build/assets/pylib-apple/asyncio/timeouts.py": "c7cb81c7ee938bc47ff75342befc872a", "build/assets/pylib-apple/asyncio/timeouts.py": "c7cb81c7ee938bc47ff75342befc872a",
"build/assets/pylib-apple/asyncio/transports.py": "04598090d813bb363cea9bf714b97c3f", "build/assets/pylib-apple/asyncio/transports.py": "04598090d813bb363cea9bf714b97c3f",
"build/assets/pylib-apple/asyncio/trsock.py": "305d016a93b3e5224cb45af43fdc52b9", "build/assets/pylib-apple/asyncio/trsock.py": "305d016a93b3e5224cb45af43fdc52b9",
"build/assets/pylib-apple/asyncio/unix_events.py": "9ce0da3a12b544df9c10fd3b3e0b2f37", "build/assets/pylib-apple/asyncio/unix_events.py": "cbb968f7c1e4f87f23b187d7140839f1",
"build/assets/pylib-apple/asyncio/windows_events.py": "954637d8416216d656011178dbcedbb4", "build/assets/pylib-apple/asyncio/windows_events.py": "954637d8416216d656011178dbcedbb4",
"build/assets/pylib-apple/asyncio/windows_utils.py": "4efbef16e6692c9424804d9bdc496761", "build/assets/pylib-apple/asyncio/windows_utils.py": "4efbef16e6692c9424804d9bdc496761",
"build/assets/pylib-apple/asyncore.py": "af21d495fa6ccc47b51ca8a8a382ea1c", "build/assets/pylib-apple/asyncore.py": "af21d495fa6ccc47b51ca8a8a382ea1c",
"build/assets/pylib-apple/base64.py": "5f8bbbfda4b9145b1968cb9badf8325b", "build/assets/pylib-apple/base64.py": "5f8bbbfda4b9145b1968cb9badf8325b",
"build/assets/pylib-apple/bdb.py": "aecf5370ea25c5decdf8dfa07caf0bfc", "build/assets/pylib-apple/bdb.py": "1e26c626405bfc06b1e7231183eb928a",
"build/assets/pylib-apple/bisect.py": "9b70437e327d5176da41192567ad0064", "build/assets/pylib-apple/bisect.py": "9b70437e327d5176da41192567ad0064",
"build/assets/pylib-apple/bz2.py": "cd6a5f2491bc52afd8fc180097371473", "build/assets/pylib-apple/bz2.py": "cd6a5f2491bc52afd8fc180097371473",
"build/assets/pylib-apple/cProfile.py": "d5ef924a68c0f747ad727a6326ad8e5a", "build/assets/pylib-apple/cProfile.py": "9e9c07ac3b9e4195a62b74e4f2b9489f",
"build/assets/pylib-apple/calendar.py": "4ef3d6d85d44e36212e5d784051c80b6", "build/assets/pylib-apple/calendar.py": "4ef3d6d85d44e36212e5d784051c80b6",
"build/assets/pylib-apple/cgi.py": "090c5cfc8b4b92a730beec975159bd2a", "build/assets/pylib-apple/cgi.py": "090c5cfc8b4b92a730beec975159bd2a",
"build/assets/pylib-apple/cgitb.py": "2bcff1cec7f3a3a9c96de7a55ebb4ea3", "build/assets/pylib-apple/cgitb.py": "2bcff1cec7f3a3a9c96de7a55ebb4ea3",
@ -3137,16 +3137,16 @@
"build/assets/pylib-apple/code.py": "5d47099984013b933c96b02ef16981b8", "build/assets/pylib-apple/code.py": "5d47099984013b933c96b02ef16981b8",
"build/assets/pylib-apple/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec", "build/assets/pylib-apple/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec",
"build/assets/pylib-apple/codeop.py": "d375467fb29fccd43ab94d15a2e63085", "build/assets/pylib-apple/codeop.py": "d375467fb29fccd43ab94d15a2e63085",
"build/assets/pylib-apple/collections/__init__.py": "44999193e5c3d379e3feaa50ddf5147d", "build/assets/pylib-apple/collections/__init__.py": "dcffbb6ee2cadd0c05ad22f2ef41f89b",
"build/assets/pylib-apple/collections/abc.py": "15f410d3821352033a90a04539c99060", "build/assets/pylib-apple/collections/abc.py": "15f410d3821352033a90a04539c99060",
"build/assets/pylib-apple/colorsys.py": "1452923f15188287bc677e7128cb6b31", "build/assets/pylib-apple/colorsys.py": "ca8f117785bf7606c3919ef0f4b828ae",
"build/assets/pylib-apple/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b", "build/assets/pylib-apple/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b",
"build/assets/pylib-apple/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85", "build/assets/pylib-apple/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85",
"build/assets/pylib-apple/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a", "build/assets/pylib-apple/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a",
"build/assets/pylib-apple/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e", "build/assets/pylib-apple/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e",
"build/assets/pylib-apple/concurrent/futures/process.py": "4725abe3e780075ac264da12a1db5714", "build/assets/pylib-apple/concurrent/futures/process.py": "a44e8618e158f8f351dafcb566a02544",
"build/assets/pylib-apple/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13", "build/assets/pylib-apple/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13",
"build/assets/pylib-apple/configparser.py": "a6b19c20d70861eea310e5504621e562", "build/assets/pylib-apple/configparser.py": "914afd2b2cec90bbca0b94fd176b5176",
"build/assets/pylib-apple/contextlib.py": "6f52eac914e438ef54407760def8305f", "build/assets/pylib-apple/contextlib.py": "6f52eac914e438ef54407760def8305f",
"build/assets/pylib-apple/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e", "build/assets/pylib-apple/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e",
"build/assets/pylib-apple/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74", "build/assets/pylib-apple/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74",
@ -3167,38 +3167,38 @@
"build/assets/pylib-apple/curses/has_key.py": "c74b8d6db329fbbd872b7b91bfa94624", "build/assets/pylib-apple/curses/has_key.py": "c74b8d6db329fbbd872b7b91bfa94624",
"build/assets/pylib-apple/curses/panel.py": "8f36fdade9588f8a4362d2cc057a6eff", "build/assets/pylib-apple/curses/panel.py": "8f36fdade9588f8a4362d2cc057a6eff",
"build/assets/pylib-apple/curses/textpad.py": "94aa9ebc47a6068d4461652346646dbb", "build/assets/pylib-apple/curses/textpad.py": "94aa9ebc47a6068d4461652346646dbb",
"build/assets/pylib-apple/dataclasses.py": "1328e12f8255b856ced026e75a623671", "build/assets/pylib-apple/dataclasses.py": "febeea138bff21dbed88762be772514e",
"build/assets/pylib-apple/datetime.py": "5dcfd7f3b1a4db8214c1442164ac999c", "build/assets/pylib-apple/datetime.py": "5dcfd7f3b1a4db8214c1442164ac999c",
"build/assets/pylib-apple/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4", "build/assets/pylib-apple/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4",
"build/assets/pylib-apple/difflib.py": "6b3c8fd541b2b8d0320727025cd25275", "build/assets/pylib-apple/difflib.py": "6b3c8fd541b2b8d0320727025cd25275",
"build/assets/pylib-apple/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba", "build/assets/pylib-apple/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba",
"build/assets/pylib-apple/doctest.py": "eb60b2b39e0deb976ecbc69a8c2392ee", "build/assets/pylib-apple/doctest.py": "8a18c35f3aa66130955a6a3bf1bfead4",
"build/assets/pylib-apple/email/__init__.py": "7ebfab5c51b6bc698aca92ad4903346c", "build/assets/pylib-apple/email/__init__.py": "4ff603eeeb4ce0302c8bd1b220fc5e13",
"build/assets/pylib-apple/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a", "build/assets/pylib-apple/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a",
"build/assets/pylib-apple/email/_header_value_parser.py": "982718787815084548747d4b078902e6", "build/assets/pylib-apple/email/_header_value_parser.py": "982718787815084548747d4b078902e6",
"build/assets/pylib-apple/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa", "build/assets/pylib-apple/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa",
"build/assets/pylib-apple/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa", "build/assets/pylib-apple/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa",
"build/assets/pylib-apple/email/base64mime.py": "a1ac31203212f2963b4c07629a3b919c", "build/assets/pylib-apple/email/base64mime.py": "d3e4fc07d04833487677dd2a888c3826",
"build/assets/pylib-apple/email/charset.py": "7bb5baa9bbd627097d1f32f1a3b503c8", "build/assets/pylib-apple/email/charset.py": "1d101758464f75bf2b93fb17fec9542f",
"build/assets/pylib-apple/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572", "build/assets/pylib-apple/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572",
"build/assets/pylib-apple/email/encoders.py": "f1c581f5c146c31168f6ff4a2a6591f7", "build/assets/pylib-apple/email/encoders.py": "d401cf76e52f0205393dd8bb1ae28b46",
"build/assets/pylib-apple/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0", "build/assets/pylib-apple/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0",
"build/assets/pylib-apple/email/feedparser.py": "88d35aee820e997f40f6c28cf930979b", "build/assets/pylib-apple/email/feedparser.py": "623788306ab3b5d75df1145484045edc",
"build/assets/pylib-apple/email/generator.py": "e0cc1d119427110da5de96a4e7b6bb5b", "build/assets/pylib-apple/email/generator.py": "073bac3c4874c3ab74d4e6a9e9317fb2",
"build/assets/pylib-apple/email/header.py": "f72b2b6140c11b89c0ae3f7b24b0a861", "build/assets/pylib-apple/email/header.py": "09923b7b77bf91bed41a71b6e3c6e4d9",
"build/assets/pylib-apple/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869", "build/assets/pylib-apple/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869",
"build/assets/pylib-apple/email/iterators.py": "9b67a6ab50d2bdbdbc4588e10ea1c64a", "build/assets/pylib-apple/email/iterators.py": "752ece28a18545e70fa67a7cf2fe3ef3",
"build/assets/pylib-apple/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28", "build/assets/pylib-apple/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28",
"build/assets/pylib-apple/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-apple/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
"build/assets/pylib-apple/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7", "build/assets/pylib-apple/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7",
"build/assets/pylib-apple/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16", "build/assets/pylib-apple/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16",
"build/assets/pylib-apple/email/mime/base.py": "e4ac5d17e69e73a2cb4cc873474991c2", "build/assets/pylib-apple/email/mime/base.py": "3b9c795fe3b6e9d3f7b6dda3e1c8e1ea",
"build/assets/pylib-apple/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef", "build/assets/pylib-apple/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef",
"build/assets/pylib-apple/email/mime/message.py": "72935a387c0c12840359c2b0b8f588ac", "build/assets/pylib-apple/email/mime/message.py": "0bf18b4f07a68b646e45b10d7e31c6c7",
"build/assets/pylib-apple/email/mime/multipart.py": "8157be08dbd84825bf2abaefa39dc3a0", "build/assets/pylib-apple/email/mime/multipart.py": "69577df977b7b36f5e175661dd7095bc",
"build/assets/pylib-apple/email/mime/nonmultipart.py": "1187993d0366b808a3afea751cd37d81", "build/assets/pylib-apple/email/mime/nonmultipart.py": "a96d8d31156781a7511cec04e46a95f6",
"build/assets/pylib-apple/email/mime/text.py": "eb387b8f3a686bc7587b860782761a52", "build/assets/pylib-apple/email/mime/text.py": "21928b3afec29cb55ae1ae7682b8fbe1",
"build/assets/pylib-apple/email/parser.py": "19466563eaac6984c48f734a8f2cf3fc", "build/assets/pylib-apple/email/parser.py": "f0cdd5c8491cbff0948672784fca1e8f",
"build/assets/pylib-apple/email/policy.py": "69a5f116b77b6a70e7761309c5592557", "build/assets/pylib-apple/email/policy.py": "69a5f116b77b6a70e7761309c5592557",
"build/assets/pylib-apple/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765", "build/assets/pylib-apple/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765",
"build/assets/pylib-apple/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6", "build/assets/pylib-apple/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6",
@ -3324,7 +3324,7 @@
"build/assets/pylib-apple/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de", "build/assets/pylib-apple/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de",
"build/assets/pylib-apple/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6", "build/assets/pylib-apple/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6",
"build/assets/pylib-apple/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9", "build/assets/pylib-apple/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9",
"build/assets/pylib-apple/enum.py": "93e4c39acfbbebdc9c4f3d204f17e496", "build/assets/pylib-apple/enum.py": "73b214a43ceef88aff7098b83623ed09",
"build/assets/pylib-apple/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353", "build/assets/pylib-apple/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353",
"build/assets/pylib-apple/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101", "build/assets/pylib-apple/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101",
"build/assets/pylib-apple/fnmatch.py": "a1bc67633695d4defd4c0886428c5363", "build/assets/pylib-apple/fnmatch.py": "a1bc67633695d4defd4c0886428c5363",
@ -3334,7 +3334,7 @@
"build/assets/pylib-apple/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a", "build/assets/pylib-apple/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a",
"build/assets/pylib-apple/getopt.py": "d630bf22334ba037143a3dca69088ee1", "build/assets/pylib-apple/getopt.py": "d630bf22334ba037143a3dca69088ee1",
"build/assets/pylib-apple/getpass.py": "c19e383e949c147a30ecc554b8598e91", "build/assets/pylib-apple/getpass.py": "c19e383e949c147a30ecc554b8598e91",
"build/assets/pylib-apple/gettext.py": "6e24985f9e985660751c70436cfefa75", "build/assets/pylib-apple/gettext.py": "245a4d4c7ba79febb5423a49ebdc019a",
"build/assets/pylib-apple/glob.py": "0607521b67b32c59f30a9e1b238d5c1a", "build/assets/pylib-apple/glob.py": "0607521b67b32c59f30a9e1b238d5c1a",
"build/assets/pylib-apple/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9", "build/assets/pylib-apple/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9",
"build/assets/pylib-apple/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780", "build/assets/pylib-apple/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780",
@ -3345,15 +3345,15 @@
"build/assets/pylib-apple/html/entities.py": "8561b405414160a08f613bdfd89e161b", "build/assets/pylib-apple/html/entities.py": "8561b405414160a08f613bdfd89e161b",
"build/assets/pylib-apple/html/parser.py": "c2ff6801a3ef6a2863d37b899615efb8", "build/assets/pylib-apple/html/parser.py": "c2ff6801a3ef6a2863d37b899615efb8",
"build/assets/pylib-apple/http/__init__.py": "1dab578aab89ead7171ef10638e88a5d", "build/assets/pylib-apple/http/__init__.py": "1dab578aab89ead7171ef10638e88a5d",
"build/assets/pylib-apple/http/client.py": "d0b37013d5f9794a8311c3545ee5416d", "build/assets/pylib-apple/http/client.py": "a3f2cd21f8ce7a4ee1b47f0b19fb57f7",
"build/assets/pylib-apple/http/cookiejar.py": "f324a21e7c17f40e4d5c78139875811c", "build/assets/pylib-apple/http/cookiejar.py": "f324a21e7c17f40e4d5c78139875811c",
"build/assets/pylib-apple/http/cookies.py": "9319b95b505a644b9a112b4c7a7678c3", "build/assets/pylib-apple/http/cookies.py": "9319b95b505a644b9a112b4c7a7678c3",
"build/assets/pylib-apple/http/server.py": "a06b26669fc0eb0ef81b819fe8a6602d", "build/assets/pylib-apple/http/server.py": "4b286e2b5e6112af17e097539eadd9d7",
"build/assets/pylib-apple/imghdr.py": "011d27a98acf3774279a584525614ba3", "build/assets/pylib-apple/imghdr.py": "011d27a98acf3774279a584525614ba3",
"build/assets/pylib-apple/imp.py": "34bd1d1620eb0d42f9ef9bbbb11cafae", "build/assets/pylib-apple/imp.py": "34bd1d1620eb0d42f9ef9bbbb11cafae",
"build/assets/pylib-apple/importlib/__init__.py": "2f6c1fb453d61417245cd196311a9b52", "build/assets/pylib-apple/importlib/__init__.py": "2f6c1fb453d61417245cd196311a9b52",
"build/assets/pylib-apple/importlib/_abc.py": "720f8056e5cd852156378b532ddbbb7c", "build/assets/pylib-apple/importlib/_abc.py": "720f8056e5cd852156378b532ddbbb7c",
"build/assets/pylib-apple/importlib/_bootstrap.py": "da9de7a6d6839a7185147f35f2040de7", "build/assets/pylib-apple/importlib/_bootstrap.py": "6f4819e9443e3fda3c28c62f15a8238c",
"build/assets/pylib-apple/importlib/_bootstrap_external.py": "c22f4fa4086742713c2071db7de7726c", "build/assets/pylib-apple/importlib/_bootstrap_external.py": "c22f4fa4086742713c2071db7de7726c",
"build/assets/pylib-apple/importlib/abc.py": "c9697e928ff17089dc6aea96f5b33003", "build/assets/pylib-apple/importlib/abc.py": "c9697e928ff17089dc6aea96f5b33003",
"build/assets/pylib-apple/importlib/machinery.py": "6a056c561b4ea8eb5457761c8a9fd704", "build/assets/pylib-apple/importlib/machinery.py": "6a056c561b4ea8eb5457761c8a9fd704",
@ -3375,7 +3375,7 @@
"build/assets/pylib-apple/importlib/resources/simple.py": "ae95788edf31cbfffd53db748d76f0b9", "build/assets/pylib-apple/importlib/resources/simple.py": "ae95788edf31cbfffd53db748d76f0b9",
"build/assets/pylib-apple/importlib/simple.py": "f34f28cd359ecaf9fd6cf18a4dca2c33", "build/assets/pylib-apple/importlib/simple.py": "f34f28cd359ecaf9fd6cf18a4dca2c33",
"build/assets/pylib-apple/importlib/util.py": "09c3a96d1265db211f32b73a5f76e1ac", "build/assets/pylib-apple/importlib/util.py": "09c3a96d1265db211f32b73a5f76e1ac",
"build/assets/pylib-apple/inspect.py": "5a321fd388139d2beff15f4306b1fb95", "build/assets/pylib-apple/inspect.py": "365d413e26b3a77118e51987cfd2eb1f",
"build/assets/pylib-apple/io.py": "4a3ab68b3f38d3dcf9282f4839fe5d84", "build/assets/pylib-apple/io.py": "4a3ab68b3f38d3dcf9282f4839fe5d84",
"build/assets/pylib-apple/ipaddress.py": "b9831cf9058885b35a2411b4cbada972", "build/assets/pylib-apple/ipaddress.py": "b9831cf9058885b35a2411b4cbada972",
"build/assets/pylib-apple/json/__init__.py": "e8b000d2bf8c53b55a72bc3053800596", "build/assets/pylib-apple/json/__init__.py": "e8b000d2bf8c53b55a72bc3053800596",
@ -3387,8 +3387,8 @@
"build/assets/pylib-apple/linecache.py": "2712c31a3a6d7625d437029a6b7470c9", "build/assets/pylib-apple/linecache.py": "2712c31a3a6d7625d437029a6b7470c9",
"build/assets/pylib-apple/locale.py": "42f3f48fed6a16da350de46aa85b446a", "build/assets/pylib-apple/locale.py": "42f3f48fed6a16da350de46aa85b446a",
"build/assets/pylib-apple/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d", "build/assets/pylib-apple/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d",
"build/assets/pylib-apple/logging/config.py": "ff0697c60f90420c32c697a30bfdfe90", "build/assets/pylib-apple/logging/config.py": "f811372496ec5ae34e8047f0280686be",
"build/assets/pylib-apple/logging/handlers.py": "ab3881444783ab84f3859e022b356989", "build/assets/pylib-apple/logging/handlers.py": "55d604de088570f8bd5edb62f64682fb",
"build/assets/pylib-apple/lzma.py": "d7388640aa6af4c64fdc821471930f57", "build/assets/pylib-apple/lzma.py": "d7388640aa6af4c64fdc821471930f57",
"build/assets/pylib-apple/mailbox.py": "d9db3c7510e38484ade3d88446b8f231", "build/assets/pylib-apple/mailbox.py": "d9db3c7510e38484ade3d88446b8f231",
"build/assets/pylib-apple/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6", "build/assets/pylib-apple/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6",
@ -3396,30 +3396,30 @@
"build/assets/pylib-apple/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea", "build/assets/pylib-apple/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea",
"build/assets/pylib-apple/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3", "build/assets/pylib-apple/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3",
"build/assets/pylib-apple/nntplib.py": "4926aa991bd4b96b9318d6242135abf9", "build/assets/pylib-apple/nntplib.py": "4926aa991bd4b96b9318d6242135abf9",
"build/assets/pylib-apple/ntpath.py": "36557dc9fdcd9eeeab4d46c1a364bd5a", "build/assets/pylib-apple/ntpath.py": "d53ff21dc0ef0cd939cc865ae1fb011e",
"build/assets/pylib-apple/nturl2path.py": "937624c4b6f213b652addea66296ccc4", "build/assets/pylib-apple/nturl2path.py": "937624c4b6f213b652addea66296ccc4",
"build/assets/pylib-apple/numbers.py": "0cdcb42317422500d514ec67d496a06e", "build/assets/pylib-apple/numbers.py": "0cdcb42317422500d514ec67d496a06e",
"build/assets/pylib-apple/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980", "build/assets/pylib-apple/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980",
"build/assets/pylib-apple/operator.py": "61e197bc43df97ec39ae3e5e59b11c19", "build/assets/pylib-apple/operator.py": "61e197bc43df97ec39ae3e5e59b11c19",
"build/assets/pylib-apple/optparse.py": "5f65f891612b68c71a2846da86254285", "build/assets/pylib-apple/optparse.py": "5f65f891612b68c71a2846da86254285",
"build/assets/pylib-apple/os.py": "36f9692131ffb9ba4db510de31afc651", "build/assets/pylib-apple/os.py": "36f9692131ffb9ba4db510de31afc651",
"build/assets/pylib-apple/pathlib.py": "3e8b893cbe95729cdb6d0cc796e89e19", "build/assets/pylib-apple/pathlib.py": "095ec821fec243124d0a286b4de3848a",
"build/assets/pylib-apple/pdb.py": "da4c484348d4b2009479dadd878f20b0", "build/assets/pylib-apple/pdb.py": "117b0d24ccb89edc5f183c94f6722f70",
"build/assets/pylib-apple/pickle.py": "e6f9f53d29988454690ccde3279c7c38", "build/assets/pylib-apple/pickle.py": "e6f9f53d29988454690ccde3279c7c38",
"build/assets/pylib-apple/pickletools.py": "85b30fba86d32dfc4a588300dedf5f01", "build/assets/pylib-apple/pickletools.py": "85b30fba86d32dfc4a588300dedf5f01",
"build/assets/pylib-apple/pipes.py": "2dd796bdbb87982034234fec50d4526c", "build/assets/pylib-apple/pipes.py": "2dd796bdbb87982034234fec50d4526c",
"build/assets/pylib-apple/pkgutil.py": "372a540a2f2f3a324d5ff8e137579aad", "build/assets/pylib-apple/pkgutil.py": "8e3fdfcb6c90dc50245aee89c49eb515",
"build/assets/pylib-apple/platform.py": "ee86bbf8ce5fbe11cd285600ecf4aecd", "build/assets/pylib-apple/platform.py": "ee86bbf8ce5fbe11cd285600ecf4aecd",
"build/assets/pylib-apple/plistlib.py": "8aa9836b7a69628873b25811c4d5fffa", "build/assets/pylib-apple/plistlib.py": "8aa9836b7a69628873b25811c4d5fffa",
"build/assets/pylib-apple/poplib.py": "829dc4df5d8e082ad414d499ec4678bd", "build/assets/pylib-apple/poplib.py": "829dc4df5d8e082ad414d499ec4678bd",
"build/assets/pylib-apple/posixpath.py": "2a6b3f940f89b0819ee002b6b82b0318", "build/assets/pylib-apple/posixpath.py": "2a6b3f940f89b0819ee002b6b82b0318",
"build/assets/pylib-apple/pprint.py": "b4e9efe35d05b6126d41da36eda47754", "build/assets/pylib-apple/pprint.py": "b4e9efe35d05b6126d41da36eda47754",
"build/assets/pylib-apple/profile.py": "4c0816d9278d2a33e28835fcd291fb62", "build/assets/pylib-apple/profile.py": "a9f11f8aa6a2905706a5fc9273d6c981",
"build/assets/pylib-apple/pstats.py": "c5884aaae199265ab0c3849d053bc996", "build/assets/pylib-apple/pstats.py": "c5884aaae199265ab0c3849d053bc996",
"build/assets/pylib-apple/pty.py": "1de2d1bfbdc54a770de7b3010d322620", "build/assets/pylib-apple/pty.py": "c97b51147360cf7fd92c364ab8068a2b",
"build/assets/pylib-apple/py_compile.py": "772b429c589d2e005e8bd79b12f55a92", "build/assets/pylib-apple/py_compile.py": "772b429c589d2e005e8bd79b12f55a92",
"build/assets/pylib-apple/pyclbr.py": "bf1989a2c73108005e874a640760476a", "build/assets/pylib-apple/pyclbr.py": "bf1989a2c73108005e874a640760476a",
"build/assets/pylib-apple/pydoc.py": "0f8a4b2f4a9d23e429c01660a4290bd8", "build/assets/pylib-apple/pydoc.py": "b17a6d227db749f91434253248fa6384",
"build/assets/pylib-apple/queue.py": "1e90a0b87965a2642946621db162f441", "build/assets/pylib-apple/queue.py": "1e90a0b87965a2642946621db162f441",
"build/assets/pylib-apple/quopri.py": "5d58010dd1f96b37a167c6d305372881", "build/assets/pylib-apple/quopri.py": "5d58010dd1f96b37a167c6d305372881",
"build/assets/pylib-apple/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f", "build/assets/pylib-apple/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f",
@ -3427,7 +3427,7 @@
"build/assets/pylib-apple/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938", "build/assets/pylib-apple/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938",
"build/assets/pylib-apple/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112", "build/assets/pylib-apple/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112",
"build/assets/pylib-apple/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989", "build/assets/pylib-apple/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989",
"build/assets/pylib-apple/re/_parser.py": "df712815c6dba2e12c1875ca1bc02400", "build/assets/pylib-apple/re/_parser.py": "1afe14ae4219eadb32ba0fd3ac1b921a",
"build/assets/pylib-apple/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a", "build/assets/pylib-apple/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a",
"build/assets/pylib-apple/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414", "build/assets/pylib-apple/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414",
"build/assets/pylib-apple/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82", "build/assets/pylib-apple/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82",
@ -3436,7 +3436,7 @@
"build/assets/pylib-apple/selectors.py": "98e0d83849452cbc2cc1381555bd5024", "build/assets/pylib-apple/selectors.py": "98e0d83849452cbc2cc1381555bd5024",
"build/assets/pylib-apple/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a", "build/assets/pylib-apple/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a",
"build/assets/pylib-apple/shlex.py": "0873fac90a491702950816ead0e59dd0", "build/assets/pylib-apple/shlex.py": "0873fac90a491702950816ead0e59dd0",
"build/assets/pylib-apple/shutil.py": "651be1edc2110d483c96fbe26f40665d", "build/assets/pylib-apple/shutil.py": "a5d0ee9f28244b42a06e682312d0e3fa",
"build/assets/pylib-apple/signal.py": "114ef47b1798fca6f56ac8a250974b3e", "build/assets/pylib-apple/signal.py": "114ef47b1798fca6f56ac8a250974b3e",
"build/assets/pylib-apple/site.py": "c2bb58a3e8fe69733a28b56d04b47e50", "build/assets/pylib-apple/site.py": "c2bb58a3e8fe69733a28b56d04b47e50",
"build/assets/pylib-apple/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4", "build/assets/pylib-apple/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4",
@ -3450,18 +3450,18 @@
"build/assets/pylib-apple/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8", "build/assets/pylib-apple/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8",
"build/assets/pylib-apple/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63", "build/assets/pylib-apple/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63",
"build/assets/pylib-apple/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91", "build/assets/pylib-apple/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91",
"build/assets/pylib-apple/ssl.py": "3c4c838c1c298d69871154e80f45cad1", "build/assets/pylib-apple/ssl.py": "ed512664b82e23aa157fc69f97df9d01",
"build/assets/pylib-apple/stat.py": "185f17736cdb40bd3e7400ad8cedef84", "build/assets/pylib-apple/stat.py": "185f17736cdb40bd3e7400ad8cedef84",
"build/assets/pylib-apple/statistics.py": "9807c60eb942bf320ee85a2016ba4516", "build/assets/pylib-apple/statistics.py": "9807c60eb942bf320ee85a2016ba4516",
"build/assets/pylib-apple/string.py": "c072d3a2d0337386d3235ba72f292752", "build/assets/pylib-apple/string.py": "c072d3a2d0337386d3235ba72f292752",
"build/assets/pylib-apple/stringprep.py": "6a5635711a838f76fee7b52537bf8b45", "build/assets/pylib-apple/stringprep.py": "6a5635711a838f76fee7b52537bf8b45",
"build/assets/pylib-apple/struct.py": "4fd288bd6537effd1d5edbba9d44dde2", "build/assets/pylib-apple/struct.py": "4fd288bd6537effd1d5edbba9d44dde2",
"build/assets/pylib-apple/subprocess.py": "c696ea6bad77404821e3643a5a8f1189", "build/assets/pylib-apple/subprocess.py": "71393ec8cfd7da74691d932dd1861992",
"build/assets/pylib-apple/sunau.py": "a034779289fef0b2221345f40e042680", "build/assets/pylib-apple/sunau.py": "a034779289fef0b2221345f40e042680",
"build/assets/pylib-apple/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7", "build/assets/pylib-apple/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7",
"build/assets/pylib-apple/sysconfig.py": "e14e3272debfcb60192898d131712bad", "build/assets/pylib-apple/sysconfig.py": "e14e3272debfcb60192898d131712bad",
"build/assets/pylib-apple/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a", "build/assets/pylib-apple/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a",
"build/assets/pylib-apple/tarfile.py": "76bf209364cd327ee75e9dac3211c882", "build/assets/pylib-apple/tarfile.py": "e2fc4eca5c2d39b6f44b9e622a32f602",
"build/assets/pylib-apple/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea", "build/assets/pylib-apple/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea",
"build/assets/pylib-apple/tempfile.py": "436007fbe6821c864a53861bd73b4d43", "build/assets/pylib-apple/tempfile.py": "436007fbe6821c864a53861bd73b4d43",
"build/assets/pylib-apple/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c", "build/assets/pylib-apple/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c",
@ -3474,22 +3474,22 @@
"build/assets/pylib-apple/tomllib/_parser.py": "f9a4dc92c44403f970e94c2e494a7358", "build/assets/pylib-apple/tomllib/_parser.py": "f9a4dc92c44403f970e94c2e494a7358",
"build/assets/pylib-apple/tomllib/_re.py": "0e509117e16c41c491615e06bb98861d", "build/assets/pylib-apple/tomllib/_re.py": "0e509117e16c41c491615e06bb98861d",
"build/assets/pylib-apple/tomllib/_types.py": "07be9616d6f5e401fd31fbeea619fc97", "build/assets/pylib-apple/tomllib/_types.py": "07be9616d6f5e401fd31fbeea619fc97",
"build/assets/pylib-apple/trace.py": "c860164b4f4317299db04e29070a163d", "build/assets/pylib-apple/trace.py": "3d8698a2c3ec03dc0f394a2f48c2ffbc",
"build/assets/pylib-apple/traceback.py": "bb2dc63a0bcd438697904573807bd392", "build/assets/pylib-apple/traceback.py": "91f67818e621e3b2f5bf583ed6863ef8",
"build/assets/pylib-apple/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf", "build/assets/pylib-apple/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf",
"build/assets/pylib-apple/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d", "build/assets/pylib-apple/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d",
"build/assets/pylib-apple/types.py": "78f8942c08dbfc9c582f1bb8d5206639", "build/assets/pylib-apple/types.py": "78f8942c08dbfc9c582f1bb8d5206639",
"build/assets/pylib-apple/typing.py": "c07fa037183494716cd57a7c9ac05d78", "build/assets/pylib-apple/typing.py": "17aaeea16cbfdb93cb4c5b87f535e341",
"build/assets/pylib-apple/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-apple/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf",
"build/assets/pylib-apple/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0", "build/assets/pylib-apple/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0",
"build/assets/pylib-apple/urllib/parse.py": "d47283907682d432b511b85dd1e32572", "build/assets/pylib-apple/urllib/parse.py": "28e09ecc3b696bae8ac5589b9cd64f63",
"build/assets/pylib-apple/urllib/request.py": "e89a853d76344f1ca197926d49b3b9e6", "build/assets/pylib-apple/urllib/request.py": "09b8666fe8319542f7247bb9f8573806",
"build/assets/pylib-apple/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93", "build/assets/pylib-apple/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93",
"build/assets/pylib-apple/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb", "build/assets/pylib-apple/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb",
"build/assets/pylib-apple/uu.py": "93268d78026ebde74a1ccd14024ae59f", "build/assets/pylib-apple/uu.py": "7cb795ca0c9e914550e6245dfe53c53e",
"build/assets/pylib-apple/uuid.py": "755d75cad456d0c3ab0c67f0276cca32", "build/assets/pylib-apple/uuid.py": "755d75cad456d0c3ab0c67f0276cca32",
"build/assets/pylib-apple/warnings.py": "e5f0b4cbc35aae8d4b89a856b189b626", "build/assets/pylib-apple/warnings.py": "e5f0b4cbc35aae8d4b89a856b189b626",
"build/assets/pylib-apple/wave.py": "cb125197ba1b7955bbee4ebde9f385ce", "build/assets/pylib-apple/wave.py": "727a8dacad95625ea14554b7d655ce2e",
"build/assets/pylib-apple/weakref.py": "dd14612f02ca8acd723f633b6fff0adf", "build/assets/pylib-apple/weakref.py": "dd14612f02ca8acd723f633b6fff0adf",
"build/assets/pylib-apple/webbrowser.py": "7356fd255ec3bdfef98349a9c9d2b563", "build/assets/pylib-apple/webbrowser.py": "7356fd255ec3bdfef98349a9c9d2b563",
"build/assets/pylib-apple/xdrlib.py": "ee12e9067ab4904da935b8d2213426d8", "build/assets/pylib-apple/xdrlib.py": "ee12e9067ab4904da935b8d2213426d8",
@ -3519,7 +3519,7 @@
"build/assets/pylib-apple/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405", "build/assets/pylib-apple/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405",
"build/assets/pylib-apple/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6", "build/assets/pylib-apple/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6",
"build/assets/pylib-apple/zipapp.py": "d92ea793f092af6383a6383678cf7b73", "build/assets/pylib-apple/zipapp.py": "d92ea793f092af6383a6383678cf7b73",
"build/assets/pylib-apple/zipfile.py": "21cdb798a8f660aa3ec322ce59bddac9", "build/assets/pylib-apple/zipfile.py": "00671f5cdb9a5ad667efa1dccf0129d3",
"build/assets/pylib-apple/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1", "build/assets/pylib-apple/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1",
"build/assets/pylib-apple/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff", "build/assets/pylib-apple/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff",
"build/assets/pylib-apple/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2", "build/assets/pylib-apple/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2",
@ -4064,26 +4064,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "ca001c9f2b4edf8d4918c1bcaf0cb561", "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "2ceb16e09034aa4e3213e8fb69dd209b",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "fcb58aae4535a761be49420f4e4a7711", "build/prefab/full/linux_arm64_gui/release/ballisticakit": "7ecdc512653325abef8e66e9c3e0e479",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "8f453b8193ba06a3cc59374cdd2a1c09", "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "70a1c3300cb0610a85449d08b3483a54",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7c389cb83619516ce96118227668500e", "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "000738cc726938ff5282d211629739e3",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "2ffcc486e9ba8f0fd5279083a2e54aff", "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "e4d0b9fdcb16f2bef3891f28b950daac",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "366bab5bff3ff9344e54bf7492f4d7c3", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "9cc960c0de9e10dd300561dc9ae045e2",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "78277cc1bd40ba88fd1475f8755e0721", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "be453afedfb331abe39e4940755b34e7",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "5f063e4d45e40ade22f1bad63658752e", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "d478af40d922a68e4deab6dd452b0e51",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f7114c78146f22e89143218c9930b43e", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "5fdb7d8752f9a8315a5f94a32b5db368",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "90c0ea0ce7a35d8f15b2a29bef704819", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "433dae3372f05c7faf75658c6f962be1",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "e1b4932fd7f359404c979604a1e33444", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "d66d0201decc90f677520f41ac227a71",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "28ab454f71dfecd1986a245eb4a732e7", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "37efebdbd1866b71ac324f5ca949151a",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7b1a4db9c3f36fd428cdafbc1459bc1b", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "5ccfadd91168c07956328dd11b118b28",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "bc5a48ff49975901f212d18b1dbbb6f5", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "404d9db4de7089346264f3f62dbb6d88",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "7742db7c9555907fc7b2d5c89d48dfd0", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ef3dda575b711a0fa515f93ebd0a7379",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "d81bc55d666f630a14de90f30be29fb4", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8ee2be9a35e12158c0ace56b04a3ea99",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "5ab68bfee69a6fe07b5b8a68938220e6", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "1c305bde639f5fc76e908a3a3fb9203f",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "59a2b3cb2c1dde98c6aedf72aa9fdbfb", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "e58ce9a499068e682295dd3d88a0801d",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "2199e800eb102d56197e11782b7adf12", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "38a2c503c8d892d7e94cd53fb4da5b48",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "3193300cf9927276893960698d8246f6", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "deea2cf3afb5598ed9eb6ce4798b1cef",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "b5a129d83796c9e7015ab5e319d2c22f", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "b5a129d83796c9e7015ab5e319d2c22f",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5",
@ -4100,14 +4100,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "d34c0a142e7d391a109a33ea3cc77c08", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "d34c0a142e7d391a109a33ea3cc77c08",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "13a3bb41dda8cfdb3ffdbc57a0390275", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "9d23a52a0c270710332bf35297db9f36",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "042ff1129bab0def6bf90250b5c08a32", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "61d84134e4088e5138ceb200ba20960b",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "699ab8e6fd3e8517acac76cd5b40dfbc", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "a7a9854fb6f114ac3f3f35c451170328",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "5b53317f8900cab59288be44b353dffc", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "f5a2d196943141917b1ee0f3beb1f5eb",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "978ea0ba60c026efd45729cd48c0feba", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "ec0052c95df6ea5cb3bdcaabcb1ea55c",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "1fb524f11277090440cda18bfc3ee3a0", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "d21984e95164c4e7df91b35a60828fc7",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "91452d47e879acd0d7fdd06a44fbcfed", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "b613c7699c66c9a2a17bf9360015ade0",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "7e9469f3cac9ab85c5e9d1256679604c", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "6f907f7940d2f5e44874e24f9a1856a0",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318", "src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "ad347097a38e0d7ede9eb6dec6a80ee9", "src/ballistica/base/mgen/pyembed/binding_base.inc": "ad347097a38e0d7ede9eb6dec6a80ee9",

View File

@ -1,4 +1,4 @@
### 1.7.28 (build 21303, api 8, 2023-09-01) ### 1.7.28 (build 21306, api 8, 2023-09-06)
- Added some high level functionality for copying and deleting feature-sets to - Added some high level functionality for copying and deleting feature-sets to
the `spinoff` tool. For example, to create your own `poo` feature-set based on the `spinoff` tool. For example, to create your own `poo` feature-set based on
@ -14,6 +14,8 @@
prefab-server-release-build` you should see just a few file downloads prefab-server-release-build` you should see just a few file downloads
happening instead of the hundreds that would happen before, which should be happening instead of the hundreds that would happen before, which should be
significantly faster & more efficient. significantly faster & more efficient.
- Updated internal Python builds for Apple & iOS to 3.11.5, and updated a few
dependent libraries as well (OpenSSL bumped from 3.0.8 to 3.0.10, etc.).
### 1.7.27 (build 21282, api 8, 2023-08-30) ### 1.7.27 (build 21282, api 8, 2023-08-30)

View File

@ -186,10 +186,10 @@ pcommandbatch_speed_test: prereqs
# Tell make which of these targets don't represent files. # Tell make which of these targets don't represent files.
.PHONY: help prereqs prereqs-pre-update prereqs-clean assets assets-cmake \ .PHONY: help prereqs prereqs-pre-update prereqs-clean assets assets-cmake \
assets-cmake-scripts assets-windows assets-windows-Win32 assets-windows-x64 \ assets-cmake-scripts assets-windows assets-windows-Win32 \
assets-mac assets-ios assets-android assets-clean resources resources-clean \ assets-windows-x64 assets-mac assets-ios assets-android assets-clean \
meta meta-clean clean clean-list dummymodules docs docs-pdoc \ resources resources-clean meta meta-clean clean clean-list \
pcommandbatch_speed_test dummymodules docs docs-pdoc pcommandbatch_speed_test
################################################################################ ################################################################################
@ -585,31 +585,35 @@ build/prefab/lib/windows/Release_%/BallisticaKitHeadlessPlus.pdb: .efrocachemap
@$(PCOMMANDBATCH) efrocache_get $@ @$(PCOMMANDBATCH) efrocache_get $@
# Tell make which of these targets don't represent files. # Tell make which of these targets don't represent files.
.PHONY: prefab-gui-debug prefab-gui-release prefab-gui-debug-build \ .PHONY: prefab-gui-debug prefab-gui-release prefab-gui-debug-build \
prefab-gui-release-build prefab-server-debug prefab-server-release \ prefab-gui-release-build prefab-server-debug prefab-server-release \
prefab-server-debug-build prefab-server-release-build prefab-clean \ prefab-server-debug-build prefab-server-release-build prefab-clean \
_cmake_prefab_gui_binary _cmake_prefab_server_binary \ _cmake_prefab_gui_binary _cmake_prefab_server_binary \
prefab-mac-x86-64-gui-debug prefab-mac-arm64-gui-debug \ prefab-mac-x86-64-gui-debug prefab-mac-arm64-gui-debug \
prefab-mac-x86-64-gui-debug-build prefab-mac-arm64-gui-debug-build \ prefab-mac-x86-64-gui-debug-build prefab-mac-arm64-gui-debug-build \
prefab-mac-x86-64-gui-release prefab-mac-arm64-gui-release \ prefab-mac-x86-64-gui-release prefab-mac-arm64-gui-release \
prefab-mac-x86-64-gui-release-build prefab-mac-arm64-gui-release-build \ prefab-mac-x86-64-gui-release-build \
prefab-mac-x86-64-server-debug prefab-mac-arm64-server-debug \ prefab-mac-arm64-gui-release-build prefab-mac-x86-64-server-debug \
prefab-mac-x86-64-server-debug-build prefab-mac-arm64-server-debug-build \ prefab-mac-arm64-server-debug prefab-mac-x86-64-server-debug-build \
prefab-mac-x86-64-server-release prefab-mac-arm64-server-release \ prefab-mac-arm64-server-debug-build prefab-mac-x86-64-server-release \
prefab-mac-x86-64-server-release-build prefab-mac-arm64-server-release-build \ prefab-mac-arm64-server-release \
prefab-linux-x86-64-gui-debug prefab-linux-arm64-gui-debug \ prefab-mac-x86-64-server-release-build \
prefab-linux-x86-64-gui-debug-build prefab-linux-arm64-gui-debug-build \ prefab-mac-arm64-server-release-build prefab-linux-x86-64-gui-debug \
prefab-linux-x86-64-gui-release prefab-linux-arm64-gui-release \ prefab-linux-arm64-gui-debug prefab-linux-x86-64-gui-debug-build \
prefab-linux-x86-64-gui-release-build prefab-linux-arm64-gui-release-build \ prefab-linux-arm64-gui-debug-build prefab-linux-x86-64-gui-release \
prefab-linux-x86-64-server-debug prefab-linux-arm64-server-debug \ prefab-linux-arm64-gui-release prefab-linux-x86-64-gui-release-build \
prefab-linux-x86-64-server-debug-build prefab-linux-arm64-server-debug-build \ prefab-linux-arm64-gui-release-build prefab-linux-x86-64-server-debug \
prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \ prefab-linux-arm64-server-debug \
prefab-linux-x86-64-server-release-build \ prefab-linux-x86-64-server-debug-build \
prefab-linux-arm64-server-release-build \ prefab-linux-arm64-server-debug-build \
prefab-windows-x86-gui-debug prefab-windows-x86-gui-debug-build \ prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \
prefab-windows-x86-gui-release prefab-windows-x86-gui-release-build \ prefab-linux-x86-64-server-release-build \
prefab-windows-x86-server-debug prefab-windows-x86-server-debug-build \ prefab-linux-arm64-server-release-build prefab-windows-x86-gui-debug \
prefab-windows-x86-server-release prefab-windows-x86-server-release-build prefab-windows-x86-gui-debug-build prefab-windows-x86-gui-release \
prefab-windows-x86-gui-release-build prefab-windows-x86-server-debug \
prefab-windows-x86-server-debug-build \
prefab-windows-x86-server-release \
prefab-windows-x86-server-release-build
################################################################################ ################################################################################
@ -751,8 +755,8 @@ format-scripts-full: prereqs
format-makefile: prereqs format-makefile: prereqs
@$(PCOMMAND) formatmakefile @$(PCOMMAND) formatmakefile
.PHONY: format format-full format-code format-code-full format-scripts \ .PHONY: format format-full format-code format-code-full format-scripts \
format-scripts-full format-scripts-full
################################################################################ ################################################################################
@ -841,9 +845,9 @@ pycharm-full: py_check_prereqs
py_check_prereqs: dummymodules py_check_prereqs: dummymodules
# Tell make which of these targets don't represent files. # Tell make which of these targets don't represent files.
.PHONY: check check-full check2 check2-full \ .PHONY: check check-full check2 check2-full cpplint cpplint-full pylint \
cpplint cpplint-full pylint pylint-full mypy \ pylint-full mypy mypy-full dmypy dmypy-stop pycharm pycharm-full \
mypy-full dmypy dmypy-stop pycharm pycharm-full py_check_prereqs py_check_prereqs
################################################################################ ################################################################################
@ -1137,10 +1141,11 @@ clion-staging: assets-cmake resources meta
$(STAGE_BUILD) -cmake -release build/clion_release $(STAGE_BUILD) -cmake -release build/clion_release
# Tell make which of these targets don't represent files. # Tell make which of these targets don't represent files.
.PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \ .PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \
cmake-server-clean cmake-modular-build cmake-modular cmake-modular-binary \ cmake-server-clean cmake-modular-build cmake-modular \
cmake-modular-clean cmake-modular-server cmake-modular-server-build \ cmake-modular-binary cmake-modular-clean cmake-modular-server \
cmake-modular-server-binary cmake-modular-server-clean clion-staging cmake-modular-server-build cmake-modular-server-binary \
cmake-modular-server-clean clion-staging
################################################################################ ################################################################################

View File

@ -18,6 +18,10 @@
"src/ballistica/base/platform/oculus/main_rift.cc", "src/ballistica/base/platform/oculus/main_rift.cc",
"src/ballistica/core/platform/android/android_gl3.c" "src/ballistica/core/platform/android/android_gl3.c"
], ],
"default_app_modes": [
"bascenev1.SceneV1AppMode",
"babase.EmptyAppMode"
],
"efrocache_repository_url": "https://files.ballistica.net/cache/ba1", "efrocache_repository_url": "https://files.ballistica.net/cache/ba1",
"name": "BallisticaKit", "name": "BallisticaKit",
"public": true, "public": true,

View File

@ -97,19 +97,16 @@ class App:
SHUTTING_DOWN = 6 SHUTTING_DOWN = 6
class DefaultAppModeSelector(AppModeSelector): class DefaultAppModeSelector(AppModeSelector):
"""Decides which app modes to use to handle intents. """Decides which AppModes to use to handle AppIntents.
The behavior here is generated by the project updater based on This default version is generated by the project updater based
the feature-sets present in the project. Spinoff projects can on the 'default_app_modes' value in the projectconfig.
also inject their own behavior by replacing the text
'__GOOD_PLACE_FOR_CUSTOM_SPINOFF_LOGIC__' with their own code
through spinoff filtering.
It is also possible to modify mode selection behavior by writing It is also possible to modify app mode selection behavior by
a custom AppModeSelector class and replacing app.mode_selector setting app.mode_selector to an instance of a custom
with an instance of it. This is a good way to go if you are AppModeSelector subclass. This is a good way to go if you are
modifying app behavior with a plugin instead of in a spinoff modifying app behavior dynamically via a plugin instead of
project. statically in a spinoff project.
""" """
def app_mode_for_intent( def app_mode_for_intent(
@ -117,16 +114,12 @@ class App:
) -> type[AppMode] | None: ) -> type[AppMode] | None:
# pylint: disable=cyclic-import # pylint: disable=cyclic-import
# __GOOD_PLACE_FOR_CUSTOM_SPINOFF_LOGIC__
# __DEFAULT_APP_MODE_SELECTION_BEGIN__ # __DEFAULT_APP_MODE_SELECTION_BEGIN__
# This section generated by batools.appmodule; do not edit. # This section generated by batools.appmodule; do not edit.
# Hmm; need to think about how we auto-construct this; how # Ask our default app modes to handle it.
# should we determine which app modes to check and in what # (based on 'default_app_modes' in projectconfig).
# order?
import bascenev1 import bascenev1
import babase import babase
if bascenev1.SceneV1AppMode.can_handle_intent(intent): if bascenev1.SceneV1AppMode.can_handle_intent(intent):
@ -135,7 +128,7 @@ class App:
if babase.EmptyAppMode.can_handle_intent(intent): if babase.EmptyAppMode.can_handle_intent(intent):
return babase.EmptyAppMode return babase.EmptyAppMode
raise RuntimeError(f'No handler found for intent {type(intent)}.') return None
# __DEFAULT_APP_MODE_SELECTION_END__ # __DEFAULT_APP_MODE_SELECTION_END__
@ -246,12 +239,6 @@ class App:
@mode_selector.setter @mode_selector.setter
def mode_selector(self, selector: babase.AppModeSelector) -> None: def mode_selector(self, selector: babase.AppModeSelector) -> None:
# Don't allow overriding this until after we've initially set it.
if self._mode_selector is None:
raise RuntimeError(
'mode_selector cannot be used until the app reaches'
' the running state.'
)
self._mode_selector = selector self._mode_selector = selector
# __FEATURESET_APP_SUBSYSTEM_PROPERTIES_BEGIN__ # __FEATURESET_APP_SUBSYSTEM_PROPERTIES_BEGIN__
@ -332,10 +319,13 @@ class App:
_babase.run_app() _babase.run_app()
def threadpool_submit_no_wait(self, call: Callable[[], Any]) -> None: def threadpool_submit_no_wait(self, call: Callable[[], Any]) -> None:
"""Submit work to our threadpool and log any errors. """Submit a call to the app threadpool where result is not needed.
Use this when you want to run something asynchronously but don't Normally, doing work in a thread-pool involves creating a future
intend to call result() on it to handle errors/etc. and waiting for its result, which is an important step because it
propagates any Exceptions raised by the submitted work. When the
result in not important, however, this call can be used. The app
will log any exceptions that occur.
""" """
fut = self.threadpool.submit(call) fut = self.threadpool.submit(call)
fut.add_done_callback(self._threadpool_no_wait_done) fut.add_done_callback(self._threadpool_no_wait_done)
@ -635,9 +625,10 @@ class App:
# Let our native layer know. # Let our native layer know.
_babase.on_app_running() _babase.on_app_running()
# Set a default app-mode-selector. Plugins can then override # Set a default app-mode-selector if none has been set yet
# this if they want in the on_app_running callback below. # by a plugin or whatnot.
self._mode_selector = self.DefaultAppModeSelector() if self._mode_selector is None:
self._mode_selector = self.DefaultAppModeSelector()
# Inform all app subsystems in the same order they were # Inform all app subsystems in the same order they were
# registered. Operate on a copy here because subsystems can # registered. Operate on a copy here because subsystems can

View File

@ -52,7 +52,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be # Build number and version of the ballistica binary we expect to be
# using. # using.
TARGET_BALLISTICA_BUILD = 21303 TARGET_BALLISTICA_BUILD = 21306
TARGET_BALLISTICA_VERSION = '1.7.28' TARGET_BALLISTICA_VERSION = '1.7.28'

View File

@ -718,7 +718,10 @@ auto BaseFeatureSet::IsAppStarted() const -> bool { return app_started_; }
auto BaseFeatureSet::ShutdownSuppressBegin() -> bool { auto BaseFeatureSet::ShutdownSuppressBegin() -> bool {
std::scoped_lock lock(shutdown_suppress_lock_); std::scoped_lock lock(shutdown_suppress_lock_);
if (!shutdown_suppress_disallowed_) {
// Once shutdown has begun, we no longer allow things that would
// suppress it. Tell the caller to abort what they're trying to do.
if (shutdown_suppress_disallowed_) {
return false; return false;
} }
shutdown_suppress_count_++; shutdown_suppress_count_++;

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica { namespace ballistica {
// These are set automatically via script; don't modify them here. // These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21303; const int kEngineBuildNumber = 21306;
const char* kEngineVersion = "1.7.28"; const char* kEngineVersion = "1.7.28";
const int kEngineApiVersion = 8; const int kEngineApiVersion = 8;

View File

@ -21,6 +21,7 @@ def generate_app_module(
# pylint: disable=too-many-locals # pylint: disable=too-many-locals
# pylint: disable=too-many-branches # pylint: disable=too-many-branches
# pylint: disable=too-many-statements
import textwrap import textwrap
from efrotools import replace_section from efrotools import replace_section
@ -154,15 +155,21 @@ def generate_app_module(
) )
# Generate default app-mode-selection logic. # Generate default app-mode-selection logic.
# TODO - make this customizable via project settings or whatnot.
contents = ( contents = (
'# Hmm; need to think about how we auto-construct this; how\n' '# Ask our default app modes to handle it.\n'
'# should we determine which app modes to check and in what\n' "# (based on 'default_app_modes' in projectconfig).\n"
'# order?\n'
) )
imports: list[str] = []
if 'scene_v1' in fsets: if 'scene_v1' in fsets:
contents += 'import bascenev1\n\n' imports.append('bascenev1')
if 'base' in fsets: if 'base' in fsets:
contents += 'import babase\n\n' imports.append('babase')
for imp in imports:
contents += f'import {imp}\n'
contents += '\n'
if 'scene_v1' in fsets: if 'scene_v1' in fsets:
contents += ( contents += (
@ -174,10 +181,7 @@ def generate_app_module(
'if babase.EmptyAppMode.can_handle_intent(intent):\n' 'if babase.EmptyAppMode.can_handle_intent(intent):\n'
' return babase.EmptyAppMode\n\n' ' return babase.EmptyAppMode\n\n'
) )
contents += ( contents += 'return None\n'
"raise RuntimeError(f'No handler found for"
" intent {type(intent)}.')\n"
)
indent = ' ' indent = ' '
out = replace_section( out = replace_section(

View File

@ -563,58 +563,59 @@ def _print_available_commands() -> None:
print( print(
( (
'Available commands:\n' 'Available commands:\n'
f' {bgn}status{end} ' f' {bgn}status{end} '
'Print list of files update would affect.\n' 'Print list of files update would affect.\n'
f' {bgn}diff{end} ' f' {bgn}diff{end} '
'Print diffs for what update would do.\n' 'Print diffs for what update would do.\n'
f' {bgn}update{end} ' f' {bgn}update{end} '
'Sync all spinoff files from src project.\n' 'Sync all spinoff files from src project.\n'
f' {bgn}check{end} ' f' {bgn}check{end} '
'Make sure everything is kosher.\n' 'Make sure everything is kosher.\n'
f' {bgn}clean{end} ' f' {bgn}clean{end} '
'Remove all spinoff files' 'Remove all spinoff files'
' (minus a few exceptions such\n' ' (minus a few exceptions such\n'
' as .gitignore).\n' ' as .gitignore).\n'
f' {bgn}cleanlist{end} ' f' {bgn}cleanlist{end} '
'Shows what clean would do.\n' 'Shows what clean would do.\n'
f' {bgn}override [file...]{end} ' f' {bgn}override [file...]{end} '
'Remove files from spinoff, leaving local copies in place.\n' 'Remove files from spinoff, leaving local copies in place.\n'
f' {bgn}backport [file]{end} ' f' {bgn}backport [file]{end} '
'Help get changes to spinoff dst files back to src.\n' 'Help get changes to spinoff dst files back to src.\n'
f' {bgn}create [name, path]{end} ' f' {bgn}create [name, path]{end} '
'Create a new spinoff project based on this src one.\n' 'Create a new spinoff project based on this src one.\n'
' Name should be passed in CamelCase form.\n' ' Name should be passed in CamelCase form.\n'
' By default, includes all feature-sets from' ' By default, includes all feature-sets from'
' src.\n' ' src.\n'
' Pass --featuresets a,b to specify included' ' Pass --featuresets a,b to specify included'
' feature-sets.\n' ' feature-sets.\n'
" Use 'none' or an empty string for no" " Use 'none' or an empty string for no"
' featuresets.\n' ' featuresets.\n'
' Pass --noninteractive to suppress help' ' Pass --noninteractive to suppress help'
' messages.\n' ' messages.\n'
' By default, the spinoff project will' ' By default, the spinoff project will'
' directly access this\n' ' directly access this\n'
' parent project via a local symlink. To' ' parent project via a local symlink. To'
' instead set up a\n' ' instead set up a\n'
' git submodule at \'submodules/ballistica\'' ' git submodule at \'submodules/ballistica\''
' in the spinoff\n' ' in the spinoff\n'
' project, pass --submodule-parent.\n' ' project, pass --submodule-parent.\n'
f' {bgn}add-submodule-parent{end} Adds a git submodule parent' f' {bgn}add-submodule-parent{end} Adds a git submodule parent'
' to an already existing dst\n' ' to an already existing dst\n'
' project in the current directory.' ' project in the current directory.'
' The same can be\n' ' The same can be\n'
' achieved by passing --submodule-parent to' ' achieved by passing --submodule-parent to'
' the \'create\'\n' ' the \'create\'\n'
' command.\n' ' command.\n'
f' {bgn}fset-list{end} ' f' {bgn}fset-list{end} '
'List featuresets present in the current project.\n' 'List featuresets present in the current project.\n'
f' {bgn}fset-copy [src, dst]{end} Copy feature-set src to dst' f' {bgn}fset-copy [src, dst]{end} Copy feature-set src to dst'
' in the current project.\n' ' in the current project.\n'
' Replaces variations of src feature-set' ' Replaces variations of src feature-set'
' name with equivalent from dst, though may need\n' ' name with\n'
' some manual correction afterwards to be' ' equivalent from dst, though may need\n'
' some manual correction afterwards to be'
' functional.\n' ' functional.\n'
f' {bgn}fset-delete [name]{end} Delete a feature-set from the' f' {bgn}fset-delete [name]{end} Delete a feature-set from the'
' current project.' ' current project.'
), ),
file=sys.stderr, file=sys.stderr,

View File

@ -183,13 +183,13 @@ def get_public_license(style: str) -> str:
def readfile(path: str | Path) -> str: def readfile(path: str | Path) -> str:
"""Read a text file and return a str.""" """Read a utf-8 text file into a string."""
with open(path, encoding='utf-8') as infile: with open(path, encoding='utf-8') as infile:
return infile.read() return infile.read()
def writefile(path: str | Path, txt: str) -> None: def writefile(path: str | Path, txt: str) -> None:
"""Write a string to a file.""" """Write a string to a utf-8 text file."""
with open(path, 'w', encoding='utf-8') as outfile: with open(path, 'w', encoding='utf-8') as outfile:
outfile.write(txt) outfile.write(txt)

View File

@ -9,35 +9,55 @@ import os
import subprocess import subprocess
from enum import Enum from enum import Enum
from dataclasses import dataclass from dataclasses import dataclass
from typing import TYPE_CHECKING
from efrotools import readfile, writefile, replace_exact from efrotools import readfile, writefile, replace_exact
if TYPE_CHECKING:
pass
# Python version we build here (not necessarily same as we use in repo). # Python version we build here (not necessarily same as we use in repo).
PY_VER_ANDROID = '3.11' PY_VER_ANDROID = '3.11'
PY_VER_EXACT_ANDROID = '3.11.4' PY_VER_EXACT_ANDROID = '3.11.5'
PY_VER_APPLE = '3.11' PY_VER_APPLE = '3.11'
PY_VER_EXACT_APPLE = '3.11.3' PY_VER_EXACT_APPLE = '3.11.5'
# Can bump these up to whatever the min we need is. Though perhaps
# leaving them at what the repo uses would lead to fewer build issues.
VERSION_MIN_MACOS = '10.15'
VERSION_MIN_IOS = '12.0'
VERSION_MIN_TVOS = '9.0'
# I occasionally run into openssl problems (particularly on arm systems) # I occasionally run into openssl problems (particularly on arm systems)
# so keeping exact control of the versions we're building here to try # so keeping exact control of the versions we're building here to try
# and minimize it. # and minimize it.
#
# Earlier I ran into an issue with android builds testing while OpenSSL # Earlier I ran into an issue with android builds testing while OpenSSL
# was probing for ARMV7_TICK instruction presence (see android_patch_ssl here), # was probing for ARMV7_TICK instruction presence (see android_patch_ssl
# and more recently I'm seeing a similar thing in 3.1.0 with arm_v8_sve_probe # here), and more recently I'm seeing a similar thing in 3.1.0 with
# on mac. Ugh. # arm_v8_sve_probe on mac. Ugh.
#
# See https://stackoverflow.com/questions/74059978/ # See https://stackoverflow.com/questions/74059978/
# why-is-lldb-generating-exc-bad-instruction-with-user-compiled-library-on-macos # why-is-lldb-generating-exc-bad-instruction-with-user-compiled-library-on-macos
OPENSSL_VER_APPLE = '3.0.8' #
OPENSSL_VER_ANDROID = '3.0.8' # For now will try to ride out this LTS version as long as possible.
OPENSSL_VER_APPLE = '3.0.10'
OPENSSL_VER_ANDROID = '3.0.10'
LIBFFI_VER_APPLE = '3.4.4'
BZIP2_VER_APPLE = '1.0.8'
XZ_VER_APPLE = '5.4.4'
# Android repo doesn't seem to be getting updated much so manually
# bumping various versions to keep things up to date.
ZLIB_VER_ANDROID = '1.3' ZLIB_VER_ANDROID = '1.3'
XZ_VER_ANDROID = '5.4.4' XZ_VER_ANDROID = '5.4.4'
BZIP2_VER_ANDROID = '1.0.8'
GDBM_VER_ANDROID = '1.23'
LIBFFI_VER_ANDROID = '3.4.4'
LIBUUID_VER_ANDROID = ('2.38', '2.38.1')
NCURSES_VER_ANDROID = '6.3'
READLINE_VER_ANDROID = '8.2'
SQLITE_VER_ANDROID = ('2023', '3430000')
# Filenames we prune from Python lib dirs in source repo to cut down on size. # Filenames we prune from Python lib dirs in source repo to cut down on
# size.
PRUNE_LIB_NAMES = [ PRUNE_LIB_NAMES = [
'msilib', 'msilib',
'__phello__', '__phello__',
@ -75,12 +95,13 @@ def build_apple(arch: str, debug: bool = False) -> None:
import platform import platform
from efro.error import CleanError from efro.error import CleanError
# IMPORTANT; seems we currently wind up building against /usr/local gettext # IMPORTANT; seems we currently wind up building against /usr/local
# stuff. Hopefully the maintainer fixes this, but for now I need to # gettext stuff. Hopefully the maintainer fixes this, but for now I
# remind myself to blow it away while building. # need to remind myself to blow it away while building. (via brew
# (via brew remove gettext --ignore-dependencies) # remove gettext --ignore-dependencies)
# NOTE: Should check to see if this is still necessary on Apple silicon #
# since homebrew stuff is no longer in /usr/local there. # NOTE: Should check to see if this is still necessary on Apple
# silicon since homebrew stuff is no longer in /usr/local there.
if bool(False): if bool(False):
if ( if (
'MacBook-Fro' in platform.node() 'MacBook-Fro' in platform.node()
@ -96,7 +117,7 @@ def build_apple(arch: str, debug: bool = False) -> None:
'NEED TO TEMP-KILL GETTEXT (or set SKIP_GETTEXT_WARNING=1)' 'NEED TO TEMP-KILL GETTEXT (or set SKIP_GETTEXT_WARNING=1)'
) )
builddir = 'build/python_apple_' + arch + ('_debug' if debug else '') builddir = f'build/python_apple_{arch}' + ('_debug' if debug else '')
subprocess.run(['rm', '-rf', builddir], check=True) subprocess.run(['rm', '-rf', builddir], check=True)
subprocess.run(['mkdir', '-p', 'build'], check=True) subprocess.run(['mkdir', '-p', 'build'], check=True)
subprocess.run( subprocess.run(
@ -110,10 +131,11 @@ def build_apple(arch: str, debug: bool = False) -> None:
) )
os.chdir(builddir) os.chdir(builddir)
# TEMP: Check out a particular commit while the branch head is broken. # TEMP: Check out a particular commit while the branch head is
# We can actually fix this to use the current one, but something # broken. We can actually fix this to use the current one, but
# broke in the underlying build even on old commits so keeping it # something broke in the underlying build even on old commits so
# locked for now... # keeping it locked for now...
#
# run('git checkout bf1ed73d0d5ff46862ba69dd5eb2ffaeff6f19b6') # run('git checkout bf1ed73d0d5ff46862ba69dd5eb2ffaeff6f19b6')
# Grab the branch corresponding to our target python version. # Grab the branch corresponding to our target python version.
@ -121,30 +143,55 @@ def build_apple(arch: str, debug: bool = False) -> None:
txt = readfile('Makefile') txt = readfile('Makefile')
# Turn doc strings on; looks like it only adds a few hundred k. # Sanity check; we don't actually change Python version for these
# txt = replace_exact( # builds but we need to make sure exactly what version the repo is
# txt, '--without-doc-strings', '--with-doc-strings', count=2 # building (for path purposes and whatnot).
# ) if f'\nPYTHON_VERSION={PY_VER_EXACT_APPLE}\n' not in txt:
raise RuntimeError(
'Does not look like our PY_VER_EXACT_APPLE matches the repo;'
f' please update it in {__name__}.'
)
# Customize our minimum version requirements # Same for ffi version.
if f'\nLIBFFI_VERSION={LIBFFI_VER_APPLE}\n' not in txt:
raise RuntimeError(
'Does not look like our LIBFFI_VER_APPLE matches the repo;'
f' please update it in {__name__}.'
)
# Same for bzip2 version.
if f'\nBZIP2_VERSION={BZIP2_VER_APPLE}\n' not in txt:
raise RuntimeError(
'Does not look like our BZIP2_VERSION matches the repo;'
f' please update it in {__name__}.'
)
# Same for xz version.
if f'\nXZ_VERSION={XZ_VER_APPLE}\n' not in txt:
raise RuntimeError(
'Does not look like our XZ_VER_APPLE matches the repo;'
f' please update it in {__name__}.'
)
# Customize our minimum OS version requirements.
txt = replace_exact( txt = replace_exact(
txt, txt,
'VERSION_MIN-macOS=10.15\n', 'VERSION_MIN-macOS=10.15\n',
'VERSION_MIN-macOS=10.15\n', f'VERSION_MIN-macOS={VERSION_MIN_MACOS}\n',
) )
txt = replace_exact( txt = replace_exact(
txt, txt,
'VERSION_MIN-iOS=12.0\n', 'VERSION_MIN-iOS=12.0\n',
'VERSION_MIN-iOS=12.0\n', f'VERSION_MIN-iOS={VERSION_MIN_IOS}\n',
) )
txt = replace_exact( txt = replace_exact(
txt, txt,
'VERSION_MIN-tvOS=9.0\n', 'VERSION_MIN-tvOS=9.0\n',
'VERSION_MIN-tvOS=9.0\n', f'VERSION_MIN-tvOS={VERSION_MIN_TVOS}\n',
) )
txt = replace_exact( txt = replace_exact(
txt, txt,
'OPENSSL_VERSION=3.1.0\n', 'OPENSSL_VERSION=3.1.2\n',
f'OPENSSL_VERSION={OPENSSL_VER_APPLE}\n', f'OPENSSL_VERSION={OPENSSL_VER_APPLE}\n',
) )
@ -227,9 +274,10 @@ def build_apple(arch: str, debug: bool = False) -> None:
writefile('Makefile', txt) writefile('Makefile', txt)
# Ok; let 'er rip. # 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) # (we run these in parallel so limit to 1 job a piece; otherwise
# (also this build seems to fail with multiple threads) # they inherit the -j12 or whatever from the top level) (also this
# build seems to fail with multiple threads)
subprocess.run( subprocess.run(
[ [
'make', 'make',
@ -249,7 +297,7 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
(can be arm, arm64, x86, or x86_64) (can be arm, arm64, x86, or x86_64)
""" """
builddir = 'build/python_android_' + arch + ('_debug' if debug else '') builddir = f'build/python_android_{arch}' + ('_debug' if debug else '')
subprocess.run(['rm', '-rf', builddir], check=True) subprocess.run(['rm', '-rf', builddir], check=True)
subprocess.run(['mkdir', '-p', 'build'], check=True) subprocess.run(['mkdir', '-p', 'build'], check=True)
subprocess.run( subprocess.run(
@ -310,6 +358,72 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None:
count=1, count=1,
) )
# Set specific BZip2 version.
ftxt = replace_exact(
ftxt,
"source = 'https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz'",
f'source = '
f"'https://sourceware.org/pub/bzip2/bzip2-{BZIP2_VER_ANDROID}.tar.gz'",
count=1,
)
# Set specific GDBM version.
ftxt = replace_exact(
ftxt,
"source = 'https://ftp.gnu.org/gnu/gdbm/gdbm-1.23.tar.gz'",
"source = 'https://ftp.gnu.org/"
f"gnu/gdbm/gdbm-{GDBM_VER_ANDROID}.tar.gz'",
count=1,
)
# Set specific libffi version.
ftxt = replace_exact(
ftxt,
"source = 'https://github.com/libffi/libffi/releases/"
"download/v3.4.4/libffi-3.4.4.tar.gz'",
"source = 'https://github.com/libffi/libffi/releases/"
f"download/v{LIBFFI_VER_ANDROID}/libffi-{LIBFFI_VER_ANDROID}.tar.gz'",
)
# Set specific LibUUID version.
ftxt = replace_exact(
ftxt,
"source = 'https://mirrors.edge.kernel.org/pub/linux/utils/"
"util-linux/v2.38/util-linux-2.38.1.tar.xz'",
"source = 'https://mirrors.edge.kernel.org/pub/linux/utils/"
f'util-linux/v{LIBUUID_VER_ANDROID[0]}/'
f"util-linux-{LIBUUID_VER_ANDROID[1]}.tar.xz'",
count=1,
)
# Set specific NCurses version.
ftxt = replace_exact(
ftxt,
"source = 'https://ftp.gnu.org/gnu/ncurses/ncurses-6.3.tar.gz'",
"source = 'https://ftp.gnu.org/gnu/ncurses/"
f"ncurses-{NCURSES_VER_ANDROID}.tar.gz'",
count=1,
)
# Set specific ReadLine version.
ftxt = replace_exact(
ftxt,
"source = 'https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz'",
"source = 'https://ftp.gnu.org/gnu/readline/"
f"readline-{READLINE_VER_ANDROID}.tar.gz'",
count=1,
)
# Set specific SQLite version.
ftxt = replace_exact(
ftxt,
"source = 'https://sqlite.org/2022/sqlite-autoconf-3390400.tar.gz'",
"source = 'https://sqlite.org/"
f'{SQLITE_VER_ANDROID[0]}/'
f"sqlite-autoconf-{SQLITE_VER_ANDROID[1]}.tar.gz'",
count=1,
)
# Give ourselves a handle to patch the OpenSSL build. # Give ourselves a handle to patch the OpenSSL build.
ftxt = replace_exact( ftxt = replace_exact(
ftxt, ftxt,
@ -358,11 +472,11 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
assert ' ' not in python_dir assert ' ' not in python_dir
# Use the shiny new Setup.stdlib setup (Sounds like this will be default # Use the shiny new Setup.stdlib setup (Sounds like this will be
# in the future?). It looks like by mucking with Setup.stdlib.in we can # default in the future?). It looks like by mucking with
# make pretty minimal changes to get the results we want without having # Setup.stdlib.in we can make pretty minimal changes to get the
# to inject platform-specific linker flags and whatnot like we had to # results we want without having to inject platform-specific linker
# previously. # flags and whatnot like we had to previously.
subprocess.run( subprocess.run(
f'cd {python_dir}/Modules && ln -sf ./Setup.stdlib ./Setup.local', f'cd {python_dir}/Modules && ln -sf ./Setup.stdlib ./Setup.local',
shell=True, shell=True,
@ -384,6 +498,7 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
# This list should contain all possible compiled modules to start. # This list should contain all possible compiled modules to start.
# If any .so files are coming out of builds or anything unrecognized # If any .so files are coming out of builds or anything unrecognized
# is showing up in the final Setup.local or the build, add it here. # is showing up in the final Setup.local or the build, add it here.
#
# TODO(ericf): could automate a warning for at least the last part # TODO(ericf): could automate a warning for at least the last part
# of that. # of that.
cmodules = { cmodules = {
@ -515,9 +630,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
should_enable = cmodule in enables should_enable = cmodule in enables
if not should_enable: if not should_enable:
# If something is enabled but we don't want it, comment it out. # If something is enabled but we don't want it, comment it
# Also stick all disabled stuff in a *disabled* section at the # out. Also stick all disabled stuff in a *disabled* section
# bottom so it won't get built even as shared. # at the bottom so it won't get built even as shared.
if is_enabled: if is_enabled:
lines[indices[0]] = f'#{line}' lines[indices[0]] = f'#{line}'
disable_at_end.add(cmodule) disable_at_end.add(cmodule)
@ -525,8 +640,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
# Ok; its enabled and shouldn't be. What to do... # Ok; its enabled and shouldn't be. What to do...
if bool(False): if bool(False):
# Uncomment the line to enable it. # Uncomment the line to enable it.
# UPDATE: Seems this doesn't work; will have to figure out #
# the right way to get things like _ctypes compiling # UPDATE: Seems this doesn't work; will have to figure
# out the right way to get things like _ctypes compiling
# statically. # statically.
lines[indices[0]] = replace_exact( lines[indices[0]] = replace_exact(
line, f'#{linebegin}', linebegin, count=1 line, f'#{linebegin}', linebegin, count=1
@ -548,20 +664,23 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
# '#*static*\n', # '#*static*\n',
# ) # )
# Now for the one remaining ULTRA-HACKY bit: getting _ctypes building # Now for the one remaining ULTRA-HACKY bit: getting _ctypes
# statically. # building statically.
#
# It seems that as of 3.11 it is not possible to do this through # It seems that as of 3.11 it is not possible to do this through
# Setup.stdlib.in like we do with our other stuff, as the line is # Setup.stdlib.in like we do with our other stuff, as the line is
# commented out and we get errors if we change that. Looks like # commented out and we get errors if we change that. Looks like its
# its not commented out anymore in 3.12 so we'll have to revisit # not commented out anymore in 3.12 so we'll have to revisit this
# this next year, but for now... hacks! # next year, but for now... hacks!
# To get this working for now we can dump an exact set of build flags # To get this working for now we can dump an exact set of build
# for _ctypes into the Setup.stdlib.in. We just need to provide those # flags for _ctypes into the Setup.stdlib.in. We just need to
# per-platform. So, to get those: # provide those per-platform. So, to get those:
#
# - Run 'vanilla' ios/android/etc Python builds which generate .so versions # - Run 'vanilla' ios/android/etc Python builds which generate .so versions
# - Look for the flags in the compiler command lines for those .c files # - Look for the flags in the compiler command lines for those .c files
# - Stuff those flags in here for the associated platform. # - Stuff those flags in here for the associated platform.
#
if baseplatform == 'android': if baseplatform == 'android':
ftxt = replace_exact( ftxt = replace_exact(
ftxt, ftxt,
@ -620,9 +739,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
' _ctypes/malloc_closure.c' ' _ctypes/malloc_closure.c'
' -I_ctypes/darwin' ' -I_ctypes/darwin'
f' -I$(srcdir)/../../../../merge/{archos}' f' -I$(srcdir)/../../../../merge/{archos}'
f'/{archbase}/libffi-3.4.2/include' f'/{archbase}/libffi-{LIBFFI_VER_APPLE}/include'
f' -L$(srcdir)/../../../../merge/{archos}' f' -L$(srcdir)/../../../../merge/{archos}'
f'/{archbase}/libffi-3.4.2/lib' f'/{archbase}/libffi-{LIBFFI_VER_APPLE}/lib'
' -DUSING_MALLOC_CLOSURE_DOT_C' ' -DUSING_MALLOC_CLOSURE_DOT_C'
' -DHAVE_FFI_PREP_CIF_VAR=1' ' -DHAVE_FFI_PREP_CIF_VAR=1'
' -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1' ' -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1'
@ -636,6 +755,7 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
# Seems makesetup still has a bug where *any* line containing an equals # Seems makesetup still has a bug where *any* line containing an equals
# gets interpreted as a global DEF instead of a target, which means our # gets interpreted as a global DEF instead of a target, which means our
# custom _ctypes lines above get ignored. Ugh. # custom _ctypes lines above get ignored. Ugh.
#
# To fix it we need to revert the *=* case to what it apparently used to # To fix it we need to revert the *=* case to what it apparently used to
# be: [A-Z]*=*. I wonder why this got changed and how has it not broken # be: [A-Z]*=*. I wonder why this got changed and how has it not broken
# tons of stuff? Maybe I'm missing something. # tons of stuff? Maybe I'm missing something.
@ -1093,11 +1213,13 @@ def gather(do_android: bool, do_apple: bool) -> None:
), ),
f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libssl.a', f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libssl.a',
f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libcrypto.a', f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libcrypto.a',
f'{bases2[base]}/xz-5.4.2/lib/liblzma.a', f'{bases2[base]}/xz-{XZ_VER_APPLE}/lib/liblzma.a',
f'{bases2[base]}/bzip2-1.0.8/lib/libbz2.a', f'{bases2[base]}/bzip2-{BZIP2_VER_APPLE}/lib/libbz2.a',
] ]
if base != 'mac': if base != 'mac':
out.append(f'{bases2[base]}/libffi-3.4.2/lib/libffi.a') out.append(
f'{bases2[base]}/libffi-{LIBFFI_VER_APPLE}/lib/libffi.a'
)
return out return out
def _android_libs(base: str) -> list[str]: def _android_libs(base: str) -> list[str]: