From 31ce93c5ad25743145293a9914f22bf7496f4281 Mon Sep 17 00:00:00 2001 From: Eric Froemling Date: Sat, 23 Oct 2021 14:22:47 -0500 Subject: [PATCH] Python 3.8 -> 3.9 --- .efrocachemap | 1252 ++--- .github/workflows/ci.yml | 6 +- .idea/ballisticacore.iml | 2 +- .idea/dictionaries/ericf.xml | 24 + .idea/misc.xml | 2 +- CHANGELOG.md | 4 +- assets/.asset_manifest_private.json | 3586 +++++++------- assets/.asset_manifest_public.json | 522 +-- assets/Makefile | 4118 +++++++++-------- assets/src/ba_data/python/._ba_sources_hash | 2 +- assets/src/ba_data/python/_ba.py | 99 +- assets/src/ba_data/python/ba/_account.py | 14 +- assets/src/ba_data/python/ba/_achievement.py | 20 +- assets/src/ba_data/python/ba/_activity.py | 35 +- .../src/ba_data/python/ba/_activitytypes.py | 2 +- assets/src/ba_data/python/ba/_app.py | 24 +- assets/src/ba_data/python/ba/_appconfig.py | 6 +- assets/src/ba_data/python/ba/_appdelegate.py | 6 +- assets/src/ba_data/python/ba/_apputils.py | 8 +- assets/src/ba_data/python/ba/_assetmanager.py | 9 +- assets/src/ba_data/python/ba/_benchmark.py | 6 +- assets/src/ba_data/python/ba/_campaign.py | 10 +- assets/src/ba_data/python/ba/_coopgame.py | 10 +- assets/src/ba_data/python/ba/_coopsession.py | 8 +- assets/src/ba_data/python/ba/_dependency.py | 17 +- assets/src/ba_data/python/ba/_error.py | 6 +- .../ba_data/python/ba/_freeforallsession.py | 5 +- assets/src/ba_data/python/ba/_gameactivity.py | 33 +- assets/src/ba_data/python/ba/_gameresults.py | 26 +- assets/src/ba_data/python/ba/_gameutils.py | 6 +- assets/src/ba_data/python/ba/_general.py | 11 +- assets/src/ba_data/python/ba/_hooks.py | 4 +- assets/src/ba_data/python/ba/_input.py | 6 +- assets/src/ba_data/python/ba/_keyboard.py | 8 +- assets/src/ba_data/python/ba/_language.py | 14 +- assets/src/ba_data/python/ba/_level.py | 17 +- assets/src/ba_data/python/ba/_lobby.py | 16 +- assets/src/ba_data/python/ba/_map.py | 20 +- assets/src/ba_data/python/ba/_math.py | 4 +- assets/src/ba_data/python/ba/_messages.py | 8 +- assets/src/ba_data/python/ba/_meta.py | 34 +- .../ba_data/python/ba/_multiteamsession.py | 18 +- assets/src/ba_data/python/ba/_music.py | 14 +- assets/src/ba_data/python/ba/_net.py | 14 +- assets/src/ba_data/python/ba/_player.py | 13 +- assets/src/ba_data/python/ba/_playlist.py | 10 +- assets/src/ba_data/python/ba/_plugin.py | 9 +- assets/src/ba_data/python/ba/_powerup.py | 4 +- assets/src/ba_data/python/ba/_profile.py | 8 +- assets/src/ba_data/python/ba/_servermode.py | 8 +- assets/src/ba_data/python/ba/_session.py | 12 +- assets/src/ba_data/python/ba/_settings.py | 8 +- assets/src/ba_data/python/ba/_stats.py | 15 +- assets/src/ba_data/python/ba/_store.py | 18 +- assets/src/ba_data/python/ba/_team.py | 15 +- assets/src/ba_data/python/ba/_teamgame.py | 4 +- assets/src/ba_data/python/ba/_tips.py | 8 +- assets/src/ba_data/python/ba/_tournament.py | 4 +- assets/src/ba_data/python/ba/_ui.py | 6 +- assets/src/ba_data/python/ba/macmusicapp.py | 6 +- assets/src/ba_data/python/ba/modutils.py | 2 +- assets/src/ba_data/python/ba/osmusic.py | 12 +- assets/src/ba_data/python/ba/ui/__init__.py | 13 +- .../ba_data/python/bastd/activity/coopjoin.py | 4 +- .../python/bastd/activity/coopscore.py | 18 +- .../python/bastd/activity/drawscore.py | 2 +- .../python/bastd/activity/dualteamscore.py | 2 +- .../bastd/activity/freeforallvictory.py | 6 +- .../python/bastd/activity/multiteamjoin.py | 2 +- .../python/bastd/activity/multiteamscore.py | 2 +- .../python/bastd/activity/multiteamvictory.py | 4 +- assets/src/ba_data/python/bastd/actor/bomb.py | 8 +- .../python/bastd/actor/controlsguide.py | 8 +- .../src/ba_data/python/bastd/actor/image.py | 8 +- .../ba_data/python/bastd/actor/playerspaz.py | 10 +- .../ba_data/python/bastd/actor/powerupbox.py | 6 +- .../ba_data/python/bastd/actor/respawnicon.py | 4 +- .../ba_data/python/bastd/actor/scoreboard.py | 4 +- assets/src/ba_data/python/bastd/actor/spaz.py | 13 +- .../python/bastd/actor/spazappearance.py | 20 +- .../src/ba_data/python/bastd/actor/spazbot.py | 20 +- .../ba_data/python/bastd/actor/spazfactory.py | 6 +- assets/src/ba_data/python/bastd/actor/text.py | 4 +- .../ba_data/python/bastd/actor/zoomtext.py | 12 +- .../src/ba_data/python/bastd/appdelegate.py | 6 +- .../src/ba_data/python/bastd/game/assault.py | 8 +- .../python/bastd/game/capturetheflag.py | 10 +- .../ba_data/python/bastd/game/chosenone.py | 6 +- .../src/ba_data/python/bastd/game/conquest.py | 8 +- .../ba_data/python/bastd/game/deathmatch.py | 8 +- .../python/bastd/game/easteregghunt.py | 10 +- .../ba_data/python/bastd/game/elimination.py | 21 +- .../src/ba_data/python/bastd/game/football.py | 32 +- .../src/ba_data/python/bastd/game/hockey.py | 10 +- .../src/ba_data/python/bastd/game/keepaway.py | 8 +- .../python/bastd/game/kingofthehill.py | 9 +- .../ba_data/python/bastd/game/meteorshower.py | 6 +- .../ba_data/python/bastd/game/ninjafight.py | 6 +- .../ba_data/python/bastd/game/onslaught.py | 46 +- assets/src/ba_data/python/bastd/game/race.py | 15 +- .../ba_data/python/bastd/game/runaround.py | 30 +- .../python/bastd/game/targetpractice.py | 10 +- .../ba_data/python/bastd/game/thelaststand.py | 12 +- assets/src/ba_data/python/bastd/gameutils.py | 2 +- .../python/bastd/keyboard/englishkeyboard.py | 10 +- assets/src/ba_data/python/bastd/mainmenu.py | 6 +- assets/src/ba_data/python/bastd/maps.py | 70 +- assets/src/ba_data/python/bastd/stdmap.py | 8 +- assets/src/ba_data/python/bastd/tutorial.py | 17 +- .../ba_data/python/bastd/ui/account/link.py | 6 +- .../python/bastd/ui/account/settings.py | 6 +- .../ba_data/python/bastd/ui/account/unlink.py | 6 +- .../ba_data/python/bastd/ui/account/viewer.py | 8 +- .../ba_data/python/bastd/ui/achievements.py | 4 +- .../src/ba_data/python/bastd/ui/appinvite.py | 10 +- .../python/bastd/ui/characterpicker.py | 6 +- .../ba_data/python/bastd/ui/colorpicker.py | 14 +- assets/src/ba_data/python/bastd/ui/config.py | 8 +- assets/src/ba_data/python/bastd/ui/confirm.py | 6 +- .../ba_data/python/bastd/ui/coop/browser.py | 26 +- .../python/bastd/ui/coop/gamebutton.py | 6 +- .../ba_data/python/bastd/ui/creditslist.py | 4 +- .../ba_data/python/bastd/ui/fileselector.py | 10 +- .../python/bastd/ui/gather/__init__.py | 11 +- .../python/bastd/ui/gather/manualtab.py | 4 +- .../python/bastd/ui/gather/nearbytab.py | 8 +- .../python/bastd/ui/gather/privatetab.py | 18 +- .../python/bastd/ui/gather/publictab.py | 18 +- .../ba_data/python/bastd/ui/getcurrency.py | 10 +- assets/src/ba_data/python/bastd/ui/helpui.py | 4 +- .../src/ba_data/python/bastd/ui/iconpicker.py | 6 +- .../python/bastd/ui/league/rankbutton.py | 18 +- .../python/bastd/ui/league/rankwindow.py | 12 +- .../src/ba_data/python/bastd/ui/mainmenu.py | 14 +- .../python/bastd/ui/onscreenkeyboard.py | 12 +- assets/src/ba_data/python/bastd/ui/party.py | 8 +- .../src/ba_data/python/bastd/ui/partyqueue.py | 10 +- assets/src/ba_data/python/bastd/ui/play.py | 8 +- .../python/bastd/ui/playlist/__init__.py | 6 +- .../python/bastd/ui/playlist/addgame.py | 6 +- .../python/bastd/ui/playlist/browser.py | 8 +- .../bastd/ui/playlist/customizebrowser.py | 12 +- .../ba_data/python/bastd/ui/playlist/edit.py | 4 +- .../bastd/ui/playlist/editcontroller.py | 22 +- .../python/bastd/ui/playlist/editgame.py | 22 +- .../python/bastd/ui/playlist/mapselect.py | 14 +- .../ba_data/python/bastd/ui/playlist/share.py | 6 +- .../ba_data/python/bastd/ui/playoptions.py | 8 +- assets/src/ba_data/python/bastd/ui/popup.py | 22 +- .../python/bastd/ui/profile/browser.py | 8 +- .../ba_data/python/bastd/ui/profile/edit.py | 16 +- .../python/bastd/ui/profile/upgrade.py | 4 +- .../src/ba_data/python/bastd/ui/promocode.py | 4 +- .../src/ba_data/python/bastd/ui/purchase.py | 6 +- .../src/ba_data/python/bastd/ui/radiogroup.py | 4 +- .../ba_data/python/bastd/ui/serverdialog.py | 4 +- .../python/bastd/ui/settings/advanced.py | 10 +- .../python/bastd/ui/settings/allsettings.py | 4 +- .../ba_data/python/bastd/ui/settings/audio.py | 4 +- .../python/bastd/ui/settings/controls.py | 4 +- .../python/bastd/ui/settings/gamepad.py | 18 +- .../bastd/ui/settings/gamepadadvanced.py | 14 +- .../python/bastd/ui/settings/gamepadselect.py | 4 +- .../python/bastd/ui/settings/graphics.py | 4 +- .../python/bastd/ui/settings/keyboard.py | 12 +- .../python/bastd/ui/settings/plugins.py | 8 +- .../python/bastd/ui/settings/testing.py | 6 +- .../python/bastd/ui/settings/vrtesting.py | 4 +- .../python/bastd/ui/soundtrack/browser.py | 12 +- .../python/bastd/ui/soundtrack/edit.py | 8 +- .../python/bastd/ui/soundtrack/macmusicapp.py | 4 +- .../ba_data/python/bastd/ui/specialoffer.py | 6 +- .../ba_data/python/bastd/ui/store/browser.py | 23 +- .../src/ba_data/python/bastd/ui/store/item.py | 6 +- assets/src/ba_data/python/bastd/ui/tabs.py | 14 +- .../python/bastd/ui/teamnamescolors.py | 10 +- .../python/bastd/ui/tournamententry.py | 8 +- .../python/bastd/ui/tournamentscores.py | 10 +- .../src/ba_data/python/bastd/ui/trophies.py | 8 +- assets/src/ba_data/python/bastd/ui/watch.py | 6 +- assets/src/server/ballisticacore_server.py | 14 +- .../.idea/dictionaries/ericf.xml | 23 + ballisticacore-cmake/CMakeLists.txt | 4 +- config/toolconfigsrc/pylintrc | 2 + docs/ba_module.md | 174 +- src/ballistica/ballistica.cc | 2 +- .../platform/windows/platform_windows.cc | 4 +- .../python/class/python_class_material.cc | 2 +- .../python/class/python_class_node.cc | 2 +- .../class/python_class_session_player.cc | 6 +- .../python/class/python_class_widget.cc | 4 +- .../python/methods/python_methods_app.cc | 6 +- .../python/methods/python_methods_gameplay.cc | 4 +- .../python/methods/python_methods_graphics.cc | 4 +- .../python/methods/python_methods_media.cc | 2 +- .../python/methods/python_methods_system.cc | 6 +- .../python/methods/python_methods_ui.cc | 4 +- src/ballistica/python/python.cc | 4 +- .../windows/include/python/Python-ast.h | 64 +- src/external/windows/include/python/Python.h | 16 +- .../windows/include/python/abstract.h | 8 +- src/external/windows/include/python/asdl.h | 4 +- src/external/windows/include/python/ast.h | 8 +- .../windows/include/python/boolobject.h | 2 +- .../windows/include/python/bytearrayobject.h | 24 +- .../windows/include/python/bytesobject.h | 152 +- .../windows/include/python/cellobject.h | 2 +- src/external/windows/include/python/ceval.h | 121 +- .../windows/include/python/classobject.h | 6 +- src/external/windows/include/python/code.h | 168 +- src/external/windows/include/python/compile.h | 14 +- .../windows/include/python/complexobject.h | 2 +- src/external/windows/include/python/context.h | 9 +- .../windows/include/python/cpython/abstract.h | 199 +- .../include/python/cpython/bytearrayobject.h | 20 + .../include/python/cpython/bytesobject.h | 118 + .../windows/include/python/cpython/ceval.h | 38 + .../windows/include/python/cpython/code.h | 165 + .../include/python/cpython/dictobject.h | 2 - .../include/python/cpython/fileobject.h | 8 - .../include/python/cpython/fileutils.h | 165 + .../include/python/cpython/frameobject.h | 84 + .../windows/include/python/cpython/import.h | 50 + .../include/python/cpython/initconfig.h | 34 +- .../include/python/cpython/listobject.h | 43 + .../include/python/cpython/methodobject.h | 35 + .../windows/include/python/cpython/object.h | 154 +- .../windows/include/python/cpython/objimpl.h | 152 +- .../windows/include/python/cpython/pyerrors.h | 24 +- .../include/python/cpython/pylifecycle.h | 10 +- .../windows/include/python/cpython/pystate.h | 37 +- .../include/python/cpython/sysmodule.h | 5 +- .../include/python/cpython/traceback.h | 2 +- .../include/python/cpython/unicodeobject.h | 74 +- .../windows/include/python/datetime.h | 10 +- .../windows/include/python/dictobject.h | 2 +- src/external/windows/include/python/errcode.h | 1 - src/external/windows/include/python/exports.h | 30 + .../windows/include/python/fileobject.h | 7 + .../windows/include/python/fileutils.h | 161 +- .../windows/include/python/floatobject.h | 14 +- .../windows/include/python/frameobject.h | 84 +- .../windows/include/python/funcobject.h | 8 +- .../include/python/genericaliasobject.h | 14 + .../windows/include/python/genobject.h | 23 +- src/external/windows/include/python/import.h | 57 +- .../include/python/internal/pegen_interface.h | 46 + .../include/python/internal/pycore_abstract.h | 22 + .../include/python/internal/pycore_atomic.h | 3 +- .../pycore_bytes_methods.h} | 4 + .../include/python/internal/pycore_byteswap.h | 88 + .../include/python/internal/pycore_call.h | 39 + .../include/python/internal/pycore_ceval.h | 117 +- .../include/python/internal/pycore_context.h | 2 +- .../python/{dtoa.h => internal/pycore_dtoa.h} | 12 +- .../python/internal/pycore_fileutils.h | 12 + .../include/python/internal/pycore_gc.h | 179 + .../include/python/internal/pycore_gil.h | 4 +- .../include/python/internal/pycore_hamt.h | 2 +- .../python/internal/pycore_hashtable.h | 148 + .../include/python/internal/pycore_import.h | 22 + .../python/internal/pycore_initconfig.h | 9 +- .../include/python/internal/pycore_interp.h | 192 + .../include/python/internal/pycore_object.h | 49 +- .../python/internal/pycore_pathconfig.h | 7 +- .../include/python/internal/pycore_pyerrors.h | 30 +- .../python/internal/pycore_pylifecycle.h | 68 +- .../include/python/internal/pycore_pymem.h | 170 +- .../include/python/internal/pycore_pystate.h | 320 +- .../include/python/internal/pycore_runtime.h | 144 + .../python/internal/pycore_sysmodule.h | 24 + .../python/internal/pycore_traceback.h | 7 +- .../python/internal/pycore_tupleobject.h | 2 +- .../include/python/internal/pycore_warnings.h | 4 +- .../windows/include/python/iterobject.h | 5 +- .../windows/include/python/listobject.h | 61 +- .../windows/include/python/longobject.h | 4 +- .../windows/include/python/memoryobject.h | 2 +- .../windows/include/python/methodobject.h | 71 +- .../windows/include/python/modsupport.h | 7 + .../windows/include/python/moduleobject.h | 2 +- src/external/windows/include/python/node.h | 1 - src/external/windows/include/python/object.h | 289 +- src/external/windows/include/python/objimpl.h | 111 +- .../windows/include/python/odictobject.h | 2 +- src/external/windows/include/python/opcode.h | 28 +- .../windows/include/python/patchlevel.h | 6 +- .../windows/include/python/picklebufobject.h | 2 +- .../windows/include/python/py_curses.h | 3 +- .../windows/include/python/pycapsule.h | 2 +- .../windows/include/python/pyconfig.h | 20 +- src/external/windows/include/python/pyctype.h | 6 + src/external/windows/include/python/pydebug.h | 2 - .../windows/include/python/pyerrors.h | 27 +- src/external/windows/include/python/pyfpe.h | 3 + src/external/windows/include/python/pyframe.h | 22 + src/external/windows/include/python/pyhash.h | 4 +- .../windows/include/python/pylifecycle.h | 2 + src/external/windows/include/python/pymacro.h | 28 +- src/external/windows/include/python/pymath.h | 10 +- src/external/windows/include/python/pymem.h | 35 - src/external/windows/include/python/pyport.h | 86 +- src/external/windows/include/python/pystate.h | 24 +- .../windows/include/python/pythonrun.h | 17 +- .../windows/include/python/pythread.h | 18 +- .../windows/include/python/rangeobject.h | 2 +- .../windows/include/python/setobject.h | 11 +- .../windows/include/python/sliceobject.h | 2 +- .../windows/include/python/structseq.h | 2 +- .../windows/include/python/symtable.h | 2 +- src/external/windows/include/python/token.h | 4 + .../windows/include/python/traceback.h | 6 +- .../windows/include/python/tupleobject.h | 4 +- .../windows/include/python/typeslots.h | 5 + .../windows/include/python/unicodeobject.h | 13 +- .../windows/include/python/weakrefobject.h | 6 +- src/external/windows/lib/Win32/python38.lib | Bin 364100 -> 0 bytes src/external/windows/lib/Win32/python38_d.lib | Bin 368706 -> 0 bytes src/external/windows/lib/Win32/python39.lib | Bin 0 -> 369566 bytes src/external/windows/lib/Win32/python39_d.lib | Bin 0 -> 373976 bytes src/external/windows/lib/x64/python38.lib | Bin 356214 -> 0 bytes src/external/windows/lib/x64/python38_d.lib | Bin 360790 -> 0 bytes src/external/windows/lib/x64/python39.lib | Bin 0 -> 361556 bytes src/external/windows/lib/x64/python39_d.lib | Bin 0 -> 365940 bytes src/meta/bameta/python_embedded/binding.py | 4 +- src/meta/bameta/python_embedded/bootstrap.py | 4 +- tests/test_efro/test_dataclassio.py | 46 +- tests/test_efro/test_message.py | 6 +- tools/bacloud | 46 +- tools/bacommon/assets.py | 8 +- tools/bacommon/net.py | 14 +- tools/bacommon/servermanager.py | 18 +- tools/batools/android.py | 2 +- tools/batools/androidsdkutils.py | 4 +- tools/batools/assetsmakefile.py | 32 +- tools/batools/assetstaging.py | 14 +- tools/batools/build.py | 29 +- tools/batools/docs.py | 113 +- tools/batools/dummymodule.py | 33 +- tools/batools/meta.py | 2 +- tools/batools/metamakefile.py | 28 +- tools/batools/pcommand.py | 19 +- tools/batools/project.py | 38 +- tools/batools/pythonenumsmodule.py | 14 +- tools/batools/resourcesmakefile.py | 44 +- tools/batools/xcode.py | 4 +- tools/efro/dataclassio/__init__.py | 6 +- tools/efro/dataclassio/_base.py | 15 +- tools/efro/dataclassio/_inputter.py | 26 +- tools/efro/dataclassio/_outputter.py | 14 +- tools/efro/dataclassio/_pathcapture.py | 10 +- tools/efro/dataclassio/_prep.py | 29 +- tools/efro/dataclassio/extras.py | 4 +- tools/efro/message.py | 49 +- tools/efro/terminal.py | 6 +- tools/efro/util.py | 61 +- tools/efrotools/__init__.py | 14 +- tools/efrotools/android.py | 6 +- tools/efrotools/code.py | 68 +- tools/efrotools/efrocache.py | 34 +- tools/efrotools/filecache.py | 8 +- tools/efrotools/jsontools.py | 4 +- tools/efrotools/makefile.py | 20 +- tools/efrotools/message.py | 2 +- tools/efrotools/pcommand.py | 12 +- tools/efrotools/pybuild.py | 669 ++- tools/efrotools/pylintplugins.py | 6 +- tools/efrotools/statictest.py | 12 +- tools/efrotools/sync.py | 12 +- tools/pcommand | 14 +- 370 files changed, 9722 insertions(+), 8713 deletions(-) create mode 100755 src/external/windows/include/python/cpython/bytearrayobject.h create mode 100755 src/external/windows/include/python/cpython/bytesobject.h create mode 100755 src/external/windows/include/python/cpython/ceval.h create mode 100755 src/external/windows/include/python/cpython/code.h create mode 100755 src/external/windows/include/python/cpython/fileutils.h create mode 100755 src/external/windows/include/python/cpython/frameobject.h create mode 100755 src/external/windows/include/python/cpython/import.h create mode 100755 src/external/windows/include/python/cpython/listobject.h create mode 100755 src/external/windows/include/python/cpython/methodobject.h create mode 100755 src/external/windows/include/python/exports.h create mode 100755 src/external/windows/include/python/genericaliasobject.h create mode 100755 src/external/windows/include/python/internal/pegen_interface.h create mode 100755 src/external/windows/include/python/internal/pycore_abstract.h rename src/external/windows/include/python/{bytes_methods.h => internal/pycore_bytes_methods.h} (95%) create mode 100755 src/external/windows/include/python/internal/pycore_byteswap.h create mode 100755 src/external/windows/include/python/internal/pycore_call.h rename src/external/windows/include/python/{dtoa.h => internal/pycore_dtoa.h} (63%) create mode 100755 src/external/windows/include/python/internal/pycore_gc.h create mode 100755 src/external/windows/include/python/internal/pycore_hashtable.h create mode 100755 src/external/windows/include/python/internal/pycore_import.h create mode 100755 src/external/windows/include/python/internal/pycore_interp.h create mode 100755 src/external/windows/include/python/internal/pycore_runtime.h create mode 100755 src/external/windows/include/python/internal/pycore_sysmodule.h create mode 100755 src/external/windows/include/python/pyframe.h delete mode 100755 src/external/windows/lib/Win32/python38.lib delete mode 100755 src/external/windows/lib/Win32/python38_d.lib create mode 100755 src/external/windows/lib/Win32/python39.lib create mode 100755 src/external/windows/lib/Win32/python39_d.lib delete mode 100755 src/external/windows/lib/x64/python38.lib delete mode 100755 src/external/windows/lib/x64/python38_d.lib create mode 100755 src/external/windows/lib/x64/python39.lib create mode 100755 src/external/windows/lib/x64/python39_d.lib diff --git a/.efrocachemap b/.efrocachemap index 78116cb7..82a8a610 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -942,8 +942,8 @@ "assets/build/ba_data/models/zoeUpperArm.bob": "https://files.ballistica.net/cache/ba1/99/38/b7694cae0804260eeb337aa1676a", "assets/build/ba_data/models/zoeUpperLeg.bob": "https://files.ballistica.net/cache/ba1/83/4f/28b2202d0109fa93272c0b09fa2d", "assets/build/ba_data/python-site-packages/_yaml/__init__.py": "https://files.ballistica.net/cache/ba1/0d/45/65ba92f51d411dcffac8835b6130", - "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/27/4d/9039ffb4ca5b8110c8f60ad9f1be", - "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/1f/8b/c96eb78c4b648a6c64c7f41c4fe7", + "assets/build/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/26/a1/b771d51fc1cc475cf1f44f9d43d2", + "assets/build/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/e5/47/17715ca7620f3b9749558b9dcb2d", "assets/build/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/3e/aa/d7fcfc4707ad19a6964d72654b82", "assets/build/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/f4/29/cd8c7f5a2296d8f1715ad49b5797", "assets/build/ba_data/python-site-packages/yaml/cyaml.py": "https://files.ballistica.net/cache/ba1/b4/98/dcdd4c31e2ff2c7a938170694020", @@ -955,9 +955,9 @@ "assets/build/ba_data/python-site-packages/yaml/nodes.py": "https://files.ballistica.net/cache/ba1/e5/f1/1d2e0edb5460dff0ebb10a92fe24", "assets/build/ba_data/python-site-packages/yaml/parser.py": "https://files.ballistica.net/cache/ba1/c0/a6/e94c7a3f8f4f08803f68f9387731", "assets/build/ba_data/python-site-packages/yaml/reader.py": "https://files.ballistica.net/cache/ba1/0d/58/9196a3104da22ed15afe27f67387", - "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/95/90/c33c15a683b8d5de614d15031818", - "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/8c/fc/fe9be1f19e7b648822029c0dc946", - "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/58/be/e6e039c64bf30d0f13aa4d02e2cb", + "assets/build/ba_data/python-site-packages/yaml/representer.py": "https://files.ballistica.net/cache/ba1/81/c0/f24b6b2f2c777f9467bd24aa2789", + "assets/build/ba_data/python-site-packages/yaml/resolver.py": "https://files.ballistica.net/cache/ba1/e6/98/e6145dd5cfebbc456fb3881ce523", + "assets/build/ba_data/python-site-packages/yaml/scanner.py": "https://files.ballistica.net/cache/ba1/de/13/75284ee45274f24637d9c79bd0cb", "assets/build/ba_data/python-site-packages/yaml/serializer.py": "https://files.ballistica.net/cache/ba1/19/a9/f996e312d2ca2d4cb974bcc4f5bc", "assets/build/ba_data/python-site-packages/yaml/tokens.py": "https://files.ballistica.net/cache/ba1/93/58/d4c7731a1b991391782441f2ba8e", "assets/build/ba_data/textures/achievementBoxer.dds": "https://files.ballistica.net/cache/ba1/26/16/f3926c9f3aeb22efa0d452daa6c0", @@ -2566,123 +2566,124 @@ "assets/build/ba_data/textures/zoeIcon_preview.png": "https://files.ballistica.net/cache/ba1/e2/af/ab381c9d7242aedf8535fc90252f", "assets/build/pylib-android/__future__.py": "https://files.ballistica.net/cache/ba1/80/bf/b80a51b6855fbbc2f19773334c68", "assets/build/pylib-android/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/18/38/a9706423d7445928a1c07345b100", + "assets/build/pylib-android/_aix_support.py": "https://files.ballistica.net/cache/ba1/39/0c/1c9160bcc27e235d50cc1148efee", "assets/build/pylib-android/_bootlocale.py": "https://files.ballistica.net/cache/ba1/42/c3/38a2d6f5e2467c1cab04a024c2ca", - "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/5d/e8/8af7f48ff8e0cf88e87339221869", + "assets/build/pylib-android/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/bc/ce/d576eeb751cae56049dc067454fa", + "assets/build/pylib-android/_collections_abc.py": "https://files.ballistica.net/cache/ba1/8c/9f/9e922a064c6191378bdee54f34b3", "assets/build/pylib-android/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/03/70/f2d2ed965337f8ed80f6fffb37e1", "assets/build/pylib-android/_compression.py": "https://files.ballistica.net/cache/ba1/93/7f/56c3fd789058399b898c5c527b92", - "assets/build/pylib-android/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/5b/a5/82c6ed2ef16974f8cfd5ee2e11f6", "assets/build/pylib-android/_markupbase.py": "https://files.ballistica.net/cache/ba1/a5/5e/6ad43bfbcd054529b852fa9d9919", - "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/1a/dd/18c02bae9dd4e2b651071dd0e606", + "assets/build/pylib-android/_osx_support.py": "https://files.ballistica.net/cache/ba1/19/10/b2eeaf44e153de1cedba97bd5051", "assets/build/pylib-android/_py_abc.py": "https://files.ballistica.net/cache/ba1/5d/06/d6095f475b0d26f707d3d7484080", "assets/build/pylib-android/_pydecimal.py": "https://files.ballistica.net/cache/ba1/a5/4c/6fb8db34dfeb6c44bf18d555970d", - "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/30/f3/9c14ceae8041894ae6914467ba66", + "assets/build/pylib-android/_pyio.py": "https://files.ballistica.net/cache/ba1/47/02/ffbf1575c6b449408f8f42d31333", "assets/build/pylib-android/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/6d/7a/d76775d8f9d27c45135ca654dfd0", - "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/2d/6d/ec0a63b650f5c5fdaf7a1b65ae8f", + "assets/build/pylib-android/_strptime.py": "https://files.ballistica.net/cache/ba1/03/b9/20bbd93982e9d620d42cacd1f4a2", "assets/build/pylib-android/_threading_local.py": "https://files.ballistica.net/cache/ba1/da/4d/144f886b39ebc097fdcea22eecc8", - "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/5a/9d/765a6159b6db54bbffc249e35833", - "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/46/99/e17cba0561b17a01327a35cd1aa6", - "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/8a/d6/25bd39b0581236a85b096ba3fe9d", - "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/83/cf/9d1698d68e0e260e6bbefec5a516", - "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/cd/3b/9fdf463eacafdba271d8fe1d9b2d", - "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/c7/5b/fa7fdcd6fe651e33b42e57ef827d", - "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/5e/b1/f69db224de08b5e119f5c0f425a8", - "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/37/de/1740d5e10a554f64af0a2ddc4659", + "assets/build/pylib-android/_weakrefset.py": "https://files.ballistica.net/cache/ba1/51/e9/e3d953fd714d8b74c65b708529d7", + "assets/build/pylib-android/abc.py": "https://files.ballistica.net/cache/ba1/76/7f/fd3c1563b90c10a38a3b928a4561", + "assets/build/pylib-android/aifc.py": "https://files.ballistica.net/cache/ba1/e4/58/a75af0c597af1ed6a69b0d0408f3", + "assets/build/pylib-android/antigravity.py": "https://files.ballistica.net/cache/ba1/bc/5c/f8951b7abdac55a1a32d74b2fe50", + "assets/build/pylib-android/argparse.py": "https://files.ballistica.net/cache/ba1/3f/f5/1c9d4af0fc412ddf1bda25f71a83", + "assets/build/pylib-android/ast.py": "https://files.ballistica.net/cache/ba1/11/a5/3bb16498856560ba19c04de3f8b7", + "assets/build/pylib-android/asynchat.py": "https://files.ballistica.net/cache/ba1/d6/a8/6fc59418c10885c853214296ed0f", + "assets/build/pylib-android/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/67/2e/d4b9d05e7bcc794891d36d72f374", "assets/build/pylib-android/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/00/05/038811ebbd5ac847aaf99cd8f2f9", - "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/80/d1/0975e5cb364d63f1f85136bc4d80", + "assets/build/pylib-android/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/06/81/3de85c867aeb41289899dae318ba", "assets/build/pylib-android/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/89/ee/3f980b3d7b480c7fe3d34ff876f5", "assets/build/pylib-android/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/72/c7/ccf47dbfa076fdf5dd38474a18dc", "assets/build/pylib-android/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/f0/b8/3f75f12f1851216b9a16772dfa63", "assets/build/pylib-android/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/b6/63/66f781190cbd10a134616e67b516", "assets/build/pylib-android/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/72/cd/f838323eebe2eeb8f5ea19e5cebe", - "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/a7/1e/c69f462b1a03515672da486b7a6a", + "assets/build/pylib-android/asyncio/events.py": "https://files.ballistica.net/cache/ba1/7e/f3/ceda680f5774ed662e390ae921b6", "assets/build/pylib-android/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/aa/89/66db5cb3f71048a541224585f7fa", "assets/build/pylib-android/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/ff/c2/2be0f7aa8dc71aa3a7cee83ed5c7", - "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/f1/da/2eff642e6a966b374b29361dfbb2", - "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/07/0b/a37203e779cbd3b3fdf825a36849", + "assets/build/pylib-android/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/12/40/3addb145116d4e92d000f98194c9", + "assets/build/pylib-android/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/6e/c9/538a1d250e50f50e55ac69c52e35", "assets/build/pylib-android/asyncio/log.py": "https://files.ballistica.net/cache/ba1/da/7f/235e1251f8838a239dd3ec9e78c3", - "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ae/7f/8b19b4c9d52569b3bdd311e8c799", + "assets/build/pylib-android/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/2f/97/dae8fa67cd41720ced451008903d", "assets/build/pylib-android/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/0d/2f/e3e6c48d73836172a211a6c39e68", - "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/1c/69/6d73ee2286d3dbce70990a8ff174", - "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/1b/f3/d9efb6ae310d983d86bb5de9d054", - "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/d8/21/a266891b38ae68414a3c1b6b3c77", - "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ce/51/b4dc2c5750d26233aabbbfec3946", + "assets/build/pylib-android/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/87/f8/59d89a44c83648f33bea5bd227de", + "assets/build/pylib-android/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/f1/d0/413dbcfc7ab91c3ae994a9293393", + "assets/build/pylib-android/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/c0/0f/e91ef4410b579485267434c76135", + "assets/build/pylib-android/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/ca/7c/7f8716eab3ad1ba5fea281191348", "assets/build/pylib-android/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/f5/44/45851798434a9265934b4bb83368", "assets/build/pylib-android/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/92/0c/884950c0c3a32bc5d2b763ca0044", "assets/build/pylib-android/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/5f/44/b98545e4c3c4c178f8e6d1615413", - "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/bf/1a/caa31af401c2cc53c5f01b750c80", + "assets/build/pylib-android/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/5d/80/66b7034f9d2251cdb392c2d441f7", + "assets/build/pylib-android/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/86/be/92839ce16818b1b99703722fbfb7", "assets/build/pylib-android/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/58/72/582cdbbc0857f836dc8c4edbf036", "assets/build/pylib-android/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/52/c8/e4d2abe8aaccd35c8f79d5b77431", - "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/84/8b/185c2457814e6ca8e8688bca9c32", - "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/4b/1a/1b264ab96fcca89e3eb8fe2614de", + "assets/build/pylib-android/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7c/3a/6b387c2ccf1cdee0f2e9f70cba5c", + "assets/build/pylib-android/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/7e/62/f3ff97fc2327e3721319f9fed5dc", "assets/build/pylib-android/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/2d/e4/dbd2379dd123a69aae5aa15ae6c2", - "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/a7/5c/f528090ab4472aff3c8798cf42c9", - "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/4f/23/c5419203b2ccd1ae27fd49d2cc56", - "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/ae/3f/acdf9e655546d96a28c484506fe9", - "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/f1/dd/52f057bf1cd0eb01f4f7ae65bab7", - "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/e3/4e/c40a30927372b6b745aec7954d0d", - "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/8d/d6/d0ff69f6690ab56e45f7277abec0", - "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/88/c3/5db4369b421e58fd76e20d9d6006", + "assets/build/pylib-android/asyncore.py": "https://files.ballistica.net/cache/ba1/3a/30/852801d56e50eb8542399bb88ddb", + "assets/build/pylib-android/base64.py": "https://files.ballistica.net/cache/ba1/00/7f/66fcd92eefbc601aac11a99958a6", + "assets/build/pylib-android/bdb.py": "https://files.ballistica.net/cache/ba1/a0/58/9e40fcb457a4088bbaa52f1d11f5", + "assets/build/pylib-android/binhex.py": "https://files.ballistica.net/cache/ba1/4b/e7/63c6bfa21977b4167847714df8f2", + "assets/build/pylib-android/bisect.py": "https://files.ballistica.net/cache/ba1/5f/7d/0658f581d095e98da05a4e69526d", + "assets/build/pylib-android/bz2.py": "https://files.ballistica.net/cache/ba1/27/9f/581d95a46fee8d4391e22906e7c4", + "assets/build/pylib-android/cProfile.py": "https://files.ballistica.net/cache/ba1/c2/f9/c4bdc9b8caf07e4f005b01c42187", "assets/build/pylib-android/calendar.py": "https://files.ballistica.net/cache/ba1/52/59/c3f74ff2b6e664611af5f319f125", - "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/61/ce/9797194be01655e63ab2bf04db74", + "assets/build/pylib-android/cgi.py": "https://files.ballistica.net/cache/ba1/37/ed/4b4511a9ba0149265b8e54a8c0c2", "assets/build/pylib-android/cgitb.py": "https://files.ballistica.net/cache/ba1/44/fd/df9a22db6689da108e526e794e62", "assets/build/pylib-android/chunk.py": "https://files.ballistica.net/cache/ba1/f6/fe/3c43d1dc84ee74b8a170c61271a3", "assets/build/pylib-android/cmd.py": "https://files.ballistica.net/cache/ba1/f0/d9/8cec4bcbbfd195d46c3ad637df71", "assets/build/pylib-android/code.py": "https://files.ballistica.net/cache/ba1/7a/a4/ee660f11ad995354a3b21efbfb1c", - "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/46/7d/c9abbb72640e0270d05373ca097d", - "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/4a/36/f4618c8f8239611208f9fa60d677", - "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/20/79/d937c7f2b0121cda43113792991b", - "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/29/45/a03469c0f5eb61d823b277d547ce", + "assets/build/pylib-android/codecs.py": "https://files.ballistica.net/cache/ba1/e0/79/8b6dc0aaec7e5cf8a6a1e4240589", + "assets/build/pylib-android/codeop.py": "https://files.ballistica.net/cache/ba1/77/32/e76951f85328659e11f528f5c9b1", + "assets/build/pylib-android/collections/__init__.py": "https://files.ballistica.net/cache/ba1/53/9b/0aea4ac41c020b051cb22e770125", + "assets/build/pylib-android/collections/abc.py": "https://files.ballistica.net/cache/ba1/f3/59/731e8f57c99391bcb31da8916e19", "assets/build/pylib-android/colorsys.py": "https://files.ballistica.net/cache/ba1/d6/3b/b932055a535b017694e91296168c", - "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/e5/57/2b92b857953e59824989ede82453", + "assets/build/pylib-android/compileall.py": "https://files.ballistica.net/cache/ba1/0b/80/a5a17eb2090a3cf316bca074ac2d", "assets/build/pylib-android/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/37/3e/87f9ab4111608e0442bc82ff572f", "assets/build/pylib-android/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/0a/eb/2954f0e71c4a1e71db5c13548aec", - "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/fc/07/2434cb1efcfdb8e396d2673d87e3", - "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/a7/6e/a824dd0ccc5c3358e146fa4a143e", - "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/b3/8ff0e8ddfd8ef4c2b65789015c0d", - "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/a2/cb/c077f4497d47011a41fb761da7e6", - "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/9b/d5/72f4ba522348c8680098a35fed99", + "assets/build/pylib-android/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/b1/82/05c05bd5c9380f474f0cf71226e9", + "assets/build/pylib-android/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/ab/d3/505d91ad1cc1b32e993db80b056a", + "assets/build/pylib-android/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/41/a0/be5b131d8b9637e24c53b3d4d941", + "assets/build/pylib-android/configparser.py": "https://files.ballistica.net/cache/ba1/9c/f1/4f2aa888868fbedfbb0b1ea69697", + "assets/build/pylib-android/contextlib.py": "https://files.ballistica.net/cache/ba1/46/42/98646a3bef36f2d81c3d19751cf5", "assets/build/pylib-android/contextvars.py": "https://files.ballistica.net/cache/ba1/ed/ff/2f1089520caf4910564799a71d33", "assets/build/pylib-android/copy.py": "https://files.ballistica.net/cache/ba1/2a/08/2626c3ca9b69eeea292688b30d87", - "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/51/04/65c5689a2508a440fac7c453d907", - "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/a0/da/1dbb9eefae96fdac2bf0f2aed3a9", + "assets/build/pylib-android/copyreg.py": "https://files.ballistica.net/cache/ba1/3b/a6/aace95b2ea3f1a717217f013147a", + "assets/build/pylib-android/crypt.py": "https://files.ballistica.net/cache/ba1/bf/26/6a8ef29965b7a22c9a5ad042b8b0", "assets/build/pylib-android/csv.py": "https://files.ballistica.net/cache/ba1/4e/8b/5ec41815afbc80e90562abf06b28", - "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/e3/e2/3ef58f0ffbf1e44f2290e7afb507", + "assets/build/pylib-android/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/71/ad/62f870b48def255b2904695874b9", "assets/build/pylib-android/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/7b/ab/15a8d673206dbd15b7803f83ff58", "assets/build/pylib-android/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/4c/82/46e7f99faf6d1fac55192c5d06e1", "assets/build/pylib-android/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/44/d7/a915d5da7e8ef1030b43bb9b51ab", - "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/ac/b9/6cd503c12b34f6e72d90ca811910", + "assets/build/pylib-android/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/f9/66/e601b611dac985d7a89b84e739ba", "assets/build/pylib-android/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/70/15/1df06874f788afb7b6742a5812a7", "assets/build/pylib-android/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/86/80/861e32730cec812366d7d06f6185", "assets/build/pylib-android/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c5/37/5bc64177f2b03f1b240712b330d5", "assets/build/pylib-android/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/48/c4/069f51da9b065dad73b199acb71b", - "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/8a/96/a0fc5582125f7ebd8f3df4c15ebb", + "assets/build/pylib-android/curses/__init__.py": "https://files.ballistica.net/cache/ba1/0e/8e/5e9ad5cbe8d8e09a61e5c186ccfb", "assets/build/pylib-android/curses/ascii.py": "https://files.ballistica.net/cache/ba1/d9/f8/0a6587dae44d1694145b0dc96bc1", "assets/build/pylib-android/curses/has_key.py": "https://files.ballistica.net/cache/ba1/a0/10/afbfbd5688090da7ea41e933174b", "assets/build/pylib-android/curses/panel.py": "https://files.ballistica.net/cache/ba1/42/0f/580d5d6de90a64ade37f0a8e4696", "assets/build/pylib-android/curses/textpad.py": "https://files.ballistica.net/cache/ba1/a9/3f/ac729e39c1c9fcecd8e3525c7079", - "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/97/c8/24628bf4207b0ee2e29c1cd63fcf", - "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/4b/89/2740b22a3597dab5c0330ac7c873", + "assets/build/pylib-android/dataclasses.py": "https://files.ballistica.net/cache/ba1/83/99/bcc67a14754749cc642d39501b17", + "assets/build/pylib-android/datetime.py": "https://files.ballistica.net/cache/ba1/e3/8a/1b743748792565d1f06cc091bdf3", "assets/build/pylib-android/decimal.py": "https://files.ballistica.net/cache/ba1/92/94/b8be378718b3ede8f05f07aa257b", - "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/bb/cf/6db21f4ed1982a8ee1337e12a8c1", + "assets/build/pylib-android/difflib.py": "https://files.ballistica.net/cache/ba1/f9/a1/b70c1219881180dc79b788e0f944", "assets/build/pylib-android/dis.py": "https://files.ballistica.net/cache/ba1/7a/6d/8e0820eb6e975bc167a722d30b42", - "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/f7/33/cce48fd34ce6f6054e40c338c3ca", - "assets/build/pylib-android/dummy_threading.py": "https://files.ballistica.net/cache/ba1/20/2f/ec8e68634908312148b53a5dfd4c", + "assets/build/pylib-android/doctest.py": "https://files.ballistica.net/cache/ba1/15/e2/3f23edc4eb1292aae2efae3dd23b", "assets/build/pylib-android/email/__init__.py": "https://files.ballistica.net/cache/ba1/2b/f0/8c85ab15e7cdbdaa0e1705223012", "assets/build/pylib-android/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/08/fa/de22bc96e1e332bbe1cf76162a1c", "assets/build/pylib-android/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/2d/c8/cbec982a4900ba1c15ea815624d7", - "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/e0/b3/b0167200b852c46e60116ba12740", + "assets/build/pylib-android/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/c5/43/98a45ca46ee9948447cfc4a23966", "assets/build/pylib-android/email/_policybase.py": "https://files.ballistica.net/cache/ba1/19/f9/844a8a848bc5670a810d06f0a6de", "assets/build/pylib-android/email/base64mime.py": "https://files.ballistica.net/cache/ba1/6b/52/907171fcf7e3baf097a4d503d79c", "assets/build/pylib-android/email/charset.py": "https://files.ballistica.net/cache/ba1/a0/ba/c0b3f8daa9769adb9ba291937736", - "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/d6/da/4125ae899a328aa5a3ddccb81cde", + "assets/build/pylib-android/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/de/89/2d4ea4cf8a5de335f1f8cb9336b9", "assets/build/pylib-android/email/encoders.py": "https://files.ballistica.net/cache/ba1/7a/9c/eca8d9e60fa733457fc32facd2fe", "assets/build/pylib-android/email/errors.py": "https://files.ballistica.net/cache/ba1/8c/69/09c2e89bad6d5619cd4758db6bdd", "assets/build/pylib-android/email/feedparser.py": "https://files.ballistica.net/cache/ba1/98/6d/61c614d442ca8451320ca7fe4e86", "assets/build/pylib-android/email/generator.py": "https://files.ballistica.net/cache/ba1/f6/2c/862c0a2aa12d0e1c0ce1ca305299", "assets/build/pylib-android/email/header.py": "https://files.ballistica.net/cache/ba1/bb/cb/194570894c14063cd85ea2d8ab6a", - "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/44/93/a6b7f9a32043296668473e21997e", + "assets/build/pylib-android/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/a7/ba/ff572e4fa01850100bd81c198d7c", "assets/build/pylib-android/email/iterators.py": "https://files.ballistica.net/cache/ba1/a5/02/2f56787a3fb91547c61284d7facd", - "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/26/48/c2ba775069f07f9980dd7ba388dc", + "assets/build/pylib-android/email/message.py": "https://files.ballistica.net/cache/ba1/5d/5f/3a462d2034f763839e73f4286d85", "assets/build/pylib-android/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/42/fb/835abe12a4e1e72a5d1711d12cde", "assets/build/pylib-android/email/mime/application.py": "https://files.ballistica.net/cache/ba1/47/49/cb957a7a159b5f2259115b7ea27a", "assets/build/pylib-android/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/67/1e/7ba0091888a55ada476f1300e686", @@ -2695,9 +2696,9 @@ "assets/build/pylib-android/email/parser.py": "https://files.ballistica.net/cache/ba1/56/8f/cfad8593bd540c4c2d1b9ab9e133", "assets/build/pylib-android/email/policy.py": "https://files.ballistica.net/cache/ba1/a9/f3/301e5f1e73bed7a7bfa4a113ab14", "assets/build/pylib-android/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/aa/32/7c1d81e4b7b757020947292f4031", - "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/c2/f9/e2479bbc1b5957383614e197daf3", + "assets/build/pylib-android/email/utils.py": "https://files.ballistica.net/cache/ba1/1a/93/a810d9f240ad2bdfff06495cbc6c", "assets/build/pylib-android/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/dc/1a/1120389aa62a70fd5a669cab1dfc", - "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/4c/10/6d8dd88e91acce8b8ad99b2f3fdf", + "assets/build/pylib-android/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6e/5c/2f911ed1bbeec1fce518171c32bc", "assets/build/pylib-android/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/f6/30/d35b4c5d478856f618208177d679", "assets/build/pylib-android/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/7f/03/88c0997433cffad3d142857389b8", "assets/build/pylib-android/encodings/big5.py": "https://files.ballistica.net/cache/ba1/3c/a3/0310d813b4a6822b0affdec62f00", @@ -2784,7 +2785,6 @@ "assets/build/pylib-android/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/0e/48/fc8cea0eb08e128d18afbd21bc40", "assets/build/pylib-android/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/be/e2/98028955fa7784eabd731554df96", "assets/build/pylib-android/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/4e/3d/c348df138dd892e764c653a5e3ad", - "assets/build/pylib-android/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6a/d1/bb0368df7e95ca42a8fc484ca463", "assets/build/pylib-android/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/1c/2e050fc360dc363d976321d0196b", "assets/build/pylib-android/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/ce/05/72375c004b9fbce45e1ae2ed9fa3", "assets/build/pylib-android/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/fb/60/2864afabbe0f4ef2d0da202b40d8", @@ -2819,283 +2819,290 @@ "assets/build/pylib-android/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/c5/56/c3d98c0cb4cf569fb833ed919cc1", "assets/build/pylib-android/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/f9/64/0107520eca9130ca870cec675bf0", "assets/build/pylib-android/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/b4/3f/7369ee7aa1aa36b098c3b33ea31b", - "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/17/fa/2c2e76ce86357e23a5adffd6139f", - "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/54/d4/3d6d66bd7d4ee85407851fe986a0", - "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/87/63/37392fb7eece4f1b010117205438", - "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/d5/44/0a58d9161ae9d2409ae2477b5948", + "assets/build/pylib-android/enum.py": "https://files.ballistica.net/cache/ba1/51/91/dfd36ad44d0d4d8ebd262fe03e7c", + "assets/build/pylib-android/filecmp.py": "https://files.ballistica.net/cache/ba1/1d/e7/575bd68a5f66504bb071c66e0996", + "assets/build/pylib-android/fileinput.py": "https://files.ballistica.net/cache/ba1/23/4f/13f958c4286a2a3cd46aed480572", + "assets/build/pylib-android/fnmatch.py": "https://files.ballistica.net/cache/ba1/79/a3/778dda2ff1d92a37aa3709ec141c", "assets/build/pylib-android/formatter.py": "https://files.ballistica.net/cache/ba1/8d/5e/9b9d7451083fbae7ee678ad8f51e", - "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/62/07/d18fee429386d6e1f3cfa42884e0", - "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/ed/58/61631b6f7097f6e06531ba9c4f04", - "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/e7/0b/2a93172c587fc0f2c71802885221", + "assets/build/pylib-android/fractions.py": "https://files.ballistica.net/cache/ba1/04/57/9ba7ff09b1829e3f35e681cc1879", + "assets/build/pylib-android/ftplib.py": "https://files.ballistica.net/cache/ba1/15/f9/66c87baf6cd7be154d0b904a131a", + "assets/build/pylib-android/functools.py": "https://files.ballistica.net/cache/ba1/51/dc/9da02d6e7f5671d36ad3026f86a3", "assets/build/pylib-android/genericpath.py": "https://files.ballistica.net/cache/ba1/a4/d1/a132fc4c20d49468d9aee1667a18", "assets/build/pylib-android/getopt.py": "https://files.ballistica.net/cache/ba1/5c/25/34e54811bd07a3b7a15e60c67094", - "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/76/37/f0df6882db44ee701aea35e235bb", - "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/30/f6/0cbdec6984d8bb4de4b8c12d3917", - "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/9f/bb/02378daab858e94498b995d90e58", - "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/7c/81/2b86114f572713719b00eebc4fe7", - "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/ae/a3/4bffbb609e9da7c1dab02c9d1bc0", + "assets/build/pylib-android/getpass.py": "https://files.ballistica.net/cache/ba1/7f/27/2225631bb706fa77edbb0870f96d", + "assets/build/pylib-android/gettext.py": "https://files.ballistica.net/cache/ba1/06/75/330b5daf8b0c62599c1cb5d39e74", + "assets/build/pylib-android/glob.py": "https://files.ballistica.net/cache/ba1/f2/af/eb70cb1127dcd41fb1a72e6a37e6", + "assets/build/pylib-android/graphlib.py": "https://files.ballistica.net/cache/ba1/3a/73/e3081c9d6aba74076485e9bb12a6", + "assets/build/pylib-android/gzip.py": "https://files.ballistica.net/cache/ba1/b9/97/e91d82e66b6cad3a263f040fe788", + "assets/build/pylib-android/hashlib.py": "https://files.ballistica.net/cache/ba1/68/33/c264fd78e6abc89ad39ff884bcde", "assets/build/pylib-android/heapq.py": "https://files.ballistica.net/cache/ba1/63/79/bb9abc2fb3665fffc59e588aba1f", - "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/ce/4e/595b1539b0a8ea65e8c79afa6506", + "assets/build/pylib-android/hmac.py": "https://files.ballistica.net/cache/ba1/50/c9/441934e594015710288e7a9a9103", "assets/build/pylib-android/html/__init__.py": "https://files.ballistica.net/cache/ba1/63/0b/9695269a02f0ec6d8b2b928d1f3f", "assets/build/pylib-android/html/entities.py": "https://files.ballistica.net/cache/ba1/02/4d/e42a17593176e35ff5da8d720cf9", - "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/c7/87/628a5a87855afbac3ebbd858e9a1", - "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/04/78/a177368f7a363b832b7aa700a24e", - "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/36/59/f5c4c2dfc97ef6a25e87791eb486", + "assets/build/pylib-android/html/parser.py": "https://files.ballistica.net/cache/ba1/53/ef/baf9f793260ab1fd8064b7f76322", + "assets/build/pylib-android/http/__init__.py": "https://files.ballistica.net/cache/ba1/35/33/f3ec6b02d141465c75471b1915c1", + "assets/build/pylib-android/http/client.py": "https://files.ballistica.net/cache/ba1/32/58/b0ef08f75b43d8b9e89906272e63", "assets/build/pylib-android/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/b1/a9/bf2b9d50cca20d3929dcd69a193f", - "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/b8/30/39a0e0ea03150efeb9fdd0c4f0f1", - "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/04/68/05482a7906eb8a4537fb591f2df9", + "assets/build/pylib-android/http/cookies.py": "https://files.ballistica.net/cache/ba1/d3/8d/e6c3a78a0d420510ff0d88980dc0", + "assets/build/pylib-android/http/server.py": "https://files.ballistica.net/cache/ba1/48/05/a2f8b738f09635f6840593a4f852", "assets/build/pylib-android/imghdr.py": "https://files.ballistica.net/cache/ba1/3d/d0/4f7452be4865bbf2e54e67fff577", "assets/build/pylib-android/imp.py": "https://files.ballistica.net/cache/ba1/76/c5/f35c903e1dd97bf22c1085a8284e", "assets/build/pylib-android/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/5e/ae/5efb7ab469b5d17c2ea79c50fcdf", - "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/58/27/ef34e53df05321778b4a1d64f233", - "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/f0/7d/66c18cd0ead3730530d9b02ae718", - "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/35/91/138b805ba19131c83fb9fa8cd5ae", + "assets/build/pylib-android/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/81/bf/bde9153f3f8c6487be86396eaf9a", + "assets/build/pylib-android/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/47/df/9f880b6e968711aaa8d40e21805c", + "assets/build/pylib-android/importlib/_common.py": "https://files.ballistica.net/cache/ba1/c2/5c/a3957f3a09bc359cce95465f7eb8", + "assets/build/pylib-android/importlib/abc.py": "https://files.ballistica.net/cache/ba1/1c/46/bb9c26318a11269343f7053e3677", "assets/build/pylib-android/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/8f/18e6ff954af6e29a2c06701e426d", - "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/00/c2/b14ed2a7c144df47409a73626f28", - "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/15/8c/53a8c444a47e76dde81052a0c41d", - "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/74/6c/cf680cfd666f5e08fc17e1e02e21", - "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/70/fe/b4fb9bfb0218a1baf681c3dd3493", + "assets/build/pylib-android/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/fb/e9/91a341b9f8b7c7cfde71ce9d9d10", + "assets/build/pylib-android/importlib/resources.py": "https://files.ballistica.net/cache/ba1/e5/52/7e6950753abc4e4a63c35483a61d", + "assets/build/pylib-android/importlib/util.py": "https://files.ballistica.net/cache/ba1/34/fe/dd13e9e4bda634aed3d9c24405f5", + "assets/build/pylib-android/inspect.py": "https://files.ballistica.net/cache/ba1/e6/fb/b8a26a8d469f12c0b9d1caa9f87a", "assets/build/pylib-android/io.py": "https://files.ballistica.net/cache/ba1/04/bf/435c1cef465b5f9f8b3a0e58aac2", - "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/e5/dc/a915c13e827b0f8f5c3d0339a365", - "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/ab/61/7360b1e8e05eae96ecc2614bc666", + "assets/build/pylib-android/ipaddress.py": "https://files.ballistica.net/cache/ba1/83/00/cfaa2e98187bdfd870f368e1bff4", + "assets/build/pylib-android/json/__init__.py": "https://files.ballistica.net/cache/ba1/4a/a4/a2ca81c8b1fc5159d7ee27cf8961", "assets/build/pylib-android/json/decoder.py": "https://files.ballistica.net/cache/ba1/3f/bf/6fd2a01d31cd85e4c21cf2c0a5c8", "assets/build/pylib-android/json/encoder.py": "https://files.ballistica.net/cache/ba1/91/e6/28d5bc7693037562877ff0ea08c5", "assets/build/pylib-android/json/scanner.py": "https://files.ballistica.net/cache/ba1/c8/4b/bcc458a5047e9ac8064a607ee231", - "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/d6/38/c65fcd6b76a399d0fb209e9e1130", - "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/7b/0d/514f7c437ade5881b923228db78d", - "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/01/91/9aecf23d41972edd3bcb7927b1fe", - "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/ab/cf/da9a211a39662f631b6869e1c28b", - "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/d1/75/8e5a4a91941e362805dc7d43b7a0", - "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/59/8b/cf4357716a774981a06b369e2074", - "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/be/37/4c3f3e2385e8e6d61d8ef76c5dc4", - "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/9c/2e/978f3aa52af60fce9a819dc7de7c", - "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/c7/5e/f3325f2bd78dcbffbfea6d9770fd", - "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/50/16/e34e153745925b34ce9038e3ea7f", - "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/49/c3/d46e03dd6ba50e8e2282ab22839a", - "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/84/08/24b4e6c420fec10ec3c2ea8c47da", + "assets/build/pylib-android/json/tool.py": "https://files.ballistica.net/cache/ba1/f6/89/d06bf3cfc47de60c557183929c37", + "assets/build/pylib-android/keyword.py": "https://files.ballistica.net/cache/ba1/34/f0/9b535759f451719a14e5eaf7e5a0", + "assets/build/pylib-android/linecache.py": "https://files.ballistica.net/cache/ba1/40/66/bfc4023c1853ee085d7f32691874", + "assets/build/pylib-android/locale.py": "https://files.ballistica.net/cache/ba1/a6/59/1321269f13ad79ba6636c665959f", + "assets/build/pylib-android/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a2/f1/558bfebba043ccc058d9d8cca51b", + "assets/build/pylib-android/logging/config.py": "https://files.ballistica.net/cache/ba1/5d/25/15806eb35054964b4c0dbd253d8d", + "assets/build/pylib-android/logging/handlers.py": "https://files.ballistica.net/cache/ba1/84/e6/6c7e1f823242d3ecfebeb2079282", + "assets/build/pylib-android/lzma.py": "https://files.ballistica.net/cache/ba1/c8/5b/c1f8b0cad7db967d5aac0dc93cf3", + "assets/build/pylib-android/mailbox.py": "https://files.ballistica.net/cache/ba1/e2/5b/852981ddeb6c208455146b9d65df", + "assets/build/pylib-android/mailcap.py": "https://files.ballistica.net/cache/ba1/4a/a2/61dfae45beaf22c9696d069ee06c", + "assets/build/pylib-android/mimetypes.py": "https://files.ballistica.net/cache/ba1/55/b0/c42a5accd40cf739d51627fd7726", + "assets/build/pylib-android/modulefinder.py": "https://files.ballistica.net/cache/ba1/bd/bb/c27cf6cf4d87fd4557f19c549ab6", "assets/build/pylib-android/netrc.py": "https://files.ballistica.net/cache/ba1/8f/80/36bb48bf9d57e4e5d2840bbc39ed", - "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/ed/e9/4fdac3b585199c036ca9e89b7f90", + "assets/build/pylib-android/nntplib.py": "https://files.ballistica.net/cache/ba1/e9/97/b8c183562190b711e14163b213d8", "assets/build/pylib-android/ntpath.py": "https://files.ballistica.net/cache/ba1/86/46/129e6c4c896c2a48abc5294f3fb4", - "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/b4/46/c374747761328b745d54c20fb2d4", - "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/b3/ec/5cbca4da9a176673ac3502dfe3ce", - "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/65/7b/65f902a9c4e4ba7713e2af3fde5e", - "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/f4/ff/f544ac0872105e67239d869102f5", + "assets/build/pylib-android/nturl2path.py": "https://files.ballistica.net/cache/ba1/a9/59/0611204983d7eeed580ab3c56e4d", + "assets/build/pylib-android/numbers.py": "https://files.ballistica.net/cache/ba1/9e/75/45a922718c7dfcd1b68948fb74a3", + "assets/build/pylib-android/opcode.py": "https://files.ballistica.net/cache/ba1/d2/02/8e90c9b100ed89495c0dede5aab2", + "assets/build/pylib-android/operator.py": "https://files.ballistica.net/cache/ba1/c7/e1/faab3be799d4a4bfd844c2425b04", "assets/build/pylib-android/optparse.py": "https://files.ballistica.net/cache/ba1/0f/08/ec8ce5e48392a3f9bdc3c07f49cc", - "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/ae/a6/b92e148a97c42f68600fd8f5ff0a", - "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/e7/18/74b1980b45e9b0d7aedd6e43f64c", - "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/fc/24/6860b302ac45445af755cf451711", - "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/d4/29/46efdd6acdab82b4ae4810522947", + "assets/build/pylib-android/os.py": "https://files.ballistica.net/cache/ba1/b3/44/d04af8c52a023a1d339c0b1311ad", + "assets/build/pylib-android/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/04/018a8adbd4b49bf89ecdd4b905d6", + "assets/build/pylib-android/pdb.py": "https://files.ballistica.net/cache/ba1/80/59/d1ff69bb0219c1a870c1d8966070", + "assets/build/pylib-android/pickle.py": "https://files.ballistica.net/cache/ba1/3a/e1/2e3171acf42a36be590e4a37126d", "assets/build/pylib-android/pickletools.py": "https://files.ballistica.net/cache/ba1/72/c5/182517538ac4e0c1b7d25bde80e4", "assets/build/pylib-android/pipes.py": "https://files.ballistica.net/cache/ba1/ed/d3/9e08e7ece839c58d885223c57adb", - "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/3f/27/1c376bf997f3ee3a09c9ffdb58d6", - "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/2a/65/f358d875e6356bab841348b2a2c1", - "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/d8/c1/eaa9ec920838ec9742eaba62032a", - "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/07/e9/bd3185ee7e11fae8a93350f3c8ef", - "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/4e/e0/74802bfb4ce50bf23b1fe082476f", - "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/c7/3d/79915a2f9a52402ad0165749f8a1", - "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/66/da/92943b022e8e4c32ffa45190e6e3", - "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/7a/1e/6651495416e0e70900b036ac1b4f", + "assets/build/pylib-android/pkgutil.py": "https://files.ballistica.net/cache/ba1/98/62/24a1465cb2b43458e1d271d2ff19", + "assets/build/pylib-android/platform.py": "https://files.ballistica.net/cache/ba1/48/f0/9e426fea97794447c4b6984be741", + "assets/build/pylib-android/plistlib.py": "https://files.ballistica.net/cache/ba1/e4/b4/c991bcd1812d6ba77181a37a4cd9", + "assets/build/pylib-android/poplib.py": "https://files.ballistica.net/cache/ba1/45/2e/413a448cee745616d9b2a3be1678", + "assets/build/pylib-android/posixpath.py": "https://files.ballistica.net/cache/ba1/df/7c/3af6fc68bda43718dce4275071ef", + "assets/build/pylib-android/pprint.py": "https://files.ballistica.net/cache/ba1/db/db/3d2fff41d48707ec1dfe45fd44ae", + "assets/build/pylib-android/profile.py": "https://files.ballistica.net/cache/ba1/2c/5f/fe19381e5041a1bc781b35aeb5e8", + "assets/build/pylib-android/pstats.py": "https://files.ballistica.net/cache/ba1/9f/9c/4b003a13a13f588bfee2c1427f79", "assets/build/pylib-android/pty.py": "https://files.ballistica.net/cache/ba1/24/e7/674146721384259bfbbc196a59e6", "assets/build/pylib-android/py_compile.py": "https://files.ballistica.net/cache/ba1/4f/4f/41b5756b4248c19b3cc6401b616f", "assets/build/pylib-android/pyclbr.py": "https://files.ballistica.net/cache/ba1/8a/0e/2fc7f524cbc1101d488c1a0c570f", - "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/9e/1d/1c472858412cfa24f33d5228154a", - "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/12/26/24837026ac4db0a65d099dfefc69", - "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/f3/08/1d7b3e0f7ce1ad649b1abf08f8ac", - "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/64/96/9262809205b823d80a1d3200cb94", + "assets/build/pylib-android/pydoc.py": "https://files.ballistica.net/cache/ba1/95/05/e698d3f627ebff0656070f0d4655", + "assets/build/pylib-android/queue.py": "https://files.ballistica.net/cache/ba1/3a/2f/3f5f8f97d6aea42bff93351b960a", + "assets/build/pylib-android/quopri.py": "https://files.ballistica.net/cache/ba1/0f/ad/93ff84558a4d8ca0607ab2c35df2", + "assets/build/pylib-android/random.py": "https://files.ballistica.net/cache/ba1/f2/51/e8e53a7db0d2fd381ff801ef31b2", "assets/build/pylib-android/re.py": "https://files.ballistica.net/cache/ba1/59/e4/9022fc5507d9f81c023489d12bea", "assets/build/pylib-android/reprlib.py": "https://files.ballistica.net/cache/ba1/81/66/44ee9dceee6943006c4500ee3303", - "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fe/06/6f06102f9f6c8c0e73a33714c25a", - "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/b2/76/1bf2d61d8494da2aeb4280144b2f", + "assets/build/pylib-android/rlcompleter.py": "https://files.ballistica.net/cache/ba1/38/9a/cd94bf30476e906823ceefcf9cd5", + "assets/build/pylib-android/runpy.py": "https://files.ballistica.net/cache/ba1/de/50/40037954e30bcda859f78d9facb2", "assets/build/pylib-android/sched.py": "https://files.ballistica.net/cache/ba1/c7/c2/12fe5b57f846e1c9d4c75ee89d91", - "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/b2/b0/b1a5252c6b75183471c11a4dbfb6", - "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/77/2d/f195a32136d7aee6e17169e88b50", + "assets/build/pylib-android/secrets.py": "https://files.ballistica.net/cache/ba1/e2/1b/ffc4c1422b6ac0eda4924d2f241a", + "assets/build/pylib-android/selectors.py": "https://files.ballistica.net/cache/ba1/ba/53/3b7515983548e5de15ccd7d37fb7", "assets/build/pylib-android/shelve.py": "https://files.ballistica.net/cache/ba1/8b/de/eca086cf73d1c9c823472de06a4c", - "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/d1/90/427ebd18132790c4b80ca7f0062a", - "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/d4/85/7a836681a4a43361886127d9a5c6", + "assets/build/pylib-android/shlex.py": "https://files.ballistica.net/cache/ba1/bf/d2/45bdf01bfb2a8d468d6ff0534fb6", + "assets/build/pylib-android/shutil.py": "https://files.ballistica.net/cache/ba1/2f/70/fc4e5267e0df968280861897c4ca", "assets/build/pylib-android/signal.py": "https://files.ballistica.net/cache/ba1/c1/e6/42f7446c4290ebf789e9d5d572e9", - "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/99/99/9f9631f0dcbe462ea076f63ea87a", - "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/ca/b1/59cd5236b8614b142c1c30f3d826", - "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/89/dd/17edc05b630cb0bfdea9f0070356", + "assets/build/pylib-android/site.py": "https://files.ballistica.net/cache/ba1/4b/05/ae253d4728ca8a7f796f4bf38d72", + "assets/build/pylib-android/smtpd.py": "https://files.ballistica.net/cache/ba1/1b/96/d9b9c960b17a701f81102bcf8ef5", + "assets/build/pylib-android/smtplib.py": "https://files.ballistica.net/cache/ba1/a8/d9/714d70951821c007019f14b60bd2", "assets/build/pylib-android/sndhdr.py": "https://files.ballistica.net/cache/ba1/d8/db/7f9e8c520cd68d3cf3308e3a9923", - "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/1a/9e/d4ab190486a0e5fde8c165d76537", - "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/ee/5d/ff8d1e8000d294430919d854bfd4", + "assets/build/pylib-android/socket.py": "https://files.ballistica.net/cache/ba1/da/90/e8f1c0529425c43c439c113f09cb", + "assets/build/pylib-android/socketserver.py": "https://files.ballistica.net/cache/ba1/0f/54/a474bf8ddc82d8155de1344e1318", "assets/build/pylib-android/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/59/0c/ad2f1115231791e81b99f42bde59", "assets/build/pylib-android/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/ba/45/70cc4fba245a1394b832240cd706", "assets/build/pylib-android/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/1c/d8/dc3fb256cbb05c8fffb52c52404a", "assets/build/pylib-android/sre_compile.py": "https://files.ballistica.net/cache/ba1/96/3a/830deabdb104a1d219f88ad9c090", "assets/build/pylib-android/sre_constants.py": "https://files.ballistica.net/cache/ba1/87/9d/78b7e287798d388ac700586308ce", "assets/build/pylib-android/sre_parse.py": "https://files.ballistica.net/cache/ba1/43/8a/41140a5502c31bbf238181ccf581", - "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b8/4f/0a8be5651fd60986028dc9e60215", + "assets/build/pylib-android/ssl.py": "https://files.ballistica.net/cache/ba1/b9/a3/93c6326cbed12bd38ddff0442b8f", "assets/build/pylib-android/stat.py": "https://files.ballistica.net/cache/ba1/03/1d/acbfa83d8d94d8a483c6a884b589", - "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/75/f2/4ce33352d4242c35554604908f43", - "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/52/bb/04d8688ce0acb53fef74b1cedaa4", + "assets/build/pylib-android/statistics.py": "https://files.ballistica.net/cache/ba1/62/7a/057495d08851ec32872bcd69b007", + "assets/build/pylib-android/string.py": "https://files.ballistica.net/cache/ba1/71/7f/8d19b04aea3ea1fc6bb49534d244", "assets/build/pylib-android/stringprep.py": "https://files.ballistica.net/cache/ba1/20/41/fcfc5f510286ead5f7f4678ac9ec", "assets/build/pylib-android/struct.py": "https://files.ballistica.net/cache/ba1/37/67/74dea8e8f3831e802c3b5288e901", - "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/39/92/11fe2953e9ae13120ebaebea19d1", - "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/ff/0e/1a6c5fd41803511cad28595dc248", - "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/47/71/61a7a88103ae16c177bf03953f5f", - "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/3b/0e/73b187b644f5d861893306db1d11", - "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/05/e9/16513caa8a4d9eb20fa67c7a02f1", + "assets/build/pylib-android/subprocess.py": "https://files.ballistica.net/cache/ba1/3b/0a/1f1927f2064cd5be6952c800191e", + "assets/build/pylib-android/sunau.py": "https://files.ballistica.net/cache/ba1/e5/20/6b38eb6fd8a07086d219d9ab269b", + "assets/build/pylib-android/symbol.py": "https://files.ballistica.net/cache/ba1/f1/d0/2c87723b1afb110667a9b77fe0e3", + "assets/build/pylib-android/symtable.py": "https://files.ballistica.net/cache/ba1/99/1b/2a657c8fb80a527f7900be74c92f", + "assets/build/pylib-android/sysconfig.py": "https://files.ballistica.net/cache/ba1/d2/e4/3f1dfd58d0bc055718563a8116f2", "assets/build/pylib-android/tabnanny.py": "https://files.ballistica.net/cache/ba1/f3/7e/b463d5f4ead23d34a36d0e559447", - "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/72/ab/e5dfc47c753d7cbb63934aac8fd9", + "assets/build/pylib-android/tarfile.py": "https://files.ballistica.net/cache/ba1/f2/6c/85bb42b559a27fb0bcd2dbeb1616", "assets/build/pylib-android/telnetlib.py": "https://files.ballistica.net/cache/ba1/a5/81/6133a7707e3de363ddc642944e52", - "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/ca/58/e0b1706b032958c6364e7f88adb5", + "assets/build/pylib-android/tempfile.py": "https://files.ballistica.net/cache/ba1/98/02/88d06634078ab0cdb5bb94036140", "assets/build/pylib-android/textwrap.py": "https://files.ballistica.net/cache/ba1/4c/4b/c743c5e7427b00f428c318a9673b", "assets/build/pylib-android/this.py": "https://files.ballistica.net/cache/ba1/a8/fa/4d1152b689d75bc1a997ff34b799", - "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/77/4f/e025ea812a09965cdc395e86ceb9", + "assets/build/pylib-android/threading.py": "https://files.ballistica.net/cache/ba1/70/eb/9151c4484807f6ba87a513964b4f", "assets/build/pylib-android/timeit.py": "https://files.ballistica.net/cache/ba1/55/7b/f7ef83f08ac5cb36ddaff03ac6ab", "assets/build/pylib-android/token.py": "https://files.ballistica.net/cache/ba1/1e/2e/d0c88f9d6ae92bb1fae7167aaba7", - "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/72/3b/51cb704606f892e099c2e350e346", - "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/2f/da/847f827b3e048f2b96d6c657bbe4", - "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/89/42/8bf4333174a7fbfe27552743d5af", - "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/46/49/5683d0d9e0e342392361adb6e9a3", + "assets/build/pylib-android/tokenize.py": "https://files.ballistica.net/cache/ba1/ae/51/55e4236aa6d5718520086c68e818", + "assets/build/pylib-android/trace.py": "https://files.ballistica.net/cache/ba1/d0/71/2094be597c5d8396d869cf4d0089", + "assets/build/pylib-android/traceback.py": "https://files.ballistica.net/cache/ba1/0b/1d/044152a32b34fcaa538ae2c9a918", + "assets/build/pylib-android/tracemalloc.py": "https://files.ballistica.net/cache/ba1/2c/4a/ea13ebd9c04d1db131d62880b2c6", "assets/build/pylib-android/tty.py": "https://files.ballistica.net/cache/ba1/ad/19/a6ad29b8958fa9f5acc3cf71d3b2", - "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/15/8d/824df2b7a8d28811d23ee5dcbc9f", - "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/6e/cc/a870fe92cab98b1d7740da28213c", + "assets/build/pylib-android/types.py": "https://files.ballistica.net/cache/ba1/14/58/e6a4aecb3c48a708a4abee7ed347", + "assets/build/pylib-android/typing.py": "https://files.ballistica.net/cache/ba1/54/f9/e31a593bd8daffba950449ab8ad5", "assets/build/pylib-android/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/b0/56/87601ed47a5181d1e6a40eb4ea40", "assets/build/pylib-android/urllib/error.py": "https://files.ballistica.net/cache/ba1/07/8c/573897fc3bdc6d3e2e8d449f17c7", - "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/ab/9d/cfcebb340b37e3d58ebbfb2fcd23", - "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/07/6d/58f034637b48922ec51e7d71b0c1", - "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/c4/d5/676a8e9fc4f7bd21ac2f555fc3fc", + "assets/build/pylib-android/urllib/parse.py": "https://files.ballistica.net/cache/ba1/b0/6f/fcf889e56d319e1ab4721e2d699b", + "assets/build/pylib-android/urllib/request.py": "https://files.ballistica.net/cache/ba1/27/f6/c23c9e61fc063e4ba90d6d096ff8", + "assets/build/pylib-android/urllib/response.py": "https://files.ballistica.net/cache/ba1/ac/f3/2d5bd4fe5cfcf640e8be71dec9a4", "assets/build/pylib-android/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/a4/52/f0d03835bb08e08195aeebd05e04", "assets/build/pylib-android/uu.py": "https://files.ballistica.net/cache/ba1/a1/89/070ed8553858a75fcafae4b7bd37", - "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/df/2a/cf8755bc0063f6a0d01dee6ac0a3", + "assets/build/pylib-android/uuid.py": "https://files.ballistica.net/cache/ba1/6c/3b/c018c6e9883e5218175592ec3343", "assets/build/pylib-android/warnings.py": "https://files.ballistica.net/cache/ba1/23/25/0ed7968cb91c285e031fa93614db", - "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/f8/72/9e060ca777991ea45d71eed336ca", - "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/14/4e/fbb121e9cfb74cdb2084e1fbb8d5", + "assets/build/pylib-android/wave.py": "https://files.ballistica.net/cache/ba1/bf/f7/89182d61e9f3eb100e5efbff4243", + "assets/build/pylib-android/weakref.py": "https://files.ballistica.net/cache/ba1/3a/34/42234c435d2e753407b0c068a271", "assets/build/pylib-android/webbrowser.py": "https://files.ballistica.net/cache/ba1/25/95/2b773a140d7d8cfe4e51d23d9ee2", "assets/build/pylib-android/xdrlib.py": "https://files.ballistica.net/cache/ba1/ec/bf/84d830dca1231ec1a67d8ccbb21f", "assets/build/pylib-android/xml/__init__.py": "https://files.ballistica.net/cache/ba1/ba/67/bbd97e53f3db5ebc3abd3fef2275", "assets/build/pylib-android/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/36/76/2a47e7bc727db1c44d157b23d2c3", "assets/build/pylib-android/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/4b/7b/185f8e04797815876d9a16210af7", "assets/build/pylib-android/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/db/f3/81553e1167748f7d22152ac83eba", - "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/18/79/cd302655dc15d49e3617a71966dc", + "assets/build/pylib-android/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/8e/f0/26f7a8d646c051dc29134411e5a3", "assets/build/pylib-android/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/27/a6/6caea719e99063ca274ba3dd9883", - "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/69/e1/4ca8a5cd1c35dc93873b5d7f89c5", + "assets/build/pylib-android/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/53/8e/fa86c93dc783f50139a6df679f70", "assets/build/pylib-android/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/69/93/695baf453ca1030e7f6a62eb977b", - "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/6a/80/e9447455e3df06a8dea4ca762c05", - "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/2d/1f/dfb4d40f1edca9a6c4547946258b", - "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/7f/ee/475112162331092c87710dde95ac", - "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/2c/44/ee7c7ac5086086a64acdbbf2ebd9", - "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/98/0c/80c528bd3fe3e658da076d08071e", + "assets/build/pylib-android/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/e2/28/cb659e6d308904b5b8349b2fff52", + "assets/build/pylib-android/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/bf/14/b35813d60c28bb05f1528c80f062", + "assets/build/pylib-android/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/46/fa/5086aea6de2e6bc282d73b0808c4", + "assets/build/pylib-android/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d6/e7/33912cef283deaee04484e2ccd0b", + "assets/build/pylib-android/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/38/44/1792ae5542c1ae5248568ef5abbd", "assets/build/pylib-android/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/6f/39/4c840e5eb0e09f709569154159ba", "assets/build/pylib-android/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/db/92/7283051e5e1c7426985835f506b9", "assets/build/pylib-android/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/39/6c/fac98453c28f626916837c8a1e6b", - "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/d5/5d/6631d2cabb6d5d3de794a1cf8f30", + "assets/build/pylib-android/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/91/57/68039f41084d369567cdad6f02f1", "assets/build/pylib-android/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/2c/42/ba99070cafd736b165b825f1df53", - "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/8f/58/dce938bf4dcf1e240206c88e903e", + "assets/build/pylib-android/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/84/07/34199c53cc1f9d91c835af86b47c", "assets/build/pylib-android/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/3c/9a/d4295144949f697e57545aff741b", "assets/build/pylib-android/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/13/27/66fe0ad3aa764ba65643f5fcbc37", "assets/build/pylib-android/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/0d/90/edc37e1a4f436d853c6d90263ae3", "assets/build/pylib-android/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/fd/fd/acc2dbaec2abc4a76071ce7ed7ab", - "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/da/48/e65c0e5eb49e3e5087866339f7e3", - "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/bd/3d/3771b879aad270172509a740aa80", + "assets/build/pylib-android/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/4a/62/c061195196f787531ef5bc2b4d61", + "assets/build/pylib-android/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/eb/1a/fae274a8e90aa97ade20712bfe2e", "assets/build/pylib-android/zipapp.py": "https://files.ballistica.net/cache/ba1/40/ae/178305c27d72cc46ad2220b504ec", - "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/88/73/901cfb9f23cc0bc0a7ba17eebe40", + "assets/build/pylib-android/zipfile.py": "https://files.ballistica.net/cache/ba1/69/86/a59f4fb6a301ab3682af282d6af4", "assets/build/pylib-android/zipimport.py": "https://files.ballistica.net/cache/ba1/99/2a/462d3c6a266d9e4ebdb887a99ae6", + "assets/build/pylib-android/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/b7/4e/bea553b4c2a2e63902c5cb446579", + "assets/build/pylib-android/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/ed/e5/0f7502cc1ef46212fcb15c7ada89", + "assets/build/pylib-android/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/64/69/98dfdf2ecf82fa172ac717c2e8f0", + "assets/build/pylib-android/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/26/a7/11f6ab33ede54f35282c70e51984", "assets/build/pylib-apple/__future__.py": "https://files.ballistica.net/cache/ba1/c3/2a/95c24fd76d3dcf796f5aa714cf0b", "assets/build/pylib-apple/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/c1/42/8c4e5889af4acd69a6e866ea360f", + "assets/build/pylib-apple/_aix_support.py": "https://files.ballistica.net/cache/ba1/af/15/a9be2e91d3f12212738760bec685", "assets/build/pylib-apple/_bootlocale.py": "https://files.ballistica.net/cache/ba1/15/7e/07e0a6fcaf9fca6354453f7d09fa", - "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/fc/ba/022abfd65bf601ad4094eb051c62", + "assets/build/pylib-apple/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/e8/c2/bd1aeca19799926a926a2f5ba3fd", + "assets/build/pylib-apple/_collections_abc.py": "https://files.ballistica.net/cache/ba1/de/99/73757a2868d45502d6716354c8b9", "assets/build/pylib-apple/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/5a/19/9dbf1e881a6483e3a268e5f8ea7d", "assets/build/pylib-apple/_compression.py": "https://files.ballistica.net/cache/ba1/c6/06/a4e9cc0e17800d71f6536d27976d", - "assets/build/pylib-apple/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/ca/6b/94c4270a794a3dd9144eac36ba70", "assets/build/pylib-apple/_markupbase.py": "https://files.ballistica.net/cache/ba1/06/64/d7715998bc60bfd5235f96b1a779", - "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/4d/3c/5a86fa537a2101d34076a72d0460", + "assets/build/pylib-apple/_osx_support.py": "https://files.ballistica.net/cache/ba1/e2/a2/5732e53a09c179a2e1e5d372b386", "assets/build/pylib-apple/_py_abc.py": "https://files.ballistica.net/cache/ba1/be/e3/d1030ff81e5440dc12c13a6730f7", "assets/build/pylib-apple/_pydecimal.py": "https://files.ballistica.net/cache/ba1/c2/6b/9fb0fb2b25247a6d68939f5d6ed5", - "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/41/de/afbd4243267e690fe1588b49db4c", + "assets/build/pylib-apple/_pyio.py": "https://files.ballistica.net/cache/ba1/9e/59/a40cba37ce7db26726fc966c2b5d", "assets/build/pylib-apple/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/3b/91/55e882376c694fefc106067d0b3b", - "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/7f/b5/8867817306aea16b94f613a26b93", + "assets/build/pylib-apple/_strptime.py": "https://files.ballistica.net/cache/ba1/47/5a/feef7100cfb5a7c285130e2b18f2", "assets/build/pylib-apple/_threading_local.py": "https://files.ballistica.net/cache/ba1/94/a6/3e202c4309c356baf71a34e9325e", - "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/2a/9c/f9cca37dc1131dd602c5b96a2312", - "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/dd/25/65dc23811a08b2445492e9f9d8e3", - "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/a3/50/aab369de7f1c182e54878faabd6a", - "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/72/dc/84c9bb5f53db3ffbb81fac16b5be", - "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/0a/c2/5cdf93f738b653523e371e91013f", - "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/dc/7c/1b0ad2f77d1e0f66f87af801c866", - "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/af/53/8002843655550b707f97b0aef513", - "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/b1/da/6206890af9505a246cc7a20d5d66", + "assets/build/pylib-apple/_weakrefset.py": "https://files.ballistica.net/cache/ba1/70/fe/9c92a7a96cdb6b1e00e26aa98fca", + "assets/build/pylib-apple/abc.py": "https://files.ballistica.net/cache/ba1/f2/ec/c492154fca5b0a765895eaa5885a", + "assets/build/pylib-apple/aifc.py": "https://files.ballistica.net/cache/ba1/13/f1/c7846c59f3a3a3f5ac2bfcb5c29a", + "assets/build/pylib-apple/antigravity.py": "https://files.ballistica.net/cache/ba1/6f/c8/f009e5a528fadaa1d92edd2b117d", + "assets/build/pylib-apple/argparse.py": "https://files.ballistica.net/cache/ba1/f4/95/c4c481c556c7a6de0491eeb2305c", + "assets/build/pylib-apple/ast.py": "https://files.ballistica.net/cache/ba1/1e/f6/01830bff652757d9752b02ffabc4", + "assets/build/pylib-apple/asynchat.py": "https://files.ballistica.net/cache/ba1/ab/34/9ebc49afe08d87a195f7ad309f19", + "assets/build/pylib-apple/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/9d/6e/3c238acb7356a8f28a872e133cbe", "assets/build/pylib-apple/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/10/db/493c9bfaae1f8953435bf7aed8d2", - "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/eb/d3/3a958257fa4133116c01aa1bfd6f", + "assets/build/pylib-apple/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/3a/b9/9b76e7998ff30c55f33c355c107b", "assets/build/pylib-apple/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/59/67/37e8f4938af7ebdea7da3fdef34c", "assets/build/pylib-apple/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/88/cc/f422549995be43e7b17d9830ee38", "assets/build/pylib-apple/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/c5/8f/0a5cbd7b5a6f2c8531af87a09469", "assets/build/pylib-apple/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/bc/0e/b8a63e47d3d3d73b198bf52019e5", "assets/build/pylib-apple/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/c3/d7/e58784180e8e61785d455f7e3679", - "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/f0/18/e35781df09df31bca6aa14621d71", + "assets/build/pylib-apple/asyncio/events.py": "https://files.ballistica.net/cache/ba1/9a/6d/dceb42b5846a4f3bf7d09481898f", "assets/build/pylib-apple/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/e1/81/9fcc3367d8ebba74819157777a25", "assets/build/pylib-apple/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/2d/0c/03cf213d7bc7bcc0a6ee0e7310dc", - "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/ef/69/ab54b22da528d7146cab1a00c2c1", - "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/ea/3c/7ac33a578ac25ca376a60bb59603", + "assets/build/pylib-apple/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/60/76/d98fd62af525430f90573b769925", + "assets/build/pylib-apple/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/1a/b2/3fd1917f489b608be4b33e256201", "assets/build/pylib-apple/asyncio/log.py": "https://files.ballistica.net/cache/ba1/0f/5a/f419c17cbe08eddfa90f314b8a6c", - "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/39/fd/2f6814cc54d475252da101fbba37", + "assets/build/pylib-apple/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/e7/95/1e4217bfe8a0afa14a9e5b75472b", "assets/build/pylib-apple/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/ea/73/2b77a852d18c2fe98e291552efca", - "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/c4/17/7336ec7c6b3c65724008ebd96b0a", - "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/e3/60/b4663ff9e8fa00a097e8b360ff29", - "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/e3/c4/d8a03bf572ad495a51250dc6a19b", - "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/2d/c1/29a029f52f3b8049eea1d3f86b35", + "assets/build/pylib-apple/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/7f/b5/0f0ba0747453bcbe177708e70b2e", + "assets/build/pylib-apple/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/33/75/a7cf5f0e47834b852b370eb69dd5", + "assets/build/pylib-apple/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/8f/8b/5911fee9252df333b5a17e42ed37", + "assets/build/pylib-apple/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/c9/ea/bb021562e53450698ceb51bae575", "assets/build/pylib-apple/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/92/3a/0de93c93afe7311a68a615fb2b97", "assets/build/pylib-apple/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/0c/e6/e52c7358eaa4a30fd6d8bbde94b8", "assets/build/pylib-apple/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/98/e4/5b002decc44112664cf6526da71a", - "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/a1/a8/22d7a8d58241353a5e288b40759f", + "assets/build/pylib-apple/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/3b/8c/d683b44a74c3f23636eb515f1c05", + "assets/build/pylib-apple/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/1e/4c/d4de9a8086f5bd56041bd52a7fc9", "assets/build/pylib-apple/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/3a/34/f3cc4d7abb02461d148faf8ef19f", "assets/build/pylib-apple/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/19/74/be437ee7d795f7c6106ef8fbf2db", - "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/28/6e/301cee24873c77c336504addd197", - "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/59/d9/96f8e8e2324dd0400362ff05bd4f", + "assets/build/pylib-apple/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/ac/31/b63e452f91b9ee3a8c8da36b5d24", + "assets/build/pylib-apple/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/f5/85/78a7a30c951b5b9992e40a30e7e7", "assets/build/pylib-apple/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/c3/9a/4bc6c5e7ffe8c0298bbae63157c0", - "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/f0/6a/4573904ec9cac4fd3155e80d5959", - "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/fc/aa/394cb22a0c927c575758eacd5d3c", - "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/51/50/2e05640cfc2c0a4b61ee3fa028d2", - "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/51/d9/72daaed73460e29cbf10a63bb7f5", - "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/61/e8/bbdb541d16a6fa002a0fd395c73b", - "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/4c/3d/878a1e93876d64136fa253176b50", - "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/5a/59/5bc5210e1fb224b2942453595609", + "assets/build/pylib-apple/asyncore.py": "https://files.ballistica.net/cache/ba1/67/d8/ec498cdfaa71a51b7cb9f11541fa", + "assets/build/pylib-apple/base64.py": "https://files.ballistica.net/cache/ba1/5f/a8/78c13d54e9c864c42198fa3cac81", + "assets/build/pylib-apple/bdb.py": "https://files.ballistica.net/cache/ba1/be/77/d307f03f678483487451a2dc4df9", + "assets/build/pylib-apple/binhex.py": "https://files.ballistica.net/cache/ba1/55/2a/cd97de9d7e92a69ea9fd26be5498", + "assets/build/pylib-apple/bisect.py": "https://files.ballistica.net/cache/ba1/e0/53/4c86151ca143696408b16f54e687", + "assets/build/pylib-apple/bz2.py": "https://files.ballistica.net/cache/ba1/ff/13/955800a917e23238dd071cae85ca", + "assets/build/pylib-apple/cProfile.py": "https://files.ballistica.net/cache/ba1/d9/b8/bd483641d5eb3292a4ef38771c04", "assets/build/pylib-apple/calendar.py": "https://files.ballistica.net/cache/ba1/59/9c/2b0a13658c958a9995ade122ae00", - "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/a2/53/87021ed914efdc55b636a828f8a0", + "assets/build/pylib-apple/cgi.py": "https://files.ballistica.net/cache/ba1/4f/53/efcf1aa5ac4c4ff124de0e8ce501", "assets/build/pylib-apple/cgitb.py": "https://files.ballistica.net/cache/ba1/9a/2d/70325a99eeaff8701540d2304d80", "assets/build/pylib-apple/chunk.py": "https://files.ballistica.net/cache/ba1/e0/4d/8609a028d890841ff867e97f0869", "assets/build/pylib-apple/cmd.py": "https://files.ballistica.net/cache/ba1/33/25/43fd9394378dd3db266dd35af46e", "assets/build/pylib-apple/code.py": "https://files.ballistica.net/cache/ba1/18/fc/d667016222e466707ec5d0991810", - "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/34/82/17d21cdb1a3a8e740629b5720b5b", - "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/95/e2/6ba7d680c393e7ddcf72425a9731", - "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/2f/ec/36668a1b0f8ffedd3a1fa1ddb276", - "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/78/dd/38815f6fb41c45822afef8fb1b71", + "assets/build/pylib-apple/codecs.py": "https://files.ballistica.net/cache/ba1/b5/29/a03b1f3dee0d9e2472ef6f9e0cb4", + "assets/build/pylib-apple/codeop.py": "https://files.ballistica.net/cache/ba1/41/29/d34bf4a5e7ca2fc47a2595cf2f1e", + "assets/build/pylib-apple/collections/__init__.py": "https://files.ballistica.net/cache/ba1/c5/04/742da41b4f964e41427b944d5d64", + "assets/build/pylib-apple/collections/abc.py": "https://files.ballistica.net/cache/ba1/63/ca/9d22346f8750ef62088de3c25c0a", "assets/build/pylib-apple/colorsys.py": "https://files.ballistica.net/cache/ba1/ae/99/594631454b09ad4d5c34ec54a344", - "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/1f/d7/80c8a9cb297994b001f766f96ca7", + "assets/build/pylib-apple/compileall.py": "https://files.ballistica.net/cache/ba1/b0/10/10ea577b4b7cd27aea2b86b744ad", "assets/build/pylib-apple/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/f8/0b/346441ef94908fb806338d0510b6", "assets/build/pylib-apple/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/6b/26/78ac686a2335efb18fa8ed0e5d6a", - "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/e4/da/c5f51a895dbd067d6571a8f1e979", - "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/34/ba/b02bf14621a6b888a29c1a3bb11f", - "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/46/10/e24a0ea083991df41a0301a22b94", - "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/06/36/09b61a5e5de8234b37fd3f476493", - "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/e3/b7/1cfb5689e277e48c8c347f6ba36e", + "assets/build/pylib-apple/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/30/85/3db73e4fd0be60ad09eaf5dde94e", + "assets/build/pylib-apple/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/51/3f/bec0554d1aa041ac88375f6e0ab0", + "assets/build/pylib-apple/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/0b/0c/c8315a0b957c916ccc39b1e5dd3d", + "assets/build/pylib-apple/configparser.py": "https://files.ballistica.net/cache/ba1/5e/5d/289f318a747d76d68a2bff077c8f", + "assets/build/pylib-apple/contextlib.py": "https://files.ballistica.net/cache/ba1/a6/a7/6e93480a1647ba9d4f40f8644fb1", "assets/build/pylib-apple/contextvars.py": "https://files.ballistica.net/cache/ba1/02/52/e520b59b10124c813468252fee2a", "assets/build/pylib-apple/copy.py": "https://files.ballistica.net/cache/ba1/d9/f7/6d68526a34fd56e358cc920f723c", - "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/0c/5a/c21a2c6000ad2947861fbd711834", - "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/1e/e7/a5d7cc52a39b600ea554534a75de", + "assets/build/pylib-apple/copyreg.py": "https://files.ballistica.net/cache/ba1/45/0e/7ea7c2f999ef934f25706abf0670", + "assets/build/pylib-apple/crypt.py": "https://files.ballistica.net/cache/ba1/a8/21/905bf832e4a54f0efde53d431f2f", "assets/build/pylib-apple/csv.py": "https://files.ballistica.net/cache/ba1/02/21/503374208b50d8cffa21e5aad48a", - "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1f/87/6aeddc887fcb3d346849b4dcab80", + "assets/build/pylib-apple/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/68/b7/87f1ceae16da8b248a771145e8e4", "assets/build/pylib-apple/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/f4/e3/d0d2b2809d80ad7cd813477be797", "assets/build/pylib-apple/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/f7/ff/297cd3308735876b3d7ac54172e0", "assets/build/pylib-apple/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/cd/67/df2ef87d5f3411077030882bcae3", - "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cb/c0/d8e7e17b9b3122e1a0fc5ba805cc", + "assets/build/pylib-apple/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/26/85/489db3f032a47813958e08c687d9", "assets/build/pylib-apple/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/bd/b1/b431a9e977498c9c5945a3f63da9", "assets/build/pylib-apple/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/97/8b/19a7d679d50c0983f9c4b2f37d5e", "assets/build/pylib-apple/ctypes/util.py": "https://files.ballistica.net/cache/ba1/80/95/f30336080c30fcb7d5db549ef68b", "assets/build/pylib-apple/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/09/43/f7e315d732918308ea4e4c197c5a", - "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/43/5a/c242200e965ec30f3922cf9f73b5", + "assets/build/pylib-apple/curses/__init__.py": "https://files.ballistica.net/cache/ba1/02/0b/75d9b2291f8ce6b7c06003397aba", "assets/build/pylib-apple/curses/ascii.py": "https://files.ballistica.net/cache/ba1/97/27/94584e1dcd1637dfdce80efa78eb", "assets/build/pylib-apple/curses/has_key.py": "https://files.ballistica.net/cache/ba1/60/17/fde8d2bfabfe53298f936ebdec88", "assets/build/pylib-apple/curses/panel.py": "https://files.ballistica.net/cache/ba1/41/42/ef63abf4b18669a22ab9141bcb88", "assets/build/pylib-apple/curses/textpad.py": "https://files.ballistica.net/cache/ba1/34/78/bc5c856e5f1d8439d4e191bc4f75", - "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/85/e7/aaa5f74230b93068c7bc6df9a645", - "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/e1/32/e063935d59bbc2d0383228dc93a6", + "assets/build/pylib-apple/dataclasses.py": "https://files.ballistica.net/cache/ba1/45/58/a588aebb8cdfc7de8672707af32f", + "assets/build/pylib-apple/datetime.py": "https://files.ballistica.net/cache/ba1/2e/98/cc69b8e574fd63662ee0c3abbb90", "assets/build/pylib-apple/decimal.py": "https://files.ballistica.net/cache/ba1/dd/5d/8d0f90ec4e20c613b6ce2a88bc60", - "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/63/ca/23738df60b6b3ffe279a617df1bf", + "assets/build/pylib-apple/difflib.py": "https://files.ballistica.net/cache/ba1/83/23/5a8f85ded63f438f11a87c15efc8", "assets/build/pylib-apple/dis.py": "https://files.ballistica.net/cache/ba1/52/8c/c990047191c2cad1f2ce978b146d", - "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/2e/e7/7821f5346e5e5f1b228d8a4a0d00", - "assets/build/pylib-apple/dummy_threading.py": "https://files.ballistica.net/cache/ba1/5b/60/6a2a69960c1c982fa667f3fd8051", + "assets/build/pylib-apple/doctest.py": "https://files.ballistica.net/cache/ba1/1c/3f/dd4e6d27965460ca8ffb6cba98b4", "assets/build/pylib-apple/email/__init__.py": "https://files.ballistica.net/cache/ba1/2f/8e/c14225900357ac302213f5b4d674", "assets/build/pylib-apple/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/c6/3d/d686aa9a7ddbee790ad558b25661", "assets/build/pylib-apple/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/fb/2a/efe05a41d7fda3cba1d9a68b31b2", @@ -3109,9 +3116,9 @@ "assets/build/pylib-apple/email/feedparser.py": "https://files.ballistica.net/cache/ba1/5e/34/32eb942596826dd2cb845e9d2a2e", "assets/build/pylib-apple/email/generator.py": "https://files.ballistica.net/cache/ba1/09/86/f9ebd02a5a8a21bd66927b50fffe", "assets/build/pylib-apple/email/header.py": "https://files.ballistica.net/cache/ba1/21/e7/9bb3af5ad0b37941d9c73020cccf", - "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/42/92/988e418cd7b901e8fefe1bd98358", + "assets/build/pylib-apple/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/22/69/f2b2aac8d956079f0833030b5f8d", "assets/build/pylib-apple/email/iterators.py": "https://files.ballistica.net/cache/ba1/2f/8c/6a1dc186422beb8546721f22b72b", - "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/53/6f/c22ef21e58ccc9496cdf08d003dc", + "assets/build/pylib-apple/email/message.py": "https://files.ballistica.net/cache/ba1/8d/1f/5ef489963e364dbd49228156a6e3", "assets/build/pylib-apple/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/e0/cb/20c79c7faa724bdfeebae99795aa", "assets/build/pylib-apple/email/mime/application.py": "https://files.ballistica.net/cache/ba1/45/a9/97edc07b0a7c7e3e004422b674c2", "assets/build/pylib-apple/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/c8/25/9973c555726af5e265c0f459e8b2", @@ -3124,9 +3131,9 @@ "assets/build/pylib-apple/email/parser.py": "https://files.ballistica.net/cache/ba1/86/8c/8030eb141d7713a36befee9736ef", "assets/build/pylib-apple/email/policy.py": "https://files.ballistica.net/cache/ba1/a5/64/8c59670fdf565988c72f21040ed5", "assets/build/pylib-apple/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/4a/85/aa0a24ec3a4f407d18aadf357bad", - "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/07/04/1a8a3e3d77eb4b3b31f434514012", + "assets/build/pylib-apple/email/utils.py": "https://files.ballistica.net/cache/ba1/92/e5/20f2c37647f2fcdb586b78a340e5", "assets/build/pylib-apple/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/b8/61/d28f98d3527e5e7285265ef03f7f", - "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/3a/72/a855c1e63bc3510a87099b87770f", + "assets/build/pylib-apple/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/d8/a9/a7cd663238f58ba364d163ab0caf", "assets/build/pylib-apple/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/ae/eb/d4efe1172c154ed19f3ed9c3e0d8", "assets/build/pylib-apple/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/ac/9d/63f89df311a1a5cfb3c0e8cedcce", "assets/build/pylib-apple/encodings/big5.py": "https://files.ballistica.net/cache/ba1/78/ea/960502c422e3c224c8ad449fd429", @@ -3213,7 +3220,6 @@ "assets/build/pylib-apple/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/f5/2a/2b0dcc29c907c6a518497c7f48c7", "assets/build/pylib-apple/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/59/fe/91ae90c6e9dd63531cb3d312100b", "assets/build/pylib-apple/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/68/fe/d6a7084555b675b9c484ce28b0b7", - "assets/build/pylib-apple/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/0b/79/3f05d1194270249651c838df01f2", "assets/build/pylib-apple/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/b7/55/5934baacacdbab3fc78aab842577", "assets/build/pylib-apple/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/4a/4a/56eb674ccc125d9f75c14283d979", "assets/build/pylib-apple/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/f1/d3/6f3a3bc64f3dee0db82072cd1578", @@ -3248,363 +3254,380 @@ "assets/build/pylib-apple/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/1b/c8/1ffa26b3c2a650efae206d27b6f3", "assets/build/pylib-apple/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/40/6c/279145a291f59642952ea9880b9d", "assets/build/pylib-apple/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/1f/c9/57406baceeabe0a0e201a81833d5", - "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/68/87/a3fbd9a4a710a06e03625e870b37", - "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/4f/1a/2d6576fd5bc7722af46820164d58", - "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/6b/04/bdebb1257b328a98f109e23eadfc", - "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/00/11/7533d94880452cc0ab88f9373642", + "assets/build/pylib-apple/enum.py": "https://files.ballistica.net/cache/ba1/0a/93/a93daaeb9d8ed4bf372e75d8cedd", + "assets/build/pylib-apple/filecmp.py": "https://files.ballistica.net/cache/ba1/b9/69/6137a2d0a2c31a7e08891ee56c35", + "assets/build/pylib-apple/fileinput.py": "https://files.ballistica.net/cache/ba1/16/3d/b40632ab99df5c645db182c82023", + "assets/build/pylib-apple/fnmatch.py": "https://files.ballistica.net/cache/ba1/c7/a6/5036cd268eee8504116945ea8d02", "assets/build/pylib-apple/formatter.py": "https://files.ballistica.net/cache/ba1/b3/5f/58445670edaf8bb748c745197fa7", - "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/df/db/61be6d9b79cbce6bb29fae2aa9fb", - "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/42/ef/b31f8d12adfe82836b95a930b26f", - "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/20/35/bec93f7b040908eb4b87f30d2fa0", + "assets/build/pylib-apple/fractions.py": "https://files.ballistica.net/cache/ba1/64/fc/75a465ea7bd286c6c0006ff6f9dc", + "assets/build/pylib-apple/ftplib.py": "https://files.ballistica.net/cache/ba1/6c/7f/c59704a4093cecace0737ff19134", + "assets/build/pylib-apple/functools.py": "https://files.ballistica.net/cache/ba1/a5/dd/c2f7f8be4be52671041268842bc8", "assets/build/pylib-apple/genericpath.py": "https://files.ballistica.net/cache/ba1/b3/cd/0b7bb99d3aa5a41b69a4b62cd3cf", "assets/build/pylib-apple/getopt.py": "https://files.ballistica.net/cache/ba1/46/47/d33382d447d398923f4c0c0f87c1", - "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/02/a1/d4249edfdf76656945cda335490b", - "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f8/e0/8ad913d8eac5ad9d2f34973cbc77", - "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/9c/8c/5db3f5435168ff5270ae2dbd7977", - "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/1e/e9/669c96cbbc701643459c26e0ce87", - "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/a1/51/6234b8612e60917ecea82b8a7f3a", + "assets/build/pylib-apple/getpass.py": "https://files.ballistica.net/cache/ba1/4e/67/45234cbaae5e74cdd50bab4423bd", + "assets/build/pylib-apple/gettext.py": "https://files.ballistica.net/cache/ba1/f7/39/95601dd0780dd07609592b57dda6", + "assets/build/pylib-apple/glob.py": "https://files.ballistica.net/cache/ba1/81/c2/fa7c53bfb8ab2b5bd8a07ae4c0ba", + "assets/build/pylib-apple/graphlib.py": "https://files.ballistica.net/cache/ba1/fc/d4/ee610106a558e0bd3a67ea75418a", + "assets/build/pylib-apple/gzip.py": "https://files.ballistica.net/cache/ba1/64/05/5ec0ddcf87b51b3d372df9b7e740", + "assets/build/pylib-apple/hashlib.py": "https://files.ballistica.net/cache/ba1/5c/c0/cf70700130b4bdd0a09f06c3006b", "assets/build/pylib-apple/heapq.py": "https://files.ballistica.net/cache/ba1/cf/ff/e3aa597a8669e6030a2b8ab06228", - "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b8/43/24176dd09b4a346c5d2fb23b2489", + "assets/build/pylib-apple/hmac.py": "https://files.ballistica.net/cache/ba1/b3/46/08335f3fac6c64dae75d20e07283", "assets/build/pylib-apple/html/__init__.py": "https://files.ballistica.net/cache/ba1/cd/32/56a082769e4cd6fb8de604e0a1aa", "assets/build/pylib-apple/html/entities.py": "https://files.ballistica.net/cache/ba1/98/95/6e96db7b66edc0178c1680bbd561", - "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/53/49/7e66623bcf32ec74f3b91806e36e", - "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/0c/4b/fd4d41d4614d30fbbc8a29804306", - "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/ce/d8/87e20752d130bbd5dd5e232247c9", + "assets/build/pylib-apple/html/parser.py": "https://files.ballistica.net/cache/ba1/64/af/83c193c1f479a9cc705b86c0422c", + "assets/build/pylib-apple/http/__init__.py": "https://files.ballistica.net/cache/ba1/ac/29/61d2120b0900162a941b89c9773f", + "assets/build/pylib-apple/http/client.py": "https://files.ballistica.net/cache/ba1/fd/6e/f396816c9a45b7e5d906ada54c60", "assets/build/pylib-apple/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/ca/58/434a958d4f8372b96b4cfa87a4a2", - "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/3f/7e/a86ac95ad155cd1e7469437ce570", - "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/30/83/9001b9601fc4c335ba19384c7996", + "assets/build/pylib-apple/http/cookies.py": "https://files.ballistica.net/cache/ba1/4f/b7/ec4c23a01fb3b7a7a8c88239fb17", + "assets/build/pylib-apple/http/server.py": "https://files.ballistica.net/cache/ba1/0c/d0/b49e4c5a61de64a23b2c326cd6c3", "assets/build/pylib-apple/imghdr.py": "https://files.ballistica.net/cache/ba1/58/22/50ad8d061dc8e6c9d59e96bf04fe", "assets/build/pylib-apple/imp.py": "https://files.ballistica.net/cache/ba1/ee/bf/d6a2ec2413b54a6be3a02cfa00ba", "assets/build/pylib-apple/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/4e/6f/8d7a262ab97963fdd5b9ce8efe8b", - "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/26/7f/65d2f08e6894232a4fcc3f070f8b", - "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/19/fe/c77419d8c6dd79a483b62652fe46", - "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3f/bf/f3caab2fcf18ed1ae3ba1e9adaad", + "assets/build/pylib-apple/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/b8/22/e3b7a728bcaa4d1cc8e8211d3ed5", + "assets/build/pylib-apple/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/99/92/f7940cdd17b84552d2823ac3059c", + "assets/build/pylib-apple/importlib/_common.py": "https://files.ballistica.net/cache/ba1/83/f1/92265a70ba9137bef49793fb4963", + "assets/build/pylib-apple/importlib/abc.py": "https://files.ballistica.net/cache/ba1/3c/1a/c59f8ffca97eb2bbd043566279b3", "assets/build/pylib-apple/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/1f/fe/2a27ae49f0c0db298c9eac2d6fa4", - "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/23/3d/9aa84052261a4f0a19d06413ceee", - "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/88/45/4484c3e601fb26761c9f300d2866", - "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/28/14/519fd434e756d3e630d96cbc4d4f", - "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/e0/5f/793c8e2af7674d58c5da7ed8c6a5", + "assets/build/pylib-apple/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/dd/26/14b3863c2caa3f146a4220c16894", + "assets/build/pylib-apple/importlib/resources.py": "https://files.ballistica.net/cache/ba1/50/16/38c4b66d58318baf727603ed74c0", + "assets/build/pylib-apple/importlib/util.py": "https://files.ballistica.net/cache/ba1/ca/bb/3a4156656f9b1f1037d2429a72f5", + "assets/build/pylib-apple/inspect.py": "https://files.ballistica.net/cache/ba1/5f/5b/33e01ea6246c532b749ff56c713b", "assets/build/pylib-apple/io.py": "https://files.ballistica.net/cache/ba1/f9/ed/07dba0ecf1e81d4cd816bce9542b", - "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/4b/33/905d7110b8f1bdce47d9ca897302", - "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/72/b2/49cbdedf6ad5c411bb444377ec4f", + "assets/build/pylib-apple/ipaddress.py": "https://files.ballistica.net/cache/ba1/7a/3f/e87514b33ba1527edb5701932554", + "assets/build/pylib-apple/json/__init__.py": "https://files.ballistica.net/cache/ba1/25/90/8a5205e19cc65824ea1055a736f3", "assets/build/pylib-apple/json/decoder.py": "https://files.ballistica.net/cache/ba1/6f/c8/ddcd524fd23ec4c64a11c80905da", "assets/build/pylib-apple/json/encoder.py": "https://files.ballistica.net/cache/ba1/ec/bd/e78407bc99409c0fd4a6ff25c112", "assets/build/pylib-apple/json/scanner.py": "https://files.ballistica.net/cache/ba1/81/7c/03b7f8d8f18de6a1b12debd594db", - "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/14/15/f9f6e36235068667cb79b18fae84", - "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/58/77/7d22ba844f36174fcbf10e362d44", - "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/50/52/03cee68f3d0a5959db0fb4746e6c", - "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/90/f9/938e5408764ae6a0fc378cc301bb", - "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/a4/3a/d8719b6afe0790133bb09d168438", - "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/47/7d/30abadf91ca12fe6e68fdc38b239", - "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/6a/26/5e31888d46fc1f0616c2cc5cfc78", - "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/8d/4c/6289a712439521bf99a154d316ab", - "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/bc/95/77de0c6aaad3819b09abe0eed612", - "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/c8/fc/03aaee28a480c60b9465c8358df2", - "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/9b/50/39e619d3ea0dbda304627f859782", - "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/f5/26/0d92ec3a03d7f933cf157572f375", + "assets/build/pylib-apple/json/tool.py": "https://files.ballistica.net/cache/ba1/64/eb/8e43da0d2e57b7b1b866baf76c7d", + "assets/build/pylib-apple/keyword.py": "https://files.ballistica.net/cache/ba1/10/71/8b7f301021ebf02b37d116fffcac", + "assets/build/pylib-apple/linecache.py": "https://files.ballistica.net/cache/ba1/70/6b/18924560575dc071af05ff1c23d9", + "assets/build/pylib-apple/locale.py": "https://files.ballistica.net/cache/ba1/be/38/d3f3510ad98468a398af864ca48b", + "assets/build/pylib-apple/logging/__init__.py": "https://files.ballistica.net/cache/ba1/bb/ab/f8ffb9fde815b8956983e7038e78", + "assets/build/pylib-apple/logging/config.py": "https://files.ballistica.net/cache/ba1/61/02/0138edd72b73cc8d2e3f7a112d65", + "assets/build/pylib-apple/logging/handlers.py": "https://files.ballistica.net/cache/ba1/86/95/c2c5c4f53cc2f9fef929145dbc93", + "assets/build/pylib-apple/lzma.py": "https://files.ballistica.net/cache/ba1/a9/90/2cedbc63be303fd2e4fe9ad9293d", + "assets/build/pylib-apple/mailbox.py": "https://files.ballistica.net/cache/ba1/e3/28/f0d20f21f0858b3e730ebebdfef3", + "assets/build/pylib-apple/mailcap.py": "https://files.ballistica.net/cache/ba1/4d/23/f74089a34cbd2edc6c11ebb790aa", + "assets/build/pylib-apple/mimetypes.py": "https://files.ballistica.net/cache/ba1/0c/ce/895933f8a07f7c21b500fa66a2c1", + "assets/build/pylib-apple/modulefinder.py": "https://files.ballistica.net/cache/ba1/88/34/e12f85d48d954a45ecf42c243c21", + "assets/build/pylib-apple/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/aa/ff/356e0db47c4c1c06f8e37bcd38a7", + "assets/build/pylib-apple/msilib/schema.py": "https://files.ballistica.net/cache/ba1/bd/15/7ee47f77149296542aaf883e58f2", + "assets/build/pylib-apple/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/94/25/0e90328d0fb33814334a3ec64472", + "assets/build/pylib-apple/msilib/text.py": "https://files.ballistica.net/cache/ba1/39/0a/1a182e532d3f0574298120dad765", "assets/build/pylib-apple/netrc.py": "https://files.ballistica.net/cache/ba1/35/a9/0a1e1c8ecab734c09a5f8d64b51a", - "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/37/d0/25c88f817de5a6705d1c227bbd0d", + "assets/build/pylib-apple/nntplib.py": "https://files.ballistica.net/cache/ba1/fa/d5/e0f012ba98a3069ced1c5115c043", "assets/build/pylib-apple/ntpath.py": "https://files.ballistica.net/cache/ba1/2c/fd/c8b71d3d5efdf44556c68df02d30", - "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/d8/fa/0d625b59939d483cafa553790235", - "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/92/16/807de1550920d485c87f3d587d5d", - "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/7a/a8/3be6796ad635043eee8ba6ee031e", + "assets/build/pylib-apple/nturl2path.py": "https://files.ballistica.net/cache/ba1/cc/79/e930bdf392702ad2da57f10c8a7a", + "assets/build/pylib-apple/numbers.py": "https://files.ballistica.net/cache/ba1/45/40/fe6afa3e354c7bc5a9a8c3700659", + "assets/build/pylib-apple/opcode.py": "https://files.ballistica.net/cache/ba1/e2/15/1f3f5e8e6a3c24b455f71a055249", "assets/build/pylib-apple/operator.py": "https://files.ballistica.net/cache/ba1/c5/02/51e774eacc0e70d60420010749f4", "assets/build/pylib-apple/optparse.py": "https://files.ballistica.net/cache/ba1/a0/0b/202b321b2eddb9b62f30d58fd1f6", - "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/65/88/d7823716fea104e4e65665b35f27", - "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/76/0b/2f2ac6ea5e2f56031de310e493da", - "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/f9/7c/9da21258e7103d43019a8b121957", - "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/f9/4b/0757ea3efc5c3bd10c325817b5e1", + "assets/build/pylib-apple/os.py": "https://files.ballistica.net/cache/ba1/57/6f/960711faa73f4114c7e2b473330f", + "assets/build/pylib-apple/pathlib.py": "https://files.ballistica.net/cache/ba1/ff/20/fd5951ff8c7f243dc49f13b6ebcf", + "assets/build/pylib-apple/pdb.py": "https://files.ballistica.net/cache/ba1/6d/14/23ebc1d637aad4a34eaa42bc52e7", + "assets/build/pylib-apple/pickle.py": "https://files.ballistica.net/cache/ba1/3f/5e/40fa7bfa971312a1a108610878a6", "assets/build/pylib-apple/pickletools.py": "https://files.ballistica.net/cache/ba1/b0/a2/0655f9bef1f950e8f678be867bec", "assets/build/pylib-apple/pipes.py": "https://files.ballistica.net/cache/ba1/95/86/92cb2b19dc776bd8d7dc459eccc3", - "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/38/b0/3e59ab18a07c9f4f6995b855a7c4", - "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/bb/d4/06918fb7382d0f898f0f33bbd83c", - "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/db/bc/c8db0b8789383efeb714744754da", - "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/92/a9/b8f8a4449c41b913cd0471a29703", + "assets/build/pylib-apple/pkgutil.py": "https://files.ballistica.net/cache/ba1/e7/20/8f854914afa27fb4574720e5b9ba", + "assets/build/pylib-apple/platform.py": "https://files.ballistica.net/cache/ba1/01/b3/05c486dd9e13f7c8152ba1e5ca7f", + "assets/build/pylib-apple/plistlib.py": "https://files.ballistica.net/cache/ba1/e0/71/58498a0c336ab3a26bfe82db1c37", + "assets/build/pylib-apple/poplib.py": "https://files.ballistica.net/cache/ba1/50/c6/d2c55762b3e2e06754cdec4aad0b", "assets/build/pylib-apple/posixpath.py": "https://files.ballistica.net/cache/ba1/e1/06/e298802e053842f6d101326ae76c", - "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/04/96/6c34676c08e631ded6416c14866d", - "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/6f/e5/b1348f0c118f508d94d24f0a1133", - "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/94/fb/1e30f0b143965be031f2c3fa4121", + "assets/build/pylib-apple/pprint.py": "https://files.ballistica.net/cache/ba1/1e/80/4e9ac7adef0ffbf04946645782f5", + "assets/build/pylib-apple/profile.py": "https://files.ballistica.net/cache/ba1/87/07/7fc7d9607ba2dd3eace3de730d5a", + "assets/build/pylib-apple/pstats.py": "https://files.ballistica.net/cache/ba1/90/cd/9f43fa464fdfc86a1c817cefb0cf", "assets/build/pylib-apple/pty.py": "https://files.ballistica.net/cache/ba1/33/56/32146736331945537902f3771ffb", "assets/build/pylib-apple/py_compile.py": "https://files.ballistica.net/cache/ba1/3c/04/8cb4b45ddb65e3d8c30521dc3166", "assets/build/pylib-apple/pyclbr.py": "https://files.ballistica.net/cache/ba1/1a/e2/76bb863e9c510078b5e0828caf56", - "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/c7/39/322ac2338f1737dfa217f3645609", - "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/b6/2a/db3c0a47ad2bf43b3df8a2b4ebac", - "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/34/a2/7e15c991e3a6ba75d988323117e8", - "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/d1/55/4fddea355c8156b287408489b579", + "assets/build/pylib-apple/pydoc.py": "https://files.ballistica.net/cache/ba1/0c/fa/ed033fd11ded2014e69d07fa2f0e", + "assets/build/pylib-apple/queue.py": "https://files.ballistica.net/cache/ba1/bc/12/ad8745f4cd033dce64b4169d4998", + "assets/build/pylib-apple/quopri.py": "https://files.ballistica.net/cache/ba1/71/23/921fa527149e18b7dd43d408f104", + "assets/build/pylib-apple/random.py": "https://files.ballistica.net/cache/ba1/31/f0/de5e326b1e6ca1afeb1dd806b68e", "assets/build/pylib-apple/re.py": "https://files.ballistica.net/cache/ba1/49/00/196fc6e98b9c244526b2d773c71f", "assets/build/pylib-apple/reprlib.py": "https://files.ballistica.net/cache/ba1/25/3c/b07febf734908722d45da1ea6c57", "assets/build/pylib-apple/rlcompleter.py": "https://files.ballistica.net/cache/ba1/fd/6f/0d94c6ff1d295c4381fff0042842", - "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a8/01/35faaa35a3f951aca147d1863f11", + "assets/build/pylib-apple/runpy.py": "https://files.ballistica.net/cache/ba1/a2/94/1a3796437765db0b1506744cda8d", "assets/build/pylib-apple/sched.py": "https://files.ballistica.net/cache/ba1/6f/18/dd390ca79c5429626c7e4d3f52e8", - "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/5e/a5/be60578ed41fe83eb1cd9124a2c4", - "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/d0/d3/46fb0c3bd78b1a38c58f7823365a", + "assets/build/pylib-apple/secrets.py": "https://files.ballistica.net/cache/ba1/fb/3f/59ef3e01440f29a2d3eb193cb873", + "assets/build/pylib-apple/selectors.py": "https://files.ballistica.net/cache/ba1/4e/d1/ceb7bbee7484d8a49e8a3619766c", "assets/build/pylib-apple/shelve.py": "https://files.ballistica.net/cache/ba1/9b/7b/ae49077c735a6347f0711d0ecbb9", - "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/7f/24/3dd0f393ff5d88dba1eef618e3cf", - "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/0b/3f/191461e95650816203174656fb58", + "assets/build/pylib-apple/shlex.py": "https://files.ballistica.net/cache/ba1/9c/99/a93fe9fb09dbba3272bb202aa7eb", + "assets/build/pylib-apple/shutil.py": "https://files.ballistica.net/cache/ba1/48/92/1894bd52237ac84f9c3b0449d825", "assets/build/pylib-apple/signal.py": "https://files.ballistica.net/cache/ba1/1d/94/28fcd21e46fd2df5d11fd36b8a16", - "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/b7/95/4d84e3aaf5c2bd15dfba3fb492e2", - "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/74/25/b2a885dc3ec86528497fa22b44d2", - "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/2c/cc/55e63d5083abe53feaa60b28ad9d", + "assets/build/pylib-apple/site.py": "https://files.ballistica.net/cache/ba1/81/4e/031e216c8c1f87051d623ff84905", + "assets/build/pylib-apple/smtpd.py": "https://files.ballistica.net/cache/ba1/5c/e8/9a963624c83a1954ee852bf9c789", + "assets/build/pylib-apple/smtplib.py": "https://files.ballistica.net/cache/ba1/14/83/9acf640b895fd35c6e342f2f5025", "assets/build/pylib-apple/sndhdr.py": "https://files.ballistica.net/cache/ba1/14/6a/c95a945f5f442e33567069ff95bd", - "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/38/33/369517fa47cab8bf4bc020986108", - "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/4b/d2/913b77ec0f800ec101e82e9e9721", + "assets/build/pylib-apple/socket.py": "https://files.ballistica.net/cache/ba1/88/b3/f0c30602772d32d5a2b05bb8448c", + "assets/build/pylib-apple/socketserver.py": "https://files.ballistica.net/cache/ba1/e4/81/ae642b90684451a011e516f74241", "assets/build/pylib-apple/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/3e/dc/91b84dad3702e9ae8d915e3bd379", "assets/build/pylib-apple/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/cd/c9/8ba4cb1adcb533d433e96af9f624", "assets/build/pylib-apple/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/cb/c9/2ea904e0824aefc3d9524174fd29", "assets/build/pylib-apple/sre_compile.py": "https://files.ballistica.net/cache/ba1/7d/b1/e88453af530e58284561945056c4", "assets/build/pylib-apple/sre_constants.py": "https://files.ballistica.net/cache/ba1/95/ef/a427cef2c7463b6906f53e8811b8", "assets/build/pylib-apple/sre_parse.py": "https://files.ballistica.net/cache/ba1/f7/67/2db2e1e8de620039831f008beb29", - "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/7c/4a/5a2cd77e1d3b56e280ab08d8a03d", + "assets/build/pylib-apple/ssl.py": "https://files.ballistica.net/cache/ba1/70/cc/18a939e2d26071e9f5242ad0082b", "assets/build/pylib-apple/stat.py": "https://files.ballistica.net/cache/ba1/9b/79/01acd372faf539e10c6f87803eae", - "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/4f/f9/ba5d026d82071429b4ed353b348c", - "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/47/17/7792b18e4d5862d9269c3f2901ef", + "assets/build/pylib-apple/statistics.py": "https://files.ballistica.net/cache/ba1/8d/b8/19267f0ccef11b191b210fe24e31", + "assets/build/pylib-apple/string.py": "https://files.ballistica.net/cache/ba1/26/91/1f4fa0849214246a5befd79ffa18", "assets/build/pylib-apple/stringprep.py": "https://files.ballistica.net/cache/ba1/f0/9b/77cc5580b139f527ee84fff812fc", "assets/build/pylib-apple/struct.py": "https://files.ballistica.net/cache/ba1/10/6d/7a6c0fbac83b2680bbeda8585f8f", - "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fc/86/c516d8f9c386967ae1c34998cb4c", - "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/99/de/eb56408801fec20de1d7c4a745c8", - "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/39/4b/212a37298559a013d6cb6ff84516", - "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1e/1d/a678654eac2ee7df2ebb3f5974fb", - "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/9e/4a/d4f9f5af2ec717c5a1882df63657", + "assets/build/pylib-apple/subprocess.py": "https://files.ballistica.net/cache/ba1/fe/f0/6fa6c930a862d192b5050552768d", + "assets/build/pylib-apple/sunau.py": "https://files.ballistica.net/cache/ba1/e0/49/c14a20e198761c7dfa423f09941e", + "assets/build/pylib-apple/symbol.py": "https://files.ballistica.net/cache/ba1/98/87/854211c000e9ab3b9cf8c782c8c6", + "assets/build/pylib-apple/symtable.py": "https://files.ballistica.net/cache/ba1/1c/fa/cd6d53bd38fc81041492017c2f3c", + "assets/build/pylib-apple/sysconfig.py": "https://files.ballistica.net/cache/ba1/7d/68/79a91d965f85c8612cfe8f0a941f", "assets/build/pylib-apple/tabnanny.py": "https://files.ballistica.net/cache/ba1/f7/ba/da1e12d53ebdf326581c99c7d29b", - "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/2a/52/c64343bf4355d5f2f50a31a55480", + "assets/build/pylib-apple/tarfile.py": "https://files.ballistica.net/cache/ba1/0f/24/af09379912cf5cd831945b6964a6", "assets/build/pylib-apple/telnetlib.py": "https://files.ballistica.net/cache/ba1/48/28/786c9600155c60407fe91045d587", - "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/80/78/bea27cd8dbca1d14733b18a7f971", + "assets/build/pylib-apple/tempfile.py": "https://files.ballistica.net/cache/ba1/86/ae/9ce115d11e51c9fc4fee7df23d6f", "assets/build/pylib-apple/textwrap.py": "https://files.ballistica.net/cache/ba1/a9/d4/996c224bb06520a10b7bd86f8ee0", "assets/build/pylib-apple/this.py": "https://files.ballistica.net/cache/ba1/ae/6a/c4cfb10d365db8ca16afef89958e", - "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/ba/31/8a5be4b90aa2654e0c14fd8fe1ae", + "assets/build/pylib-apple/threading.py": "https://files.ballistica.net/cache/ba1/86/1d/12d419997981a3940c5881e253cc", "assets/build/pylib-apple/timeit.py": "https://files.ballistica.net/cache/ba1/70/2a/4dc25a032c4975b059f972c76e0f", "assets/build/pylib-apple/token.py": "https://files.ballistica.net/cache/ba1/da/77/a96be5a40982cc622f9812ee96e1", "assets/build/pylib-apple/tokenize.py": "https://files.ballistica.net/cache/ba1/49/2d/09c9c18b942346de0a1eb5932d39", - "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/42/50/c1163bfb4597bfe650d4b9116ca8", - "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/ca/e6/b80536014c91b58078f251e535fa", - "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/b5/1e/62e69ad7c2181e30fac478d4f936", + "assets/build/pylib-apple/trace.py": "https://files.ballistica.net/cache/ba1/c0/03/35378c9447884cf4bb71f6425c20", + "assets/build/pylib-apple/traceback.py": "https://files.ballistica.net/cache/ba1/85/12/83105f24c37a9d989c13a698807e", + "assets/build/pylib-apple/tracemalloc.py": "https://files.ballistica.net/cache/ba1/77/0e/a83629cfbc0a9560ace295d5c403", "assets/build/pylib-apple/tty.py": "https://files.ballistica.net/cache/ba1/ec/ea/2421fecb0e38e38d55cf0ce2b0e2", - "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/21/89/94447b44682aa438ea205a7e4a06", - "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/2a/c9/32965347ba5fa4b4fc0fab4d83c7", + "assets/build/pylib-apple/types.py": "https://files.ballistica.net/cache/ba1/f2/15/b89887617276a3df5d4d465627f1", + "assets/build/pylib-apple/typing.py": "https://files.ballistica.net/cache/ba1/0f/15/91d405d301764affaad6cb2d9ad3", "assets/build/pylib-apple/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/a2/c9/6d1cda1b043897ad0b5b043e7112", "assets/build/pylib-apple/urllib/error.py": "https://files.ballistica.net/cache/ba1/09/dd/15e4e9e675bd3242b0d5fb0f2707", - "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/62/f9/b69b5ca52b8b5951b946243b4adb", - "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/14/9d/63afd0699904a811bc6fb993d514", - "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/03/b2/ec9cd1798de4004d98d213362713", + "assets/build/pylib-apple/urllib/parse.py": "https://files.ballistica.net/cache/ba1/cd/33/817e945bd2ebb157c5949cd2108d", + "assets/build/pylib-apple/urllib/request.py": "https://files.ballistica.net/cache/ba1/70/be/44b33af87064de4e5e387d213764", + "assets/build/pylib-apple/urllib/response.py": "https://files.ballistica.net/cache/ba1/80/27/642b1adb216af47e5401647276e7", "assets/build/pylib-apple/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ba/83/b9c99d5b11514b827d64f9fd6d33", "assets/build/pylib-apple/uu.py": "https://files.ballistica.net/cache/ba1/02/7a/d6fed645dcff0d4aff84e3cea58e", - "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/02/79/8cb316b2206be3cca67e6680036a", + "assets/build/pylib-apple/uuid.py": "https://files.ballistica.net/cache/ba1/f1/2a/9e44739fed968c3b750184ff1b65", "assets/build/pylib-apple/warnings.py": "https://files.ballistica.net/cache/ba1/65/5c/5e6cf7bf573f4fae2344c68bed04", - "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/4d/a0/b093aa87d58ab11be45e1e8dd05a", - "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/2a/74/9f4d631ef9a7e998ec9fa040fea9", + "assets/build/pylib-apple/wave.py": "https://files.ballistica.net/cache/ba1/fe/5d/63cca128c210230749e7ab44d94c", + "assets/build/pylib-apple/weakref.py": "https://files.ballistica.net/cache/ba1/63/6c/284c757222502999672ca59f008b", "assets/build/pylib-apple/webbrowser.py": "https://files.ballistica.net/cache/ba1/a1/e0/c43c65b7330f037c51ee10009ba7", "assets/build/pylib-apple/xdrlib.py": "https://files.ballistica.net/cache/ba1/b7/83/ac6e63a15cead601475a09350849", "assets/build/pylib-apple/xml/__init__.py": "https://files.ballistica.net/cache/ba1/3f/bd/6072ff48fc04c3af1dcbb8005adf", "assets/build/pylib-apple/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/97/e8/e3ea178b500cab89a64c7e5d3d81", "assets/build/pylib-apple/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/31/12/a48c1565e682174e10bbbcf5b819", "assets/build/pylib-apple/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/7b/7d/a7cea1700813d14a0909085369b0", - "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/a1/36/34d0eea18937a0e2ae01a817cb72", + "assets/build/pylib-apple/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/91/0e/e275bf104b202bf61654bd70d525", "assets/build/pylib-apple/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/97/0c/a28bca0a0bd221a70cb6377f1bef", - "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/15/c2/a7bb9dbeebf7e3082b9fc932b008", + "assets/build/pylib-apple/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/cb/1c/c49400fc90343e994e3fcf2363d0", "assets/build/pylib-apple/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/bc/df/46a7e10fac8b5dd6c0361aaef6a2", - "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/03/bc/e639a0fd394cf537f9c29993179b", - "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/e9/83/50f2fae2edafbaacfd9e278d9d7b", + "assets/build/pylib-apple/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/40/f2/d8f3279b82679d625fc279e557f3", + "assets/build/pylib-apple/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/64/34/862bd6db5b788e67e6d97cdfffcc", "assets/build/pylib-apple/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/73/a6/0633b38a4c9db85b021447c9457c", - "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/24/b4/16f98ca0ce1d018ef86c370bba72", + "assets/build/pylib-apple/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/a7/be/4b2fa18753ae4f83215c2271918f", "assets/build/pylib-apple/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/87/76/e8e68d23559ff4b14e010dad2a32", "assets/build/pylib-apple/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/ec/0cd835d512fa5ca9bcada07c27ab", "assets/build/pylib-apple/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/2c/3e/7f79fe325f250709ab2c01bedada", "assets/build/pylib-apple/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/58/65/6ea61e8a28312897baa67deeac2e", - "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/9c/f8/3660a1de69e4e8c18a99ee85ad07", + "assets/build/pylib-apple/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/7c/a4/ee44447f0bf4dab1fdaa5401a41c", "assets/build/pylib-apple/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/82/3b/a63de9807fe5698ad1283e70e261", - "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/1a/ac/411c7140a4dc1f075acad11a899f", + "assets/build/pylib-apple/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c1/7b/bffc2cc52335fab24863a87692a9", "assets/build/pylib-apple/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/1c/69/1ebd1278f335c1f6283bded9e89b", "assets/build/pylib-apple/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/2f/a5/38f2998b6ed24c674aa04a32d899", "assets/build/pylib-apple/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/41/e7/9fcf670b326880d5452a7cc4cc7c", "assets/build/pylib-apple/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/7a/ee/61deeb7b264890b54b1cbb894cf8", - "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/64/07/7249de27571c45a051572d3e5f3d", - "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/0b/6d/4d9c74b62db0068856f63ad0f29e", + "assets/build/pylib-apple/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/2f/a8/99cffeaf4f101014916d3415cdbd", + "assets/build/pylib-apple/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/8e/29/b94fdc590de0d74331e523cd2eae", "assets/build/pylib-apple/zipapp.py": "https://files.ballistica.net/cache/ba1/bc/39/2d745b00133cddd197c3a4ee400e", - "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/f2/7b/5614676b914cfbed897919046f1c", + "assets/build/pylib-apple/zipfile.py": "https://files.ballistica.net/cache/ba1/c3/1f/d3ed0dbc84826a76cf7d4fe32283", "assets/build/pylib-apple/zipimport.py": "https://files.ballistica.net/cache/ba1/1f/fa/e11a7b5e9b1191a74bb80f48dc9f", - "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/8d/de/800e3c97af2ce219a02b684e477c", - "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/e3/4d/ef2b666ed2c1dce82f73407caf68", - "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/19/76/d5f179d480b26ffe56308415d28b", - "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/c8/84/01422f9047df7c561eb7478643bc", - "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/4e/b2/30cb4f1924fe6ae528d2757ddf32", - "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/4f/14/d3564fabfce0e2a079e5d911f35a", - "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/51/d8/730d55a2ce2e2a1b5a1b738a4472", - "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/95/17/04dee43b02b0a026d763cc07954b", - "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/b4/c7/522ae34b6b5f22f92b4ad3b4ceb2", - "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/38/9d/6d790cb3eb0b896b4821a0ff8e6f", - "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/b8/82/4ee93baae05d17c96d0ffc45430d", - "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/35/63/1ffc72d11aa065b98fa10f1a42e7", - "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/c8/80/83f110f0afd6cd6e8a856ca860b4", - "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/de/b9/666391fb24c5d179bd3950a89e73", - "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/1b/85/a4d05514f2e04858415a4d38741f", - "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/b3/9c/34a5681ae0f2f473003c41598145", - "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/c8/e4/b4652214320f087102b1a3419fd4", - "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/2e/90/98ac82df2ae5e46bec283f5d9a9b", - "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/8c/8f/316765421523e677d5941258c651", - "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/87/cf/4ea7db642edd5e03a46af41576aa", - "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/24/d8/f17662d3c56ff611683657ddd2c5", - "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/d7/68/2852343867a48ca04f2bbd0abed0", - "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/f7/e3/45f3091b672acccbf3578b4bfe39", - "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/4d/38/7ead86d7ccf1914bcfbb6582fb5e", - "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/ed/68/e8042e91668ad33eb36561c6b629", - "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/27/a0/49e56fe84dc098f72ff6b12f0408", - "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/30/07/effc3f8a77e3938440146755f087", - "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/c8/a2/ccdcef00ada2b993938928f29a66", - "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/fd/a9/0564bf549953a848b725dcd1ec8a", - "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/10/1f/985bb1cb8d65a055554bccd1ed7c", - "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/33/11/5a33331b18e47f49acb46a14a02b", - "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/85/8d/6b43a04ea1324aafb8c8306a7264", - "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/08/6a/8e74bff951fdf6f20f0e2feed891", - "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/a6/a1/c8375b852ec72779bcfc13ef1d3b", - "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/1e/d6/bfbbd4179c10779da86bce93db27", - "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/dd/52/1437c93c7ae7adec7dcd020a0a69", - "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/be/93/d94a12ed9a2fb4a4fe30c7bc1d14", - "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/d7/71/e781ddfbc40f9946bec4e587847f", - "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/27/e6/b72e931d1cc112bc6172509afe8b", - "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/c2/d6/482bda4e439a5d7cb339528c59fb", - "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/a2/ae/8f0117dacefaf1518a508e4f84f1", - "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/91/b9/efde15bd959340cfe6235dd8aeb5", - "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/fb/4d/98a28fe2109ffc2373bc4071eed0", - "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/22/74/724cad55596b66aca60c4a6722ea", + "assets/build/pylib-apple/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/0d/98/0cf009982c33ab3cfec1cd201628", + "assets/build/pylib-apple/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/86/c5/8825cb59916a302b81a0b540e6ec", + "assets/build/pylib-apple/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/23/43/a1f97306955413a1100b70e04d10", + "assets/build/pylib-apple/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/1a/99/08ccb8b87d05018a64b84d53ef30", + "assets/build/windows/Win32/DLLs/_asyncio.pyd": "https://files.ballistica.net/cache/ba1/22/52/ad23d03bc2e3fc4dfde1f89e197d", + "assets/build/windows/Win32/DLLs/_asyncio_d.pyd": "https://files.ballistica.net/cache/ba1/4c/5a/941b11f15c5fe3c685885bc19908", + "assets/build/windows/Win32/DLLs/_bz2.pyd": "https://files.ballistica.net/cache/ba1/60/0e/6d1e3c3e82f081976e61c6d1efe4", + "assets/build/windows/Win32/DLLs/_bz2_d.pyd": "https://files.ballistica.net/cache/ba1/bb/cf/e717d28ffef8f6c2648271961aa6", + "assets/build/windows/Win32/DLLs/_ctypes.pyd": "https://files.ballistica.net/cache/ba1/d2/42/376535f2b5ea4c6e987702456494", + "assets/build/windows/Win32/DLLs/_ctypes_d.pyd": "https://files.ballistica.net/cache/ba1/e0/d1/188181bd1440d3d6b17d9cc430a6", + "assets/build/windows/Win32/DLLs/_ctypes_test.pyd": "https://files.ballistica.net/cache/ba1/37/ce/338c5f51f465972a4495e8bf10fc", + "assets/build/windows/Win32/DLLs/_ctypes_test_d.pyd": "https://files.ballistica.net/cache/ba1/fb/5e/f3252c380be87ac072cf1c29d7d0", + "assets/build/windows/Win32/DLLs/_decimal.pyd": "https://files.ballistica.net/cache/ba1/29/fe/20e8c5d844f30f341253c679d565", + "assets/build/windows/Win32/DLLs/_decimal_d.pyd": "https://files.ballistica.net/cache/ba1/a1/db/6f8ea21df65f20d9309f63938af6", + "assets/build/windows/Win32/DLLs/_elementtree.pyd": "https://files.ballistica.net/cache/ba1/9c/86/3f39e211d1067e8483a657c368b2", + "assets/build/windows/Win32/DLLs/_elementtree_d.pyd": "https://files.ballistica.net/cache/ba1/cc/a7/2fa7de781454cc7ab0416b0bee88", + "assets/build/windows/Win32/DLLs/_hashlib.pyd": "https://files.ballistica.net/cache/ba1/0c/8e/5abee214051dd1b87d4309a136c9", + "assets/build/windows/Win32/DLLs/_hashlib_d.pyd": "https://files.ballistica.net/cache/ba1/9f/fd/0fd9bac57aa9f94d2209e60f2546", + "assets/build/windows/Win32/DLLs/_lzma.pyd": "https://files.ballistica.net/cache/ba1/0a/c1/067ffaf2a3bbea4c51ccb76acd1f", + "assets/build/windows/Win32/DLLs/_lzma_d.pyd": "https://files.ballistica.net/cache/ba1/df/b8/d21ef8ca37220c949d85e5ea874c", + "assets/build/windows/Win32/DLLs/_msi.pyd": "https://files.ballistica.net/cache/ba1/d2/66/e9e950e59e659d4542d75e12f54e", + "assets/build/windows/Win32/DLLs/_msi_d.pyd": "https://files.ballistica.net/cache/ba1/ae/5f/bfdf8227e62166423249d63e56d3", + "assets/build/windows/Win32/DLLs/_multiprocessing.pyd": "https://files.ballistica.net/cache/ba1/37/1b/98a07c79caea8d8998f3e07a5f9f", + "assets/build/windows/Win32/DLLs/_multiprocessing_d.pyd": "https://files.ballistica.net/cache/ba1/78/63/316ff1e334e1fd24ffe2b643f8d8", + "assets/build/windows/Win32/DLLs/_overlapped.pyd": "https://files.ballistica.net/cache/ba1/7e/9e/f8eaeb281e028b5a78e4de2f0268", + "assets/build/windows/Win32/DLLs/_overlapped_d.pyd": "https://files.ballistica.net/cache/ba1/b4/d8/853dda49597b0a8783ed14c7bbb8", + "assets/build/windows/Win32/DLLs/_queue.pyd": "https://files.ballistica.net/cache/ba1/a6/56/42f28a2d1809c749cb7e56cb1cf0", + "assets/build/windows/Win32/DLLs/_queue_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ea/2196a613d1682e75c9e712fc7aa7", + "assets/build/windows/Win32/DLLs/_socket.pyd": "https://files.ballistica.net/cache/ba1/5a/1c/e64b2a89f4df0c962fa2cb17234e", + "assets/build/windows/Win32/DLLs/_socket_d.pyd": "https://files.ballistica.net/cache/ba1/da/f4/f1f1b9f069f9f7b251a38cb3fe55", + "assets/build/windows/Win32/DLLs/_sqlite3.pyd": "https://files.ballistica.net/cache/ba1/7e/86/26168e1e46e318234b888e88e844", + "assets/build/windows/Win32/DLLs/_sqlite3_d.pyd": "https://files.ballistica.net/cache/ba1/e4/12/18fc7db11be959305c49809851b3", + "assets/build/windows/Win32/DLLs/_ssl.pyd": "https://files.ballistica.net/cache/ba1/ce/8a/abc5bc6c360e7de2664a286207ed", + "assets/build/windows/Win32/DLLs/_ssl_d.pyd": "https://files.ballistica.net/cache/ba1/2c/d7/25b290950abfdea9d1b94ad417fd", + "assets/build/windows/Win32/DLLs/_testbuffer.pyd": "https://files.ballistica.net/cache/ba1/b6/24/13068ed8e795ab35ceabae97e2a3", + "assets/build/windows/Win32/DLLs/_testbuffer_d.pyd": "https://files.ballistica.net/cache/ba1/9e/9a/cc172f66b18c77b92cf783bcc6ed", + "assets/build/windows/Win32/DLLs/_testcapi.pyd": "https://files.ballistica.net/cache/ba1/2e/9e/3a1ed361d7c4f8db175fd8026334", + "assets/build/windows/Win32/DLLs/_testcapi_d.pyd": "https://files.ballistica.net/cache/ba1/78/79/08eb4093f32721be1a3e354c3606", + "assets/build/windows/Win32/DLLs/_testconsole.pyd": "https://files.ballistica.net/cache/ba1/25/93/1c067e2954da7ac347035d97aa3f", + "assets/build/windows/Win32/DLLs/_testconsole_d.pyd": "https://files.ballistica.net/cache/ba1/d8/eb/3e0e733d974f900a8ab62d97ebcd", + "assets/build/windows/Win32/DLLs/_testimportmultiple.pyd": "https://files.ballistica.net/cache/ba1/a9/84/5552aa6b0b0a595db7c2683079b9", + "assets/build/windows/Win32/DLLs/_testimportmultiple_d.pyd": "https://files.ballistica.net/cache/ba1/1d/c3/92e78838956fe374163bae5608b5", + "assets/build/windows/Win32/DLLs/_testinternalcapi.pyd": "https://files.ballistica.net/cache/ba1/a0/36/a82fefcc8b835249363dbb1efd42", + "assets/build/windows/Win32/DLLs/_testinternalcapi_d.pyd": "https://files.ballistica.net/cache/ba1/50/9b/87d58f57ef02c4f7652d5c396676", + "assets/build/windows/Win32/DLLs/_testmultiphase.pyd": "https://files.ballistica.net/cache/ba1/59/79/7547cccb4168b1647ecc29155a30", + "assets/build/windows/Win32/DLLs/_testmultiphase_d.pyd": "https://files.ballistica.net/cache/ba1/b5/1b/c9091db3b0ca4d7beb759ef5abd5", + "assets/build/windows/Win32/DLLs/_tkinter.pyd": "https://files.ballistica.net/cache/ba1/bb/80/3298b565d570542b206322d986f7", + "assets/build/windows/Win32/DLLs/_tkinter_d.lib": "https://files.ballistica.net/cache/ba1/7a/4b/2036e3ffd4e3f29c37d05262c687", + "assets/build/windows/Win32/DLLs/_tkinter_d.pyd": "https://files.ballistica.net/cache/ba1/4a/e9/c65557c813db399f548ec90cb33d", + "assets/build/windows/Win32/DLLs/_uuid.pyd": "https://files.ballistica.net/cache/ba1/99/21/527dbc767bd0db38bc7bdf81a5d3", + "assets/build/windows/Win32/DLLs/_uuid_d.pyd": "https://files.ballistica.net/cache/ba1/b7/41/54b21a07edad343b2c65ea37368d", + "assets/build/windows/Win32/DLLs/_zoneinfo.pyd": "https://files.ballistica.net/cache/ba1/fd/54/86755ec70a6681438dd3793d6e94", + "assets/build/windows/Win32/DLLs/_zoneinfo_d.pyd": "https://files.ballistica.net/cache/ba1/e7/46/21aefbc51dc3f062bf3b44484a0f", + "assets/build/windows/Win32/DLLs/libcrypto-1_1.dll": "https://files.ballistica.net/cache/ba1/4f/2a/9cf37a97aae4b567ded5236de431", "assets/build/windows/Win32/DLLs/libffi-7.dll": "https://files.ballistica.net/cache/ba1/0a/62/9908b69e4aace0659b7ba62772bf", - "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/51/de/d89dfbf61686f9f7c37f1bcba5ef", - "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/c0/f5/9724a4694a3c9ecc879408c115bc", - "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/c2/41/51027410073a6238a056263b5450", - "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/ca/22/1f7cddb73b48ffd50f08081c27c3", - "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/2b/33/f32faece43ae5a1b58951800355a", - "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/54/83/e80947d5ed0a46e68312773653fb", - "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/af/db/13085b111321d3a4fdd843ffcf54", - "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/d2/23/82ec454973363b65f92440e4d967", - "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/60/2f/ff01f24a6876e8f9e821c3851664", + "assets/build/windows/Win32/DLLs/libssl-1_1.dll": "https://files.ballistica.net/cache/ba1/ec/da/2587760334af1ca1f641c68af262", + "assets/build/windows/Win32/DLLs/pyexpat.pyd": "https://files.ballistica.net/cache/ba1/f1/9d/46f667c13fd18325fab26f88f4fb", + "assets/build/windows/Win32/DLLs/pyexpat_d.pyd": "https://files.ballistica.net/cache/ba1/ba/ac/36f6761a81383223574327c15a84", + "assets/build/windows/Win32/DLLs/python_lib.cat": "https://files.ballistica.net/cache/ba1/70/9b/fc186dc7eb3e8842429fad8782cd", + "assets/build/windows/Win32/DLLs/python_tools.cat": "https://files.ballistica.net/cache/ba1/41/ef/7fb20d50587028ae9174b5e33cc7", + "assets/build/windows/Win32/DLLs/select.pyd": "https://files.ballistica.net/cache/ba1/96/86/c175242f93f83ceb65afc2f58038", + "assets/build/windows/Win32/DLLs/select_d.pyd": "https://files.ballistica.net/cache/ba1/12/a5/b2981a81fd12e34a51e87e413f96", + "assets/build/windows/Win32/DLLs/sqlite3.dll": "https://files.ballistica.net/cache/ba1/f8/bc/7bde605127c7885bc8e333a9a6a1", + "assets/build/windows/Win32/DLLs/sqlite3_d.dll": "https://files.ballistica.net/cache/ba1/57/08/f35bd104a0b19ad84a049baaa0f5", "assets/build/windows/Win32/DLLs/tcl86t.dll": "https://files.ballistica.net/cache/ba1/45/33/a98580a5a3794c22b8d487a256db", "assets/build/windows/Win32/DLLs/tk86t.dll": "https://files.ballistica.net/cache/ba1/84/35/2bfd12b142f4fe1ff277e9ce3940", - "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/5c/47/0d7b57ae78def60ca263f35b97ca", - "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/fe/20/1d7bde0812563ab4b585e03a698a", - "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/50/ea/951f98c6f187f25757dae10b8337", - "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/28/13/8857b36063d66e952434a3973853", - "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/3d/b8/861d93720bc3cbcfaaae4b83b244", + "assets/build/windows/Win32/DLLs/unicodedata.pyd": "https://files.ballistica.net/cache/ba1/96/c3/5bb5f4529d89652d21d3230a76a3", + "assets/build/windows/Win32/DLLs/unicodedata_d.pyd": "https://files.ballistica.net/cache/ba1/91/00/5716068772dfde8b63a045b692c3", + "assets/build/windows/Win32/DLLs/winsound.pyd": "https://files.ballistica.net/cache/ba1/e4/0b/5ad587d3f0169b050bdbfc8d9432", + "assets/build/windows/Win32/DLLs/winsound_d.pyd": "https://files.ballistica.net/cache/ba1/af/8f/e7da8fbcf5db9a28d4ccadf493ce", + "assets/build/windows/Win32/Lib/__future__.py": "https://files.ballistica.net/cache/ba1/28/b0/3c7d3d3cfabd14056c5955905de9", "assets/build/windows/Win32/Lib/__phello__.foo.py": "https://files.ballistica.net/cache/ba1/3b/8b/939d78ee0764fdf52f3098127d6c", + "assets/build/windows/Win32/Lib/_aix_support.py": "https://files.ballistica.net/cache/ba1/bc/4c/8e5bf871e7543e51896cdee31412", "assets/build/windows/Win32/Lib/_bootlocale.py": "https://files.ballistica.net/cache/ba1/09/0e/9293a47b0ed243fc7482ab56b330", - "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/00/3b/57aa68a37cfe29103b6c1f23d59b", + "assets/build/windows/Win32/Lib/_bootsubprocess.py": "https://files.ballistica.net/cache/ba1/7b/c0/88d4a649d94551456dc8702f3739", + "assets/build/windows/Win32/Lib/_collections_abc.py": "https://files.ballistica.net/cache/ba1/50/5b/8687e8abc95677bb91b9bd156bd9", "assets/build/windows/Win32/Lib/_compat_pickle.py": "https://files.ballistica.net/cache/ba1/46/06/1015248f3c4416edb60e7830aecb", "assets/build/windows/Win32/Lib/_compression.py": "https://files.ballistica.net/cache/ba1/db/90/20ab62fe1558d9ec656e5ed43d0f", - "assets/build/windows/Win32/Lib/_dummy_thread.py": "https://files.ballistica.net/cache/ba1/41/7b/e6e2723be021e2c4a5ca9de01ea5", "assets/build/windows/Win32/Lib/_markupbase.py": "https://files.ballistica.net/cache/ba1/0b/b4/b2b374394442d3ceac5659174306", - "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/08/7d/966879d8875ca07403db2f0ccb6b", + "assets/build/windows/Win32/Lib/_osx_support.py": "https://files.ballistica.net/cache/ba1/2b/fd/127d8cfeb2d06d9bde24d25d2ec8", "assets/build/windows/Win32/Lib/_py_abc.py": "https://files.ballistica.net/cache/ba1/ad/d8/684169061fcf843ea3541d4a27a6", "assets/build/windows/Win32/Lib/_pydecimal.py": "https://files.ballistica.net/cache/ba1/1d/27/479bf918f1c1d21e41a793adfcf1", - "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/ad/1d/2c6c4bb1acb9184f47a50df117f1", + "assets/build/windows/Win32/Lib/_pyio.py": "https://files.ballistica.net/cache/ba1/95/c4/f1bf6ca088ede4e86edb8413c399", "assets/build/windows/Win32/Lib/_sitebuiltins.py": "https://files.ballistica.net/cache/ba1/f9/0d/fb8aa34c3c72f100ea0de27b6891", - "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/bb/b0/9a4289fffa3a74dd5fdab6128bf0", + "assets/build/windows/Win32/Lib/_strptime.py": "https://files.ballistica.net/cache/ba1/1f/d3/d9d48711d7c2f8272d85172bc142", "assets/build/windows/Win32/Lib/_threading_local.py": "https://files.ballistica.net/cache/ba1/6c/8a/9ac70e582f8ec4da33694a8a2409", - "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/d3/e3/ff1d4002e752d1410a3167c00642", - "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/c1/db/33e9537d855bd8c0e34660099463", - "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/f0/05/54f64f43dd8a1269b42495106a8b", - "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/fe/66/fc51a4ead5b55dbf09bad7dee9cf", - "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/46/34/8dc5b7f13686ed4f3f996effeca1", - "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/86/d1/93d66a0c3eca891bcba343c6ed71", - "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/6d/8d/403f343399d118de9e3c42bf15ae", - "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/23/99/3a675e89dbd967a1ae1f9b58df2b", + "assets/build/windows/Win32/Lib/_weakrefset.py": "https://files.ballistica.net/cache/ba1/98/8f/0eefe23bddf158278317f3c713a9", + "assets/build/windows/Win32/Lib/abc.py": "https://files.ballistica.net/cache/ba1/27/ec/e418babd57b0f811976a6736f269", + "assets/build/windows/Win32/Lib/aifc.py": "https://files.ballistica.net/cache/ba1/c8/7e/7a303b0e1b32c42dc2878e80c931", + "assets/build/windows/Win32/Lib/antigravity.py": "https://files.ballistica.net/cache/ba1/06/68/e45f30bcc009d8e4647b2d881cf8", + "assets/build/windows/Win32/Lib/argparse.py": "https://files.ballistica.net/cache/ba1/42/fd/ca8f9760542715ea59ca7f8f6fe7", + "assets/build/windows/Win32/Lib/ast.py": "https://files.ballistica.net/cache/ba1/a4/26/cbfec43c646695dde17b01429d13", + "assets/build/windows/Win32/Lib/asynchat.py": "https://files.ballistica.net/cache/ba1/65/35/92f80618fb7959c1df4c945c4d28", + "assets/build/windows/Win32/Lib/asyncio/__init__.py": "https://files.ballistica.net/cache/ba1/47/e8/0aeb647d8a81881454fd46596290", "assets/build/windows/Win32/Lib/asyncio/__main__.py": "https://files.ballistica.net/cache/ba1/fb/f0/a4fad40aea4845a907af269fa159", - "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/8d/61/9aabcbec5e16b10b60d9816bf168", - "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/11/55/a6611b2c4f69b7aec0256fac7c04", + "assets/build/windows/Win32/Lib/asyncio/base_events.py": "https://files.ballistica.net/cache/ba1/44/88/2ab54dda65f1c6f7fc735ea3ed8a", + "assets/build/windows/Win32/Lib/asyncio/base_futures.py": "https://files.ballistica.net/cache/ba1/c8/13/786974d187c40e2b50174f73f040", "assets/build/windows/Win32/Lib/asyncio/base_subprocess.py": "https://files.ballistica.net/cache/ba1/0e/c0/3384fbba49486643e507a49770ee", "assets/build/windows/Win32/Lib/asyncio/base_tasks.py": "https://files.ballistica.net/cache/ba1/28/9d/b3adf943122909eb73dd216ef179", "assets/build/windows/Win32/Lib/asyncio/constants.py": "https://files.ballistica.net/cache/ba1/28/3e/49ec61050acc59c2bb5761d5332e", "assets/build/windows/Win32/Lib/asyncio/coroutines.py": "https://files.ballistica.net/cache/ba1/22/0f/65ce7b4328dbdf3a300616755b5f", - "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/b1/05/2e1dd073cc595bcc07f6eb4a42dc", - "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/00/70/1a9e71b51410e1d7a674201c5956", + "assets/build/windows/Win32/Lib/asyncio/events.py": "https://files.ballistica.net/cache/ba1/67/3f/4debf11f78e291da31b6db00d533", + "assets/build/windows/Win32/Lib/asyncio/exceptions.py": "https://files.ballistica.net/cache/ba1/8e/d5/3836a190b2e188ab2889cfd572b9", "assets/build/windows/Win32/Lib/asyncio/format_helpers.py": "https://files.ballistica.net/cache/ba1/40/98/952c80350fd35c81680c0d565aa1", - "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/9f/f7/f1b103c12bfec7aff8fc17d2b730", - "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/10/f8/b21927b7d94ce1db0643d50ef4a2", + "assets/build/windows/Win32/Lib/asyncio/futures.py": "https://files.ballistica.net/cache/ba1/a3/ea/88fb555361525076067b5bf5fd9a", + "assets/build/windows/Win32/Lib/asyncio/locks.py": "https://files.ballistica.net/cache/ba1/e4/74/15884a54a0096b9aa3e60ac6f348", "assets/build/windows/Win32/Lib/asyncio/log.py": "https://files.ballistica.net/cache/ba1/d6/d3/380f88b21d3b8ef14f758f283af0", - "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/c5/f7/4442452b93b5c09747219e6a2713", + "assets/build/windows/Win32/Lib/asyncio/proactor_events.py": "https://files.ballistica.net/cache/ba1/ed/84/84d50b1c795e686d8049f5ba3efd", "assets/build/windows/Win32/Lib/asyncio/protocols.py": "https://files.ballistica.net/cache/ba1/95/49/8df484a9d8a0fb3259f90ef5c96c", - "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/61/ba/dbf2d71075f7a5bc7633261c9c3b", - "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/7b/41/4f6c78ebc75f4ed41d97d9289554", - "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/18/2a/70a2893571a2af3092fef753b57f", - "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/47/7a/942926b07057203c2e7288f59815", + "assets/build/windows/Win32/Lib/asyncio/queues.py": "https://files.ballistica.net/cache/ba1/9d/89/0b6df7636a9293a332a94ef026d3", + "assets/build/windows/Win32/Lib/asyncio/runners.py": "https://files.ballistica.net/cache/ba1/6c/49/d7b9de6bdcf033dd1ef88d74791b", + "assets/build/windows/Win32/Lib/asyncio/selector_events.py": "https://files.ballistica.net/cache/ba1/97/93/65ddcf1af3cd4d63d76432f283ad", + "assets/build/windows/Win32/Lib/asyncio/sslproto.py": "https://files.ballistica.net/cache/ba1/84/10/cbc702706139eb7301d56b9dbeff", "assets/build/windows/Win32/Lib/asyncio/staggered.py": "https://files.ballistica.net/cache/ba1/9f/52/01396863292b0b31dfbc92c03907", "assets/build/windows/Win32/Lib/asyncio/streams.py": "https://files.ballistica.net/cache/ba1/23/a6/917ae117a4057839242a360c1fd5", "assets/build/windows/Win32/Lib/asyncio/subprocess.py": "https://files.ballistica.net/cache/ba1/7d/47/eeed1a313027e5ee77acfaa0dc0a", - "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/ce/d2/5a2220b412f1942e7580bbf942de", - "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/c4/85/42d04f243299aeb34e7df9aca184", + "assets/build/windows/Win32/Lib/asyncio/tasks.py": "https://files.ballistica.net/cache/ba1/09/3c/85845d812f4d76ed858ae4a5337a", + "assets/build/windows/Win32/Lib/asyncio/threads.py": "https://files.ballistica.net/cache/ba1/8b/ec/747fd095b73a211ce132a135270d", + "assets/build/windows/Win32/Lib/asyncio/transports.py": "https://files.ballistica.net/cache/ba1/69/90/f354c7899dfc7c116f3ea56d4a93", "assets/build/windows/Win32/Lib/asyncio/trsock.py": "https://files.ballistica.net/cache/ba1/46/88/ab7c4a2f09e5a3b9f675d5f89b2e", - "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/7d/a1/000d2bec4813db2295c888991800", - "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/e2/32/e5093d00d060bf24a02335ba6d36", + "assets/build/windows/Win32/Lib/asyncio/unix_events.py": "https://files.ballistica.net/cache/ba1/92/68/9fe73e30046c65c126771abf5361", + "assets/build/windows/Win32/Lib/asyncio/windows_events.py": "https://files.ballistica.net/cache/ba1/76/e5/194c508e2540f13df818a9c5fd2c", "assets/build/windows/Win32/Lib/asyncio/windows_utils.py": "https://files.ballistica.net/cache/ba1/bd/ed/ddb1d357625e17352ed9928cb9e5", - "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/7c/9e/3da840852d4b2389cb7c286d016b", - "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/d2/54/a6f18991ae74f56b4779e881a199", - "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/f1/db/04f5a5f69b53227b2cea2a9ed417", - "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ff/de/25906a6ac05fb00f147442afb165", - "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/ab/40/e561035a5c9d84d0346e2a1b4ba1", - "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/61/15/adef78493f0e2509db7590ea293c", - "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/56/8e/02e250e073deb65c6c6d0c81fb4f", + "assets/build/windows/Win32/Lib/asyncore.py": "https://files.ballistica.net/cache/ba1/eb/9f/ac2902b088827a0bb1983dda3ad2", + "assets/build/windows/Win32/Lib/base64.py": "https://files.ballistica.net/cache/ba1/2f/bb/c8b49dbb0e7bac27e0f17c4b9a8b", + "assets/build/windows/Win32/Lib/bdb.py": "https://files.ballistica.net/cache/ba1/2d/fa/6414bc4afadb24af4379a4ea3e7f", + "assets/build/windows/Win32/Lib/binhex.py": "https://files.ballistica.net/cache/ba1/ea/3b/4934f59948cd40a4d47462ae8a7f", + "assets/build/windows/Win32/Lib/bisect.py": "https://files.ballistica.net/cache/ba1/89/bc/f8684bfc3fb49a15695e005dfcc5", + "assets/build/windows/Win32/Lib/bz2.py": "https://files.ballistica.net/cache/ba1/51/ab/2a9647445ad2d7aa9889a4b35d28", + "assets/build/windows/Win32/Lib/cProfile.py": "https://files.ballistica.net/cache/ba1/c3/00/d6ba42740a6a153aa1c5bf6e15e5", "assets/build/windows/Win32/Lib/calendar.py": "https://files.ballistica.net/cache/ba1/19/df/5fcc786979f9697a113d8ba9363f", - "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/13/3b/49301cdd99d04c2cb027dc8bf954", + "assets/build/windows/Win32/Lib/cgi.py": "https://files.ballistica.net/cache/ba1/aa/6e/4a622920aa2e19446482077506c5", "assets/build/windows/Win32/Lib/cgitb.py": "https://files.ballistica.net/cache/ba1/77/44/358b17a4fc4b06db2d69d51bb1ff", "assets/build/windows/Win32/Lib/chunk.py": "https://files.ballistica.net/cache/ba1/16/08/2708ae495aab5e54fe27da06f633", "assets/build/windows/Win32/Lib/cmd.py": "https://files.ballistica.net/cache/ba1/cc/83/f3046ec22ee06c45649da6add0c7", "assets/build/windows/Win32/Lib/code.py": "https://files.ballistica.net/cache/ba1/61/31/f1ff9d938a5f29efe83838362b52", - "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/1f/64/412ff1b173e741fec018e4013213", - "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/07/8a/5015a1453f0645dd58f5befa8fbc", - "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/89/aa/c75b4a114fb7caf9554f7e0030ea", - "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/ee/9e/1b14e35345f9208b897b8db40100", + "assets/build/windows/Win32/Lib/codecs.py": "https://files.ballistica.net/cache/ba1/e1/ab/8cc272e5925ec1129d176c15c81a", + "assets/build/windows/Win32/Lib/codeop.py": "https://files.ballistica.net/cache/ba1/6d/b0/f7f92e64ca371e9c307e637d472a", + "assets/build/windows/Win32/Lib/collections/__init__.py": "https://files.ballistica.net/cache/ba1/a7/a4/c979a01d557a822c3a3c4cd47be2", + "assets/build/windows/Win32/Lib/collections/abc.py": "https://files.ballistica.net/cache/ba1/47/0c/2287da3638e7910fecb7b32504a0", "assets/build/windows/Win32/Lib/colorsys.py": "https://files.ballistica.net/cache/ba1/e8/1f/297a0b5e14be06d3f3f554c9725e", - "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/60/d6/1d1435455b13730345ed85a54cd3", + "assets/build/windows/Win32/Lib/compileall.py": "https://files.ballistica.net/cache/ba1/df/16/82206d2b01cc4a0bf6d6f2ec52af", "assets/build/windows/Win32/Lib/concurrent/__init__.py": "https://files.ballistica.net/cache/ba1/5b/ec/08df2761a442b8ff6fe7d52fcc89", "assets/build/windows/Win32/Lib/concurrent/futures/__init__.py": "https://files.ballistica.net/cache/ba1/c7/46/341d04b8d611753ebc06780081ea", - "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/85/fc/0d7d7cca61f766b4409d6fbe513f", - "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/7b/d9/5cb645d05a0bfa6fc3c023c09884", - "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/ce/6c/1e79d68a25a3f0e69cf3433264cd", - "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/d9/cf/771c2ae14dd33a948e16a784a48f", - "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/0a/d0/ee6f3432112f85ec1efd7253e728", + "assets/build/windows/Win32/Lib/concurrent/futures/_base.py": "https://files.ballistica.net/cache/ba1/81/36/21912471515ec8e94fcef7a54767", + "assets/build/windows/Win32/Lib/concurrent/futures/process.py": "https://files.ballistica.net/cache/ba1/c2/eb/631cc0bc19c522e583ec52d300b3", + "assets/build/windows/Win32/Lib/concurrent/futures/thread.py": "https://files.ballistica.net/cache/ba1/dd/54/4017d80fe7f52897d60f4fef9d91", + "assets/build/windows/Win32/Lib/configparser.py": "https://files.ballistica.net/cache/ba1/5f/07/f39cf85883b16140c38745db8571", + "assets/build/windows/Win32/Lib/contextlib.py": "https://files.ballistica.net/cache/ba1/16/7e/e8ca4b4e2a997b0fdf59fb7c2197", "assets/build/windows/Win32/Lib/contextvars.py": "https://files.ballistica.net/cache/ba1/97/a6/19610cddd01bb44cc6f9d3a21293", "assets/build/windows/Win32/Lib/copy.py": "https://files.ballistica.net/cache/ba1/28/95/d923a86e884501194d65f2646de8", - "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/98/b3/d832dad3f6c073d6efcb14da53ce", - "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/ae/cc/e39c20e40e3388095e186b6aa3b9", + "assets/build/windows/Win32/Lib/copyreg.py": "https://files.ballistica.net/cache/ba1/b4/e5/7796afa4c52102760e81854d581d", + "assets/build/windows/Win32/Lib/crypt.py": "https://files.ballistica.net/cache/ba1/cb/33/c3831d873f0e168596fe6d6d0a6a", "assets/build/windows/Win32/Lib/csv.py": "https://files.ballistica.net/cache/ba1/61/84/ece8a5a1edd77dfd481a0029bcc8", - "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/b5/3d/9e5225131d6b60d12eda1f11e058", + "assets/build/windows/Win32/Lib/ctypes/__init__.py": "https://files.ballistica.net/cache/ba1/1b/69/8e9072eb16430d7ac77bb3065d8c", "assets/build/windows/Win32/Lib/ctypes/_aix.py": "https://files.ballistica.net/cache/ba1/30/2d/3ad91a485f58eb3690c863e7a961", "assets/build/windows/Win32/Lib/ctypes/_endian.py": "https://files.ballistica.net/cache/ba1/04/c7/1775ac390854c9015be8e834ff50", "assets/build/windows/Win32/Lib/ctypes/macholib/README.ctypes": "https://files.ballistica.net/cache/ba1/90/bf/d7c620c1dec8a9219b27e1cfa6f4", "assets/build/windows/Win32/Lib/ctypes/macholib/__init__.py": "https://files.ballistica.net/cache/ba1/a7/68/4d72c2a8db47c671575650daa0e6", - "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/cc/29/9eb47bbb4519ff41fd593917a78b", + "assets/build/windows/Win32/Lib/ctypes/macholib/dyld.py": "https://files.ballistica.net/cache/ba1/5a/b0/dbb8fe9518edf3a514f5fcdf7d09", "assets/build/windows/Win32/Lib/ctypes/macholib/dylib.py": "https://files.ballistica.net/cache/ba1/c2/c2/547efc609d150143701b892bc5ae", "assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib": "https://files.ballistica.net/cache/ba1/4d/fb/26d07e6522338f7fc233734f8807", "assets/build/windows/Win32/Lib/ctypes/macholib/fetch_macholib.bat": "https://files.ballistica.net/cache/ba1/ab/58/c056f07d65b7abf4ac2fc3598947", "assets/build/windows/Win32/Lib/ctypes/macholib/framework.py": "https://files.ballistica.net/cache/ba1/fb/23/90116831cb2f6d105bc3cd65559c", - "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/c9/92/b71e0b1afdffde4b91ce0ad71cc8", + "assets/build/windows/Win32/Lib/ctypes/util.py": "https://files.ballistica.net/cache/ba1/8b/ca/74691e74841c822d74843c8cb1fe", "assets/build/windows/Win32/Lib/ctypes/wintypes.py": "https://files.ballistica.net/cache/ba1/25/1d/9a7dfb9d5c76744c30ffcde3b6eb", - "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/d4/7a/94f01cec089c4c7b3a058954d1a0", + "assets/build/windows/Win32/Lib/curses/__init__.py": "https://files.ballistica.net/cache/ba1/83/2b/9028d278d47bc11d9ad0326f68a9", "assets/build/windows/Win32/Lib/curses/ascii.py": "https://files.ballistica.net/cache/ba1/fd/14/86316d73c170437831841f44f410", "assets/build/windows/Win32/Lib/curses/has_key.py": "https://files.ballistica.net/cache/ba1/39/59/8a09c722d5a9c762fe51d6bf827a", "assets/build/windows/Win32/Lib/curses/panel.py": "https://files.ballistica.net/cache/ba1/48/9c/133d9a244f62e3739cb392d1a096", "assets/build/windows/Win32/Lib/curses/textpad.py": "https://files.ballistica.net/cache/ba1/ea/c0/e047229f762662427d6c64dd3c61", - "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/1d/0a/d2ae7b3e8d6db1a24afed5549455", - "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/09/bd/bd6fd74b8cd885b5032ffe2d2718", + "assets/build/windows/Win32/Lib/dataclasses.py": "https://files.ballistica.net/cache/ba1/e9/9c/827ff1be7ab63af4842d26747f15", + "assets/build/windows/Win32/Lib/datetime.py": "https://files.ballistica.net/cache/ba1/34/e1/f8c7052b4702a8715328be059132", "assets/build/windows/Win32/Lib/decimal.py": "https://files.ballistica.net/cache/ba1/d5/55/9ae7a36d41bfe37b2d67ce3599d0", - "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/20/25/50f6e9a63e9660b451ccbd9f8d86", - "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/31/e7/b3775d40bca4e0b4810fbb312260", - "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/35/31/60314b37cfc4ef8e06b9c512a129", - "assets/build/windows/Win32/Lib/dummy_threading.py": "https://files.ballistica.net/cache/ba1/08/5a/e7d834d6197d9b58a075b05c4be6", + "assets/build/windows/Win32/Lib/difflib.py": "https://files.ballistica.net/cache/ba1/fc/ce/dc021d207553e253bf5f4f3ef8d5", + "assets/build/windows/Win32/Lib/dis.py": "https://files.ballistica.net/cache/ba1/2d/e0/0d23d642882feca62642623b1925", + "assets/build/windows/Win32/Lib/doctest.py": "https://files.ballistica.net/cache/ba1/59/0c/c7495e1f68cd0e217c2d1a6aeaaf", "assets/build/windows/Win32/Lib/email/__init__.py": "https://files.ballistica.net/cache/ba1/ed/7d/64247a9b90f5c7b3f577b0e28ca0", "assets/build/windows/Win32/Lib/email/_encoded_words.py": "https://files.ballistica.net/cache/ba1/05/81/408bbbd16a07d3c6473ff0ce523b", "assets/build/windows/Win32/Lib/email/_header_value_parser.py": "https://files.ballistica.net/cache/ba1/79/74/8b39d9278c30a5113a6285f68c13", - "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/ed/d2/06c5127141292bc913caee80137b", + "assets/build/windows/Win32/Lib/email/_parseaddr.py": "https://files.ballistica.net/cache/ba1/07/39/929a44451e24380aebd685d081ba", "assets/build/windows/Win32/Lib/email/_policybase.py": "https://files.ballistica.net/cache/ba1/06/37/302137642525762bee6ce4a09cf1", "assets/build/windows/Win32/Lib/email/architecture.rst": "https://files.ballistica.net/cache/ba1/78/7c/c4274166d5aa06c20c2c0d391104", "assets/build/windows/Win32/Lib/email/base64mime.py": "https://files.ballistica.net/cache/ba1/92/3c/d5b71a0457e0715462a700c52e78", "assets/build/windows/Win32/Lib/email/charset.py": "https://files.ballistica.net/cache/ba1/85/85/2e724aa519d670805839deb3415f", - "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/32/ed/b0372aa11be4a30fbd1820b57bb1", + "assets/build/windows/Win32/Lib/email/contentmanager.py": "https://files.ballistica.net/cache/ba1/60/a3/969ab2b942387eaac59a53312f7c", "assets/build/windows/Win32/Lib/email/encoders.py": "https://files.ballistica.net/cache/ba1/05/5e/1da72e6b33454bc00ccc75bae468", "assets/build/windows/Win32/Lib/email/errors.py": "https://files.ballistica.net/cache/ba1/53/1a/246d8f67140256975ac7ae97d1e5", "assets/build/windows/Win32/Lib/email/feedparser.py": "https://files.ballistica.net/cache/ba1/aa/d0/f54e9f077a1a3a69295932c21353", - "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/92/60/db86790637e373e2a198c89619a7", + "assets/build/windows/Win32/Lib/email/generator.py": "https://files.ballistica.net/cache/ba1/ee/1e/0cd02341e34d798770b3ac88d9d4", "assets/build/windows/Win32/Lib/email/header.py": "https://files.ballistica.net/cache/ba1/d8/53/2ad4aea28a0f2fb1dcdbaca1d8e8", - "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/89/87/3e0601839389ab46421c1325608e", + "assets/build/windows/Win32/Lib/email/headerregistry.py": "https://files.ballistica.net/cache/ba1/be/5d/d42e0fa956f6785fb22b8c958e19", "assets/build/windows/Win32/Lib/email/iterators.py": "https://files.ballistica.net/cache/ba1/90/09/e8c04371be81b7ab0a11be68784d", - "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/13/eb/1359fed9fd0ba38797bcd98a45d9", + "assets/build/windows/Win32/Lib/email/message.py": "https://files.ballistica.net/cache/ba1/37/dd/436fd62061b38bfdd6279d235bae", "assets/build/windows/Win32/Lib/email/mime/__init__.py": "https://files.ballistica.net/cache/ba1/b5/ea/80f195a1c0d100480897a83a4da4", "assets/build/windows/Win32/Lib/email/mime/application.py": "https://files.ballistica.net/cache/ba1/a6/b1/f129c2517c74d85f48087f80824d", "assets/build/windows/Win32/Lib/email/mime/audio.py": "https://files.ballistica.net/cache/ba1/29/39/306f35115c997946975ac7c0191b", @@ -3617,9 +3640,9 @@ "assets/build/windows/Win32/Lib/email/parser.py": "https://files.ballistica.net/cache/ba1/4f/06/6bf636bb70433a9a62c41bca8406", "assets/build/windows/Win32/Lib/email/policy.py": "https://files.ballistica.net/cache/ba1/77/b1/8a70ba209a24931675bff0a345cd", "assets/build/windows/Win32/Lib/email/quoprimime.py": "https://files.ballistica.net/cache/ba1/76/74/92b4640edaa325ff338c5affb245", - "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/eb/d6/bb1e792fc83161264525c914cc46", + "assets/build/windows/Win32/Lib/email/utils.py": "https://files.ballistica.net/cache/ba1/99/d7/af0fd7db83f90594c82066c49d21", "assets/build/windows/Win32/Lib/encodings/__init__.py": "https://files.ballistica.net/cache/ba1/6f/a4/bb19f2225934af92392ef32b5096", - "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/7a/7b/9e1451e88044c5c16cf671d207b8", + "assets/build/windows/Win32/Lib/encodings/aliases.py": "https://files.ballistica.net/cache/ba1/6b/e8/e4a9550b7bba748fef8f65526066", "assets/build/windows/Win32/Lib/encodings/ascii.py": "https://files.ballistica.net/cache/ba1/41/44/3c51a65e96fdbbdfc71983863cf5", "assets/build/windows/Win32/Lib/encodings/base64_codec.py": "https://files.ballistica.net/cache/ba1/f8/5d/78e448a54324be27c57960c3ef8f", "assets/build/windows/Win32/Lib/encodings/big5.py": "https://files.ballistica.net/cache/ba1/59/23/27486e3ee84ed7e8f3dfcba5497d", @@ -3706,7 +3729,6 @@ "assets/build/windows/Win32/Lib/encodings/kz1048.py": "https://files.ballistica.net/cache/ba1/d3/5b/422fa8a73c17bb05fdff6f663827", "assets/build/windows/Win32/Lib/encodings/latin_1.py": "https://files.ballistica.net/cache/ba1/41/45/1c7f9d33cc7a8febf0a0071808cc", "assets/build/windows/Win32/Lib/encodings/mac_arabic.py": "https://files.ballistica.net/cache/ba1/0a/8a/ab8900ad1b09cd5faeeb6eb6b5c6", - "assets/build/windows/Win32/Lib/encodings/mac_centeuro.py": "https://files.ballistica.net/cache/ba1/6c/27/ad832c0664490a0783439df01a7f", "assets/build/windows/Win32/Lib/encodings/mac_croatian.py": "https://files.ballistica.net/cache/ba1/a5/01/ae139e112718536de88fe63f5bbf", "assets/build/windows/Win32/Lib/encodings/mac_cyrillic.py": "https://files.ballistica.net/cache/ba1/01/84/40472ce95eaf2c04d3387a021eeb", "assets/build/windows/Win32/Lib/encodings/mac_farsi.py": "https://files.ballistica.net/cache/ba1/04/9c/0b1bfb3fa6b4580cbc0c95f05f3d", @@ -3741,246 +3763,252 @@ "assets/build/windows/Win32/Lib/encodings/utf_8_sig.py": "https://files.ballistica.net/cache/ba1/02/57/abf1662be43acd806d712d09ad92", "assets/build/windows/Win32/Lib/encodings/uu_codec.py": "https://files.ballistica.net/cache/ba1/ca/1c/8b4574b02be8387d5b8818d1399d", "assets/build/windows/Win32/Lib/encodings/zlib_codec.py": "https://files.ballistica.net/cache/ba1/ca/b7/a919c6be178102f90d97879e61ec", - "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/bb/c9/3118d618dc2c7a6c11e4336e7b2d", - "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/20/32/e1aa0ebff27033ec554330288554", - "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/9c/59/041f2cde1b129359ae61dfa9816c", - "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/50/d8/be1bfccd23262714b368a87efcfe", + "assets/build/windows/Win32/Lib/enum.py": "https://files.ballistica.net/cache/ba1/c4/f3/60d3296bbfadcc6941b4e0d3b324", + "assets/build/windows/Win32/Lib/filecmp.py": "https://files.ballistica.net/cache/ba1/d7/a9/8bda33ae3ccb35a4f8fb8e58d5c7", + "assets/build/windows/Win32/Lib/fileinput.py": "https://files.ballistica.net/cache/ba1/4e/af/c6223e6830124b4705ea655a1a78", + "assets/build/windows/Win32/Lib/fnmatch.py": "https://files.ballistica.net/cache/ba1/e9/b4/9afa7e0e63d5fc0cba43ee03189b", "assets/build/windows/Win32/Lib/formatter.py": "https://files.ballistica.net/cache/ba1/94/4e/c1f6b9a2f088571d5faa0f323dca", - "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/d3/66/5942f4e9b9ea2f05fb7de136f2f3", - "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/09/0e/05e3fa3fc16419c3f5be08c5d3fe", - "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/bb/24/12c61dcec09c98ad01b56801db9f", + "assets/build/windows/Win32/Lib/fractions.py": "https://files.ballistica.net/cache/ba1/00/ef/ad0286aae0aa2f66ea28206fbc44", + "assets/build/windows/Win32/Lib/ftplib.py": "https://files.ballistica.net/cache/ba1/cd/ab/0156861df1e160c17b79454c7b72", + "assets/build/windows/Win32/Lib/functools.py": "https://files.ballistica.net/cache/ba1/a5/54/2fdee10300ef21de3e7ce0e58880", "assets/build/windows/Win32/Lib/genericpath.py": "https://files.ballistica.net/cache/ba1/51/fc/1a323017e8b06cdc6327c524fe66", "assets/build/windows/Win32/Lib/getopt.py": "https://files.ballistica.net/cache/ba1/c8/63/dfdbb68d2e67c3bae4f9dcc3f0f5", - "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/be/e6/71f0a41074219d94d7e5f4d4dd77", - "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/11/6b/c1e62ac780490c34659934a6ab38", - "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/36/6c/b8ce0cc27f4cb3b86db3c7d9347a", - "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/b8/da/b458a9670a4fa0d99a4835489a95", - "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/58/22/5813b858f7b0c5f6bd3c08b5e270", + "assets/build/windows/Win32/Lib/getpass.py": "https://files.ballistica.net/cache/ba1/72/31/d1e384b10905ca750c1ed8c0b84a", + "assets/build/windows/Win32/Lib/gettext.py": "https://files.ballistica.net/cache/ba1/0e/42/9e44277c3e9347fa5401959e3705", + "assets/build/windows/Win32/Lib/glob.py": "https://files.ballistica.net/cache/ba1/0d/68/f6f02a463d42eb1321a440b7d351", + "assets/build/windows/Win32/Lib/graphlib.py": "https://files.ballistica.net/cache/ba1/15/35/2836d5b4fd3bd165e36c08019ace", + "assets/build/windows/Win32/Lib/gzip.py": "https://files.ballistica.net/cache/ba1/bc/11/1ae05369d31b657cc555500510b3", + "assets/build/windows/Win32/Lib/hashlib.py": "https://files.ballistica.net/cache/ba1/76/99/f4b0dfa9bd74c599168245ada448", "assets/build/windows/Win32/Lib/heapq.py": "https://files.ballistica.net/cache/ba1/34/2f/f8ff15aedf39c36b2f6412af45fe", - "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/30/f4/e91fda1efa524172eb6aac3d326d", + "assets/build/windows/Win32/Lib/hmac.py": "https://files.ballistica.net/cache/ba1/97/9f/ced773ee6db266ea49ce9484d878", "assets/build/windows/Win32/Lib/html/__init__.py": "https://files.ballistica.net/cache/ba1/8c/08/c638db74e5e5979dea109da1f68b", "assets/build/windows/Win32/Lib/html/entities.py": "https://files.ballistica.net/cache/ba1/52/69/e7311caea2fbfdfef9c05515de4b", - "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/93/8c/7e6734f43521e484eff3265c3b2f", - "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/00/9a/8db3eba06a3e0e739cf2da0c8996", - "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/9b/b3/823a9620582a4310880c99b9013b", + "assets/build/windows/Win32/Lib/html/parser.py": "https://files.ballistica.net/cache/ba1/6a/60/b90c31b1f1474741106d3da6de25", + "assets/build/windows/Win32/Lib/http/__init__.py": "https://files.ballistica.net/cache/ba1/bb/b0/88199e7610b1ad70587c5472753e", + "assets/build/windows/Win32/Lib/http/client.py": "https://files.ballistica.net/cache/ba1/0f/84/59222e132a3410d380fb217e3f52", "assets/build/windows/Win32/Lib/http/cookiejar.py": "https://files.ballistica.net/cache/ba1/08/00/0b45e485fbbf70dc705d41216abd", - "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/d1/96/f86c64ac27b1aec761087d1fc55a", - "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/30/7e/5e90c701918e966c0a10fe2b3d88", + "assets/build/windows/Win32/Lib/http/cookies.py": "https://files.ballistica.net/cache/ba1/4a/49/a309c5a835f284a508f1a621ba61", + "assets/build/windows/Win32/Lib/http/server.py": "https://files.ballistica.net/cache/ba1/08/f6/9b039097180d2129109230798b52", "assets/build/windows/Win32/Lib/imghdr.py": "https://files.ballistica.net/cache/ba1/a8/49/6afa9e88ee446fadd95254fc159d", "assets/build/windows/Win32/Lib/imp.py": "https://files.ballistica.net/cache/ba1/27/49/796442c2ad99d661778789ccb6b9", "assets/build/windows/Win32/Lib/importlib/__init__.py": "https://files.ballistica.net/cache/ba1/34/ab/d855c97aa3f1707dc083d3812422", - "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/e0/b8/fd3a491af05bab27fffee4711b36", - "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/d6/44/8e9fecfa85afede694eb06298034", - "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/e1/ce/cf8dfb21a116a8bf87f757ddb332", + "assets/build/windows/Win32/Lib/importlib/_bootstrap.py": "https://files.ballistica.net/cache/ba1/54/da/bedb5154306c441ba28992682943", + "assets/build/windows/Win32/Lib/importlib/_bootstrap_external.py": "https://files.ballistica.net/cache/ba1/da/ad/ef5fd84e9b073e4699c7ecc7f426", + "assets/build/windows/Win32/Lib/importlib/_common.py": "https://files.ballistica.net/cache/ba1/df/62/59cfe843dacc4a7101bc56d6bfc9", + "assets/build/windows/Win32/Lib/importlib/abc.py": "https://files.ballistica.net/cache/ba1/48/fe/414f06478ec0a25b7b09cdd619e5", "assets/build/windows/Win32/Lib/importlib/machinery.py": "https://files.ballistica.net/cache/ba1/a1/ac/b97d16285d94f0b18406366d803b", - "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/50/b7/1e091864ef2342eb9f7627a5ad85", - "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/13/da/3bc2fe81fddcb89589d4f5129d2b", - "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/5e/96/a3d35aecec8ff9e6f2158f56c27c", - "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/3e/76/764dd66ccb9ad74292d6e07ee3ff", + "assets/build/windows/Win32/Lib/importlib/metadata.py": "https://files.ballistica.net/cache/ba1/c2/f6/a6dbb83c45260a78749204f60ac7", + "assets/build/windows/Win32/Lib/importlib/resources.py": "https://files.ballistica.net/cache/ba1/1b/36/101f113c9f9d6dcb0458d1a560ee", + "assets/build/windows/Win32/Lib/importlib/util.py": "https://files.ballistica.net/cache/ba1/21/12/936c7ba9b3fe6b59497219398d3f", + "assets/build/windows/Win32/Lib/inspect.py": "https://files.ballistica.net/cache/ba1/c4/43/1f26250c090a9d17a4da97f8ba91", "assets/build/windows/Win32/Lib/io.py": "https://files.ballistica.net/cache/ba1/ee/a7/27e33a9728a22a8228628782bfe7", - "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/7d/3c/b71af3f7f5d381bfaa1e200eb2ac", - "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/a0/b3/9179fcad487ca6edf2c5a96f2f5e", + "assets/build/windows/Win32/Lib/ipaddress.py": "https://files.ballistica.net/cache/ba1/d0/d1/74396deb2ba83c112e540f973ce4", + "assets/build/windows/Win32/Lib/json/__init__.py": "https://files.ballistica.net/cache/ba1/d4/01/1826c398aa475558640288fbf8da", "assets/build/windows/Win32/Lib/json/decoder.py": "https://files.ballistica.net/cache/ba1/f5/44/19f6e70ef50bed1f318027bbf9aa", "assets/build/windows/Win32/Lib/json/encoder.py": "https://files.ballistica.net/cache/ba1/65/87/ea5c0cd241ce16750147c2b113da", "assets/build/windows/Win32/Lib/json/scanner.py": "https://files.ballistica.net/cache/ba1/a7/9e/0fdf34c72293733a58f0dd2677fa", - "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/70/80/f06ec89a4cfe38fabfeae3a9b1e4", - "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/b6/c9/6fe1ba0c2f3df0a7cff398a69c75", - "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/a5/e9/a9af76d79b1d6295749ea12a9590", - "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/ff/49/64c2836f6f9a4a9b7613ae4bbe68", - "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/78/e7/c93caee9b78214381dff14d0a645", - "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/af/72/51a97504cd5fda5bdfe7c9f966f6", - "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/8a/b9/7a237a423b8377a2b76be0e80f8e", - "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/88/58/5eb2ce7457b4084010d40fa35609", - "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/c9/02/4033e7308dd093bfb8dd15d58ea0", - "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/cd/ef/d43f7e1f692a91246149348186f8", - "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/25/a2/01e55fef8b57f4fcf5c92eebef4a", - "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/55/6d/bd1b7ea0bc6b584d15bdde04c210", - "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/32/b4/3d542fb6efb60c95af4e1edbe102", + "assets/build/windows/Win32/Lib/json/tool.py": "https://files.ballistica.net/cache/ba1/e0/66/6134206a819f737f2abdb391b4f5", + "assets/build/windows/Win32/Lib/keyword.py": "https://files.ballistica.net/cache/ba1/d0/4e/b6720a564842cc99f0bcf4cab00d", + "assets/build/windows/Win32/Lib/linecache.py": "https://files.ballistica.net/cache/ba1/dc/cf/cff04c33ac67207c1be857e69bd7", + "assets/build/windows/Win32/Lib/locale.py": "https://files.ballistica.net/cache/ba1/41/71/90e27a75d1f633ffcbff231b6d76", + "assets/build/windows/Win32/Lib/logging/__init__.py": "https://files.ballistica.net/cache/ba1/16/7f/9b8b634f9c4d6bb463b92160e993", + "assets/build/windows/Win32/Lib/logging/config.py": "https://files.ballistica.net/cache/ba1/13/92/d341d9e2b725228791c3ae0f6544", + "assets/build/windows/Win32/Lib/logging/handlers.py": "https://files.ballistica.net/cache/ba1/e2/60/696cffa3c43a257d1658f80a1757", + "assets/build/windows/Win32/Lib/lzma.py": "https://files.ballistica.net/cache/ba1/42/22/997edcab36ca24d6652197b43946", + "assets/build/windows/Win32/Lib/mailbox.py": "https://files.ballistica.net/cache/ba1/f5/47/ec4fe120a31bc22ee4160ee2b628", + "assets/build/windows/Win32/Lib/mailcap.py": "https://files.ballistica.net/cache/ba1/39/3c/ba855852479d4b38bff59e22f7c9", + "assets/build/windows/Win32/Lib/mimetypes.py": "https://files.ballistica.net/cache/ba1/51/db/b358cd7eab9cee99dda417ea977f", + "assets/build/windows/Win32/Lib/modulefinder.py": "https://files.ballistica.net/cache/ba1/63/85/9cd35229337868fce8bd0456d505", + "assets/build/windows/Win32/Lib/msilib/__init__.py": "https://files.ballistica.net/cache/ba1/54/95/b1f45d5d58bdb568be4fb1c9d7ad", "assets/build/windows/Win32/Lib/msilib/schema.py": "https://files.ballistica.net/cache/ba1/65/dd/95b460cf2c95a6caf4bdbb1a3d51", "assets/build/windows/Win32/Lib/msilib/sequence.py": "https://files.ballistica.net/cache/ba1/5e/c4/a7a6140c298325ee69a8958b40d6", "assets/build/windows/Win32/Lib/msilib/text.py": "https://files.ballistica.net/cache/ba1/49/b2/15871bd0d47d347c9371490eb35f", "assets/build/windows/Win32/Lib/netrc.py": "https://files.ballistica.net/cache/ba1/6e/c7/c912c856c06d61ce362403506c58", - "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/3f/6c/124eb82ca929cdbcbb7c8cb4628a", + "assets/build/windows/Win32/Lib/nntplib.py": "https://files.ballistica.net/cache/ba1/84/ff/9ca203896a4c7f75d09bbbb49f23", "assets/build/windows/Win32/Lib/ntpath.py": "https://files.ballistica.net/cache/ba1/d0/16/d4d8d088994e890714a11dc15434", - "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/05/77/b863ff2e727259dac90f77bdcbfb", - "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/19/02/57245f310345adfc574565c19471", - "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/ad/4a/0d449831129669c0b9f800754322", - "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/fe/a1/433be97456e193c9a2e600ff84aa", + "assets/build/windows/Win32/Lib/nturl2path.py": "https://files.ballistica.net/cache/ba1/6c/d4/b0ad03a05c03e8a672239a8d3c22", + "assets/build/windows/Win32/Lib/numbers.py": "https://files.ballistica.net/cache/ba1/4c/14/0c9d8a9af8c19d9639c4bf46470f", + "assets/build/windows/Win32/Lib/opcode.py": "https://files.ballistica.net/cache/ba1/48/18/e49f9bde356defaf57931b719db6", + "assets/build/windows/Win32/Lib/operator.py": "https://files.ballistica.net/cache/ba1/62/02/2ae2e6306970768ece225d61e8f6", "assets/build/windows/Win32/Lib/optparse.py": "https://files.ballistica.net/cache/ba1/08/d8/10bbc27b50836a1329ca9a8c76d9", - "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/f7/b0/7795b8038c42d6c812be0b62d42c", - "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/f9/66/3f0aea2a0518289bc4286b4bda8d", - "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/75/66/b6b61ea0471e82da55f7b95e47b1", - "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/23/de/8cea763cb47bd1d8dcde05876c23", + "assets/build/windows/Win32/Lib/os.py": "https://files.ballistica.net/cache/ba1/5c/dd/579c24efb5c00df2976f332cf186", + "assets/build/windows/Win32/Lib/pathlib.py": "https://files.ballistica.net/cache/ba1/94/ed/7aeed103f4f6911c2bf47987a77c", + "assets/build/windows/Win32/Lib/pdb.py": "https://files.ballistica.net/cache/ba1/1f/cc/e2615b40a6cb1a3eddcbd406df40", + "assets/build/windows/Win32/Lib/pickle.py": "https://files.ballistica.net/cache/ba1/b6/46/f767feb20108a62448d0fdc7602f", "assets/build/windows/Win32/Lib/pickletools.py": "https://files.ballistica.net/cache/ba1/2e/45/eddff9ff648e35265541ce3296aa", "assets/build/windows/Win32/Lib/pipes.py": "https://files.ballistica.net/cache/ba1/4f/e3/798b7a258f1747aa6c5abb437149", - "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/71/ec/ef12b9e970cdd6519387ad7168bc", - "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/e4/ce/7ff2a305f977646d16e9bd3f8520", - "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/4a/5c/e2974e9a8d629f5bdea197989c4c", - "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/0b/3f/ebe15eb5e0aed0f623fb371d1e6c", - "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/0e/d9/4afdfd1c5d247b2184c9da8ce58d", - "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/d7/a9/1c512abc7fa9626b3d4b8032aceb", - "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/df/aa/5f646a01fbbf11278346627ad967", - "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/d8/83/57c8604d5383e3a1a72730c5ccbe", + "assets/build/windows/Win32/Lib/pkgutil.py": "https://files.ballistica.net/cache/ba1/e4/b8/79a14ad4cb6ee46377ec45d6df74", + "assets/build/windows/Win32/Lib/platform.py": "https://files.ballistica.net/cache/ba1/0b/52/0bb8a0560bced25c8728c6c7a0a4", + "assets/build/windows/Win32/Lib/plistlib.py": "https://files.ballistica.net/cache/ba1/6a/e8/4d5c747e45f582db11ffa511d651", + "assets/build/windows/Win32/Lib/poplib.py": "https://files.ballistica.net/cache/ba1/68/71/845ce32e039b1d7c9fe9dc07e059", + "assets/build/windows/Win32/Lib/posixpath.py": "https://files.ballistica.net/cache/ba1/f4/aa/897b0ebd640cc2538b4125fe8ead", + "assets/build/windows/Win32/Lib/pprint.py": "https://files.ballistica.net/cache/ba1/85/6e/57f702f42a1023f506084172699c", + "assets/build/windows/Win32/Lib/profile.py": "https://files.ballistica.net/cache/ba1/27/f7/fecf77603def6be7e272ecf879b1", + "assets/build/windows/Win32/Lib/pstats.py": "https://files.ballistica.net/cache/ba1/8e/3e/2e0ba82e95a5ea276ade31824e46", "assets/build/windows/Win32/Lib/pty.py": "https://files.ballistica.net/cache/ba1/01/fa/73d52f1e8ad3e8fba58a8fd67d60", - "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/b3/4a/825bf33162ad633f02c93f05fa3a", + "assets/build/windows/Win32/Lib/py_compile.py": "https://files.ballistica.net/cache/ba1/1d/c5/05bbfe3acd92bddb0ecb22bb56b5", "assets/build/windows/Win32/Lib/pyclbr.py": "https://files.ballistica.net/cache/ba1/15/53/68c8a9df2a80480b6fc458352687", - "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/e5/ff/e8d985a8dbd62f018c02f6651e5f", - "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/f9/33/4ae8645dcd0a9d8b73d14a1b71c7", - "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/2c/58/ad0d88ce4f54696b2e3b77229b6f", - "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/b6/d9/b95dd3d9250d459233f6b5315a3b", + "assets/build/windows/Win32/Lib/pydoc.py": "https://files.ballistica.net/cache/ba1/56/1f/6fb68934b6045e93a0e0ad866f7d", + "assets/build/windows/Win32/Lib/queue.py": "https://files.ballistica.net/cache/ba1/ad/d9/dccb193c1f5b918c874573949a7c", + "assets/build/windows/Win32/Lib/quopri.py": "https://files.ballistica.net/cache/ba1/01/61/77a2bd9e234c35d4e5e3dca41474", + "assets/build/windows/Win32/Lib/random.py": "https://files.ballistica.net/cache/ba1/9e/46/3bf62f305b77fd0b952d6ab47475", "assets/build/windows/Win32/Lib/re.py": "https://files.ballistica.net/cache/ba1/92/ef/6bfc4cf4278e1d656a339af3a4fb", "assets/build/windows/Win32/Lib/reprlib.py": "https://files.ballistica.net/cache/ba1/a8/ba/d93d9b48a6c8e84421dc29a7a356", - "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/07/36/8d1de8a69e6b5b1cc73d0216948a", - "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/33/bb/94fdb22005971a029ec79aea277f", + "assets/build/windows/Win32/Lib/rlcompleter.py": "https://files.ballistica.net/cache/ba1/3b/fd/4ebf4b35da2f173ed151b87056aa", + "assets/build/windows/Win32/Lib/runpy.py": "https://files.ballistica.net/cache/ba1/13/05/2bdddfbff67d94f98d0710c807d5", "assets/build/windows/Win32/Lib/sched.py": "https://files.ballistica.net/cache/ba1/c6/60/916d287001a20a6a9b10edec7eab", - "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/56/3e/95bb97b0783468cfc2d3334daa98", - "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/af/9a/2ffd2e47c2bfd9318aaf126ee6af", + "assets/build/windows/Win32/Lib/secrets.py": "https://files.ballistica.net/cache/ba1/3a/08/35ad5fa7b2674b557d6877856e57", + "assets/build/windows/Win32/Lib/selectors.py": "https://files.ballistica.net/cache/ba1/e7/e0/5974f4d22db37ed06a4a88c3982f", "assets/build/windows/Win32/Lib/shelve.py": "https://files.ballistica.net/cache/ba1/78/b5/9bc76a4facc8d27398b939bc074b", - "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/ea/f0/c13f433acca4bee87831401e5846", - "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/48/6c/ab9181bbd7675b275280defc0a25", + "assets/build/windows/Win32/Lib/shlex.py": "https://files.ballistica.net/cache/ba1/8b/f0/0626cd9774fc74dbdd57171b6bd0", + "assets/build/windows/Win32/Lib/shutil.py": "https://files.ballistica.net/cache/ba1/bc/18/296bd7c481b225dcc4708695d05f", "assets/build/windows/Win32/Lib/signal.py": "https://files.ballistica.net/cache/ba1/01/09/a4a4e1ca8c41d84e831555752222", - "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/f1/8c/e38cbf5f63a710111788414c07c6", - "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/63/b6/77d11c42ae0775a49ed76818bffb", - "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ee/88/b917a2d5a11d3b3f4ac874fd5510", + "assets/build/windows/Win32/Lib/site.py": "https://files.ballistica.net/cache/ba1/63/2c/fb3429d2bc8173f4556c95c12a27", + "assets/build/windows/Win32/Lib/smtpd.py": "https://files.ballistica.net/cache/ba1/43/9a/1bde22068149fd37cb82a3ca52ae", + "assets/build/windows/Win32/Lib/smtplib.py": "https://files.ballistica.net/cache/ba1/ce/db/a86932841fc9db4ce62254cfbe3c", "assets/build/windows/Win32/Lib/sndhdr.py": "https://files.ballistica.net/cache/ba1/48/bd/cf83c27bc7f72e2c5b5d5497aeb3", - "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/f4/f6/c4a07d6f6a135b22f9a5d0df4eb4", - "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/8e/6e/62997e4b94b1360849b5476014d5", + "assets/build/windows/Win32/Lib/socket.py": "https://files.ballistica.net/cache/ba1/b0/4a/883940df01c2a2743b394b65eb6d", + "assets/build/windows/Win32/Lib/socketserver.py": "https://files.ballistica.net/cache/ba1/c6/b6/45fd1ececd3b4272f1f0674ce05c", "assets/build/windows/Win32/Lib/sqlite3/__init__.py": "https://files.ballistica.net/cache/ba1/4b/1b/be86116df24d067bf7aaa9dc690b", "assets/build/windows/Win32/Lib/sqlite3/dbapi2.py": "https://files.ballistica.net/cache/ba1/12/ce/e004498a9d51b893c10a613c7c56", "assets/build/windows/Win32/Lib/sqlite3/dump.py": "https://files.ballistica.net/cache/ba1/25/0e/52f5b1972488978dae3361460bec", "assets/build/windows/Win32/Lib/sre_compile.py": "https://files.ballistica.net/cache/ba1/ad/7b/8ab12949ef2e5f8da457fac53624", "assets/build/windows/Win32/Lib/sre_constants.py": "https://files.ballistica.net/cache/ba1/5e/cd/1e06950ce526150b57e13943b117", "assets/build/windows/Win32/Lib/sre_parse.py": "https://files.ballistica.net/cache/ba1/ff/9f/a8bbd40431420f03a24cbaa958c0", - "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/66/fa/d4499fb567d9c2fd5ab28070773e", + "assets/build/windows/Win32/Lib/ssl.py": "https://files.ballistica.net/cache/ba1/1a/9a/b24634a4cfff16c3137011677d57", "assets/build/windows/Win32/Lib/stat.py": "https://files.ballistica.net/cache/ba1/f5/ba/9a795715bfa80417f6b90fc4d5eb", - "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/59/68/14bc90c9ca05a8c167f7e9361ea0", - "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/55/cf/9b2286ef41a546b8e83dafb4c21f", + "assets/build/windows/Win32/Lib/statistics.py": "https://files.ballistica.net/cache/ba1/54/8a/4b1365441f1f5362ad5133207069", + "assets/build/windows/Win32/Lib/string.py": "https://files.ballistica.net/cache/ba1/e7/b7/56d0ff953973eb37ef38328f75e2", "assets/build/windows/Win32/Lib/stringprep.py": "https://files.ballistica.net/cache/ba1/5b/42/39b8e69a2979e4f553bb6908b545", "assets/build/windows/Win32/Lib/struct.py": "https://files.ballistica.net/cache/ba1/8e/da/3a3bdc58e197050b1906c1c86266", - "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/92/51/d899b4d325e933590218fcfb81b3", - "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/83/4a/58133fd86ce134568f30cfa21b9c", - "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/db/33/0e3b5b52110cacc345203fd9d328", - "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/32/ab/b015cae4110d38b37cc64251d89f", - "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/d5/84/72778fc541502325d17fbb1f7f07", + "assets/build/windows/Win32/Lib/subprocess.py": "https://files.ballistica.net/cache/ba1/8c/3d/26e2e0cc5e1b4d1ee55cae7ee354", + "assets/build/windows/Win32/Lib/sunau.py": "https://files.ballistica.net/cache/ba1/c5/ea/8efd34c174ebbf6e721eb2c4854b", + "assets/build/windows/Win32/Lib/symbol.py": "https://files.ballistica.net/cache/ba1/6e/6e/4fd99765d7e29749d2f192f06080", + "assets/build/windows/Win32/Lib/symtable.py": "https://files.ballistica.net/cache/ba1/9b/da/da5402613a6207fbc1d7ebf596d1", + "assets/build/windows/Win32/Lib/sysconfig.py": "https://files.ballistica.net/cache/ba1/a5/ba/97a70e33602056e924ba8883c88f", "assets/build/windows/Win32/Lib/tabnanny.py": "https://files.ballistica.net/cache/ba1/f0/6a/00c300ad5404f3bbbe4fe723a466", - "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/01/d4/bddbb7c9d8fe0d28a5f11aa4da6b", + "assets/build/windows/Win32/Lib/tarfile.py": "https://files.ballistica.net/cache/ba1/8f/c8/354a7969bc41efdaebc71bba2217", "assets/build/windows/Win32/Lib/telnetlib.py": "https://files.ballistica.net/cache/ba1/29/35/bdff1814c1cdba6b4ae5cb2f8675", - "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/b8/f2/59d8cc47a08868c5467a00c1d85c", + "assets/build/windows/Win32/Lib/tempfile.py": "https://files.ballistica.net/cache/ba1/29/72/75cb6dcbdd31bf1553a07b4dabb5", "assets/build/windows/Win32/Lib/textwrap.py": "https://files.ballistica.net/cache/ba1/c0/4a/3c5af4ba3f0440874cdb4dc61ecd", "assets/build/windows/Win32/Lib/this.py": "https://files.ballistica.net/cache/ba1/b0/f9/1eb227ba1d4d069da408b12e8312", - "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/5b/a8/61c3511e8e103bdfd7825958b540", + "assets/build/windows/Win32/Lib/threading.py": "https://files.ballistica.net/cache/ba1/44/94/ff6041fa68af794cbc6afab2e4ff", "assets/build/windows/Win32/Lib/timeit.py": "https://files.ballistica.net/cache/ba1/10/08/1e351bf532a328eb7e2e23a25b44", "assets/build/windows/Win32/Lib/token.py": "https://files.ballistica.net/cache/ba1/64/7c/121b22af2f56ace6019d0e2b3819", - "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/9d/01/b7ddea4fbc9401b71734d68e7500", - "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/61/e2/4f8a48fa03a1f49dd363204db6ed", - "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/58/fe/040d4b32aab47ce1bd5920739394", - "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/91/0a/fcb0e16864c9ffe49e4eb9cc122c", + "assets/build/windows/Win32/Lib/tokenize.py": "https://files.ballistica.net/cache/ba1/de/b5/e9a154cd250aafb928b498a9b43e", + "assets/build/windows/Win32/Lib/trace.py": "https://files.ballistica.net/cache/ba1/a5/a9/6db347dcb89c09b8a8c6c2203f97", + "assets/build/windows/Win32/Lib/traceback.py": "https://files.ballistica.net/cache/ba1/8d/78/94708c92ece3d42f76c20ed38b9d", + "assets/build/windows/Win32/Lib/tracemalloc.py": "https://files.ballistica.net/cache/ba1/18/0d/5faf4c360c505d08b7613f5417d7", "assets/build/windows/Win32/Lib/tty.py": "https://files.ballistica.net/cache/ba1/66/b3/bb1684cec763502fdf418909eedc", - "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/e0/c8/31f459e0c2f7bac2d0ebbfa00a59", - "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/b6/e4/03cad30b8be21630d987122692a4", + "assets/build/windows/Win32/Lib/types.py": "https://files.ballistica.net/cache/ba1/ed/48/072f2eb7e4e25fcd60a2081648a3", + "assets/build/windows/Win32/Lib/typing.py": "https://files.ballistica.net/cache/ba1/fc/94/e7bea2c7035490d1f88157ad13ac", "assets/build/windows/Win32/Lib/urllib/__init__.py": "https://files.ballistica.net/cache/ba1/48/ca/f840c02dd0e7222236a872a7f278", "assets/build/windows/Win32/Lib/urllib/error.py": "https://files.ballistica.net/cache/ba1/c9/c8/9d133fc217803023dff6faed8681", - "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/d7/fc/813689937d353eb8274116634140", - "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/18/bf/a212326081a46262ca47520401bd", - "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/bb/87/38040a39e87e422ad8afe64bf2a7", + "assets/build/windows/Win32/Lib/urllib/parse.py": "https://files.ballistica.net/cache/ba1/9d/e2/353bc23d88dac888052fb73f654c", + "assets/build/windows/Win32/Lib/urllib/request.py": "https://files.ballistica.net/cache/ba1/a9/75/0e6096cd359e3732ffefb4f69c0c", + "assets/build/windows/Win32/Lib/urllib/response.py": "https://files.ballistica.net/cache/ba1/30/32/b589f1002cf402e632315e473447", "assets/build/windows/Win32/Lib/urllib/robotparser.py": "https://files.ballistica.net/cache/ba1/ef/f6/c7fd5ad82a88e56463f9d1c1b8d1", "assets/build/windows/Win32/Lib/uu.py": "https://files.ballistica.net/cache/ba1/40/20/7ae03397a7bf1f182a9e5463047f", - "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/80/65/da9c089c4ccf0cc172827fcd024d", + "assets/build/windows/Win32/Lib/uuid.py": "https://files.ballistica.net/cache/ba1/15/d4/3cbe0a49dbc49c4579f174635806", "assets/build/windows/Win32/Lib/warnings.py": "https://files.ballistica.net/cache/ba1/4f/c2/55e364e63a35cfada42a1c0b9504", - "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/95/6b/02b4ea1ee3a929a5c3e706b59e2f", - "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/71/b9/26e68828f98cf71c5e9802a24709", - "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/9b/7d/4c8e1c024746aaa32427db9d3e08", + "assets/build/windows/Win32/Lib/wave.py": "https://files.ballistica.net/cache/ba1/86/67/3fc7f739b871c1d3f9e479a8c4f5", + "assets/build/windows/Win32/Lib/weakref.py": "https://files.ballistica.net/cache/ba1/ea/d2/894a2e873428b59c4fba411773e4", + "assets/build/windows/Win32/Lib/webbrowser.py": "https://files.ballistica.net/cache/ba1/6d/e0/67a3eefd03d673ebc207738efb7e", "assets/build/windows/Win32/Lib/xdrlib.py": "https://files.ballistica.net/cache/ba1/35/a6/f6e14e4fb6beae1f68ec2a4be852", "assets/build/windows/Win32/Lib/xml/__init__.py": "https://files.ballistica.net/cache/ba1/02/9f/a002b4cb540d2e1c2b68edb44b3c", "assets/build/windows/Win32/Lib/xml/dom/NodeFilter.py": "https://files.ballistica.net/cache/ba1/70/fb/e0e98f50e21c494e53869d4d7d32", "assets/build/windows/Win32/Lib/xml/dom/__init__.py": "https://files.ballistica.net/cache/ba1/da/c6/e03fc8651c8453f97f28b59c39e6", "assets/build/windows/Win32/Lib/xml/dom/domreg.py": "https://files.ballistica.net/cache/ba1/24/0b/7c0c234f022ab835c9de2ebeae0b", - "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/00/f0/624de9ff458a0086a9287a4eca60", + "assets/build/windows/Win32/Lib/xml/dom/expatbuilder.py": "https://files.ballistica.net/cache/ba1/b7/72/a2efe64e9d3d6d69be97b30e7bff", "assets/build/windows/Win32/Lib/xml/dom/minicompat.py": "https://files.ballistica.net/cache/ba1/00/0c/03191b6f36ce83e51030448fae74", - "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/85/60/e39fb6f48bb279485b37e5174ef0", + "assets/build/windows/Win32/Lib/xml/dom/minidom.py": "https://files.ballistica.net/cache/ba1/c3/90/41746421ae51e1a26eb6c6baac49", "assets/build/windows/Win32/Lib/xml/dom/pulldom.py": "https://files.ballistica.net/cache/ba1/de/17/036dd0486e71bd9257e4d083b21b", - "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/b6/5f/e121c4c15d59af737b1040acc649", - "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/b5/91/29e1f927a81c897f265ba6f4d070", - "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/e9/75/85145b2539056a6b666cf091339e", - "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/d1/3b/0b4abfc25ad2245f7409b716570e", - "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/ad/6d/fa6c976589d990e355cce61c4c96", + "assets/build/windows/Win32/Lib/xml/dom/xmlbuilder.py": "https://files.ballistica.net/cache/ba1/ec/9e/09de652d2787b926de856d50485e", + "assets/build/windows/Win32/Lib/xml/etree/ElementInclude.py": "https://files.ballistica.net/cache/ba1/f7/70/75a58d2a3125230578bc521d3994", + "assets/build/windows/Win32/Lib/xml/etree/ElementPath.py": "https://files.ballistica.net/cache/ba1/6e/0b/69e9a05eb2a06140b122e5ccae4a", + "assets/build/windows/Win32/Lib/xml/etree/ElementTree.py": "https://files.ballistica.net/cache/ba1/ae/44/69859f1e835d4025b63b131b1c6b", + "assets/build/windows/Win32/Lib/xml/etree/__init__.py": "https://files.ballistica.net/cache/ba1/27/f3/261a335507cb7fee52f2afb65af3", "assets/build/windows/Win32/Lib/xml/etree/cElementTree.py": "https://files.ballistica.net/cache/ba1/50/3c/23d2072448e974423bb11e396ab6", "assets/build/windows/Win32/Lib/xml/parsers/__init__.py": "https://files.ballistica.net/cache/ba1/19/bf/5493270c481d02ed233d2119653c", "assets/build/windows/Win32/Lib/xml/parsers/expat.py": "https://files.ballistica.net/cache/ba1/6e/f1/a6aad9b9297dd20b5c24a224eb87", - "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/12/eb/ce78b2effa256a82dcd1192db74f", + "assets/build/windows/Win32/Lib/xml/sax/__init__.py": "https://files.ballistica.net/cache/ba1/5d/e2/7b4012ae334633fd73e6f15735a8", "assets/build/windows/Win32/Lib/xml/sax/_exceptions.py": "https://files.ballistica.net/cache/ba1/47/64/9b8c6da80774cf676c116c42c779", - "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/c7/16/42cb40d7afcde4ce825abf5bfbf3", + "assets/build/windows/Win32/Lib/xml/sax/expatreader.py": "https://files.ballistica.net/cache/ba1/75/23/e1f38824e9a56ce646de9ccc92a2", "assets/build/windows/Win32/Lib/xml/sax/handler.py": "https://files.ballistica.net/cache/ba1/84/cb/83d1e4735c125aee0b686c26f9d0", "assets/build/windows/Win32/Lib/xml/sax/saxutils.py": "https://files.ballistica.net/cache/ba1/b8/1c/2ca4b0f80078729b5e76b6d0250b", "assets/build/windows/Win32/Lib/xml/sax/xmlreader.py": "https://files.ballistica.net/cache/ba1/05/f9/eeb1c32818d63991e806451dad45", "assets/build/windows/Win32/Lib/xmlrpc/__init__.py": "https://files.ballistica.net/cache/ba1/84/79/19c277eda21caa83389ff1c2258f", - "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/1c/07/4679e4429a5da03ebb39b3c219cd", - "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/1f/03/3ec486442d39392933c7bab3d00d", + "assets/build/windows/Win32/Lib/xmlrpc/client.py": "https://files.ballistica.net/cache/ba1/36/81/6e1abfb7940c5580d2835f904c95", + "assets/build/windows/Win32/Lib/xmlrpc/server.py": "https://files.ballistica.net/cache/ba1/25/9c/bb429d6083ec5e53cfe18d7eb955", "assets/build/windows/Win32/Lib/zipapp.py": "https://files.ballistica.net/cache/ba1/92/65/287c3d27f14ea2956622e136f71b", - "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/a4/5d/baf60589ec6877de04ded39e9993", + "assets/build/windows/Win32/Lib/zipfile.py": "https://files.ballistica.net/cache/ba1/4c/c2/fc4526c5fff3ecbb2283d8a206a9", "assets/build/windows/Win32/Lib/zipimport.py": "https://files.ballistica.net/cache/ba1/73/9f/d089ac24f8277925d6938ab1fe1f", + "assets/build/windows/Win32/Lib/zoneinfo/__init__.py": "https://files.ballistica.net/cache/ba1/2d/ff/48364d3203172aef5248f5645e6f", + "assets/build/windows/Win32/Lib/zoneinfo/_common.py": "https://files.ballistica.net/cache/ba1/87/11/2b839574860329712c70bd11e8f3", + "assets/build/windows/Win32/Lib/zoneinfo/_tzpath.py": "https://files.ballistica.net/cache/ba1/d3/be/2eed03b48558c92499af86cd48a8", + "assets/build/windows/Win32/Lib/zoneinfo/_zoneinfo.py": "https://files.ballistica.net/cache/ba1/10/ed/a6ce9682c54a329853f6f79567a1", "assets/build/windows/Win32/OpenAL32.dll": "https://files.ballistica.net/cache/ba1/7b/0f/4349781f2e7ea0ced321fd0b9c45", "assets/build/windows/Win32/SDL2.dll": "https://files.ballistica.net/cache/ba1/c5/7d/e8943b5eda2472a308b63f938b1c", "assets/build/windows/Win32/libvorbis.dll": "https://files.ballistica.net/cache/ba1/1b/d1/75cc9eb21373659c8baacbdeb080", "assets/build/windows/Win32/libvorbisfile.dll": "https://files.ballistica.net/cache/ba1/c6/e1/f52f5d6c78f0ba497f0c8cd1c630", "assets/build/windows/Win32/msvcp140d.dll": "https://files.ballistica.net/cache/ba1/4e/48/54d72587b4bd07abcad311523685", "assets/build/windows/Win32/ogg.dll": "https://files.ballistica.net/cache/ba1/f2/0c/469bdc2148ad7d94232023da2cc6", - "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/61/1e/8b300ef4a3c46652ac1f7d01ed53", - "assets/build/windows/Win32/python38.dll": "https://files.ballistica.net/cache/ba1/1f/39/e314c3e7846ecddbd946c08aac04", - "assets/build/windows/Win32/python38_d.dll": "https://files.ballistica.net/cache/ba1/e1/1e/9dd3909f6a7d14ef3f5c95bceb73", - "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/57/2f/7cda5f442a832f8f92fc76e8370d", - "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/3b/01/7819c084c81c84562a2dab70033e", - "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/4b/df/7ebb1be3e018abc04660d932a7b2", + "assets/build/windows/Win32/python.exe": "https://files.ballistica.net/cache/ba1/bc/a9/370cfdb8a868380c0588453bd24e", + "assets/build/windows/Win32/python39.dll": "https://files.ballistica.net/cache/ba1/31/af/fd6a1905ec58a7000558c00d0c9c", + "assets/build/windows/Win32/python39_d.dll": "https://files.ballistica.net/cache/ba1/b8/ab/f7b684f6e58d09028941ca67f2cf", + "assets/build/windows/Win32/python_d.exe": "https://files.ballistica.net/cache/ba1/aa/47/11ca3dcba15bcdc71ca99a8ca526", + "assets/build/windows/Win32/pythonw.exe": "https://files.ballistica.net/cache/ba1/ea/9a/73a64c5bbf95bbb198c9da833f26", + "assets/build/windows/Win32/pythonw_d.exe": "https://files.ballistica.net/cache/ba1/b0/bc/470220ed546759f105442c48315a", "assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/f5/8b/14895df9caf46f326a3c939b34a4", "assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e", "assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f", "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/72/82/86956fae909ac2fe2a1abd84a361", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/70/e0/d1f6e02c19b18f3d02b474e9d9c0", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ad/1b/13d2e47149d4804419bbc2d97145", "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/19/f5/83c7bb76dc79020ded2e53f25e09", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6d/fb/51437a1f97e5cf466595e9b433c5", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/af/a4/09ce2c2cd53f46338e838958c58d", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/40/83/5514e4fc477d23dd035e4dbf441a", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4b/de/c54388a6e7c64c917c8b4a7c2ba5", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/28/e9/19563067a48a3a779d66bf19b606", "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9c/4f/9b9276e8e2bf0d222ad1ee63a181", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f5/80/5c0ddcd973674081a7d7abf71069", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/0c/6e/5910f4a9fd3cfab4464ddcc88557", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c6/6f/d83b7dccd42e270e4e5cca582906", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b7/19/c2ac8cc74bbde244b762f6390757", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/14/64/3009cfea9985b63982bee437144b", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/bd/bf/d299472cdbe1778fc6bc6f6ca3cf", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/86/ec/8b92f4db81024cc3ba44ef6b8070", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/01/a3/7dd46627ff5606234eafa4cb37b8", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/85/73/eba334a349abc12cb873e1a45909", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f2/92/d170f89127ce918ba89a8dfcde22", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/f5/f3/bc57353da277776fc7a923b27ae5", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b7/c5/8e0d736ecd4eb1ca6a18e2b5bff4", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/84/de/d90837982093b0b5b2dd5a71e304", - "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/ae/d0dac8641dd0cddaf7eeb0c6d6bb", - "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/e9/31e77a3d8ccf147372b30ca2005c", - "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/86/edc44ed5f9206a9d538eaa39bb5e", - "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ba/ca/4726eca2dc89e1f1faf08f34b635", - "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6d/46/1860beb33402ee3463e5870ffc6d", - "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/17/1d6af884c0a77e339a888015fccd", - "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fb/5e/f71252314b595fa089a70e84ae7d", - "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5f/af/4029a33987647c355e8ea16ac327", - "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0f/bf/7feceed4f45860593f5abd547ef5", - "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a4/ac/c9ab19889af2af351c35bbcc2ca6", - "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/bb/6d/3f795483eecf3b02b175d4e3ae95", - "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/59/5d/6c2a2faf66ce5cd37efbbd4ee531", - "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3b/73/083f29cf270f3701aee5d27fea70", - "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/51/21/ec73bfd77df70ff4d06ca2892505", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/dd/c4/76f367fa1cea9c720e79056afd20", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/58/90/dedfb364379229d8c64848b9435c", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/2b/50/7719ce17c926c2e77cfd86227b8f", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/4d/6e/07d81f2ecd4c6681d12f02bc4260", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/d5/dc/2b96b0f2dfaba1d9ff028105c2d6", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/6d/1c/b0965cabbdd209b35d24ceef4a31", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/37/86/b69055de8eb73e66505869ceec01", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/d6/07/430dbb5c7138fd972923bd495ae4", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/81/ba/ab192931bda7f54f09d4c4ab5ca1", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/65/d4/2ee62ace0f8b6b362fb1f4570af8", - "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/6c/63/2b8cbb65a0e1daa45d59e9f87e9a", - "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/c0/2f/a8b50faad086fba4fe936e863c20" + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/10/2f/8b02f5434fd232a7cdfeab2701d4", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e5/78/b289ab113be66c697ce64795193a", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/17/54/7efe5b99d8588162ee757dea3348", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/23/17/f1d541a3c9c3b5790e96828b7598", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/57/9f/d1bf09f5e0a2a15d730d9bb3c5cb", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d4/65/7a5e2941745c3036d89dbe3872de", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5b/d6/d740cfe4e8bbe21a5345df389454", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b1/ee/ea946bcdb77305710c59e9c6d128", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/70/f3/c4b89730342623be82e38f5f6ded", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/f5/7ab6560338d20424f553ee33a940", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/26/59/dfde2e6ce41ddfd89fa2e853db5c", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/60/51/71851a9986828e22489227aee1ec", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/d8/b5/4bb7dfc057da66009868677f4131", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/5b/57/1d23e447aa72ee3e812171baa8df", + "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e2/a9/6a5da77052000da6b35560120cd8", + "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/98/e4/199222439f5c1a9f4926aba0241b", + "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/69/bb/aabd8fa544c44831574d5b017ae7", + "build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f1/de/15cedd9462ef271415e9abccd06b", + "build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/ee/290a65b39125abbb015415dc8b59", + "build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e8/0f/a6993b7e38a2d48e2a4938f4c4fd", + "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/0b/93/5db13716ee4610ec88d409e3379d", + "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/34/1cda12f81c46067e7d6f9b74806e", + "build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4e/1e/a67f47468493a564f95f3218b999", + "build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d7/f0/41c098f285a9e5c76907c9547983", + "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/6e/e29738131f523b42168293c68d0d", + "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/89/4af8bd76d718c306fd4cabe9b0b6", + "build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/62/c739869c92c06e35b8fd782a4fbc", + "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/90/53/c85bbfe89b765829b27c0d28617a", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f9/09/5a4922d34e314ef9ca8d4c90329d", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8d/de/025bb526c5a126636dffb011d5f4", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/b8/e0/2277efb063810deba2967cb7c7e5", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/98/32/72471c2f70116898b0dd01469951", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/8f/24/8ca657c6df34919463278294fdcf", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/31/ba/ceb77656d6670d6fa10ea45803f4", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e3/72/e5b82a0d6fafa4726784d0b4e950", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/14/52/4c4d8e05d55133d6f144372fbb4c", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ef/ad/f9cda01f91ad9920324054cff7e7", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/ce/a7/1ade386c868f6ef453eecbebacb7", + "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/f2/6c/5a0a4695dcc2a11e7941b8777e80", + "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/65/ac/d5c4162a71028c1bfa73ebc1f881" } \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8c690e1..720ecf12 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Install dependencies run: tools/pcommand install_pip_reqs - name: Run checks and tests @@ -35,7 +35,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Compile binary run: make _cmake-simple-ci-server-build @@ -51,7 +51,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: 3.9 - name: Install dependencies run: | python -m pip install --upgrade pip diff --git a/.idea/ballisticacore.iml b/.idea/ballisticacore.iml index a385081f..096ed03a 100644 --- a/.idea/ballisticacore.iml +++ b/.idea/ballisticacore.iml @@ -64,7 +64,7 @@ - + \ No newline at end of file diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml index b388fb62..9a416d60 100644 --- a/.idea/dictionaries/ericf.xml +++ b/.idea/dictionaries/ericf.xml @@ -14,6 +14,7 @@ aaak aarch abcdefghijklmnopqrstuvwxyz + abcdefghjkmnpqrtuvwxy abeb abishort abot @@ -81,6 +82,7 @@ apichanges apis apks + apost appath appathout appcfg @@ -235,6 +237,7 @@ bombsquadgame bools bootlocale + bootsubprocess borhani bot's botdist @@ -394,10 +397,12 @@ clrred cmakelists cmakeserver + cmath cmathmodule cmds cmembers cmodel + cmodules cmpf cnode codecsmodule @@ -564,6 +569,7 @@ distroot distros dline + dliwk dlldir dlls dmake @@ -710,6 +716,7 @@ eventid ewww ewwww + exargs excludepowerups excludetypes excstr @@ -745,6 +752,7 @@ fbase fclose fcmd + fcntl fcntlmodule fcode fcontents @@ -977,6 +985,7 @@ gpsui gradlepath gradlew + graphlib gravis grpentry grpkey @@ -1202,6 +1211,7 @@ lbits lbld lbval + lbzip lcfg lcolor lcrypto @@ -1217,6 +1227,8 @@ lfull lfval libballisticacore + libbz + libbzip libcrypto libdir libegl @@ -1235,6 +1247,7 @@ libsdl libsqlite libssl + libuuid libvorbi libvorbis libvorbisfile @@ -1313,6 +1326,7 @@ ltex ltypes lubyte + luuid lzma lzmamodule macappstore @@ -1580,6 +1594,7 @@ ortho osascript osmusic + ossaudiodev ostype osval otherplayer @@ -1695,6 +1710,7 @@ pogotron pointpos policybase + popd popen poplib popupcolor @@ -2294,6 +2310,7 @@ testfull testhelpers testimportmultiple + testinternalcapi testm testmagicmethods testmock @@ -2405,6 +2422,7 @@ typestr tzdiff tzinfos + tzpath uadfc uber ucrtbased @@ -2463,6 +2481,7 @@ userfunctions utcnow utimensat + uuidmodule uval valanntype validpgpkeys @@ -2521,6 +2540,7 @@ webbrowser webpage webpages + weeeird whatevs wheee whos @@ -2593,7 +2613,10 @@ xval xxdiff xxhdpi + xxlimited + xxsubinterpreters xxsubtype + xxtestfuzz xxxhdpi yach yapf @@ -2610,6 +2633,7 @@ zipapp zlib zlibmodule + zoneinfo zoomtext zpos zval diff --git a/.idea/misc.xml b/.idea/misc.xml index 2a75f480..bfd101b1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e5b7d87..ae1cf302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ -### 1.6.5 (20388) +### 1.6.5 (20394) - Added co-op support to server builds (thanks Dliwk!) +- Updated everything from Python 3.8 to Python 3.9. The biggest immediate impact to our code is that basic types such as list, dict, and tuple can be used in annotations, eliminating the need to import typing.Dict, typing.List, etc. See python.org for more changes. +- Note: accessing mods on external storage on Android will not work in this release. This functionality has not been working in recent versions of Android due to increased security features anyway and I am in the process of replacing it with a cloud based system for installing mods. More on this soon. ### 1.6.4 (20382) - Some cleanups in the Favorites tab of the gather window. diff --git a/assets/.asset_manifest_private.json b/assets/.asset_manifest_private.json index f0f2231f..5c0ccf46 100644 --- a/assets/.asset_manifest_private.json +++ b/assets/.asset_manifest_private.json @@ -941,28 +941,28 @@ "ba_data/models/zoeTorso.bob", "ba_data/models/zoeUpperArm.bob", "ba_data/models/zoeUpperLeg.bob", - "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc", "ba_data/python-site-packages/_yaml/__init__.py", - "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python-site-packages/typing_extensions.py", "ba_data/python-site-packages/yaml/__init__.py", - "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc", - "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc", + "ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc", "ba_data/python-site-packages/yaml/composer.py", "ba_data/python-site-packages/yaml/constructor.py", "ba_data/python-site-packages/yaml/cyaml.py", @@ -2585,180 +2585,182 @@ "ba_data/textures/zoeIcon_preview.png", "pylib-android/__future__.py", "pylib-android/__phello__.foo.py", - "pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ast.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/base64.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/code.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/copy.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/csv.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dis.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/enum.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/functools.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/glob.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/imp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/io.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/locale.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/operator.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/os.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/platform.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/profile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pty.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/queue.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/random.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/re.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sched.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/signal.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/site.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/socket.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/stat.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/string.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/struct.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/this.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/threading.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/token.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/trace.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/tty.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/types.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/typing.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/uu.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/wave.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc", - "pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc", + "pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ast.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/base64.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/code.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/copy.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/csv.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/dis.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/enum.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/functools.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/glob.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/imp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/io.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/locale.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/operator.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/os.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/platform.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/profile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pty.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/queue.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/random.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/re.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sched.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/signal.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/site.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/socket.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/stat.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/string.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/struct.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/this.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/threading.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/token.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/trace.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/tty.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/types.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/typing.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/uu.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/wave.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc", + "pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc", + "pylib-android/_aix_support.py", "pylib-android/_bootlocale.py", + "pylib-android/_bootsubprocess.py", "pylib-android/_collections_abc.py", "pylib-android/_compat_pickle.py", "pylib-android/_compression.py", - "pylib-android/_dummy_thread.py", "pylib-android/_markupbase.py", "pylib-android/_osx_support.py", "pylib-android/_py_abc.py", @@ -2776,35 +2778,36 @@ "pylib-android/asynchat.py", "pylib-android/asyncio/__init__.py", "pylib-android/asyncio/__main__.py", - "pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "pylib-android/asyncio/base_events.py", "pylib-android/asyncio/base_futures.py", "pylib-android/asyncio/base_subprocess.py", @@ -2827,6 +2830,7 @@ "pylib-android/asyncio/streams.py", "pylib-android/asyncio/subprocess.py", "pylib-android/asyncio/tasks.py", + "pylib-android/asyncio/threads.py", "pylib-android/asyncio/transports.py", "pylib-android/asyncio/trsock.py", "pylib-android/asyncio/unix_events.py", @@ -2848,18 +2852,18 @@ "pylib-android/codecs.py", "pylib-android/codeop.py", "pylib-android/collections/__init__.py", - "pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc", "pylib-android/collections/abc.py", "pylib-android/colorsys.py", "pylib-android/compileall.py", "pylib-android/concurrent/__init__.py", - "pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-android/concurrent/futures/__init__.py", - "pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "pylib-android/concurrent/futures/_base.py", "pylib-android/concurrent/futures/process.py", "pylib-android/concurrent/futures/thread.py", @@ -2871,29 +2875,29 @@ "pylib-android/crypt.py", "pylib-android/csv.py", "pylib-android/ctypes/__init__.py", - "pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "pylib-android/ctypes/_aix.py", "pylib-android/ctypes/_endian.py", "pylib-android/ctypes/macholib/__init__.py", - "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "pylib-android/ctypes/macholib/dyld.py", "pylib-android/ctypes/macholib/dylib.py", "pylib-android/ctypes/macholib/framework.py", "pylib-android/ctypes/util.py", "pylib-android/ctypes/wintypes.py", "pylib-android/curses/__init__.py", - "pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "pylib-android/curses/ascii.py", "pylib-android/curses/has_key.py", "pylib-android/curses/panel.py", @@ -2904,28 +2908,27 @@ "pylib-android/difflib.py", "pylib-android/dis.py", "pylib-android/doctest.py", - "pylib-android/dummy_threading.py", "pylib-android/email/__init__.py", - "pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc", + "pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc", "pylib-android/email/_encoded_words.py", "pylib-android/email/_header_value_parser.py", "pylib-android/email/_parseaddr.py", @@ -2942,15 +2945,15 @@ "pylib-android/email/iterators.py", "pylib-android/email/message.py", "pylib-android/email/mime/__init__.py", - "pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "pylib-android/email/mime/application.py", "pylib-android/email/mime/audio.py", "pylib-android/email/mime/base.py", @@ -2964,129 +2967,128 @@ "pylib-android/email/quoprimime.py", "pylib-android/email/utils.py", "pylib-android/encodings/__init__.py", - "pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "pylib-android/encodings/aliases.py", "pylib-android/encodings/ascii.py", "pylib-android/encodings/base64_codec.py", @@ -3174,7 +3176,6 @@ "pylib-android/encodings/kz1048.py", "pylib-android/encodings/latin_1.py", "pylib-android/encodings/mac_arabic.py", - "pylib-android/encodings/mac_centeuro.py", "pylib-android/encodings/mac_croatian.py", "pylib-android/encodings/mac_cyrillic.py", "pylib-android/encodings/mac_farsi.py", @@ -3222,22 +3223,23 @@ "pylib-android/getpass.py", "pylib-android/gettext.py", "pylib-android/glob.py", + "pylib-android/graphlib.py", "pylib-android/gzip.py", "pylib-android/hashlib.py", "pylib-android/heapq.py", "pylib-android/hmac.py", "pylib-android/html/__init__.py", - "pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc", - "pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc", + "pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc", + "pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc", "pylib-android/html/entities.py", "pylib-android/html/parser.py", "pylib-android/http/__init__.py", - "pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc", "pylib-android/http/client.py", "pylib-android/http/cookiejar.py", "pylib-android/http/cookies.py", @@ -3245,16 +3247,18 @@ "pylib-android/imghdr.py", "pylib-android/imp.py", "pylib-android/importlib/__init__.py", - "pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc", "pylib-android/importlib/_bootstrap.py", "pylib-android/importlib/_bootstrap_external.py", + "pylib-android/importlib/_common.py", "pylib-android/importlib/abc.py", "pylib-android/importlib/machinery.py", "pylib-android/importlib/metadata.py", @@ -3264,11 +3268,11 @@ "pylib-android/io.py", "pylib-android/ipaddress.py", "pylib-android/json/__init__.py", - "pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc", + "pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc", "pylib-android/json/decoder.py", "pylib-android/json/encoder.py", "pylib-android/json/scanner.py", @@ -3277,9 +3281,9 @@ "pylib-android/linecache.py", "pylib-android/locale.py", "pylib-android/logging/__init__.py", - "pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc", - "pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc", + "pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "pylib-android/logging/config.py", "pylib-android/logging/handlers.py", "pylib-android/lzma.py", @@ -3334,9 +3338,9 @@ "pylib-android/socket.py", "pylib-android/socketserver.py", "pylib-android/sqlite3/__init__.py", - "pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "pylib-android/sqlite3/dbapi2.py", "pylib-android/sqlite3/dump.py", "pylib-android/sre_compile.py", @@ -3370,12 +3374,12 @@ "pylib-android/types.py", "pylib-android/typing.py", "pylib-android/urllib/__init__.py", - "pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "pylib-android/urllib/error.py", "pylib-android/urllib/parse.py", "pylib-android/urllib/request.py", @@ -3389,17 +3393,17 @@ "pylib-android/webbrowser.py", "pylib-android/xdrlib.py", "pylib-android/xml/__init__.py", - "pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-android/xml/dom/NodeFilter.py", "pylib-android/xml/dom/__init__.py", - "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "pylib-android/xml/dom/domreg.py", "pylib-android/xml/dom/expatbuilder.py", "pylib-android/xml/dom/minicompat.py", @@ -3410,213 +3414,223 @@ "pylib-android/xml/etree/ElementPath.py", "pylib-android/xml/etree/ElementTree.py", "pylib-android/xml/etree/__init__.py", - "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "pylib-android/xml/etree/cElementTree.py", "pylib-android/xml/parsers/__init__.py", - "pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "pylib-android/xml/parsers/expat.py", "pylib-android/xml/sax/__init__.py", - "pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "pylib-android/xml/sax/_exceptions.py", "pylib-android/xml/sax/expatreader.py", "pylib-android/xml/sax/handler.py", "pylib-android/xml/sax/saxutils.py", "pylib-android/xml/sax/xmlreader.py", "pylib-android/xmlrpc/__init__.py", - "pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "pylib-android/xmlrpc/client.py", "pylib-android/xmlrpc/server.py", "pylib-android/zipapp.py", "pylib-android/zipfile.py", "pylib-android/zipimport.py", + "pylib-android/zoneinfo/__init__.py", + "pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "pylib-android/zoneinfo/_common.py", + "pylib-android/zoneinfo/_tzpath.py", + "pylib-android/zoneinfo/_zoneinfo.py", "pylib-apple/__future__.py", "pylib-apple/__phello__.foo.py", - "pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/code.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/io.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/os.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/random.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/re.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/site.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/string.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/this.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/token.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/types.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc", - "pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc", + "pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/code.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/io.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/os.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/random.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/re.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/site.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/string.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/this.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/token.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/types.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc", + "pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc", + "pylib-apple/_aix_support.py", "pylib-apple/_bootlocale.py", + "pylib-apple/_bootsubprocess.py", "pylib-apple/_collections_abc.py", "pylib-apple/_compat_pickle.py", "pylib-apple/_compression.py", - "pylib-apple/_dummy_thread.py", "pylib-apple/_markupbase.py", "pylib-apple/_osx_support.py", "pylib-apple/_py_abc.py", @@ -3634,35 +3648,36 @@ "pylib-apple/asynchat.py", "pylib-apple/asyncio/__init__.py", "pylib-apple/asyncio/__main__.py", - "pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "pylib-apple/asyncio/base_events.py", "pylib-apple/asyncio/base_futures.py", "pylib-apple/asyncio/base_subprocess.py", @@ -3685,6 +3700,7 @@ "pylib-apple/asyncio/streams.py", "pylib-apple/asyncio/subprocess.py", "pylib-apple/asyncio/tasks.py", + "pylib-apple/asyncio/threads.py", "pylib-apple/asyncio/transports.py", "pylib-apple/asyncio/trsock.py", "pylib-apple/asyncio/unix_events.py", @@ -3706,18 +3722,18 @@ "pylib-apple/codecs.py", "pylib-apple/codeop.py", "pylib-apple/collections/__init__.py", - "pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc", "pylib-apple/collections/abc.py", "pylib-apple/colorsys.py", "pylib-apple/compileall.py", "pylib-apple/concurrent/__init__.py", - "pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-apple/concurrent/futures/__init__.py", - "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "pylib-apple/concurrent/futures/_base.py", "pylib-apple/concurrent/futures/process.py", "pylib-apple/concurrent/futures/thread.py", @@ -3729,29 +3745,29 @@ "pylib-apple/crypt.py", "pylib-apple/csv.py", "pylib-apple/ctypes/__init__.py", - "pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "pylib-apple/ctypes/_aix.py", "pylib-apple/ctypes/_endian.py", "pylib-apple/ctypes/macholib/__init__.py", - "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "pylib-apple/ctypes/macholib/dyld.py", "pylib-apple/ctypes/macholib/dylib.py", "pylib-apple/ctypes/macholib/framework.py", "pylib-apple/ctypes/util.py", "pylib-apple/ctypes/wintypes.py", "pylib-apple/curses/__init__.py", - "pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "pylib-apple/curses/ascii.py", "pylib-apple/curses/has_key.py", "pylib-apple/curses/panel.py", @@ -3762,28 +3778,27 @@ "pylib-apple/difflib.py", "pylib-apple/dis.py", "pylib-apple/doctest.py", - "pylib-apple/dummy_threading.py", "pylib-apple/email/__init__.py", - "pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc", + "pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc", "pylib-apple/email/_encoded_words.py", "pylib-apple/email/_header_value_parser.py", "pylib-apple/email/_parseaddr.py", @@ -3800,15 +3815,15 @@ "pylib-apple/email/iterators.py", "pylib-apple/email/message.py", "pylib-apple/email/mime/__init__.py", - "pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "pylib-apple/email/mime/application.py", "pylib-apple/email/mime/audio.py", "pylib-apple/email/mime/base.py", @@ -3822,129 +3837,128 @@ "pylib-apple/email/quoprimime.py", "pylib-apple/email/utils.py", "pylib-apple/encodings/__init__.py", - "pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "pylib-apple/encodings/aliases.py", "pylib-apple/encodings/ascii.py", "pylib-apple/encodings/base64_codec.py", @@ -4032,7 +4046,6 @@ "pylib-apple/encodings/kz1048.py", "pylib-apple/encodings/latin_1.py", "pylib-apple/encodings/mac_arabic.py", - "pylib-apple/encodings/mac_centeuro.py", "pylib-apple/encodings/mac_croatian.py", "pylib-apple/encodings/mac_cyrillic.py", "pylib-apple/encodings/mac_farsi.py", @@ -4080,22 +4093,23 @@ "pylib-apple/getpass.py", "pylib-apple/gettext.py", "pylib-apple/glob.py", + "pylib-apple/graphlib.py", "pylib-apple/gzip.py", "pylib-apple/hashlib.py", "pylib-apple/heapq.py", "pylib-apple/hmac.py", "pylib-apple/html/__init__.py", - "pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc", - "pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc", + "pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc", + "pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc", "pylib-apple/html/entities.py", "pylib-apple/html/parser.py", "pylib-apple/http/__init__.py", - "pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc", "pylib-apple/http/client.py", "pylib-apple/http/cookiejar.py", "pylib-apple/http/cookies.py", @@ -4103,16 +4117,18 @@ "pylib-apple/imghdr.py", "pylib-apple/imp.py", "pylib-apple/importlib/__init__.py", - "pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc", "pylib-apple/importlib/_bootstrap.py", "pylib-apple/importlib/_bootstrap_external.py", + "pylib-apple/importlib/_common.py", "pylib-apple/importlib/abc.py", "pylib-apple/importlib/machinery.py", "pylib-apple/importlib/metadata.py", @@ -4122,11 +4138,11 @@ "pylib-apple/io.py", "pylib-apple/ipaddress.py", "pylib-apple/json/__init__.py", - "pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc", + "pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc", "pylib-apple/json/decoder.py", "pylib-apple/json/encoder.py", "pylib-apple/json/scanner.py", @@ -4135,9 +4151,9 @@ "pylib-apple/linecache.py", "pylib-apple/locale.py", "pylib-apple/logging/__init__.py", - "pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc", - "pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc", + "pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "pylib-apple/logging/config.py", "pylib-apple/logging/handlers.py", "pylib-apple/lzma.py", @@ -4145,6 +4161,14 @@ "pylib-apple/mailcap.py", "pylib-apple/mimetypes.py", "pylib-apple/modulefinder.py", + "pylib-apple/msilib/__init__.py", + "pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc", + "pylib-apple/msilib/schema.py", + "pylib-apple/msilib/sequence.py", + "pylib-apple/msilib/text.py", "pylib-apple/netrc.py", "pylib-apple/nntplib.py", "pylib-apple/ntpath.py", @@ -4192,9 +4216,9 @@ "pylib-apple/socket.py", "pylib-apple/socketserver.py", "pylib-apple/sqlite3/__init__.py", - "pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "pylib-apple/sqlite3/dbapi2.py", "pylib-apple/sqlite3/dump.py", "pylib-apple/sre_compile.py", @@ -4228,12 +4252,12 @@ "pylib-apple/types.py", "pylib-apple/typing.py", "pylib-apple/urllib/__init__.py", - "pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "pylib-apple/urllib/error.py", "pylib-apple/urllib/parse.py", "pylib-apple/urllib/request.py", @@ -4247,17 +4271,17 @@ "pylib-apple/webbrowser.py", "pylib-apple/xdrlib.py", "pylib-apple/xml/__init__.py", - "pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "pylib-apple/xml/dom/NodeFilter.py", "pylib-apple/xml/dom/__init__.py", - "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "pylib-apple/xml/dom/domreg.py", "pylib-apple/xml/dom/expatbuilder.py", "pylib-apple/xml/dom/minicompat.py", @@ -4268,37 +4292,45 @@ "pylib-apple/xml/etree/ElementPath.py", "pylib-apple/xml/etree/ElementTree.py", "pylib-apple/xml/etree/__init__.py", - "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "pylib-apple/xml/etree/cElementTree.py", "pylib-apple/xml/parsers/__init__.py", - "pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "pylib-apple/xml/parsers/expat.py", "pylib-apple/xml/sax/__init__.py", - "pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "pylib-apple/xml/sax/_exceptions.py", "pylib-apple/xml/sax/expatreader.py", "pylib-apple/xml/sax/handler.py", "pylib-apple/xml/sax/saxutils.py", "pylib-apple/xml/sax/xmlreader.py", "pylib-apple/xmlrpc/__init__.py", - "pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "pylib-apple/xmlrpc/client.py", "pylib-apple/xmlrpc/server.py", "pylib-apple/zipapp.py", "pylib-apple/zipfile.py", "pylib-apple/zipimport.py", + "pylib-apple/zoneinfo/__init__.py", + "pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "pylib-apple/zoneinfo/_common.py", + "pylib-apple/zoneinfo/_tzpath.py", + "pylib-apple/zoneinfo/_zoneinfo.py", "windows/Win32/DLLs/_asyncio.pyd", "windows/Win32/DLLs/_asyncio_d.pyd", "windows/Win32/DLLs/_bz2.pyd", @@ -4337,11 +4369,17 @@ "windows/Win32/DLLs/_testconsole_d.pyd", "windows/Win32/DLLs/_testimportmultiple.pyd", "windows/Win32/DLLs/_testimportmultiple_d.pyd", + "windows/Win32/DLLs/_testinternalcapi.pyd", + "windows/Win32/DLLs/_testinternalcapi_d.pyd", "windows/Win32/DLLs/_testmultiphase.pyd", "windows/Win32/DLLs/_testmultiphase_d.pyd", "windows/Win32/DLLs/_tkinter.pyd", "windows/Win32/DLLs/_tkinter_d.lib", "windows/Win32/DLLs/_tkinter_d.pyd", + "windows/Win32/DLLs/_uuid.pyd", + "windows/Win32/DLLs/_uuid_d.pyd", + "windows/Win32/DLLs/_zoneinfo.pyd", + "windows/Win32/DLLs/_zoneinfo_d.pyd", "windows/Win32/DLLs/libcrypto-1_1.dll", "windows/Win32/DLLs/libffi-7.dll", "windows/Win32/DLLs/libssl-1_1.dll", @@ -4361,180 +4399,182 @@ "windows/Win32/DLLs/winsound_d.pyd", "windows/Win32/Lib/__future__.py", "windows/Win32/Lib/__phello__.foo.py", - "windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc", - "windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc", + "windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc", + "windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc", + "windows/Win32/Lib/_aix_support.py", "windows/Win32/Lib/_bootlocale.py", + "windows/Win32/Lib/_bootsubprocess.py", "windows/Win32/Lib/_collections_abc.py", "windows/Win32/Lib/_compat_pickle.py", "windows/Win32/Lib/_compression.py", - "windows/Win32/Lib/_dummy_thread.py", "windows/Win32/Lib/_markupbase.py", "windows/Win32/Lib/_osx_support.py", "windows/Win32/Lib/_py_abc.py", @@ -4552,35 +4592,36 @@ "windows/Win32/Lib/asynchat.py", "windows/Win32/Lib/asyncio/__init__.py", "windows/Win32/Lib/asyncio/__main__.py", - "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "windows/Win32/Lib/asyncio/base_events.py", "windows/Win32/Lib/asyncio/base_futures.py", "windows/Win32/Lib/asyncio/base_subprocess.py", @@ -4603,6 +4644,7 @@ "windows/Win32/Lib/asyncio/streams.py", "windows/Win32/Lib/asyncio/subprocess.py", "windows/Win32/Lib/asyncio/tasks.py", + "windows/Win32/Lib/asyncio/threads.py", "windows/Win32/Lib/asyncio/transports.py", "windows/Win32/Lib/asyncio/trsock.py", "windows/Win32/Lib/asyncio/unix_events.py", @@ -4624,18 +4666,18 @@ "windows/Win32/Lib/codecs.py", "windows/Win32/Lib/codeop.py", "windows/Win32/Lib/collections/__init__.py", - "windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc", "windows/Win32/Lib/collections/abc.py", "windows/Win32/Lib/colorsys.py", "windows/Win32/Lib/compileall.py", "windows/Win32/Lib/concurrent/__init__.py", - "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/Win32/Lib/concurrent/futures/__init__.py", - "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "windows/Win32/Lib/concurrent/futures/_base.py", "windows/Win32/Lib/concurrent/futures/process.py", "windows/Win32/Lib/concurrent/futures/thread.py", @@ -4647,19 +4689,19 @@ "windows/Win32/Lib/crypt.py", "windows/Win32/Lib/csv.py", "windows/Win32/Lib/ctypes/__init__.py", - "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "windows/Win32/Lib/ctypes/_aix.py", "windows/Win32/Lib/ctypes/_endian.py", "windows/Win32/Lib/ctypes/macholib/README.ctypes", "windows/Win32/Lib/ctypes/macholib/__init__.py", - "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "windows/Win32/Lib/ctypes/macholib/dyld.py", "windows/Win32/Lib/ctypes/macholib/dylib.py", "windows/Win32/Lib/ctypes/macholib/fetch_macholib", @@ -4668,11 +4710,11 @@ "windows/Win32/Lib/ctypes/util.py", "windows/Win32/Lib/ctypes/wintypes.py", "windows/Win32/Lib/curses/__init__.py", - "windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "windows/Win32/Lib/curses/ascii.py", "windows/Win32/Lib/curses/has_key.py", "windows/Win32/Lib/curses/panel.py", @@ -4683,28 +4725,27 @@ "windows/Win32/Lib/difflib.py", "windows/Win32/Lib/dis.py", "windows/Win32/Lib/doctest.py", - "windows/Win32/Lib/dummy_threading.py", "windows/Win32/Lib/email/__init__.py", - "windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc", "windows/Win32/Lib/email/_encoded_words.py", "windows/Win32/Lib/email/_header_value_parser.py", "windows/Win32/Lib/email/_parseaddr.py", @@ -4722,15 +4763,15 @@ "windows/Win32/Lib/email/iterators.py", "windows/Win32/Lib/email/message.py", "windows/Win32/Lib/email/mime/__init__.py", - "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "windows/Win32/Lib/email/mime/application.py", "windows/Win32/Lib/email/mime/audio.py", "windows/Win32/Lib/email/mime/base.py", @@ -4744,129 +4785,128 @@ "windows/Win32/Lib/email/quoprimime.py", "windows/Win32/Lib/email/utils.py", "windows/Win32/Lib/encodings/__init__.py", - "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "windows/Win32/Lib/encodings/aliases.py", "windows/Win32/Lib/encodings/ascii.py", "windows/Win32/Lib/encodings/base64_codec.py", @@ -4954,7 +4994,6 @@ "windows/Win32/Lib/encodings/kz1048.py", "windows/Win32/Lib/encodings/latin_1.py", "windows/Win32/Lib/encodings/mac_arabic.py", - "windows/Win32/Lib/encodings/mac_centeuro.py", "windows/Win32/Lib/encodings/mac_croatian.py", "windows/Win32/Lib/encodings/mac_cyrillic.py", "windows/Win32/Lib/encodings/mac_farsi.py", @@ -5002,22 +5041,23 @@ "windows/Win32/Lib/getpass.py", "windows/Win32/Lib/gettext.py", "windows/Win32/Lib/glob.py", + "windows/Win32/Lib/graphlib.py", "windows/Win32/Lib/gzip.py", "windows/Win32/Lib/hashlib.py", "windows/Win32/Lib/heapq.py", "windows/Win32/Lib/hmac.py", "windows/Win32/Lib/html/__init__.py", - "windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc", - "windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc", + "windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc", "windows/Win32/Lib/html/entities.py", "windows/Win32/Lib/html/parser.py", "windows/Win32/Lib/http/__init__.py", - "windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc", "windows/Win32/Lib/http/client.py", "windows/Win32/Lib/http/cookiejar.py", "windows/Win32/Lib/http/cookies.py", @@ -5025,16 +5065,18 @@ "windows/Win32/Lib/imghdr.py", "windows/Win32/Lib/imp.py", "windows/Win32/Lib/importlib/__init__.py", - "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc", "windows/Win32/Lib/importlib/_bootstrap.py", "windows/Win32/Lib/importlib/_bootstrap_external.py", + "windows/Win32/Lib/importlib/_common.py", "windows/Win32/Lib/importlib/abc.py", "windows/Win32/Lib/importlib/machinery.py", "windows/Win32/Lib/importlib/metadata.py", @@ -5044,11 +5086,11 @@ "windows/Win32/Lib/io.py", "windows/Win32/Lib/ipaddress.py", "windows/Win32/Lib/json/__init__.py", - "windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc", "windows/Win32/Lib/json/decoder.py", "windows/Win32/Lib/json/encoder.py", "windows/Win32/Lib/json/scanner.py", @@ -5057,9 +5099,9 @@ "windows/Win32/Lib/linecache.py", "windows/Win32/Lib/locale.py", "windows/Win32/Lib/logging/__init__.py", - "windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc", - "windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc", + "windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "windows/Win32/Lib/logging/config.py", "windows/Win32/Lib/logging/handlers.py", "windows/Win32/Lib/lzma.py", @@ -5068,10 +5110,10 @@ "windows/Win32/Lib/mimetypes.py", "windows/Win32/Lib/modulefinder.py", "windows/Win32/Lib/msilib/__init__.py", - "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc", - "windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc", "windows/Win32/Lib/msilib/schema.py", "windows/Win32/Lib/msilib/sequence.py", "windows/Win32/Lib/msilib/text.py", @@ -5122,9 +5164,9 @@ "windows/Win32/Lib/socket.py", "windows/Win32/Lib/socketserver.py", "windows/Win32/Lib/sqlite3/__init__.py", - "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "windows/Win32/Lib/sqlite3/dbapi2.py", "windows/Win32/Lib/sqlite3/dump.py", "windows/Win32/Lib/sre_compile.py", @@ -5158,12 +5200,12 @@ "windows/Win32/Lib/types.py", "windows/Win32/Lib/typing.py", "windows/Win32/Lib/urllib/__init__.py", - "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "windows/Win32/Lib/urllib/error.py", "windows/Win32/Lib/urllib/parse.py", "windows/Win32/Lib/urllib/request.py", @@ -5177,17 +5219,17 @@ "windows/Win32/Lib/webbrowser.py", "windows/Win32/Lib/xdrlib.py", "windows/Win32/Lib/xml/__init__.py", - "windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/dom/NodeFilter.py", "windows/Win32/Lib/xml/dom/__init__.py", - "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/dom/domreg.py", "windows/Win32/Lib/xml/dom/expatbuilder.py", "windows/Win32/Lib/xml/dom/minicompat.py", @@ -5198,37 +5240,45 @@ "windows/Win32/Lib/xml/etree/ElementPath.py", "windows/Win32/Lib/xml/etree/ElementTree.py", "windows/Win32/Lib/xml/etree/__init__.py", - "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/etree/cElementTree.py", "windows/Win32/Lib/xml/parsers/__init__.py", - "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/parsers/expat.py", "windows/Win32/Lib/xml/sax/__init__.py", - "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "windows/Win32/Lib/xml/sax/_exceptions.py", "windows/Win32/Lib/xml/sax/expatreader.py", "windows/Win32/Lib/xml/sax/handler.py", "windows/Win32/Lib/xml/sax/saxutils.py", "windows/Win32/Lib/xml/sax/xmlreader.py", "windows/Win32/Lib/xmlrpc/__init__.py", - "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "windows/Win32/Lib/xmlrpc/client.py", "windows/Win32/Lib/xmlrpc/server.py", "windows/Win32/Lib/zipapp.py", "windows/Win32/Lib/zipfile.py", "windows/Win32/Lib/zipimport.py", + "windows/Win32/Lib/zoneinfo/__init__.py", + "windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "windows/Win32/Lib/zoneinfo/_common.py", + "windows/Win32/Lib/zoneinfo/_tzpath.py", + "windows/Win32/Lib/zoneinfo/_zoneinfo.py", "windows/Win32/OpenAL32.dll", "windows/Win32/SDL2.dll", "windows/Win32/libvorbis.dll", @@ -5236,8 +5286,8 @@ "windows/Win32/msvcp140d.dll", "windows/Win32/ogg.dll", "windows/Win32/python.exe", - "windows/Win32/python38.dll", - "windows/Win32/python38_d.dll", + "windows/Win32/python39.dll", + "windows/Win32/python39_d.dll", "windows/Win32/python_d.exe", "windows/Win32/pythonw.exe", "windows/Win32/pythonw_d.exe", @@ -5282,11 +5332,17 @@ "windows/x64/DLLs/_testconsole_d.pyd", "windows/x64/DLLs/_testimportmultiple.pyd", "windows/x64/DLLs/_testimportmultiple_d.pyd", + "windows/x64/DLLs/_testinternalcapi.pyd", + "windows/x64/DLLs/_testinternalcapi_d.pyd", "windows/x64/DLLs/_testmultiphase.pyd", "windows/x64/DLLs/_testmultiphase_d.pyd", "windows/x64/DLLs/_tkinter.pyd", "windows/x64/DLLs/_tkinter_d.lib", "windows/x64/DLLs/_tkinter_d.pyd", + "windows/x64/DLLs/_uuid.pyd", + "windows/x64/DLLs/_uuid_d.pyd", + "windows/x64/DLLs/_zoneinfo.pyd", + "windows/x64/DLLs/_zoneinfo_d.pyd", "windows/x64/DLLs/libcrypto-1_1.dll", "windows/x64/DLLs/libffi-7.dll", "windows/x64/DLLs/libssl-1_1.dll", @@ -5306,180 +5362,182 @@ "windows/x64/DLLs/winsound_d.pyd", "windows/x64/Lib/__future__.py", "windows/x64/Lib/__phello__.foo.py", - "windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc", - "windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc", + "windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc", + "windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc", + "windows/x64/Lib/_aix_support.py", "windows/x64/Lib/_bootlocale.py", + "windows/x64/Lib/_bootsubprocess.py", "windows/x64/Lib/_collections_abc.py", "windows/x64/Lib/_compat_pickle.py", "windows/x64/Lib/_compression.py", - "windows/x64/Lib/_dummy_thread.py", "windows/x64/Lib/_markupbase.py", "windows/x64/Lib/_osx_support.py", "windows/x64/Lib/_py_abc.py", @@ -5497,35 +5555,36 @@ "windows/x64/Lib/asynchat.py", "windows/x64/Lib/asyncio/__init__.py", "windows/x64/Lib/asyncio/__main__.py", - "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc", - "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc", + "windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc", "windows/x64/Lib/asyncio/base_events.py", "windows/x64/Lib/asyncio/base_futures.py", "windows/x64/Lib/asyncio/base_subprocess.py", @@ -5548,6 +5607,7 @@ "windows/x64/Lib/asyncio/streams.py", "windows/x64/Lib/asyncio/subprocess.py", "windows/x64/Lib/asyncio/tasks.py", + "windows/x64/Lib/asyncio/threads.py", "windows/x64/Lib/asyncio/transports.py", "windows/x64/Lib/asyncio/trsock.py", "windows/x64/Lib/asyncio/unix_events.py", @@ -5569,18 +5629,18 @@ "windows/x64/Lib/codecs.py", "windows/x64/Lib/codeop.py", "windows/x64/Lib/collections/__init__.py", - "windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc", + "windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc", "windows/x64/Lib/collections/abc.py", "windows/x64/Lib/colorsys.py", "windows/x64/Lib/compileall.py", "windows/x64/Lib/concurrent/__init__.py", - "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/x64/Lib/concurrent/futures/__init__.py", - "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc", - "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc", + "windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc", "windows/x64/Lib/concurrent/futures/_base.py", "windows/x64/Lib/concurrent/futures/process.py", "windows/x64/Lib/concurrent/futures/thread.py", @@ -5592,19 +5652,19 @@ "windows/x64/Lib/crypt.py", "windows/x64/Lib/csv.py", "windows/x64/Lib/ctypes/__init__.py", - "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc", "windows/x64/Lib/ctypes/_aix.py", "windows/x64/Lib/ctypes/_endian.py", "windows/x64/Lib/ctypes/macholib/README.ctypes", "windows/x64/Lib/ctypes/macholib/__init__.py", - "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc", - "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc", + "windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc", "windows/x64/Lib/ctypes/macholib/dyld.py", "windows/x64/Lib/ctypes/macholib/dylib.py", "windows/x64/Lib/ctypes/macholib/fetch_macholib", @@ -5613,11 +5673,11 @@ "windows/x64/Lib/ctypes/util.py", "windows/x64/Lib/ctypes/wintypes.py", "windows/x64/Lib/curses/__init__.py", - "windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc", - "windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc", + "windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc", "windows/x64/Lib/curses/ascii.py", "windows/x64/Lib/curses/has_key.py", "windows/x64/Lib/curses/panel.py", @@ -5628,28 +5688,27 @@ "windows/x64/Lib/difflib.py", "windows/x64/Lib/dis.py", "windows/x64/Lib/doctest.py", - "windows/x64/Lib/dummy_threading.py", "windows/x64/Lib/email/__init__.py", - "windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc", "windows/x64/Lib/email/_encoded_words.py", "windows/x64/Lib/email/_header_value_parser.py", "windows/x64/Lib/email/_parseaddr.py", @@ -5667,15 +5726,15 @@ "windows/x64/Lib/email/iterators.py", "windows/x64/Lib/email/message.py", "windows/x64/Lib/email/mime/__init__.py", - "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc", - "windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc", + "windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc", "windows/x64/Lib/email/mime/application.py", "windows/x64/Lib/email/mime/audio.py", "windows/x64/Lib/email/mime/base.py", @@ -5689,129 +5748,128 @@ "windows/x64/Lib/email/quoprimime.py", "windows/x64/Lib/email/utils.py", "windows/x64/Lib/encodings/__init__.py", - "windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc", - "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc", + "windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc", "windows/x64/Lib/encodings/aliases.py", "windows/x64/Lib/encodings/ascii.py", "windows/x64/Lib/encodings/base64_codec.py", @@ -5899,7 +5957,6 @@ "windows/x64/Lib/encodings/kz1048.py", "windows/x64/Lib/encodings/latin_1.py", "windows/x64/Lib/encodings/mac_arabic.py", - "windows/x64/Lib/encodings/mac_centeuro.py", "windows/x64/Lib/encodings/mac_croatian.py", "windows/x64/Lib/encodings/mac_cyrillic.py", "windows/x64/Lib/encodings/mac_farsi.py", @@ -5947,22 +6004,23 @@ "windows/x64/Lib/getpass.py", "windows/x64/Lib/gettext.py", "windows/x64/Lib/glob.py", + "windows/x64/Lib/graphlib.py", "windows/x64/Lib/gzip.py", "windows/x64/Lib/hashlib.py", "windows/x64/Lib/heapq.py", "windows/x64/Lib/hmac.py", "windows/x64/Lib/html/__init__.py", - "windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc", - "windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc", + "windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc", "windows/x64/Lib/html/entities.py", "windows/x64/Lib/html/parser.py", "windows/x64/Lib/http/__init__.py", - "windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc", - "windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc", + "windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc", "windows/x64/Lib/http/client.py", "windows/x64/Lib/http/cookiejar.py", "windows/x64/Lib/http/cookies.py", @@ -5970,16 +6028,18 @@ "windows/x64/Lib/imghdr.py", "windows/x64/Lib/imp.py", "windows/x64/Lib/importlib/__init__.py", - "windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc", - "windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc", + "windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc", "windows/x64/Lib/importlib/_bootstrap.py", "windows/x64/Lib/importlib/_bootstrap_external.py", + "windows/x64/Lib/importlib/_common.py", "windows/x64/Lib/importlib/abc.py", "windows/x64/Lib/importlib/machinery.py", "windows/x64/Lib/importlib/metadata.py", @@ -5989,11 +6049,11 @@ "windows/x64/Lib/io.py", "windows/x64/Lib/ipaddress.py", "windows/x64/Lib/json/__init__.py", - "windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc", - "windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc", + "windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc", "windows/x64/Lib/json/decoder.py", "windows/x64/Lib/json/encoder.py", "windows/x64/Lib/json/scanner.py", @@ -6002,9 +6062,9 @@ "windows/x64/Lib/linecache.py", "windows/x64/Lib/locale.py", "windows/x64/Lib/logging/__init__.py", - "windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc", - "windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc", + "windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc", "windows/x64/Lib/logging/config.py", "windows/x64/Lib/logging/handlers.py", "windows/x64/Lib/lzma.py", @@ -6013,10 +6073,10 @@ "windows/x64/Lib/mimetypes.py", "windows/x64/Lib/modulefinder.py", "windows/x64/Lib/msilib/__init__.py", - "windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc", - "windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc", + "windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc", "windows/x64/Lib/msilib/schema.py", "windows/x64/Lib/msilib/sequence.py", "windows/x64/Lib/msilib/text.py", @@ -6067,9 +6127,9 @@ "windows/x64/Lib/socket.py", "windows/x64/Lib/socketserver.py", "windows/x64/Lib/sqlite3/__init__.py", - "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc", - "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc", + "windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc", "windows/x64/Lib/sqlite3/dbapi2.py", "windows/x64/Lib/sqlite3/dump.py", "windows/x64/Lib/sre_compile.py", @@ -6103,12 +6163,12 @@ "windows/x64/Lib/types.py", "windows/x64/Lib/typing.py", "windows/x64/Lib/urllib/__init__.py", - "windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc", - "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc", + "windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc", "windows/x64/Lib/urllib/error.py", "windows/x64/Lib/urllib/parse.py", "windows/x64/Lib/urllib/request.py", @@ -6122,17 +6182,17 @@ "windows/x64/Lib/webbrowser.py", "windows/x64/Lib/xdrlib.py", "windows/x64/Lib/xml/__init__.py", - "windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/dom/NodeFilter.py", "windows/x64/Lib/xml/dom/__init__.py", - "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/dom/domreg.py", "windows/x64/Lib/xml/dom/expatbuilder.py", "windows/x64/Lib/xml/dom/minicompat.py", @@ -6143,37 +6203,45 @@ "windows/x64/Lib/xml/etree/ElementPath.py", "windows/x64/Lib/xml/etree/ElementTree.py", "windows/x64/Lib/xml/etree/__init__.py", - "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/etree/cElementTree.py", "windows/x64/Lib/xml/parsers/__init__.py", - "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/parsers/expat.py", "windows/x64/Lib/xml/sax/__init__.py", - "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc", - "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc", + "windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc", "windows/x64/Lib/xml/sax/_exceptions.py", "windows/x64/Lib/xml/sax/expatreader.py", "windows/x64/Lib/xml/sax/handler.py", "windows/x64/Lib/xml/sax/saxutils.py", "windows/x64/Lib/xml/sax/xmlreader.py", "windows/x64/Lib/xmlrpc/__init__.py", - "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc", - "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc", - "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc", + "windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc", "windows/x64/Lib/xmlrpc/client.py", "windows/x64/Lib/xmlrpc/server.py", "windows/x64/Lib/zipapp.py", "windows/x64/Lib/zipfile.py", "windows/x64/Lib/zipimport.py", + "windows/x64/Lib/zoneinfo/__init__.py", + "windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc", + "windows/x64/Lib/zoneinfo/_common.py", + "windows/x64/Lib/zoneinfo/_tzpath.py", + "windows/x64/Lib/zoneinfo/_zoneinfo.py", "windows/x64/OpenAL32.dll", "windows/x64/SDL2.dll", "windows/x64/libvorbis.dll", @@ -6181,8 +6249,8 @@ "windows/x64/msvcp140d.dll", "windows/x64/ogg.dll", "windows/x64/python.exe", - "windows/x64/python38.dll", - "windows/x64/python38_d.dll", + "windows/x64/python39.dll", + "windows/x64/python39_d.dll", "windows/x64/python_d.exe", "windows/x64/pythonw.exe", "windows/x64/pythonw_d.exe", diff --git a/assets/.asset_manifest_public.json b/assets/.asset_manifest_public.json index 056941fb..2fe16361 100644 --- a/assets/.asset_manifest_public.json +++ b/assets/.asset_manifest_public.json @@ -1,68 +1,68 @@ [ "ba_data/python/ba/__init__.py", - "ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc", - "ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc", + "ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc", + "ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc", "ba_data/python/ba/_account.py", "ba_data/python/ba/_achievement.py", "ba_data/python/ba/_activity.py", @@ -91,8 +91,8 @@ "ba_data/python/ba/_gameutils.py", "ba_data/python/ba/_general.py", "ba_data/python/ba/_generated/__init__.py", - "ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc", + "ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc", "ba_data/python/ba/_generated/enums.py", "ba_data/python/ba/_hooks.py", "ba_data/python/ba/_input.py", @@ -130,33 +130,33 @@ "ba_data/python/ba/modutils.py", "ba_data/python/ba/osmusic.py", "ba_data/python/ba/ui/__init__.py", - "ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python/bacommon/__init__.py", - "ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc", - "ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc", + "ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc", "ba_data/python/bacommon/assets.py", "ba_data/python/bacommon/net.py", "ba_data/python/bacommon/servermanager.py", "ba_data/python/bastd/__init__.py", - "ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc", - "ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc", + "ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc", + "ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc", "ba_data/python/bastd/activity/__init__.py", - "ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc", - "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc", + "ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc", "ba_data/python/bastd/activity/coopjoin.py", "ba_data/python/bastd/activity/coopscore.py", "ba_data/python/bastd/activity/drawscore.py", @@ -166,27 +166,27 @@ "ba_data/python/bastd/activity/multiteamscore.py", "ba_data/python/bastd/activity/multiteamvictory.py", "ba_data/python/bastd/actor/__init__.py", - "ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc", - "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc", + "ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc", "ba_data/python/bastd/actor/background.py", "ba_data/python/bastd/actor/bomb.py", "ba_data/python/bastd/actor/controlsguide.py", @@ -209,25 +209,25 @@ "ba_data/python/bastd/actor/zoomtext.py", "ba_data/python/bastd/appdelegate.py", "ba_data/python/bastd/game/__init__.py", - "ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc", - "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc", + "ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc", "ba_data/python/bastd/game/assault.py", "ba_data/python/bastd/game/capturetheflag.py", "ba_data/python/bastd/game/chosenone.py", @@ -248,29 +248,29 @@ "ba_data/python/bastd/game/thelaststand.py", "ba_data/python/bastd/gameutils.py", "ba_data/python/bastd/keyboard/__init__.py", - "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc", + "ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc", "ba_data/python/bastd/keyboard/englishkeyboard.py", "ba_data/python/bastd/mainmenu.py", "ba_data/python/bastd/mapdata/__init__.py", - "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc", - "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc", + "ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc", "ba_data/python/bastd/mapdata/big_g.py", "ba_data/python/bastd/mapdata/bridgit.py", "ba_data/python/bastd/mapdata/courtyard.py", @@ -290,57 +290,57 @@ "ba_data/python/bastd/mapdata/zig_zag.py", "ba_data/python/bastd/maps.py", "ba_data/python/bastd/session/__init__.py", - "ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc", + "ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc", "ba_data/python/bastd/stdmap.py", "ba_data/python/bastd/tutorial.py", "ba_data/python/bastd/ui/__init__.py", - "ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/account/__init__.py", - "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/account/link.py", "ba_data/python/bastd/ui/account/settings.py", "ba_data/python/bastd/ui/account/unlink.py", @@ -354,10 +354,10 @@ "ba_data/python/bastd/ui/confirm.py", "ba_data/python/bastd/ui/continues.py", "ba_data/python/bastd/ui/coop/__init__.py", - "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/coop/browser.py", "ba_data/python/bastd/ui/coop/gamebutton.py", "ba_data/python/bastd/ui/coop/level.py", @@ -366,12 +366,12 @@ "ba_data/python/bastd/ui/feedback.py", "ba_data/python/bastd/ui/fileselector.py", "ba_data/python/bastd/ui/gather/__init__.py", - "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/gather/abouttab.py", "ba_data/python/bastd/ui/gather/manualtab.py", "ba_data/python/bastd/ui/gather/nearbytab.py", @@ -383,9 +383,9 @@ "ba_data/python/bastd/ui/iconpicker.py", "ba_data/python/bastd/ui/kiosk.py", "ba_data/python/bastd/ui/league/__init__.py", - "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/league/rankbutton.py", "ba_data/python/bastd/ui/league/rankwindow.py", "ba_data/python/bastd/ui/mainmenu.py", @@ -394,15 +394,15 @@ "ba_data/python/bastd/ui/partyqueue.py", "ba_data/python/bastd/ui/play.py", "ba_data/python/bastd/ui/playlist/__init__.py", - "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/playlist/addgame.py", "ba_data/python/bastd/ui/playlist/browser.py", "ba_data/python/bastd/ui/playlist/customizebrowser.py", @@ -414,10 +414,10 @@ "ba_data/python/bastd/ui/playoptions.py", "ba_data/python/bastd/ui/popup.py", "ba_data/python/bastd/ui/profile/__init__.py", - "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/profile/browser.py", "ba_data/python/bastd/ui/profile/edit.py", "ba_data/python/bastd/ui/profile/upgrade.py", @@ -429,25 +429,25 @@ "ba_data/python/bastd/ui/resourcetypeinfo.py", "ba_data/python/bastd/ui/serverdialog.py", "ba_data/python/bastd/ui/settings/__init__.py", - "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/settings/advanced.py", "ba_data/python/bastd/ui/settings/allsettings.py", "ba_data/python/bastd/ui/settings/audio.py", @@ -467,21 +467,21 @@ "ba_data/python/bastd/ui/settings/wiimote.py", "ba_data/python/bastd/ui/settings/xbox360controller.py", "ba_data/python/bastd/ui/soundtrack/__init__.py", - "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/soundtrack/browser.py", "ba_data/python/bastd/ui/soundtrack/edit.py", "ba_data/python/bastd/ui/soundtrack/entrytypeselect.py", "ba_data/python/bastd/ui/soundtrack/macmusicapp.py", "ba_data/python/bastd/ui/specialoffer.py", "ba_data/python/bastd/ui/store/__init__.py", - "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc", - "ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc", + "ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc", "ba_data/python/bastd/ui/store/browser.py", "ba_data/python/bastd/ui/store/button.py", "ba_data/python/bastd/ui/store/item.py", @@ -494,21 +494,21 @@ "ba_data/python/bastd/ui/url.py", "ba_data/python/bastd/ui/watch.py", "ba_data/python/efro/__init__.py", - "ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc", - "ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc", + "ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc", + "ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc", "ba_data/python/efro/call.py", "ba_data/python/efro/dataclassio/__init__.py", - "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc", - "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc", + "ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc", "ba_data/python/efro/dataclassio/_base.py", "ba_data/python/efro/dataclassio/_inputter.py", "ba_data/python/efro/dataclassio/_outputter.py", @@ -519,6 +519,6 @@ "ba_data/python/efro/message.py", "ba_data/python/efro/terminal.py", "ba_data/python/efro/util.py", - "server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc", + "server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc", "server/ballisticacore_server.py" ] \ No newline at end of file diff --git a/assets/Makefile b/assets/Makefile index 6f9441cf..8ddb1a47 100644 --- a/assets/Makefile +++ b/assets/Makefile @@ -122,7 +122,7 @@ ASSET_TARGETS_WIN_WIN32 += $(EXTRAS_TARGETS_WIN_WIN32) ASSET_TARGETS_WIN_X64 += $(EXTRAS_TARGETS_WIN_X64) define make-opt-pyc-target -$1: $$(subst /__pycache__,,$$(subst .cpython-38.opt-1.pyc,.py,$1)) +$1: $$(subst /__pycache__,,$$(subst .cpython-39.opt-1.pyc,.py,$1)) @echo Compiling script: $$^ @rm -rf $$@ && PYTHONHASHSEED=1 \ $$(TOOLS_DIR)/pcommand compile_python_files $$^ && chmod 444 $$@ @@ -377,250 +377,250 @@ SCRIPT_TARGETS_PY_PUBLIC = \ build/server/ballisticacore_server.py SCRIPT_TARGETS_PYC_PUBLIC = \ - build/ba_data/python/ba/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_account.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_achievement.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_activity.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_activitytypes.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_actor.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_ads.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_analytics.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_app.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appconfig.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appdelegate.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_appmode.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_apputils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_assetmanager.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_asyncio.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_benchmark.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_campaign.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_collision.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_coopgame.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_coopsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_dependency.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_error.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameactivity.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameresults.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_gameutils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_general.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/_generated/__pycache__/enums.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_hooks.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_input.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_keyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_language.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_level.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_lobby.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_map.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_math.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_messages.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_meta.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_music.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_net.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_nodeactor.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_player.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_playlist.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_plugin.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_powerup.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_profile.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_score.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_servermode.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_session.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_settings.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_stats.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_store.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_team.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_teamgame.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_tips.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_tournament.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/_ui.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/deprecated.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/internal.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/macmusicapp.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/modutils.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/__pycache__/osmusic.cpython-38.opt-1.pyc \ - build/ba_data/python/ba/ui/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/background.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/flag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/image.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/text.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/appdelegate.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/assault.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/conquest.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/elimination.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/football.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/hockey.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/race.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/runaround.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/gameutils.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/mainmenu.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/maps.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/session/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/stdmap.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/__pycache__/tutorial.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/config.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/continues.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/debug.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/party.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/play.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/popup.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/report.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/url.cpython-38.opt-1.pyc \ - build/ba_data/python/bastd/ui/__pycache__/watch.cpython-38.opt-1.pyc \ - build/server/__pycache__/ballisticacore_server.cpython-38.opt-1.pyc + build/ba_data/python/ba/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_account.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_achievement.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_activity.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_activitytypes.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_actor.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_ads.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_analytics.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_app.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appconfig.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appdelegate.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_appmode.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_apputils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_assetmanager.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_asyncio.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_benchmark.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_campaign.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_collision.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_coopgame.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_coopsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_dependency.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_dualteamsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_error.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_freeforallsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameactivity.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameresults.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_gameutils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_general.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/_generated/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/_generated/__pycache__/enums.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_hooks.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_input.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_keyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_language.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_level.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_lobby.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_map.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_math.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_messages.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_meta.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_multiteamsession.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_music.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_net.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_nodeactor.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_player.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_playlist.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_plugin.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_powerup.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_profile.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_score.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_servermode.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_session.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_settings.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_stats.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_store.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_team.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_teamgame.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_tips.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_tournament.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/_ui.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/deprecated.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/internal.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/macmusicapp.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/modutils.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/__pycache__/osmusic.cpython-39.opt-1.pyc \ + build/ba_data/python/ba/ui/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/coopjoin.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/coopscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/drawscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/dualteamscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/freeforallvictory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamjoin.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamscore.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/activity/__pycache__/multiteamvictory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/background.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/bomb.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/controlsguide.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/flag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/image.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/onscreencountdown.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/onscreentimer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/playerspaz.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/popuptext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/powerupbox.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/respawnicon.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/scoreboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spawner.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spaz.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazappearance.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazbot.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/spazfactory.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/text.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/tipstext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/actor/__pycache__/zoomtext.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/appdelegate.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/assault.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/capturetheflag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/chosenone.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/conquest.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/deathmatch.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/easteregghunt.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/elimination.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/football.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/hockey.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/keepaway.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/kingofthehill.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/meteorshower.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/ninjafight.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/onslaught.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/race.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/runaround.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/targetpractice.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/game/__pycache__/thelaststand.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/gameutils.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/keyboard/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/keyboard/__pycache__/englishkeyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/mainmenu.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/big_g.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/bridgit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/courtyard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/crag_castle.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/doom_shroom.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/football_stadium.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/happy_thoughts.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/hockey_stadium.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/lake_frigid.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/monkey_face.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/rampage.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/roundabout.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/step_right_up.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/the_pad.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/tip_top.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/tower_d.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/mapdata/__pycache__/zig_zag.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/maps.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/session/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/stdmap.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/__pycache__/tutorial.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/link.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/settings.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/unlink.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/account/__pycache__/viewer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/achievements.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/appinvite.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/characterpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/colorpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/config.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/configerror.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/confirm.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/continues.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/gamebutton.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/coop/__pycache__/level.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/creditslist.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/debug.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/feedback.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/fileselector.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/abouttab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/manualtab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/nearbytab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/privatetab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/gather/__pycache__/publictab.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/getcurrency.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/getremote.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/helpui.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/iconpicker.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/kiosk.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/rankbutton.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/league/__pycache__/rankwindow.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/mainmenu.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/onscreenkeyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/party.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/partyqueue.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/play.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/addgame.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/customizebrowser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/editcontroller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/editgame.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/mapselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/playlist/__pycache__/share.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/playoptions.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/popup.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/profile/__pycache__/upgrade.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/promocode.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/purchase.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/qrcode.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/radiogroup.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/report.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/resourcetypeinfo.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/serverdialog.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/advanced.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/allsettings.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/audio.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/controls.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepad.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepadadvanced.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/gamepadselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/graphics.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/keyboard.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/nettesting.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/plugins.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/ps3controller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/remoteapp.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/testing.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/touchscreen.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/vrtesting.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/wiimote.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/settings/__pycache__/xbox360controller.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/edit.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/entrytypeselect.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/soundtrack/__pycache__/macmusicapp.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/specialoffer.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/browser.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/button.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/store/__pycache__/item.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tabs.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/teamnamescolors.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/telnet.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tournamententry.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/tournamentscores.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/trophies.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/url.cpython-39.opt-1.pyc \ + build/ba_data/python/bastd/ui/__pycache__/watch.cpython-39.opt-1.pyc \ + build/server/__pycache__/ballisticacore_server.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -656,23 +656,23 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \ build/ba_data/python/efro/util.py SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \ - build/ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc \ - build/ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/call.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/error.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/message.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/terminal.cpython-38.opt-1.pyc \ - build/ba_data/python/efro/__pycache__/util.cpython-38.opt-1.pyc + build/ba_data/python/bacommon/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/assets.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/net.cpython-39.opt-1.pyc \ + build/ba_data/python/bacommon/__pycache__/servermanager.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/call.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_base.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_inputter.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_outputter.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_pathcapture.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/_prep.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/dataclassio/__pycache__/extras.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/error.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/message.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/terminal.cpython-39.opt-1.pyc \ + build/ba_data/python/efro/__pycache__/util.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -694,11 +694,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/__future__.py \ build/pylib-apple/__phello__.foo.py \ + build/pylib-apple/_aix_support.py \ build/pylib-apple/_bootlocale.py \ + build/pylib-apple/_bootsubprocess.py \ build/pylib-apple/_collections_abc.py \ build/pylib-apple/_compat_pickle.py \ build/pylib-apple/_compression.py \ - build/pylib-apple/_dummy_thread.py \ build/pylib-apple/_markupbase.py \ build/pylib-apple/_osx_support.py \ build/pylib-apple/_py_abc.py \ @@ -738,6 +739,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/asyncio/streams.py \ build/pylib-apple/asyncio/subprocess.py \ build/pylib-apple/asyncio/tasks.py \ + build/pylib-apple/asyncio/threads.py \ build/pylib-apple/asyncio/transports.py \ build/pylib-apple/asyncio/trsock.py \ build/pylib-apple/asyncio/unix_events.py \ @@ -794,7 +796,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/difflib.py \ build/pylib-apple/dis.py \ build/pylib-apple/doctest.py \ - build/pylib-apple/dummy_threading.py \ build/pylib-apple/email/__init__.py \ build/pylib-apple/email/_encoded_words.py \ build/pylib-apple/email/_header_value_parser.py \ @@ -912,7 +913,6 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/encodings/kz1048.py \ build/pylib-apple/encodings/latin_1.py \ build/pylib-apple/encodings/mac_arabic.py \ - build/pylib-apple/encodings/mac_centeuro.py \ build/pylib-apple/encodings/mac_croatian.py \ build/pylib-apple/encodings/mac_cyrillic.py \ build/pylib-apple/encodings/mac_farsi.py \ @@ -960,6 +960,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/getpass.py \ build/pylib-apple/gettext.py \ build/pylib-apple/glob.py \ + build/pylib-apple/graphlib.py \ build/pylib-apple/gzip.py \ build/pylib-apple/hashlib.py \ build/pylib-apple/heapq.py \ @@ -977,6 +978,7 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/importlib/__init__.py \ build/pylib-apple/importlib/_bootstrap.py \ build/pylib-apple/importlib/_bootstrap_external.py \ + build/pylib-apple/importlib/_common.py \ build/pylib-apple/importlib/abc.py \ build/pylib-apple/importlib/machinery.py \ build/pylib-apple/importlib/metadata.py \ @@ -1001,6 +1003,10 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/mailcap.py \ build/pylib-apple/mimetypes.py \ build/pylib-apple/modulefinder.py \ + build/pylib-apple/msilib/__init__.py \ + build/pylib-apple/msilib/schema.py \ + build/pylib-apple/msilib/sequence.py \ + build/pylib-apple/msilib/text.py \ build/pylib-apple/netrc.py \ build/pylib-apple/nntplib.py \ build/pylib-apple/ntpath.py \ @@ -1120,438 +1126,452 @@ SCRIPT_TARGETS_PY_PRIVATE_APPLE = \ build/pylib-apple/xmlrpc/server.py \ build/pylib-apple/zipapp.py \ build/pylib-apple/zipfile.py \ - build/pylib-apple/zipimport.py + build/pylib-apple/zipimport.py \ + build/pylib-apple/zoneinfo/__init__.py \ + build/pylib-apple/zoneinfo/_common.py \ + build/pylib-apple/zoneinfo/_tzpath.py \ + build/pylib-apple/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_APPLE = \ - build/pylib-apple/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ast.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/base64.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/code.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/pylib-apple/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/copy.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/csv.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-apple/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/pylib-apple/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dis.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/pylib-apple/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/pylib-apple/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/enum.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/functools.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/glob.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/pylib-apple/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/pylib-apple/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/imp.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/pylib-apple/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/io.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/pylib-apple/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/locale.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/pylib-apple/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/operator.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/os.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/platform.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/profile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pty.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/queue.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/random.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/re.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sched.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/signal.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/site.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/socket.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/pylib-apple/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/stat.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/string.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/struct.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/this.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/threading.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/token.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/trace.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/tty.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/types.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/typing.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/pylib-apple/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/uu.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/wave.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-apple/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/pylib-apple/__pycache__/zipimport.cpython-38.opt-1.pyc + build/pylib-apple/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ast.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/pylib-apple/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/base64.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/code.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/pylib-apple/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/pylib-apple/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/copy.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/csv.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-apple/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/pylib-apple/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/dis.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/pylib-apple/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/pylib-apple/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/enum.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/functools.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/glob.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/pylib-apple/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/pylib-apple/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/imp.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/pylib-apple/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/io.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/pylib-apple/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/locale.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/pylib-apple/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/pylib-apple/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/operator.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/os.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/platform.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/profile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pty.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/queue.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/random.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/re.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sched.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/signal.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/site.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/socket.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/pylib-apple/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/stat.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/string.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/struct.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/this.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/threading.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/token.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/trace.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/tty.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/types.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/typing.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/pylib-apple/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/uu.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/wave.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/pylib-apple/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-apple/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/pylib-apple/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/pylib-apple/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -1566,11 +1586,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/__future__.py \ build/pylib-android/__phello__.foo.py \ + build/pylib-android/_aix_support.py \ build/pylib-android/_bootlocale.py \ + build/pylib-android/_bootsubprocess.py \ build/pylib-android/_collections_abc.py \ build/pylib-android/_compat_pickle.py \ build/pylib-android/_compression.py \ - build/pylib-android/_dummy_thread.py \ build/pylib-android/_markupbase.py \ build/pylib-android/_osx_support.py \ build/pylib-android/_py_abc.py \ @@ -1610,6 +1631,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/asyncio/streams.py \ build/pylib-android/asyncio/subprocess.py \ build/pylib-android/asyncio/tasks.py \ + build/pylib-android/asyncio/threads.py \ build/pylib-android/asyncio/transports.py \ build/pylib-android/asyncio/trsock.py \ build/pylib-android/asyncio/unix_events.py \ @@ -1666,7 +1688,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/difflib.py \ build/pylib-android/dis.py \ build/pylib-android/doctest.py \ - build/pylib-android/dummy_threading.py \ build/pylib-android/email/__init__.py \ build/pylib-android/email/_encoded_words.py \ build/pylib-android/email/_header_value_parser.py \ @@ -1784,7 +1805,6 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/encodings/kz1048.py \ build/pylib-android/encodings/latin_1.py \ build/pylib-android/encodings/mac_arabic.py \ - build/pylib-android/encodings/mac_centeuro.py \ build/pylib-android/encodings/mac_croatian.py \ build/pylib-android/encodings/mac_cyrillic.py \ build/pylib-android/encodings/mac_farsi.py \ @@ -1832,6 +1852,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/getpass.py \ build/pylib-android/gettext.py \ build/pylib-android/glob.py \ + build/pylib-android/graphlib.py \ build/pylib-android/gzip.py \ build/pylib-android/hashlib.py \ build/pylib-android/heapq.py \ @@ -1849,6 +1870,7 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/importlib/__init__.py \ build/pylib-android/importlib/_bootstrap.py \ build/pylib-android/importlib/_bootstrap_external.py \ + build/pylib-android/importlib/_common.py \ build/pylib-android/importlib/abc.py \ build/pylib-android/importlib/machinery.py \ build/pylib-android/importlib/metadata.py \ @@ -1992,438 +2014,448 @@ SCRIPT_TARGETS_PY_PRIVATE_ANDROID = \ build/pylib-android/xmlrpc/server.py \ build/pylib-android/zipapp.py \ build/pylib-android/zipfile.py \ - build/pylib-android/zipimport.py + build/pylib-android/zipimport.py \ + build/pylib-android/zoneinfo/__init__.py \ + build/pylib-android/zoneinfo/_common.py \ + build/pylib-android/zoneinfo/_tzpath.py \ + build/pylib-android/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_ANDROID = \ - build/pylib-android/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ast.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/pylib-android/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/base64.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/code.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/pylib-android/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/pylib-android/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/copy.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/csv.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-android/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/pylib-android/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dis.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/pylib-android/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/pylib-android/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/pylib-android/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/enum.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/functools.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/glob.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/pylib-android/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/pylib-android/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/imp.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/pylib-android/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/io.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/pylib-android/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/locale.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/pylib-android/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/operator.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/os.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/platform.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/profile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pty.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/queue.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/random.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/re.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sched.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/signal.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/site.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/socket.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/pylib-android/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/stat.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/string.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/struct.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/this.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/threading.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/token.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/trace.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/tty.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/types.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/typing.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/pylib-android/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/uu.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/wave.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/pylib-android/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/pylib-android/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/pylib-android/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/pylib-android/__pycache__/zipimport.cpython-38.opt-1.pyc + build/pylib-android/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ast.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/pylib-android/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/base64.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/code.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/pylib-android/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/pylib-android/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/copy.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/csv.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-android/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/pylib-android/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/dis.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/pylib-android/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/pylib-android/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/pylib-android/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/enum.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/functools.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/glob.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/pylib-android/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/pylib-android/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/imp.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/pylib-android/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/io.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/pylib-android/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/locale.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/pylib-android/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/operator.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/os.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/platform.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/profile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pty.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/queue.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/random.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/re.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sched.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/signal.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/site.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/socket.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/pylib-android/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/stat.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/string.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/struct.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/this.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/threading.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/token.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/trace.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/tty.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/types.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/typing.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/pylib-android/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/uu.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/wave.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/pylib-android/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/pylib-android/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/pylib-android/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/pylib-android/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/pylib-android/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/pylib-android/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/pylib-android/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -2457,25 +2489,25 @@ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \ build/ba_data/python-site-packages/yaml/tokens.py SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \ - build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-38.opt-1.pyc \ - build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-38.opt-1.pyc + build/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/error.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/events.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-39.opt-1.pyc \ + build/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -2490,11 +2522,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/__future__.py \ build/windows/Win32/Lib/__phello__.foo.py \ + build/windows/Win32/Lib/_aix_support.py \ build/windows/Win32/Lib/_bootlocale.py \ + build/windows/Win32/Lib/_bootsubprocess.py \ build/windows/Win32/Lib/_collections_abc.py \ build/windows/Win32/Lib/_compat_pickle.py \ build/windows/Win32/Lib/_compression.py \ - build/windows/Win32/Lib/_dummy_thread.py \ build/windows/Win32/Lib/_markupbase.py \ build/windows/Win32/Lib/_osx_support.py \ build/windows/Win32/Lib/_py_abc.py \ @@ -2534,6 +2567,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/asyncio/streams.py \ build/windows/Win32/Lib/asyncio/subprocess.py \ build/windows/Win32/Lib/asyncio/tasks.py \ + build/windows/Win32/Lib/asyncio/threads.py \ build/windows/Win32/Lib/asyncio/transports.py \ build/windows/Win32/Lib/asyncio/trsock.py \ build/windows/Win32/Lib/asyncio/unix_events.py \ @@ -2590,7 +2624,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/difflib.py \ build/windows/Win32/Lib/dis.py \ build/windows/Win32/Lib/doctest.py \ - build/windows/Win32/Lib/dummy_threading.py \ build/windows/Win32/Lib/email/__init__.py \ build/windows/Win32/Lib/email/_encoded_words.py \ build/windows/Win32/Lib/email/_header_value_parser.py \ @@ -2708,7 +2741,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/encodings/kz1048.py \ build/windows/Win32/Lib/encodings/latin_1.py \ build/windows/Win32/Lib/encodings/mac_arabic.py \ - build/windows/Win32/Lib/encodings/mac_centeuro.py \ build/windows/Win32/Lib/encodings/mac_croatian.py \ build/windows/Win32/Lib/encodings/mac_cyrillic.py \ build/windows/Win32/Lib/encodings/mac_farsi.py \ @@ -2756,6 +2788,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/getpass.py \ build/windows/Win32/Lib/gettext.py \ build/windows/Win32/Lib/glob.py \ + build/windows/Win32/Lib/graphlib.py \ build/windows/Win32/Lib/gzip.py \ build/windows/Win32/Lib/hashlib.py \ build/windows/Win32/Lib/heapq.py \ @@ -2773,6 +2806,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/importlib/__init__.py \ build/windows/Win32/Lib/importlib/_bootstrap.py \ build/windows/Win32/Lib/importlib/_bootstrap_external.py \ + build/windows/Win32/Lib/importlib/_common.py \ build/windows/Win32/Lib/importlib/abc.py \ build/windows/Win32/Lib/importlib/machinery.py \ build/windows/Win32/Lib/importlib/metadata.py \ @@ -2920,442 +2954,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_WIN32 = \ build/windows/Win32/Lib/xmlrpc/server.py \ build/windows/Win32/Lib/zipapp.py \ build/windows/Win32/Lib/zipfile.py \ - build/windows/Win32/Lib/zipimport.py + build/windows/Win32/Lib/zipimport.py \ + build/windows/Win32/Lib/zoneinfo/__init__.py \ + build/windows/Win32/Lib/zoneinfo/_common.py \ + build/windows/Win32/Lib/zoneinfo/_tzpath.py \ + build/windows/Win32/Lib/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_WIN_WIN32 = \ - build/windows/Win32/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ast.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/base64.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/code.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/copy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/csv.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dis.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/enum.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/functools.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/glob.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/imp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/io.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/locale.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/operator.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/os.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/platform.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/profile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pty.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/queue.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/random.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/re.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sched.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/signal.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/site.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/socket.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/stat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/string.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/struct.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/this.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/threading.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/token.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/trace.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/tty.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/types.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/typing.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/uu.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/wave.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/windows/Win32/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc + build/windows/Win32/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ast.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/base64.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/code.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/copy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/csv.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/dis.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/enum.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/functools.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/glob.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/imp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/io.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/locale.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/operator.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/os.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/platform.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/profile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pty.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/queue.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/random.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/re.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sched.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/signal.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/site.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/socket.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/stat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/string.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/struct.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/this.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/threading.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/token.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/trace.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/tty.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/types.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/typing.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/uu.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/wave.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/windows/Win32/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -3370,11 +3414,12 @@ $(eval $(call make-opt-pyc-target,$(element)))) SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/__future__.py \ build/windows/x64/Lib/__phello__.foo.py \ + build/windows/x64/Lib/_aix_support.py \ build/windows/x64/Lib/_bootlocale.py \ + build/windows/x64/Lib/_bootsubprocess.py \ build/windows/x64/Lib/_collections_abc.py \ build/windows/x64/Lib/_compat_pickle.py \ build/windows/x64/Lib/_compression.py \ - build/windows/x64/Lib/_dummy_thread.py \ build/windows/x64/Lib/_markupbase.py \ build/windows/x64/Lib/_osx_support.py \ build/windows/x64/Lib/_py_abc.py \ @@ -3414,6 +3459,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/asyncio/streams.py \ build/windows/x64/Lib/asyncio/subprocess.py \ build/windows/x64/Lib/asyncio/tasks.py \ + build/windows/x64/Lib/asyncio/threads.py \ build/windows/x64/Lib/asyncio/transports.py \ build/windows/x64/Lib/asyncio/trsock.py \ build/windows/x64/Lib/asyncio/unix_events.py \ @@ -3470,7 +3516,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/difflib.py \ build/windows/x64/Lib/dis.py \ build/windows/x64/Lib/doctest.py \ - build/windows/x64/Lib/dummy_threading.py \ build/windows/x64/Lib/email/__init__.py \ build/windows/x64/Lib/email/_encoded_words.py \ build/windows/x64/Lib/email/_header_value_parser.py \ @@ -3588,7 +3633,6 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/encodings/kz1048.py \ build/windows/x64/Lib/encodings/latin_1.py \ build/windows/x64/Lib/encodings/mac_arabic.py \ - build/windows/x64/Lib/encodings/mac_centeuro.py \ build/windows/x64/Lib/encodings/mac_croatian.py \ build/windows/x64/Lib/encodings/mac_cyrillic.py \ build/windows/x64/Lib/encodings/mac_farsi.py \ @@ -3636,6 +3680,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/getpass.py \ build/windows/x64/Lib/gettext.py \ build/windows/x64/Lib/glob.py \ + build/windows/x64/Lib/graphlib.py \ build/windows/x64/Lib/gzip.py \ build/windows/x64/Lib/hashlib.py \ build/windows/x64/Lib/heapq.py \ @@ -3653,6 +3698,7 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/importlib/__init__.py \ build/windows/x64/Lib/importlib/_bootstrap.py \ build/windows/x64/Lib/importlib/_bootstrap_external.py \ + build/windows/x64/Lib/importlib/_common.py \ build/windows/x64/Lib/importlib/abc.py \ build/windows/x64/Lib/importlib/machinery.py \ build/windows/x64/Lib/importlib/metadata.py \ @@ -3800,442 +3846,452 @@ SCRIPT_TARGETS_PY_PRIVATE_WIN_X64 = \ build/windows/x64/Lib/xmlrpc/server.py \ build/windows/x64/Lib/zipapp.py \ build/windows/x64/Lib/zipfile.py \ - build/windows/x64/Lib/zipimport.py + build/windows/x64/Lib/zipimport.py \ + build/windows/x64/Lib/zoneinfo/__init__.py \ + build/windows/x64/Lib/zoneinfo/_common.py \ + build/windows/x64/Lib/zoneinfo/_tzpath.py \ + build/windows/x64/Lib/zoneinfo/_zoneinfo.py SCRIPT_TARGETS_PYC_PRIVATE_WIN_X64 = \ - build/windows/x64/Lib/__pycache__/__future__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_bootlocale.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_collections_abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_compression.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_dummy_thread.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_markupbase.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_osx_support.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_py_abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_pydecimal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_pyio.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_strptime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_threading_local.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/_weakrefset.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/aifc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/antigravity.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/argparse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ast.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/asynchat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/log.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/asyncore.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/base64.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bdb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/binhex.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bisect.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/bz2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cProfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/calendar.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cgi.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cgitb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/chunk.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/cmd.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/code.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/codecs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/codeop.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/collections/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/collections/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/colorsys.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/compileall.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/configparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/contextlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/contextvars.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/copy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/copyreg.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/crypt.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/csv.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/has_key.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/panel.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/curses/__pycache__/textpad.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dataclasses.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/datetime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/decimal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/difflib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dis.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/doctest.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/dummy_threading.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/_policybase.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/base64mime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/charset.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/encoders.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/errors.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/feedparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/generator.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/header.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/iterators.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/application.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/base.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/image.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/message.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/mime/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/policy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/email/__pycache__/utils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/big5.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/hz.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/idna.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/johab.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_centeuro.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/oem.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/enum.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/filecmp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fileinput.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fnmatch.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/formatter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/fractions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ftplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/functools.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/genericpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/getopt.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/getpass.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/gettext.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/glob.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/gzip.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/hashlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/heapq.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/hmac.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/entities.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/html/__pycache__/parser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/cookies.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/http/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/imghdr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/imp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/abc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/resources.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/importlib/__pycache__/util.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/inspect.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/io.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ipaddress.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/decoder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/encoder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/scanner.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/json/__pycache__/tool.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/keyword.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/linecache.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/locale.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/config.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/logging/__pycache__/handlers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/lzma.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mailbox.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mailcap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/mimetypes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/modulefinder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/schema.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/msilib/__pycache__/text.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/netrc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/nntplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ntpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/nturl2path.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/numbers.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/opcode.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/operator.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/optparse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/os.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pathlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pdb.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pickle.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pickletools.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pipes.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pkgutil.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/platform.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/plistlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/poplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/posixpath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pprint.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/profile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pstats.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pty.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/py_compile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pyclbr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/pydoc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/queue.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/quopri.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/random.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/re.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/reprlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/rlcompleter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/runpy.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sched.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/secrets.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/selectors.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shelve.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shlex.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/shutil.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/signal.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/site.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/smtpd.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/smtplib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sndhdr.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/socket.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/socketserver.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_compile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_constants.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sre_parse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/ssl.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/stat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/statistics.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/string.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/stringprep.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/struct.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/subprocess.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sunau.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/symbol.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/symtable.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/sysconfig.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tabnanny.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tarfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/telnetlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tempfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/textwrap.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/this.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/threading.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/timeit.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/token.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tokenize.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/trace.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/traceback.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tracemalloc.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/tty.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/types.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/typing.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/error.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/parse.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/request.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/response.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/uu.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/uuid.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/warnings.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/wave.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/weakref.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/webbrowser.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/xdrlib.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipapp.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipfile.cpython-38.opt-1.pyc \ - build/windows/x64/Lib/__pycache__/zipimport.cpython-38.opt-1.pyc + build/windows/x64/Lib/__pycache__/__future__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/__phello__.foo.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_aix_support.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_bootlocale.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_bootsubprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_collections_abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_compat_pickle.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_compression.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_markupbase.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_osx_support.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_py_abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_pydecimal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_pyio.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_sitebuiltins.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_strptime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_threading_local.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/_weakrefset.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/aifc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/antigravity.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/argparse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ast.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/asynchat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/__main__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_futures.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/base_tasks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/constants.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/coroutines.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/exceptions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/format_helpers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/futures.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/locks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/log.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/proactor_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/protocols.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/queues.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/runners.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/selector_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/sslproto.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/staggered.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/streams.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/tasks.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/threads.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/transports.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/trsock.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/unix_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/windows_events.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/asyncio/__pycache__/windows_utils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/asyncore.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/base64.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bdb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/binhex.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bisect.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/bz2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cProfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/calendar.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cgi.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cgitb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/chunk.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/cmd.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/code.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/codecs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/codeop.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/collections/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/collections/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/colorsys.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/compileall.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/_base.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/process.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/concurrent/futures/__pycache__/thread.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/configparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/contextlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/contextvars.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/copy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/copyreg.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/crypt.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/csv.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/_aix.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/_endian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/dyld.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/dylib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/macholib/__pycache__/framework.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/ctypes/__pycache__/wintypes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/has_key.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/panel.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/curses/__pycache__/textpad.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/dataclasses.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/datetime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/decimal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/difflib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/dis.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/doctest.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_encoded_words.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_header_value_parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_parseaddr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/_policybase.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/base64mime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/charset.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/contentmanager.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/encoders.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/errors.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/feedparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/generator.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/header.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/headerregistry.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/iterators.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/application.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/audio.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/base.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/image.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/message.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/multipart.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/nonmultipart.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/mime/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/policy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/quoprimime.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/email/__pycache__/utils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/aliases.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/ascii.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/base64_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/big5.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/big5hkscs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/bz2_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/charmap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp037.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1006.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1026.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1125.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1140.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1250.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1251.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1252.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1253.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1254.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1255.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1256.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1257.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp1258.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp273.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp424.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp437.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp500.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp720.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp737.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp775.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp850.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp852.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp855.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp856.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp857.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp858.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp860.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp861.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp862.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp863.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp864.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp865.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp866.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp869.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp874.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp875.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp932.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp949.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/cp950.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jis_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jisx0213.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_jp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/euc_kr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gb18030.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gb2312.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/gbk.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hex_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hp_roman8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/hz.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/idna.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_3.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_jp_ext.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso2022_kr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_10.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_11.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_13.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_14.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_15.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_16.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_3.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_4.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_5.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_6.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_7.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/iso8859_9.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/johab.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_r.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_t.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/koi8_u.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/kz1048.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/latin_1.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_arabic.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_croatian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_cyrillic.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_farsi.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_greek.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_iceland.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_latin2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_roman.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_romanian.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mac_turkish.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/mbcs.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/oem.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/palmos.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/ptcp154.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/punycode.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/quopri_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/raw_unicode_escape.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/rot_13.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jis.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jis_2004.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/shift_jisx0213.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/tis_620.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/undefined.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/unicode_escape.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16_be.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_16_le.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32_be.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_32_le.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_7.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_8.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/utf_8_sig.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/uu_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/encodings/__pycache__/zlib_codec.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/enum.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/filecmp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fileinput.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fnmatch.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/formatter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/fractions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ftplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/functools.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/genericpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/getopt.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/getpass.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/gettext.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/glob.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/graphlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/gzip.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/hashlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/heapq.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/hmac.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/entities.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/html/__pycache__/parser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/cookiejar.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/cookies.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/http/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/imghdr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/imp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_bootstrap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_bootstrap_external.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/abc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/machinery.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/metadata.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/resources.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/importlib/__pycache__/util.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/inspect.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/io.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ipaddress.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/decoder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/encoder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/scanner.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/json/__pycache__/tool.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/keyword.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/linecache.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/locale.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/config.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/logging/__pycache__/handlers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/lzma.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mailbox.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mailcap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/mimetypes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/modulefinder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/schema.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/sequence.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/msilib/__pycache__/text.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/netrc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/nntplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ntpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/nturl2path.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/numbers.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/opcode.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/operator.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/optparse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/os.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pathlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pdb.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pickle.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pickletools.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pipes.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pkgutil.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/platform.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/plistlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/poplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/posixpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pprint.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/profile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pstats.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pty.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/py_compile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pyclbr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/pydoc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/queue.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/quopri.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/random.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/re.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/reprlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/rlcompleter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/runpy.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sched.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/secrets.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/selectors.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shelve.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shlex.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/shutil.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/signal.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/site.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/smtpd.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/smtplib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sndhdr.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/socket.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/socketserver.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/dbapi2.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/sqlite3/__pycache__/dump.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_compile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_constants.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sre_parse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/ssl.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/stat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/statistics.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/string.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/stringprep.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/struct.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/subprocess.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sunau.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/symbol.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/symtable.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/sysconfig.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tabnanny.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tarfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/telnetlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tempfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/textwrap.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/this.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/threading.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/timeit.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/token.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tokenize.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/trace.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/traceback.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tracemalloc.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/tty.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/types.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/typing.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/error.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/parse.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/request.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/response.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/urllib/__pycache__/robotparser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/uu.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/uuid.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/warnings.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/wave.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/weakref.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/webbrowser.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/xdrlib.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/NodeFilter.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/domreg.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/expatbuilder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/minicompat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/minidom.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/pulldom.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/dom/__pycache__/xmlbuilder.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementInclude.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementPath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/ElementTree.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/etree/__pycache__/cElementTree.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/parsers/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/parsers/__pycache__/expat.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/_exceptions.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/expatreader.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/handler.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/saxutils.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xml/sax/__pycache__/xmlreader.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/client.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/xmlrpc/__pycache__/server.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipapp.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipfile.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/__pycache__/zipimport.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/__init__.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_common.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_tzpath.cpython-39.opt-1.pyc \ + build/windows/x64/Lib/zoneinfo/__pycache__/_zoneinfo.cpython-39.opt-1.pyc # Rule to copy src asset scripts to dst. # (and make non-writable so I'm less likely to accidentally edit them there) @@ -6850,11 +6906,17 @@ EXTRAS_TARGETS_WIN_WIN32 = \ build/windows/Win32/DLLs/_testconsole_d.pyd \ build/windows/Win32/DLLs/_testimportmultiple.pyd \ build/windows/Win32/DLLs/_testimportmultiple_d.pyd \ + build/windows/Win32/DLLs/_testinternalcapi.pyd \ + build/windows/Win32/DLLs/_testinternalcapi_d.pyd \ build/windows/Win32/DLLs/_testmultiphase.pyd \ build/windows/Win32/DLLs/_testmultiphase_d.pyd \ build/windows/Win32/DLLs/_tkinter.pyd \ build/windows/Win32/DLLs/_tkinter_d.lib \ build/windows/Win32/DLLs/_tkinter_d.pyd \ + build/windows/Win32/DLLs/_uuid.pyd \ + build/windows/Win32/DLLs/_uuid_d.pyd \ + build/windows/Win32/DLLs/_zoneinfo.pyd \ + build/windows/Win32/DLLs/_zoneinfo_d.pyd \ build/windows/Win32/DLLs/libcrypto-1_1.dll \ build/windows/Win32/DLLs/libffi-7.dll \ build/windows/Win32/DLLs/libssl-1_1.dll \ @@ -6883,8 +6945,8 @@ EXTRAS_TARGETS_WIN_WIN32 = \ build/windows/Win32/msvcp140d.dll \ build/windows/Win32/ogg.dll \ build/windows/Win32/python.exe \ - build/windows/Win32/python38.dll \ - build/windows/Win32/python38_d.dll \ + build/windows/Win32/python39.dll \ + build/windows/Win32/python39_d.dll \ build/windows/Win32/python_d.exe \ build/windows/Win32/pythonw.exe \ build/windows/Win32/pythonw_d.exe \ @@ -6936,11 +6998,17 @@ EXTRAS_TARGETS_WIN_X64 = \ build/windows/x64/DLLs/_testconsole_d.pyd \ build/windows/x64/DLLs/_testimportmultiple.pyd \ build/windows/x64/DLLs/_testimportmultiple_d.pyd \ + build/windows/x64/DLLs/_testinternalcapi.pyd \ + build/windows/x64/DLLs/_testinternalcapi_d.pyd \ build/windows/x64/DLLs/_testmultiphase.pyd \ build/windows/x64/DLLs/_testmultiphase_d.pyd \ build/windows/x64/DLLs/_tkinter.pyd \ build/windows/x64/DLLs/_tkinter_d.lib \ build/windows/x64/DLLs/_tkinter_d.pyd \ + build/windows/x64/DLLs/_uuid.pyd \ + build/windows/x64/DLLs/_uuid_d.pyd \ + build/windows/x64/DLLs/_zoneinfo.pyd \ + build/windows/x64/DLLs/_zoneinfo_d.pyd \ build/windows/x64/DLLs/libcrypto-1_1.dll \ build/windows/x64/DLLs/libffi-7.dll \ build/windows/x64/DLLs/libssl-1_1.dll \ @@ -6969,8 +7037,8 @@ EXTRAS_TARGETS_WIN_X64 = \ build/windows/x64/msvcp140d.dll \ build/windows/x64/ogg.dll \ build/windows/x64/python.exe \ - build/windows/x64/python38.dll \ - build/windows/x64/python38_d.dll \ + build/windows/x64/python39.dll \ + build/windows/x64/python39_d.dll \ build/windows/x64/python_d.exe \ build/windows/x64/pythonw.exe \ build/windows/x64/pythonw_d.exe \ diff --git a/assets/src/ba_data/python/._ba_sources_hash b/assets/src/ba_data/python/._ba_sources_hash index 3b11222c..e4b6e04e 100644 --- a/assets/src/ba_data/python/._ba_sources_hash +++ b/assets/src/ba_data/python/._ba_sources_hash @@ -1 +1 @@ -67151430861016518839485378649631062235 \ No newline at end of file +291441930138756424684870937756526517762 \ No newline at end of file diff --git a/assets/src/ba_data/python/_ba.py b/assets/src/ba_data/python/_ba.py index 74a5f289..b8620a00 100644 --- a/assets/src/ba_data/python/_ba.py +++ b/assets/src/ba_data/python/_ba.py @@ -37,8 +37,7 @@ from typing import TYPE_CHECKING, overload, Sequence, TypeVar from ba._generated.enums import TimeFormat, TimeType if TYPE_CHECKING: - from typing import (Any, Dict, Callable, Tuple, List, Optional, Union, - List, Type, Literal) + from typing import Any, Callable, Optional, Union, Literal from ba._app import App import ba @@ -386,9 +385,9 @@ class Material: label: str def add_actions(self, - actions: Tuple, - conditions: Optional[Tuple] = None) -> None: - """add_actions(actions: Tuple, conditions: Optional[Tuple] = None) + actions: tuple, + conditions: Optional[tuple] = None) -> None: + """add_actions(actions: tuple, conditions: Optional[tuple] = None) -> None Add one or more actions to the material, optionally with conditions. @@ -724,16 +723,16 @@ class Node: # Show that ur return type varies based on "doraise" value: @overload def getdelegate(self, - type: Type[_T], + type: type[_T], doraise: Literal[False] = False) -> Optional[_T]: ... @overload - def getdelegate(self, type: Type[_T], doraise: Literal[True]) -> _T: + def getdelegate(self, type: type[_T], doraise: Literal[True]) -> _T: ... def getdelegate(self, type: Any, doraise: bool = False) -> Any: - """getdelegate(type: Type, doraise: bool = False) -> + """getdelegate(type: type, doraise: bool = False) -> Return the node's current delegate object if it matches a certain type. @@ -849,9 +848,9 @@ class SessionPlayer: character: str activityplayer: Optional[ba.Player] - def assigninput(self, type: Union[ba.InputType, Tuple[ba.InputType, ...]], + def assigninput(self, type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None: - """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], + """assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None Set the python callable to be run for one or more types of input. @@ -877,15 +876,15 @@ class SessionPlayer: """ return str() - def get_icon(self) -> Dict[str, Any]: - """get_icon() -> Dict[str, Any] + def get_icon(self) -> dict[str, Any]: + """get_icon() -> dict[str, Any] Returns the character's icon (images, colors, etc contained in a dict) """ return {'foo': 'bar'} - def get_icon_info(self) -> Dict[str, Any]: - """get_icon_info() -> Dict[str, Any] + def get_icon_info(self) -> dict[str, Any]: + """get_icon_info() -> dict[str, Any] (internal) """ @@ -1203,15 +1202,15 @@ class Widget: """ return bool() - def get_children(self) -> List[ba.Widget]: - """get_children() -> List[ba.Widget] + def get_children(self) -> list[ba.Widget]: + """get_children() -> list[ba.Widget] Returns any child Widgets of this Widget. """ return [Widget()] - def get_screen_space_center(self) -> Tuple[float, float]: - """get_screen_space_center() -> Tuple[float, float] + def get_screen_space_center(self) -> tuple[float, float]: + """get_screen_space_center() -> tuple[float, float] Returns the coords of the Widget center relative to the center of the screen. This can be useful for placing pop-up windows and other special @@ -1993,8 +1992,8 @@ def get_account_type() -> str: return str() -def get_appconfig_builtin_keys() -> List[str]: - """get_appconfig_builtin_keys() -> List[str] +def get_appconfig_builtin_keys() -> list[str]: + """get_appconfig_builtin_keys() -> list[str] (internal) """ @@ -2009,8 +2008,8 @@ def get_appconfig_default_value(key: str) -> Any: return _uninferrable() -def get_chat_messages() -> List[str]: - """get_chat_messages() -> List[str] +def get_chat_messages() -> list[str]: + """get_chat_messages() -> list[str] (internal) """ @@ -2050,8 +2049,8 @@ def get_connection_to_host_info() -> dict: return dict() -def get_display_resolution() -> Optional[Tuple[int, int]]: - """get_display_resolution() -> Optional[Tuple[int, int]] +def get_display_resolution() -> Optional[tuple[int, int]]: + """get_display_resolution() -> Optional[tuple[int, int]] (internal) @@ -2095,8 +2094,8 @@ def get_game_port() -> int: return int() -def get_game_roster() -> List[Dict[str, Any]]: - """get_game_roster() -> List[Dict[str, Any]] +def get_game_roster() -> list[dict[str, Any]]: + """get_game_roster() -> list[dict[str, Any]] (internal) """ @@ -2895,8 +2894,8 @@ def mac_music_app_get_library_source() -> None: return None -def mac_music_app_get_playlists() -> List[str]: - """mac_music_app_get_playlists() -> List[str] +def mac_music_app_get_playlists() -> list[str]: + """mac_music_app_get_playlists() -> list[str] (internal) """ @@ -3001,9 +3000,9 @@ def music_player_stop() -> None: return None -def new_host_session(sessiontype: Type[ba.Session], +def new_host_session(sessiontype: type[ba.Session], benchmark_type: str = None) -> None: - """new_host_session(sessiontype: Type[ba.Session], + """new_host_session(sessiontype: type[ba.Session], benchmark_type: str = None) -> None (internal) @@ -3019,9 +3018,9 @@ def new_replay_session(file_name: str) -> None: return None -def newactivity(activity_type: Type[ba.Activity], +def newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity: - """newactivity(activity_type: Type[ba.Activity], + """newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity Instantiates a ba.Activity given a type object. @@ -3370,9 +3369,9 @@ def run_transactions() -> None: def safecolor(color: Sequence[float], - target_intensity: float = 0.6) -> Tuple[float, ...]: + target_intensity: float = 0.6) -> tuple[float, ...]: """safecolor(color: Sequence[float], target_intensity: float = 0.6) - -> Tuple[float, ...] + -> tuple[float, ...] Given a color tuple, return a color safe to display as text. @@ -3387,13 +3386,13 @@ def safecolor(color: Sequence[float], def screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None: """screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, log: bool = False, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None Print a message to the local client's screen, in a given color. @@ -3456,8 +3455,8 @@ def scrollwidget(edit: ba.Widget = None, return ba.Widget() -def set_admins(admins: List[str]) -> None: - """set_admins(admins: List[str]) -> None +def set_admins(admins: list[str]) -> None: + """set_admins(admins: list[str]) -> None (internal) """ @@ -3513,10 +3512,10 @@ def set_have_mods(have_mods: bool) -> None: def set_internal_language_keys( - listobj: List[Tuple[str, str]], - random_names_list: List[Tuple[str, str]]) -> None: - """set_internal_language_keys(listobj: List[Tuple[str, str]], - random_names_list: List[Tuple[str, str]]) -> None + listobj: list[tuple[str, str]], + random_names_list: list[tuple[str, str]]) -> None: + """set_internal_language_keys(listobj: list[tuple[str, str]], + random_names_list: list[tuple[str, str]]) -> None (internal) """ @@ -3532,8 +3531,8 @@ def set_low_level_config_value(key: str, value: int) -> None: def set_map_bounds( - bounds: Tuple[float, float, float, float, float, float]) -> None: - """set_map_bounds(bounds: Tuple[float, float, float, float, float, float]) + bounds: tuple[float, float, float, float, float, float]) -> None: + """set_map_bounds(bounds: tuple[float, float, float, float, float, float]) -> None (internal) @@ -4020,18 +4019,18 @@ def timer(time: float, return None -def tournament_query(callback: Callable[[Optional[Dict]], None], - args: Dict) -> None: - """tournament_query(callback: Callable[[Optional[Dict]], None], - args: Dict) -> None +def tournament_query(callback: Callable[[Optional[dict]], None], + args: dict) -> None: + """tournament_query(callback: Callable[[Optional[dict]], None], + args: dict) -> None (internal) """ return None -def uibounds() -> Tuple[float, float, float, float]: - """uibounds() -> Tuple[float, float, float, float] +def uibounds() -> tuple[float, float, float, float]: + """uibounds() -> tuple[float, float, float, float] (internal) diff --git a/assets/src/ba_data/python/ba/_account.py b/assets/src/ba_data/python/ba/_account.py index 4ef02aaf..a072ae63 100644 --- a/assets/src/ba_data/python/ba/_account.py +++ b/assets/src/ba_data/python/ba/_account.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, List, Tuple + from typing import Any, Optional import ba @@ -24,16 +24,16 @@ class AccountSubsystem: """ def __init__(self) -> None: - self.account_tournament_list: Optional[Tuple[int, List[str]]] = None + self.account_tournament_list: Optional[tuple[int, list[str]]] = None # FIXME: should abstract/structure these. - self.tournament_info: Dict = {} - self.league_rank_cache: Dict = {} + self.tournament_info: dict = {} + self.league_rank_cache: dict = {} self.last_post_purchase_message_time: Optional[float] = None # If we try to run promo-codes due to launch-args/etc we might # not be signed in yet; go ahead and queue them up in that case. - self.pending_promo_codes: List[str] = [] + self.pending_promo_codes: list[str] = [] def on_app_launch(self) -> None: """Called when the app is done bootstrapping.""" @@ -74,7 +74,7 @@ class AccountSubsystem: return self.league_rank_cache.get('info', None) def get_league_rank_points(self, - data: Optional[Dict[str, Any]], + data: Optional[dict[str, Any]], subset: str = None) -> int: """(internal)""" if data is None: @@ -132,7 +132,7 @@ class AccountSubsystem: TimeFormat.MILLISECONDS) cache_entry['valid'] = True - def get_purchased_icons(self) -> List[str]: + def get_purchased_icons(self) -> list[str]: """(internal)""" # pylint: disable=cyclic-import from ba import _store diff --git a/assets/src/ba_data/python/ba/_achievement.py b/assets/src/ba_data/python/ba/_achievement.py index a00e530f..13634cfc 100644 --- a/assets/src/ba_data/python/ba/_achievement.py +++ b/assets/src/ba_data/python/ba/_achievement.py @@ -9,7 +9,7 @@ import _ba from ba._error import print_exception if TYPE_CHECKING: - from typing import Any, Sequence, List, Dict, Union, Optional, Tuple, Set + from typing import Any, Sequence, Union, Optional import ba # This could use some cleanup. @@ -71,11 +71,11 @@ class AchievementSubsystem: """ def __init__(self) -> None: - self.achievements: List[Achievement] = [] - self.achievements_to_display: (List[Tuple[ba.Achievement, bool]]) = [] + self.achievements: list[Achievement] = [] + self.achievements_to_display: (list[tuple[ba.Achievement, bool]]) = [] self.achievement_display_timer: Optional[_ba.Timer] = None self.last_achievement_display_time: float = 0.0 - self.achievement_completion_banner_slots: Set[int] = set() + self.achievement_completion_banner_slots: set[int] = set() self._init_achievements() def _init_achievements(self) -> None: @@ -374,7 +374,7 @@ class AchievementSubsystem: return achs[0] def achievements_for_coop_level(self, - level_name: str) -> List[Achievement]: + level_name: str) -> list[Achievement]: """Given a level name, return achievements available for it.""" # For the Easy campaign we return achievements for the Default @@ -612,7 +612,7 @@ class Achievement: delay: float, outdelay: float = None, color: Sequence[float] = None, - style: str = 'post_game') -> List[ba.Actor]: + style: str = 'post_game') -> list[ba.Actor]: """Create a display for the Achievement. Shows the Achievement icon, name, and description. @@ -663,7 +663,7 @@ class Achievement: print_exception('Error determining campaign.') hmo = False - objs: List[ba.Actor] + objs: list[ba.Actor] if in_game_colors: objs = [] @@ -898,12 +898,12 @@ class Achievement: transition_out_delay=None).autoretain()) return objs - def _getconfig(self) -> Dict[str, Any]: + def _getconfig(self) -> dict[str, Any]: """ Return the sub-dict in settings where this achievement's state is stored, creating it if need be. """ - val: Dict[str, Any] = (_ba.app.config.setdefault( + val: dict[str, Any] = (_ba.app.config.setdefault( 'Achievements', {}).setdefault(self._name, {'Complete': False})) assert isinstance(val, dict) return val @@ -971,7 +971,7 @@ class Achievement: i += 1 assert self._completion_banner_slot is not None y_offs = 110 * self._completion_banner_slot - objs: List[ba.Actor] = [] + objs: list[ba.Actor] = [] obj = Image(_ba.gettexture('shadow'), position=(-30, 30 + y_offs), front=True, diff --git a/assets/src/ba_data/python/ba/_activity.py b/assets/src/ba_data/python/ba/_activity.py index 4c9190ba..701de8e1 100644 --- a/assets/src/ba_data/python/ba/_activity.py +++ b/assets/src/ba_data/python/ba/_activity.py @@ -16,8 +16,7 @@ from ba._general import Call, verify_object_death from ba._messages import UNHANDLED if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Optional, Type, Any, Dict, List + from typing import Optional, Any import ba from bastd.actor.respawnicon import RespawnIcon @@ -58,9 +57,9 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): # pylint: disable=too-many-public-methods # Annotating attr types at the class level lets us introspect at runtime. - settings_raw: Dict[str, Any] - teams: List[TeamType] - players: List[PlayerType] + settings_raw: dict[str, Any] + teams: list[TeamType] + players: list[PlayerType] # Whether to print every time a player dies. This can be pertinent # in games such as Death-Match but can be annoying in games where it @@ -150,8 +149,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): # Player/Team types should have been specified as type args; # grab those. - self._playertype: Type[PlayerType] - self._teamtype: Type[TeamType] + self._playertype: type[PlayerType] + self._teamtype: type[TeamType] self._setup_player_and_team_types() # FIXME: Relocate or remove the need for this stuff. @@ -160,7 +159,7 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): self._session = weakref.ref(_ba.getsession()) # Preloaded data for actors, maps, etc; indexed by type. - self.preloads: Dict[Type, Any] = {} + self.preloads: dict[type, Any] = {} # Hopefully can eventually kill this; activities should # validate/store whatever settings they need at init time @@ -172,17 +171,17 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): self._has_ended = False self._activity_death_check_timer: Optional[ba.Timer] = None self._expired = False - self._delay_delete_players: List[PlayerType] = [] - self._delay_delete_teams: List[TeamType] = [] - self._players_that_left: List[ReferenceType[PlayerType]] = [] - self._teams_that_left: List[ReferenceType[TeamType]] = [] + self._delay_delete_players: list[PlayerType] = [] + self._delay_delete_teams: list[TeamType] = [] + self._players_that_left: list[weakref.ref[PlayerType]] = [] + self._teams_that_left: list[weakref.ref[TeamType]] = [] self._transitioning_out = False # A handy place to put most actors; this list is pruned of dead # actors regularly and these actors are insta-killed as the activity # is dying. - self._actor_refs: List[ba.Actor] = [] - self._actor_weak_refs: List[ReferenceType[ba.Actor]] = [] + self._actor_refs: list[ba.Actor] = [] + self._actor_weak_refs: list[weakref.ref[ba.Actor]] = [] self._last_prune_dead_actors_time = _ba.time() self._prune_dead_actors_timer: Optional[ba.Timer] = None @@ -262,12 +261,12 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): return self._expired @property - def playertype(self) -> Type[PlayerType]: + def playertype(self) -> type[PlayerType]: """The type of ba.Player this Activity is using.""" return self._playertype @property - def teamtype(self) -> Type[TeamType]: + def teamtype(self) -> type[TeamType]: """The type of ba.Team this Activity is using.""" return self._teamtype @@ -709,8 +708,8 @@ class Activity(DependencyComponent, Generic[PlayerType, TeamType]): assert issubclass(self._teamtype, Team) @classmethod - def _check_activity_death(cls, activity_ref: ReferenceType[Activity], - counter: List[int]) -> None: + def _check_activity_death(cls, activity_ref: weakref.ref[Activity], + counter: list[int]) -> None: """Sanity check to make sure an Activity was destroyed properly. Receives a weakref to a ba.Activity which should have torn itself diff --git a/assets/src/ba_data/python/ba/_activitytypes.py b/assets/src/ba_data/python/ba/_activitytypes.py index 9c64ad90..8007130a 100644 --- a/assets/src/ba_data/python/ba/_activitytypes.py +++ b/assets/src/ba_data/python/ba/_activitytypes.py @@ -14,7 +14,7 @@ from ba._player import EmptyPlayer # pylint: disable=W0611 from ba._team import EmptyTeam # pylint: disable=W0611 if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Optional import ba from ba._lobby import JoinInfo diff --git a/assets/src/ba_data/python/ba/_app.py b/assets/src/ba_data/python/ba/_app.py index 7e5c2e61..2ae720f6 100644 --- a/assets/src/ba_data/python/ba/_app.py +++ b/assets/src/ba_data/python/ba/_app.py @@ -21,7 +21,7 @@ from ba._net import NetworkSubsystem if TYPE_CHECKING: import ba from bastd.actor import spazappearance - from typing import Optional, Dict, Set, Any, Type, Tuple, Callable, List + from typing import Optional, Any, Callable class App: @@ -167,7 +167,7 @@ class App: return self._env['vr_mode'] @property - def ui_bounds(self) -> Tuple[float, float, float, float]: + def ui_bounds(self) -> tuple[float, float, float, float]: """Bounds of the 'safe' screen area in ui space. This tuple contains: (x-min, x-max, y-min, y-max) @@ -208,7 +208,7 @@ class App: self.allow_ticket_purchases: bool = not self.iircade_mode # Misc. - self.tips: List[str] = [] + self.tips: list[str] = [] self.stress_test_reset_timer: Optional[ba.Timer] = None self.did_weak_call_warning = False @@ -225,7 +225,7 @@ class App: self.input_map_hash: Optional[str] = None # Co-op Campaigns. - self.campaigns: Dict[str, ba.Campaign] = {} + self.campaigns: dict[str, ba.Campaign] = {} # Server Mode. self.server: Optional[ba.ServerController] = None @@ -250,27 +250,27 @@ class App: self.main_menu_last_news_fetch_time: Optional[float] = None # Spaz. - self.spaz_appearances: Dict[str, spazappearance.Appearance] = {} + self.spaz_appearances: dict[str, spazappearance.Appearance] = {} self.last_spaz_turbo_warn_time: float = -99999.0 # Maps. - self.maps: Dict[str, Type[ba.Map]] = {} + self.maps: dict[str, type[ba.Map]] = {} # Gameplay. self.teams_series_length = 7 self.ffa_series_length = 24 - self.coop_session_args: Dict = {} + self.coop_session_args: dict = {} self.value_test_defaults: dict = {} self.first_main_menu = True # FIXME: Move to mainmenu class. self.did_menu_intro = False # FIXME: Move to mainmenu class. self.main_menu_window_refresh_check_count = 0 # FIXME: Mv to mainmenu. self.main_menu_resume_callbacks: list = [] # Can probably go away. - self.special_offer: Optional[Dict] = None + self.special_offer: Optional[dict] = None self.ping_thread_count = 0 - self.invite_confirm_windows: List[Any] = [] # FIXME: Don't use Any. - self.store_layout: Optional[Dict[str, List[Dict[str, Any]]]] = None - self.store_items: Optional[Dict[str, Dict]] = None + self.invite_confirm_windows: list[Any] = [] # FIXME: Don't use Any. + self.store_layout: Optional[dict[str, list[dict[str, Any]]]] = None + self.store_items: Optional[dict[str, dict]] = None self.pro_sale_start_time: Optional[int] = None self.pro_sale_start_val: Optional[int] = None @@ -518,7 +518,7 @@ class App: def launch_coop_game(self, game: str, force: bool = False, - args: Dict = None) -> bool: + args: dict = None) -> bool: """High level way to launch a local co-op session.""" # pylint: disable=cyclic-import from ba._campaign import getcampaign diff --git a/assets/src/ba_data/python/ba/_appconfig.py b/assets/src/ba_data/python/ba/_appconfig.py index c60c01cd..611483e8 100644 --- a/assets/src/ba_data/python/ba/_appconfig.py +++ b/assets/src/ba_data/python/ba/_appconfig.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List, Tuple + from typing import Any class AppConfig(dict): @@ -57,7 +57,7 @@ class AppConfig(dict): """ return _ba.get_appconfig_default_value(key) - def builtin_keys(self) -> List[str]: + def builtin_keys(self) -> list[str]: """Return the list of valid key names recognized by ba.AppConfig. This set of keys can be used with resolve(), default_value(), etc. @@ -93,7 +93,7 @@ class AppConfig(dict): self.commit() -def read_config() -> Tuple[AppConfig, bool]: +def read_config() -> tuple[AppConfig, bool]: """Read the game config.""" import os import json diff --git a/assets/src/ba_data/python/ba/_appdelegate.py b/assets/src/ba_data/python/ba/_appdelegate.py index f6282bec..12628701 100644 --- a/assets/src/ba_data/python/ba/_appdelegate.py +++ b/assets/src/ba_data/python/ba/_appdelegate.py @@ -6,7 +6,7 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Type, Optional, Any, Dict, Callable + from typing import Optional, Callable import ba @@ -17,8 +17,8 @@ class AppDelegate: """ def create_default_game_settings_ui( - self, gameclass: Type[ba.GameActivity], - sessiontype: Type[ba.Session], settings: Optional[dict], + self, gameclass: type[ba.GameActivity], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None: """Launch a UI to configure the given game config. diff --git a/assets/src/ba_data/python/ba/_apputils.py b/assets/src/ba_data/python/ba/_apputils.py index 9146b0f4..ea888907 100644 --- a/assets/src/ba_data/python/ba/_apputils.py +++ b/assets/src/ba_data/python/ba/_apputils.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Any, Callable, Optional + from typing import Any import ba @@ -186,9 +186,9 @@ def print_live_object_warnings(when: Any, from ba._actor import Actor from ba._activity import Activity - sessions: List[ba.Session] = [] - activities: List[ba.Activity] = [] - actors: List[ba.Actor] = [] + sessions: list[ba.Session] = [] + activities: list[ba.Activity] = [] + actors: list[ba.Actor] = [] # Once we come across leaked stuff, printing again is probably # redundant. diff --git a/assets/src/ba_data/python/ba/_assetmanager.py b/assets/src/ba_data/python/ba/_assetmanager.py index 33645183..c12f96db 100644 --- a/assets/src/ba_data/python/ba/_assetmanager.py +++ b/assets/src/ba_data/python/ba/_assetmanager.py @@ -4,7 +4,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Dict +from typing import TYPE_CHECKING, Annotated from dataclasses import dataclass, field from pathlib import Path import threading @@ -15,14 +15,11 @@ import time import os import sys -from typing_extensions import Annotated - from efro.dataclassio import (ioprepped, IOAttrs, dataclass_from_json, dataclass_to_json) if TYPE_CHECKING: from bacommon.assets import AssetPackageFlavor - from typing import List @ioprepped @@ -36,7 +33,7 @@ class FileValue: class State: """Holds all persistent state for the asset-manager.""" - files: Annotated[Dict[str, FileValue], + files: Annotated[dict[str, FileValue], IOAttrs('files')] = field(default_factory=dict) @@ -63,7 +60,7 @@ class AssetManager: def launch_gather( self, - packages: List[str], + packages: list[str], flavor: AssetPackageFlavor, account_token: str, ) -> AssetGather: diff --git a/assets/src/ba_data/python/ba/_benchmark.py b/assets/src/ba_data/python/ba/_benchmark.py index 9a4d1035..119296c9 100644 --- a/assets/src/ba_data/python/ba/_benchmark.py +++ b/assets/src/ba_data/python/ba/_benchmark.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Dict, Any, Sequence + from typing import Any, Sequence import ba @@ -88,7 +88,7 @@ def stop_stress_test() -> None: _ba.app.stress_test_reset_timer = None -def start_stress_test(args: Dict[str, Any]) -> None: +def start_stress_test(args: dict[str, Any]) -> None: """(internal)""" from ba._general import Call from ba._dualteamsession import DualTeamSession @@ -125,7 +125,7 @@ def start_stress_test(args: Dict[str, Any]) -> None: timeformat=TimeFormat.MILLISECONDS) -def _reset_stress_test(args: Dict[str, Any]) -> None: +def _reset_stress_test(args: dict[str, Any]) -> None: from ba._general import Call from ba._generated.enums import TimeType _ba.set_stress_testing(False, args['player_count']) diff --git a/assets/src/ba_data/python/ba/_campaign.py b/assets/src/ba_data/python/ba/_campaign.py index 77f4ce92..e7f53153 100644 --- a/assets/src/ba_data/python/ba/_campaign.py +++ b/assets/src/ba_data/python/ba/_campaign.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List, Dict + from typing import Any import ba @@ -30,7 +30,7 @@ class Campaign: def __init__(self, name: str, sequential: bool = True): self._name = name - self._levels: List[ba.Level] = [] + self._levels: list[ba.Level] = [] self._sequential = sequential @property @@ -51,7 +51,7 @@ class Campaign: self._levels.append(level) @property - def levels(self) -> List[ba.Level]: + def levels(self) -> list[ba.Level]: """The list of ba.Levels in the Campaign.""" return self._levels @@ -80,9 +80,9 @@ class Campaign: return self.configdict.get('Selection', self._levels[0].name) @property - def configdict(self) -> Dict[str, Any]: + def configdict(self) -> dict[str, Any]: """Return the live config dict for this campaign.""" - val: Dict[str, Any] = (_ba.app.config.setdefault('Campaigns', + val: dict[str, Any] = (_ba.app.config.setdefault('Campaigns', {}).setdefault( self._name, {})) assert isinstance(val, dict) diff --git a/assets/src/ba_data/python/ba/_coopgame.py b/assets/src/ba_data/python/ba/_coopgame.py index 1811bb05..1d771b5e 100644 --- a/assets/src/ba_data/python/ba/_coopgame.py +++ b/assets/src/ba_data/python/ba/_coopgame.py @@ -10,7 +10,7 @@ from ba._gameactivity import GameActivity from ba._general import WeakCall if TYPE_CHECKING: - from typing import Type, Dict, Any, Set, List, Sequence, Optional + from typing import Any, Sequence, Optional from bastd.actor.playerspaz import PlayerSpaz import ba @@ -28,7 +28,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): session: ba.CoopSession @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: from ba._coopsession import CoopSession return issubclass(sessiontype, CoopSession) @@ -36,7 +36,7 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): super().__init__(settings) # Cache these for efficiency. - self._achievements_awarded: Set[str] = set() + self._achievements_awarded: set[str] = set() self._life_warning_beep: Optional[ba.Actor] = None self._life_warning_beep_timer: Optional[ba.Timer] = None @@ -62,11 +62,11 @@ class CoopGameActivity(GameActivity[PlayerType, TeamType]): _ba.get_scores_to_beat(levelname, config_str, WeakCall(self._on_got_scores_to_beat)) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: pass def _show_standard_scores_to_beat_ui(self, - scores: List[Dict[str, Any]]) -> None: + scores: list[dict[str, Any]]) -> None: from efro.util import asserttype from ba._gameutils import timestring, animate from ba._nodeactor import NodeActor diff --git a/assets/src/ba_data/python/ba/_coopsession.py b/assets/src/ba_data/python/ba/_coopsession.py index 021142a9..1dab1e1b 100644 --- a/assets/src/ba_data/python/ba/_coopsession.py +++ b/assets/src/ba_data/python/ba/_coopsession.py @@ -9,7 +9,7 @@ import _ba from ba._session import Session if TYPE_CHECKING: - from typing import Any, List, Dict, Optional, Callable, Sequence + from typing import Any, Optional, Callable, Sequence import ba TEAM_COLORS = [(0.2, 0.4, 1.6)] @@ -77,7 +77,7 @@ class CoopSession(Session): self._ran_tutorial_activity = False self._tutorial_activity: Optional[ba.Activity] = None - self._custom_menu_ui: List[Dict[str, Any]] = [] + self._custom_menu_ui: list[dict[str, Any]] = [] # Start our joining screen. self.setactivity(_ba.newactivity(CoopJoinActivity)) @@ -159,7 +159,7 @@ class CoopSession(Session): from bastd.tutorial import TutorialActivity self._tutorial_activity = _ba.newactivity(TutorialActivity) - def get_custom_menu_entries(self) -> List[Dict[str, Any]]: + def get_custom_menu_entries(self) -> list[dict[str, Any]]: return self._custom_menu_ui def on_player_leave(self, sessionplayer: ba.SessionPlayer) -> None: @@ -341,7 +341,7 @@ class CoopSession(Session): self.setactivity(_ba.newactivity(TransitionActivity)) else: - playerinfos: List[ba.PlayerInfo] + playerinfos: list[ba.PlayerInfo] # Generic team games. if isinstance(results, GameResults): diff --git a/assets/src/ba_data/python/ba/_dependency.py b/assets/src/ba_data/python/ba/_dependency.py index 6cb43e8b..b6663a0f 100644 --- a/assets/src/ba_data/python/ba/_dependency.py +++ b/assets/src/ba_data/python/ba/_dependency.py @@ -10,8 +10,7 @@ from typing import (Generic, TypeVar, TYPE_CHECKING) import _ba if TYPE_CHECKING: - from typing import Optional, Any, Dict, List, Set, Type - from weakref import ReferenceType + from typing import Optional, Any import ba T = TypeVar('T', bound='DependencyComponent') @@ -32,13 +31,13 @@ class Dependency(Generic[T]): methods via self.floofcls(). """ - def __init__(self, cls: Type[T], config: Any = None): + def __init__(self, cls: type[T], config: Any = None): """Instantiate a Dependency given a ba.DependencyComponent type. Optionally, an arbitrary object can be passed as 'config' to influence dependency calculation for the target class. """ - self.cls: Type[T] = cls + self.cls: type[T] = cls self.config = config self._hash: Optional[int] = None @@ -91,7 +90,7 @@ class DependencyComponent: category: Dependency Classes """ - _dep_entry: ReferenceType[DependencyEntry] + _dep_entry: weakref.ref[DependencyEntry] def __init__(self) -> None: """Instantiate a DependencyComponent.""" @@ -110,7 +109,7 @@ class DependencyComponent: return True @classmethod - def get_dynamic_deps(cls, config: Any = None) -> List[Dependency]: + def get_dynamic_deps(cls, config: Any = None) -> list[Dependency]: """Return any dynamically-calculated deps for this component/config. Deps declared statically as part of the class do not need to be @@ -180,7 +179,7 @@ class DependencySet(Generic[T]): self._loaded = False # Dependency data indexed by hash. - self.entries: Dict[int, DependencyEntry] = {} + self.entries: dict[int, DependencyEntry] = {} # def __del__(self) -> None: # print("~DepSet()") @@ -220,12 +219,12 @@ class DependencySet(Generic[T]): """Whether this set has been successfully resolved.""" return self._resolved - def get_asset_package_ids(self) -> Set[str]: + def get_asset_package_ids(self) -> set[str]: """Return the set of asset-package-ids required by this dep-set. Must be called on a resolved dep-set. """ - ids: Set[str] = set() + ids: set[str] = set() if not self._resolved: raise Exception('Must be called on a resolved dep-set.') for entry in self.entries.values(): diff --git a/assets/src/ba_data/python/ba/_error.py b/assets/src/ba_data/python/ba/_error.py index ea98f3f3..c9e75fcb 100644 --- a/assets/src/ba_data/python/ba/_error.py +++ b/assets/src/ba_data/python/ba/_error.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, List + from typing import Any import ba @@ -21,12 +21,12 @@ class DependencyError(Exception): (this will generally be missing assets). """ - def __init__(self, deps: List[ba.Dependency]): + def __init__(self, deps: list[ba.Dependency]): super().__init__() self._deps = deps @property - def deps(self) -> List[ba.Dependency]: + def deps(self) -> list[ba.Dependency]: """The list of missing dependencies causing this error.""" return self._deps diff --git a/assets/src/ba_data/python/ba/_freeforallsession.py b/assets/src/ba_data/python/ba/_freeforallsession.py index e81eb47d..c0ceee99 100644 --- a/assets/src/ba_data/python/ba/_freeforallsession.py +++ b/assets/src/ba_data/python/ba/_freeforallsession.py @@ -10,7 +10,6 @@ import _ba from ba._multiteamsession import MultiTeamSession if TYPE_CHECKING: - from typing import Dict import ba @@ -25,12 +24,12 @@ class FreeForAllSession(MultiTeamSession): _playlist_randomize_var = 'Free-for-All Playlist Randomize' _playlists_var = 'Free-for-All Playlists' - def get_ffa_point_awards(self) -> Dict[int, int]: + def get_ffa_point_awards(self) -> dict[int, int]: """Return the number of points awarded for different rankings. This is based on the current number of players. """ - point_awards: Dict[int, int] + point_awards: dict[int, int] if len(self.sessionplayers) == 1: point_awards = {} elif len(self.sessionplayers) == 2: diff --git a/assets/src/ba_data/python/ba/_gameactivity.py b/assets/src/ba_data/python/ba/_gameactivity.py index 6b299082..c7d633e0 100644 --- a/assets/src/ba_data/python/ba/_gameactivity.py +++ b/assets/src/ba_data/python/ba/_gameactivity.py @@ -19,8 +19,7 @@ from ba._player import PlayerInfo from ba import _map if TYPE_CHECKING: - from typing import (List, Optional, Dict, Type, Any, Callable, Sequence, - Tuple, Union) + from typing import Optional, Any, Callable, Sequence, Union from bastd.actor.playerspaz import PlayerSpaz from bastd.actor.bomb import TNTSpawner import ba @@ -37,7 +36,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # pylint: disable=too-many-public-methods # Tips to be presented to the user at the start of the game. - tips: List[Union[str, ba.GameTip]] = [] + tips: list[Union[str, ba.GameTip]] = [] # Default getname() will return this if not None. name: Optional[str] = None @@ -46,7 +45,7 @@ class GameActivity(Activity[PlayerType, TeamType]): description: Optional[str] = None # Default get_available_settings() will return this if not None. - available_settings: Optional[List[ba.Setting]] = None + available_settings: Optional[list[ba.Setting]] = None # Default getscoreconfig() will return this if not None. scoreconfig: Optional[ba.ScoreConfig] = None @@ -65,7 +64,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def create_settings_ui( cls, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None], ) -> None: @@ -104,7 +103,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return cls.name if cls.name is not None else 'Untitled Game' @classmethod - def get_display_string(cls, settings: Optional[Dict] = None) -> ba.Lstr: + def get_display_string(cls, settings: Optional[dict] = None) -> ba.Lstr: """Return a descriptive name for this game/settings combo. Subclasses should override getname(); not this. @@ -130,7 +129,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return Lstr(translate=('teamNames', name)) @classmethod - def get_description(cls, sessiontype: Type[ba.Session]) -> str: + def get_description(cls, sessiontype: type[ba.Session]) -> str: """Get a str description of this game type. The default implementation simply returns the 'description' class var. @@ -142,7 +141,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def get_description_display_string( - cls, sessiontype: Type[ba.Session]) -> ba.Lstr: + cls, sessiontype: type[ba.Session]) -> ba.Lstr: """Return a translated version of get_description(). Sub-classes should override get_description(); not this. @@ -152,7 +151,7 @@ class GameActivity(Activity[PlayerType, TeamType]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: """Return a list of settings relevant to this game type when running under the provided session type. """ @@ -160,7 +159,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return [] if cls.available_settings is None else cls.available_settings @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: """ Called by the default ba.GameActivity.create_settings_ui() implementation; should return a list of map names valid @@ -170,7 +169,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return _map.getmaps('melee') @classmethod - def get_settings_display_string(cls, config: Dict[str, Any]) -> ba.Lstr: + def get_settings_display_string(cls, config: dict[str, Any]) -> ba.Lstr: """Given a game config dict, return a short description for it. This is used when viewing game-lists or showing what game @@ -200,7 +199,7 @@ class GameActivity(Activity[PlayerType, TeamType]): return sval @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: """Return whether this game supports the provided Session type.""" from ba._multiteamsession import MultiTeamSession @@ -213,7 +212,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # Holds some flattened info about the player set at the point # when on_begin() is called. - self.initialplayerinfos: Optional[List[ba.PlayerInfo]] = None + self.initialplayerinfos: Optional[list[ba.PlayerInfo]] = None # Go ahead and get our map loading. self._map_type = _map.get_map_class(self._calc_map_name(settings)) @@ -222,7 +221,7 @@ class GameActivity(Activity[PlayerType, TeamType]): self._map_type.preload() self._map: Optional[ba.Map] = None self._powerup_drop_timer: Optional[ba.Timer] = None - self._tnt_spawners: Optional[Dict[int, TNTSpawner]] = None + self._tnt_spawners: Optional[dict[int, TNTSpawner]] = None self._tnt_drop_timer: Optional[ba.Timer] = None self._game_scoreboard_name_text: Optional[ba.Actor] = None self._game_scoreboard_description_text: Optional[ba.Actor] = None @@ -235,7 +234,7 @@ class GameActivity(Activity[PlayerType, TeamType]): self._tournament_time_limit_title_text: Optional[ba.NodeActor] = None self._tournament_time_limit_text: Optional[ba.NodeActor] = None self._tournament_time_limit_text_input: Optional[ba.NodeActor] = None - self._zoom_message_times: Dict[int, float] = {} + self._zoom_message_times: dict[int, float] = {} self._is_waiting_for_continue = False self._continue_cost = _ba.get_account_misc_read_val( @@ -459,7 +458,7 @@ class GameActivity(Activity[PlayerType, TeamType]): callback=WeakCall(self._on_tournament_query_response), ) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: if data is not None: data_t = data['t'] # This used to be the whole payload. @@ -1154,7 +1153,7 @@ class GameActivity(Activity[PlayerType, TeamType]): # If settings doesn't specify a map, pick a random one from the # list of supported ones. unowned_maps = _map.get_unowned_maps() - valid_maps: List[str] = [ + valid_maps: list[str] = [ m for m in self.get_supported_maps(type(self.session)) if m not in unowned_maps ] diff --git a/assets/src/ba_data/python/ba/_gameresults.py b/assets/src/ba_data/python/ba/_gameresults.py index 146e2241..f4b3ebd1 100644 --- a/assets/src/ba_data/python/ba/_gameresults.py +++ b/assets/src/ba_data/python/ba/_gameresults.py @@ -12,8 +12,7 @@ from efro.util import asserttype from ba._team import Team, SessionTeam if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Sequence, Tuple, Any, Optional, Dict, List, Union + from typing import Sequence, Optional import ba @@ -36,11 +35,10 @@ class GameResults: def __init__(self) -> None: self._game_set = False - self._scores: Dict[int, Tuple[ReferenceType[ba.SessionTeam], + self._scores: dict[int, tuple[weakref.ref[ba.SessionTeam], Optional[int]]] = {} - self._sessionteams: Optional[List[ReferenceType[ - ba.SessionTeam]]] = None - self._playerinfos: Optional[List[ba.PlayerInfo]] = None + self._sessionteams: Optional[list[weakref.ref[ba.SessionTeam]]] = None + self._playerinfos: Optional[list[ba.PlayerInfo]] = None self._lower_is_better: Optional[bool] = None self._score_label: Optional[str] = None self._none_is_winner: Optional[bool] = None @@ -83,7 +81,7 @@ class GameResults: return None @property - def sessionteams(self) -> List[ba.SessionTeam]: + def sessionteams(self) -> list[ba.SessionTeam]: """Return all ba.SessionTeams in the results.""" if not self._game_set: raise RuntimeError("Can't get teams until game is set.") @@ -127,7 +125,7 @@ class GameResults: return Lstr(value='-') @property - def playerinfos(self) -> List[ba.PlayerInfo]: + def playerinfos(self) -> list[ba.PlayerInfo]: """Get info about the players represented by the results.""" if not self._game_set: raise RuntimeError("Can't get player-info until game is set.") @@ -169,13 +167,13 @@ class GameResults: return None @property - def winnergroups(self) -> List[WinnerGroup]: + def winnergroups(self) -> list[WinnerGroup]: """Get an ordered list of winner groups.""" if not self._game_set: raise RuntimeError("Can't get winners until game is set.") # Group by best scoring teams. - winners: Dict[int, List[ba.SessionTeam]] = {} + winners: dict[int, list[ba.SessionTeam]] = {} scores = [ score for score in self._scores.values() if score[0]() is not None and score[1] is not None @@ -186,13 +184,13 @@ class GameResults: team = score[0]() assert team is not None sval.append(team) - results: List[Tuple[Optional[int], - List[ba.SessionTeam]]] = list(winners.items()) + results: list[tuple[Optional[int], + list[ba.SessionTeam]]] = list(winners.items()) results.sort(reverse=not self._lower_is_better, key=lambda x: asserttype(x[0], int)) # Also group the 'None' scores. - none_sessionteams: List[ba.SessionTeam] = [] + none_sessionteams: list[ba.SessionTeam] = [] for score in self._scores.values(): scoreteam = score[0]() if scoreteam is not None and score[1] is None: @@ -201,7 +199,7 @@ class GameResults: # Add the Nones to the list (either as winners or losers # depending on the rules). if none_sessionteams: - nones: List[Tuple[Optional[int], List[ba.SessionTeam]]] = [ + nones: list[tuple[Optional[int], list[ba.SessionTeam]]] = [ (None, none_sessionteams) ] if self._none_is_winner: diff --git a/assets/src/ba_data/python/ba/_gameutils.py b/assets/src/ba_data/python/ba/_gameutils.py index 43901d2c..d337f3df 100644 --- a/assets/src/ba_data/python/ba/_gameutils.py +++ b/assets/src/ba_data/python/ba/_gameutils.py @@ -12,7 +12,7 @@ from ba._generated.enums import TimeType, TimeFormat, SpecialChar, UIScale from ba._error import ActivityNotFoundError if TYPE_CHECKING: - from typing import Any, Dict, Sequence, Optional + from typing import Sequence, Optional import ba TROPHY_CHARS = { @@ -45,7 +45,7 @@ def get_trophy_string(trophy_id: str) -> str: def animate(node: ba.Node, attr: str, - keys: Dict[float, float], + keys: dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = TimeType.SIM, @@ -119,7 +119,7 @@ def animate(node: ba.Node, def animate_array(node: ba.Node, attr: str, size: int, - keys: Dict[float, Sequence[float]], + keys: dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = TimeType.SIM, diff --git a/assets/src/ba_data/python/ba/_general.py b/assets/src/ba_data/python/ba/_general.py index 0a4ba2fe..e919138a 100644 --- a/assets/src/ba_data/python/ba/_general.py +++ b/assets/src/ba_data/python/ba/_general.py @@ -17,9 +17,8 @@ from ba._generated.enums import TimeType if TYPE_CHECKING: from types import FrameType - from typing import Any, Type, Optional + from typing import Any, Optional from efro.call import Call as Call # 'as Call' so we re-export. - from weakref import ReferenceType class Existable(Protocol): @@ -57,7 +56,7 @@ def existing(obj: Optional[ExistableType]) -> Optional[ExistableType]: return obj if obj is not None and obj.exists() else None -def getclass(name: str, subclassof: Type[T]) -> Type[T]: +def getclass(name: str, subclassof: type[T]) -> type[T]: """Given a full class name such as foo.bar.MyClass, return the class. Category: General Utility Functions @@ -70,7 +69,7 @@ def getclass(name: str, subclassof: Type[T]) -> Type[T]: modulename = '.'.join(splits[:-1]) classname = splits[-1] module = importlib.import_module(modulename) - cls: Type = getattr(module, classname) + cls: type = getattr(module, classname) if not issubclass(cls, subclassof): raise TypeError(f'{name} is not a subclass of {subclassof}.') @@ -133,7 +132,7 @@ def print_refs(obj: Any) -> None: i += 1 -def get_type_name(cls: Type) -> str: +def get_type_name(cls: type) -> str: """Return a full type name including module for a class.""" return cls.__module__ + '.' + cls.__name__ @@ -343,7 +342,7 @@ def print_active_refs(obj: Any) -> None: f' {ref4}{Clr.RST}') -def _verify_object_death(wref: ReferenceType) -> None: +def _verify_object_death(wref: weakref.ref) -> None: obj = wref() if obj is None: return diff --git a/assets/src/ba_data/python/ba/_hooks.py b/assets/src/ba_data/python/ba/_hooks.py index 44afb7c9..7860d1e5 100644 --- a/assets/src/ba_data/python/ba/_hooks.py +++ b/assets/src/ba_data/python/ba/_hooks.py @@ -18,7 +18,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Sequence, Optional, Dict, Any + from typing import Sequence, Optional, Any import ba @@ -339,7 +339,7 @@ def local_chat_message(msg: str) -> None: _ba.app.ui.party_window().on_chat_message(msg) -def get_player_icon(sessionplayer: ba.SessionPlayer) -> Dict[str, Any]: +def get_player_icon(sessionplayer: ba.SessionPlayer) -> dict[str, Any]: info = sessionplayer.get_icon_info() return { 'texture': _ba.gettexture(info['texture']), diff --git a/assets/src/ba_data/python/ba/_input.py b/assets/src/ba_data/python/ba/_input.py index bd318cac..fcf96ef5 100644 --- a/assets/src/ba_data/python/ba/_input.py +++ b/assets/src/ba_data/python/ba/_input.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Dict, Tuple + from typing import Any import ba @@ -601,14 +601,14 @@ def get_input_map_hash(inputdevice: ba.InputDevice) -> str: def get_input_device_config(device: ba.InputDevice, - default: bool) -> Tuple[Dict, str]: + default: bool) -> tuple[dict, str]: """Given an input device, return its config dict in the app config. The dict will be created if it does not exist. """ cfg = _ba.app.config name = device.name - ccfgs: Dict[str, Any] = cfg.setdefault('Controllers', {}) + ccfgs: dict[str, Any] = cfg.setdefault('Controllers', {}) ccfgs.setdefault(name, {}) unique_id = device.unique_identifier if default: diff --git a/assets/src/ba_data/python/ba/_keyboard.py b/assets/src/ba_data/python/ba/_keyboard.py index 258125f5..245cbea3 100644 --- a/assets/src/ba_data/python/ba/_keyboard.py +++ b/assets/src/ba_data/python/ba/_keyboard.py @@ -7,7 +7,7 @@ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import List, Tuple, Dict + pass class Keyboard: @@ -30,6 +30,6 @@ class Keyboard: """ name: str - chars: List[Tuple[str, ...]] - pages: Dict[str, Tuple[str, ...]] - nums: Tuple[str, ...] + chars: list[tuple[str, ...]] + pages: dict[str, tuple[str, ...]] + nums: tuple[str, ...] diff --git a/assets/src/ba_data/python/ba/_language.py b/assets/src/ba_data/python/ba/_language.py index 51ac7cbd..61d481a5 100644 --- a/assets/src/ba_data/python/ba/_language.py +++ b/assets/src/ba_data/python/ba/_language.py @@ -11,7 +11,7 @@ import _ba if TYPE_CHECKING: import ba - from typing import Any, Dict, List, Optional, Tuple, Union, Sequence + from typing import Any, Optional, Union, Sequence class LanguageSubsystem: @@ -109,7 +109,7 @@ class LanguageSubsystem: return _ba.app.config.get('Lang', self.default_language) @property - def available_languages(self) -> List[str]: + def available_languages(self) -> list[str]: """A list of all available languages. Note that languages that may be present in game assets but which @@ -402,7 +402,7 @@ class Lstr: resource: str, fallback_resource: str = '', fallback_value: str = '', - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr from a string resource.""" ... @@ -410,8 +410,8 @@ class Lstr: @overload def __init__(self, *, - translate: Tuple[str, str], - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + translate: tuple[str, str], + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr by translating a string in a category.""" ... @@ -420,7 +420,7 @@ class Lstr: def __init__(self, *, value: str, - subs: Sequence[Tuple[str, Union[str, Lstr]]] = []) -> None: + subs: Sequence[tuple[str, Union[str, Lstr]]] = []) -> None: """Create an Lstr from a raw string value.""" ... @@ -531,7 +531,7 @@ class Lstr: return lstr -def _add_to_attr_dict(dst: AttrDict, src: Dict) -> None: +def _add_to_attr_dict(dst: AttrDict, src: dict) -> None: for key, value in list(src.items()): if isinstance(value, dict): try: diff --git a/assets/src/ba_data/python/ba/_level.py b/assets/src/ba_data/python/ba/_level.py index ad764b15..53e67f1d 100644 --- a/assets/src/ba_data/python/ba/_level.py +++ b/assets/src/ba_data/python/ba/_level.py @@ -10,8 +10,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Type, Any, Dict, Optional + from typing import Any, Optional import ba @@ -23,7 +22,7 @@ class Level: def __init__(self, name: str, - gametype: Type[ba.GameActivity], + gametype: type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None): @@ -32,7 +31,7 @@ class Level: self._settings = settings self._preview_texture_name = preview_texture_name self._displayname = displayname - self._campaign: Optional[ReferenceType[ba.Campaign]] = None + self._campaign: Optional[weakref.ref[ba.Campaign]] = None self._index: Optional[int] = None self._score_version_string: Optional[str] = None @@ -45,7 +44,7 @@ class Level: """The unique name for this Level.""" return self._name - def get_settings(self) -> Dict[str, Any]: + def get_settings(self) -> dict[str, Any]: """Returns the settings for this Level.""" settings = copy.deepcopy(self._settings) @@ -74,7 +73,7 @@ class Level: self._gametype.get_display_string(self._settings))]) @property - def gametype(self) -> Type[ba.GameActivity]: + def gametype(self) -> type[ba.GameActivity]: """The type of game used for this Level.""" return self._gametype @@ -117,7 +116,7 @@ class Level: return {} return copy.deepcopy(config[high_scores_key]) - def set_high_scores(self, high_scores: Dict) -> None: + def set_high_scores(self, high_scores: dict) -> None: """Set high scores for this level.""" config = self._get_config_dict() high_scores_key = 'High Scores' + self.get_score_version_string() @@ -148,7 +147,7 @@ class Level: config = self._get_config_dict() config['Rating'] = max(old_rating, rating) - def _get_config_dict(self) -> Dict[str, Any]: + def _get_config_dict(self) -> dict[str, Any]: """Return/create the persistent state dict for this level. The referenced dict exists under the game's config dict and @@ -157,7 +156,7 @@ class Level: if campaign is None: raise RuntimeError('Level is not in a campaign.') configdict = campaign.configdict - val: Dict[str, Any] = configdict.setdefault(self._name, { + val: dict[str, Any] = configdict.setdefault(self._name, { 'Rating': 0.0, 'Complete': False }) diff --git a/assets/src/ba_data/python/ba/_lobby.py b/assets/src/ba_data/python/ba/_lobby.py index 21355512..f063f533 100644 --- a/assets/src/ba_data/python/ba/_lobby.py +++ b/assets/src/ba_data/python/ba/_lobby.py @@ -16,7 +16,7 @@ from ba._generated.enums import SpecialChar, InputType from ba._profile import get_player_profile_colors if TYPE_CHECKING: - from typing import Optional, List, Dict, Any, Sequence, Union + from typing import Optional, Any, Sequence, Union import ba MAX_QUICK_CHANGE_COUNT = 30 @@ -152,11 +152,11 @@ class Chooser: self._dead = False self._text_node: Optional[ba.Node] = None self._profilename = '' - self._profilenames: List[str] = [] + self._profilenames: list[str] = [] self._ready: bool = False - self._character_names: List[str] = [] + self._character_names: list[str] = [] self._last_change: Sequence[Union[float, int]] = (0, 0) - self._profiles: Dict[str, Dict[str, Any]] = {} + self._profiles: dict[str, dict[str, Any]] = {} app = _ba.app @@ -835,11 +835,11 @@ class Lobby: self._dummy_teams = SessionTeam() self._sessionteams = [weakref.ref(self._dummy_teams)] v_offset = (-150 if isinstance(session, CoopSession) else -50) - self.choosers: List[Chooser] = [] + self.choosers: list[Chooser] = [] self.base_v_offset = v_offset self.update_positions() self._next_add_team = 0 - self.character_names_local_unlocked: List[str] = [] + self.character_names_local_unlocked: list[str] = [] self._vpos = 0 # Grab available profiles. @@ -861,7 +861,7 @@ class Lobby: return self._use_team_colors @property - def sessionteams(self) -> List[ba.SessionTeam]: + def sessionteams(self) -> list[ba.SessionTeam]: """ba.SessionTeams available in this lobby.""" allteams = [] for tref in self._sessionteams: @@ -870,7 +870,7 @@ class Lobby: allteams.append(team) return allteams - def get_choosers(self) -> List[Chooser]: + def get_choosers(self) -> list[Chooser]: """Return the lobby's current choosers.""" return self.choosers diff --git a/assets/src/ba_data/python/ba/_map.py b/assets/src/ba_data/python/ba/_map.py index 6f8919b5..c5adf977 100644 --- a/assets/src/ba_data/python/ba/_map.py +++ b/assets/src/ba_data/python/ba/_map.py @@ -11,7 +11,7 @@ from ba import _math from ba._actor import Actor if TYPE_CHECKING: - from typing import Set, List, Type, Optional, Sequence, Any, Tuple + from typing import Optional, Sequence, Any import ba @@ -52,7 +52,7 @@ def get_map_display_string(name: str) -> ba.Lstr: return _language.Lstr(translate=('mapsNames', name)) -def getmaps(playtype: str) -> List[str]: +def getmaps(playtype: str) -> list[str]: """Return a list of ba.Map types supporting a playtype str. Category: Asset Functions @@ -101,13 +101,13 @@ def getmaps(playtype: str) -> List[str]: if playtype in val.get_play_types()) -def get_unowned_maps() -> List[str]: +def get_unowned_maps() -> list[str]: """Return the list of local maps not owned by the current account. Category: Asset Functions """ from ba import _store - unowned_maps: Set[str] = set() + unowned_maps: set[str] = set() if not _ba.app.headless_mode: for map_section in _store.get_store_layout()['maps']: for mapitem in map_section['items']: @@ -117,7 +117,7 @@ def get_unowned_maps() -> List[str]: return sorted(unowned_maps) -def get_map_class(name: str) -> Type[ba.Map]: +def get_map_class(name: str) -> type[ba.Map]: """Return a map type given a name. Category: Asset Functions @@ -140,7 +140,7 @@ class Map(Actor): """ defs: Any = None name = 'Map' - _playtypes: List[str] = [] + _playtypes: list[str] = [] @classmethod def preload(cls) -> None: @@ -156,7 +156,7 @@ class Map(Actor): activity.preloads[cls] = cls.on_preload() @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [] @@ -296,7 +296,7 @@ class Map(Actor): def get_def_bound_box( self, name: str - ) -> Optional[Tuple[float, float, float, float, float, float]]: + ) -> Optional[tuple[float, float, float, float, float, float]]: """Return a 6 member bounds tuple or None if it is not defined.""" try: box = self.defs.boxes[name] @@ -312,7 +312,7 @@ class Map(Actor): return (None if val is None else _math.vec3validate(val) if __debug__ else val) - def get_def_points(self, name: str) -> List[Sequence[float]]: + def get_def_points(self, name: str) -> list[Sequence[float]]: """Return a list of named points. Return as many sequential ones are defined (flag1, flag2, flag3), etc. @@ -408,7 +408,7 @@ class Map(Actor): return None -def register_map(maptype: Type[Map]) -> None: +def register_map(maptype: type[Map]) -> None: """Register a map class with the game.""" if maptype.name in _ba.app.maps: raise RuntimeError('map "' + maptype.name + '" already registered') diff --git a/assets/src/ba_data/python/ba/_math.py b/assets/src/ba_data/python/ba/_math.py index 98834ee9..856d4268 100644 --- a/assets/src/ba_data/python/ba/_math.py +++ b/assets/src/ba_data/python/ba/_math.py @@ -8,7 +8,7 @@ from collections import abc from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Tuple, Sequence + from typing import Sequence def vec3validate(value: Sequence[float]) -> Sequence[float]: @@ -45,7 +45,7 @@ def is_point_in_box(pnt: Sequence[float], box: Sequence[float]) -> bool: and (abs(pnt[2] - box[2]) <= box[8] * 0.5)) -def normalized_color(color: Sequence[float]) -> Tuple[float, ...]: +def normalized_color(color: Sequence[float]) -> tuple[float, ...]: """Scale a color so its largest value is 1; useful for coloring lights. category: General Utility Functions diff --git a/assets/src/ba_data/python/ba/_messages.py b/assets/src/ba_data/python/ba/_messages.py index c57ea556..a871d4bd 100644 --- a/assets/src/ba_data/python/ba/_messages.py +++ b/assets/src/ba_data/python/ba/_messages.py @@ -11,7 +11,7 @@ from enum import Enum import _ba if TYPE_CHECKING: - from typing import Sequence, Optional, Type, Any + from typing import Sequence, Optional, Any import ba @@ -105,7 +105,7 @@ class PlayerDiedMessage: self.how = how def getkillerplayer(self, - playertype: Type[PlayerType]) -> Optional[PlayerType]: + playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the ba.Player responsible for the killing, if any. Pass the Player type being used by the current game. @@ -113,7 +113,7 @@ class PlayerDiedMessage: assert isinstance(self._killerplayer, (playertype, type(None))) return self._killerplayer - def getplayer(self, playertype: Type[PlayerType]) -> PlayerType: + def getplayer(self, playertype: type[PlayerType]) -> PlayerType: """Return the ba.Player that died. The type of player for the current activity should be passed so that @@ -294,7 +294,7 @@ class HitMessage: if force_direction is not None else velocity) def get_source_player( - self, playertype: Type[PlayerType]) -> Optional[PlayerType]: + self, playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the source-player if one exists and is the provided type.""" player: Any = self._source_player diff --git a/assets/src/ba_data/python/ba/_meta.py b/assets/src/ba_data/python/ba/_meta.py index d3e7f4f1..7776a5b3 100644 --- a/assets/src/ba_data/python/ba/_meta.py +++ b/assets/src/ba_data/python/ba/_meta.py @@ -14,7 +14,7 @@ from dataclasses import dataclass, field import _ba if TYPE_CHECKING: - from typing import Dict, List, Tuple, Union, Optional, Type, Set + from typing import Union, Optional import ba # The meta api version of this build of the game. @@ -27,9 +27,9 @@ CURRENT_API_VERSION = 6 @dataclass class ScanResults: """Final results from a metadata scan.""" - games: List[str] = field(default_factory=list) - plugins: List[str] = field(default_factory=list) - keyboards: List[str] = field(default_factory=list) + games: list[str] = field(default_factory=list) + plugins: list[str] = field(default_factory=list) + keyboards: list[str] = field(default_factory=list) errors: str = '' warnings: str = '' @@ -89,7 +89,7 @@ class MetadataSubsystem: plugs = _ba.app.plugins config_changed = False found_new = False - plugstates: Dict[str, Dict] = _ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = _ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) # Create a potential-plugin for each class we found in the scan. @@ -151,7 +151,7 @@ class MetadataSubsystem: 'timeout waiting for meta scan to complete.') return self.metascan - def get_game_types(self) -> List[Type[ba.GameActivity]]: + def get_game_types(self) -> list[type[ba.GameActivity]]: """Return available game types.""" from ba._general import getclass from ba._gameactivity import GameActivity @@ -167,11 +167,11 @@ class MetadataSubsystem: unowned = self.get_unowned_game_types() return [cls for cls in gameclasses if cls not in unowned] - def get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]: + def get_unowned_game_types(self) -> set[type[ba.GameActivity]]: """Return present game types not owned by the current account.""" try: from ba import _store - unowned_games: Set[Type[ba.GameActivity]] = set() + unowned_games: set[type[ba.GameActivity]] = set() if not _ba.app.headless_mode: for section in _store.get_store_layout()['minigames']: for mname in section['items']: @@ -188,7 +188,7 @@ class MetadataSubsystem: class ScanThread(threading.Thread): """Thread to scan script dirs for metadata.""" - def __init__(self, dirs: List[str]): + def __init__(self, dirs: list[str]): super().__init__() self._dirs = dirs @@ -215,7 +215,7 @@ class ScanThread(threading.Thread): class DirectoryScan: """Handles scanning directories for metadata.""" - def __init__(self, paths: List[str]): + def __init__(self, paths: list[str]): """Given one or more paths, parses available meta information. It is assumed that these paths are also in PYTHONPATH. @@ -228,7 +228,7 @@ class DirectoryScan: def _get_path_module_entries( self, path: pathlib.Path, subpath: Union[str, pathlib.Path], - modules: List[Tuple[pathlib.Path, pathlib.Path]]) -> None: + modules: list[tuple[pathlib.Path, pathlib.Path]]) -> None: """Scan provided path and add module entries to provided list.""" try: # Special case: let's save some time and skip the whole 'ba' @@ -254,7 +254,7 @@ class DirectoryScan: def scan(self) -> None: """Scan provided paths.""" - modules: List[Tuple[pathlib.Path, pathlib.Path]] = [] + modules: list[tuple[pathlib.Path, pathlib.Path]] = [] for path in self.paths: self._get_path_module_entries(path, '', modules) for moduledir, subpath in modules: @@ -305,7 +305,7 @@ class DirectoryScan: # If its a package, recurse into its subpackages. if ispackage: try: - submodules: List[Tuple[pathlib.Path, pathlib.Path]] = [] + submodules: list[tuple[pathlib.Path, pathlib.Path]] = [] self._get_path_module_entries(moduledir, subpath, submodules) for submodule in submodules: if submodule[1].name != '__init__.py': @@ -316,8 +316,8 @@ class DirectoryScan: f"Error scanning '{subpath}': {traceback.format_exc()}\n") def _process_module_meta_tags(self, subpath: pathlib.Path, - flines: List[str], - meta_lines: Dict[int, List[str]]) -> None: + flines: list[str], + meta_lines: dict[int, list[str]]) -> None: """Pull data from a module based on its ba_meta tags.""" for lindex, mline in meta_lines.items(): # meta_lines is just anything containing '# ba_meta '; make sure @@ -360,7 +360,7 @@ class DirectoryScan: ': unrecognized export type "' + exporttype + '" on line ' + str(lindex + 1) + '.\n') - def _get_export_class_name(self, subpath: pathlib.Path, lines: List[str], + def _get_export_class_name(self, subpath: pathlib.Path, lines: list[str], lindex: int) -> Optional[str]: """Given line num of an export tag, returns its operand class name.""" lindexorig = lindex @@ -387,7 +387,7 @@ class DirectoryScan: return classname def get_api_requirement(self, subpath: pathlib.Path, - meta_lines: Dict[int, List[str]], + meta_lines: dict[int, list[str]], toplevel: bool) -> Optional[int]: """Return an API requirement integer or None if none present. diff --git a/assets/src/ba_data/python/ba/_multiteamsession.py b/assets/src/ba_data/python/ba/_multiteamsession.py index 910b72e1..683ddde9 100644 --- a/assets/src/ba_data/python/ba/_multiteamsession.py +++ b/assets/src/ba_data/python/ba/_multiteamsession.py @@ -12,7 +12,7 @@ from ba._session import Session from ba._error import NotFoundError, print_error if TYPE_CHECKING: - from typing import Optional, Any, Dict, List, Type, Sequence + from typing import Optional, Any, Sequence import ba DEFAULT_TEAM_COLORS = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2)) @@ -105,9 +105,9 @@ class MultiTeamSession(Session): shuffle=self._playlist_randomize) # Get a game on deck ready to go. - self._current_game_spec: Optional[Dict[str, Any]] = None - self._next_game_spec: Dict[str, Any] = self._playlist.pull_next() - self._next_game: Type[ba.GameActivity] = ( + self._current_game_spec: Optional[dict[str, Any]] = None + self._next_game_spec: dict[str, Any] = self._playlist.pull_next() + self._next_game: type[ba.GameActivity] = ( self._next_game_spec['resolved_type']) # Go ahead and instantiate the next game we'll @@ -129,7 +129,7 @@ class MultiTeamSession(Session): """Returns a description of the next game on deck.""" # pylint: disable=cyclic-import from ba._gameactivity import GameActivity - gametype: Type[GameActivity] = self._next_game_spec['resolved_type'] + gametype: type[GameActivity] = self._next_game_spec['resolved_type'] assert issubclass(gametype, GameActivity) return gametype.get_settings_display_string(self._next_game_spec) @@ -274,13 +274,13 @@ class ShuffleList: (avoids repeats in maps or game types) """ - def __init__(self, items: List[Dict[str, Any]], shuffle: bool = True): + def __init__(self, items: list[dict[str, Any]], shuffle: bool = True): self.source_list = items self.shuffle = shuffle - self.shuffle_list: List[Dict[str, Any]] = [] - self.last_gotten: Optional[Dict[str, Any]] = None + self.shuffle_list: list[dict[str, Any]] = [] + self.last_gotten: Optional[dict[str, Any]] = None - def pull_next(self) -> Dict[str, Any]: + def pull_next(self) -> dict[str, Any]: """Pull and return the next item on the shuffle-list.""" # Refill our list if its empty. diff --git a/assets/src/ba_data/python/ba/_music.py b/assets/src/ba_data/python/ba/_music.py index c2f92d99..7cf3815f 100644 --- a/assets/src/ba_data/python/ba/_music.py +++ b/assets/src/ba_data/python/ba/_music.py @@ -11,7 +11,7 @@ from enum import Enum import _ba if TYPE_CHECKING: - from typing import Callable, Any, Optional, Dict, Union, Type + from typing import Callable, Any, Optional, Union import ba @@ -69,7 +69,7 @@ class AssetSoundtrackEntry: # What gets played by default for our different music types: -ASSET_SOUNDTRACK_ENTRIES: Dict[MusicType, AssetSoundtrackEntry] = { +ASSET_SOUNDTRACK_ENTRIES: dict[MusicType, AssetSoundtrackEntry] = { MusicType.MENU: AssetSoundtrackEntry('menuMusic'), MusicType.VICTORY: @@ -130,8 +130,8 @@ class MusicSubsystem: self._music_node: Optional[_ba.Node] = None self._music_mode: MusicPlayMode = MusicPlayMode.REGULAR self._music_player: Optional[MusicPlayer] = None - self._music_player_type: Optional[Type[MusicPlayer]] = None - self.music_types: Dict[MusicPlayMode, Optional[MusicType]] = { + self._music_player_type: Optional[type[MusicPlayer]] = None + self.music_types: dict[MusicPlayMode, Optional[MusicType]] = { MusicPlayMode.REGULAR: None, MusicPlayMode.TEST: None } @@ -273,7 +273,7 @@ class MusicSubsystem: musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = MusicPlayMode.REGULAR, - testsoundtrack: Dict[str, Any] = None) -> None: + testsoundtrack: dict[str, Any] = None) -> None: """Plays the requested music type/mode. For most cases, setmusic() is the proper call to use, which itself @@ -329,10 +329,10 @@ class MusicSubsystem: else: self._play_internal_music(musictype) - def _get_user_soundtrack(self) -> Dict[str, Any]: + def _get_user_soundtrack(self) -> dict[str, Any]: """Return current user soundtrack or empty dict otherwise.""" cfg = _ba.app.config - soundtrack: Dict[str, Any] = {} + soundtrack: dict[str, Any] = {} soundtrackname = cfg.get('Soundtrack') if soundtrackname is not None and soundtrackname != '__default__': try: diff --git a/assets/src/ba_data/python/ba/_net.py b/assets/src/ba_data/python/ba/_net.py index 7ffb2a99..c27f3dbb 100644 --- a/assets/src/ba_data/python/ba/_net.py +++ b/assets/src/ba_data/python/ba/_net.py @@ -12,10 +12,10 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, Dict, Union, Callable, Optional + from typing import Any, Union, Callable, Optional import socket import ba - MasterServerCallback = Callable[[Union[None, Dict[str, Any]]], None] + MasterServerCallback = Callable[[Union[None, dict[str, Any]]], None] # Timeout for standard functions talking to the master-server/etc. DEFAULT_REQUEST_TIMEOUT_SECONDS = 60 @@ -25,7 +25,7 @@ class NetworkSubsystem: """Network related app subsystem.""" def __init__(self) -> None: - self.region_pings: Dict[str, float] = {} + self.region_pings: dict[str, float] = {} def get_ip_address_type(addr: str) -> socket.AddressFamily: @@ -61,7 +61,7 @@ class MasterServerCallThread(threading.Thread): """Thread to communicate with the master-server.""" def __init__(self, request: str, request_type: str, - data: Optional[Dict[str, Any]], + data: Optional[dict[str, Any]], callback: Optional[MasterServerCallback], response_type: MasterServerResponseType): super().__init__() @@ -79,7 +79,7 @@ class MasterServerCallThread(threading.Thread): self._activity = weakref.ref( activity) if activity is not None else None - def _run_callback(self, arg: Union[None, Dict[str, Any]]) -> None: + def _run_callback(self, arg: Union[None, dict[str, Any]]) -> None: # If we were created in an activity context and that activity has # since died, do nothing. # FIXME: Should we just be using a ContextCall instead of doing @@ -170,7 +170,7 @@ class MasterServerCallThread(threading.Thread): def master_server_get( request: str, - data: Dict[str, Any], + data: dict[str, Any], callback: Optional[MasterServerCallback] = None, response_type: MasterServerResponseType = MasterServerResponseType.JSON ) -> None: @@ -181,7 +181,7 @@ def master_server_get( def master_server_post( request: str, - data: Dict[str, Any], + data: dict[str, Any], callback: Optional[MasterServerCallback] = None, response_type: MasterServerResponseType = MasterServerResponseType.JSON ) -> None: diff --git a/assets/src/ba_data/python/ba/_player.py b/assets/src/ba_data/python/ba/_player.py index f0592a6f..a4728537 100644 --- a/assets/src/ba_data/python/ba/_player.py +++ b/assets/src/ba_data/python/ba/_player.py @@ -13,8 +13,7 @@ from ba._error import (SessionPlayerNotFoundError, print_exception, from ba._messages import DeathType, DieMessage if TYPE_CHECKING: - from typing import (Type, Optional, Sequence, Dict, Any, Union, Tuple, - Callable) + from typing import Optional, Sequence, Any, Union, Callable import ba PlayerType = TypeVar('PlayerType', bound='ba.Player') @@ -245,8 +244,8 @@ class Player(Generic[TeamType]): assert not self._expired return self.actor is not None and self.actor.is_alive() - def get_icon(self) -> Dict[str, Any]: - """get_icon() -> Dict[str, Any] + def get_icon(self) -> dict[str, Any]: + """get_icon() -> dict[str, Any] Returns the character's icon (images, colors, etc contained in a dict) """ @@ -254,7 +253,7 @@ class Player(Generic[TeamType]): assert not self._expired return self._sessionplayer.get_icon() - def assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType, + def assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None: """assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], @@ -302,7 +301,7 @@ class EmptyPlayer(Player['ba.EmptyTeam']): # instead of requiring extra work by them. -def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType: +def playercast(totype: type[PlayerType], player: ba.Player) -> PlayerType: """Cast a ba.Player to a specific ba.Player subclass. Category: Gameplay Functions @@ -320,7 +319,7 @@ def playercast(totype: Type[PlayerType], player: ba.Player) -> PlayerType: # NOTE: ideally we should have a single playercast() call and use overloads # for the optional variety, but that currently seems to not be working. # See: https://github.com/python/mypy/issues/8800 -def playercast_o(totype: Type[PlayerType], +def playercast_o(totype: type[PlayerType], player: Optional[ba.Player]) -> Optional[PlayerType]: """A variant of ba.playercast() for use with optional ba.Player values. diff --git a/assets/src/ba_data/python/ba/_playlist.py b/assets/src/ba_data/python/ba/_playlist.py index 1f31ee6d..b6e36046 100644 --- a/assets/src/ba_data/python/ba/_playlist.py +++ b/assets/src/ba_data/python/ba/_playlist.py @@ -5,17 +5,17 @@ from __future__ import annotations import copy -from typing import Any, TYPE_CHECKING, Dict, List +from typing import Any, TYPE_CHECKING if TYPE_CHECKING: - from typing import Type, Sequence + from typing import Sequence from ba import _session -PlaylistType = List[Dict[str, Any]] +PlaylistType = list[dict[str, Any]] def filter_playlist(playlist: PlaylistType, - sessiontype: Type[_session.Session], + sessiontype: type[_session.Session], add_resolved_type: bool = False, remove_unowned: bool = True, mark_unowned: bool = False) -> PlaylistType: @@ -32,7 +32,7 @@ def filter_playlist(playlist: PlaylistType, from ba import _map from ba import _general from ba import _gameactivity - goodlist: List[Dict] = [] + goodlist: list[dict] = [] unowned_maps: Sequence[str] if remove_unowned or mark_unowned: unowned_maps = _map.get_unowned_maps() diff --git a/assets/src/ba_data/python/ba/_plugin.py b/assets/src/ba_data/python/ba/_plugin.py index 025f7a24..7637717c 100644 --- a/assets/src/ba_data/python/ba/_plugin.py +++ b/assets/src/ba_data/python/ba/_plugin.py @@ -10,7 +10,6 @@ from dataclasses import dataclass import _ba if TYPE_CHECKING: - from typing import List, Dict import ba @@ -23,8 +22,8 @@ class PluginSubsystem: """ def __init__(self) -> None: - self.potential_plugins: List[ba.PotentialPlugin] = [] - self.active_plugins: Dict[str, ba.Plugin] = {} + self.potential_plugins: list[ba.PotentialPlugin] = [] + self.active_plugins: dict[str, ba.Plugin] = {} def on_app_launch(self) -> None: """Should be called at app launch time.""" @@ -73,9 +72,9 @@ class PluginSubsystem: # plugins, but that is only used to give the user a list of plugins # that they can enable. (we wouldn't want to look at meta-scan here # anyway because it may not be done yet at this point in the launch) - plugstates: Dict[str, Dict] = _ba.app.config.get('Plugins', {}) + plugstates: dict[str, dict] = _ba.app.config.get('Plugins', {}) assert isinstance(plugstates, dict) - plugkeys: List[str] = sorted(key for key, val in plugstates.items() + plugkeys: list[str] = sorted(key for key, val in plugstates.items() if val.get('enabled', False)) for plugkey in plugkeys: try: diff --git a/assets/src/ba_data/python/ba/_powerup.py b/assets/src/ba_data/python/ba/_powerup.py index 7dd895ce..520d3020 100644 --- a/assets/src/ba_data/python/ba/_powerup.py +++ b/assets/src/ba_data/python/ba/_powerup.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING from dataclasses import dataclass if TYPE_CHECKING: - from typing import Sequence, Tuple, Optional + from typing import Sequence, Optional import ba @@ -47,7 +47,7 @@ class PowerupAcceptMessage: """ -def get_default_powerup_distribution() -> Sequence[Tuple[str, int]]: +def get_default_powerup_distribution() -> Sequence[tuple[str, int]]: """Standard set of powerups.""" return (('triple_bombs', 3), ('ice_bombs', 3), ('punch', 3), ('impact_bombs', 3), ('land_mines', 2), ('sticky_bombs', 3), diff --git a/assets/src/ba_data/python/ba/_profile.py b/assets/src/ba_data/python/ba/_profile.py index 404afd8b..9f89a7f0 100644 --- a/assets/src/ba_data/python/ba/_profile.py +++ b/assets/src/ba_data/python/ba/_profile.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import List, Tuple, Any, Dict, Optional + from typing import Any, Optional # NOTE: player color options are enforced server-side for non-pro accounts # so don't change these or they won't stick... @@ -20,7 +20,7 @@ PLAYER_COLORS = [(1, 0.15, 0.15), (0.2, 1, 0.2), (0.1, 0.1, 1), (0.2, 1, 1), (0.5, 0.5, 0.5), (1, 1, 1)] -def get_player_colors() -> List[Tuple[float, float, float]]: +def get_player_colors() -> list[tuple[float, float, float]]: """Return user-selectable player colors.""" return PLAYER_COLORS @@ -50,8 +50,8 @@ def get_player_profile_icon(profilename: str) -> str: def get_player_profile_colors( profilename: Optional[str], - profiles: Dict[str, Dict[str, Any]] = None -) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: + profiles: dict[str, dict[str, Any]] = None +) -> tuple[tuple[float, float, float], tuple[float, float, float]]: """Given a profile, return colors for them.""" appconfig = _ba.app.config if profiles is None: diff --git a/assets/src/ba_data/python/ba/_servermode.py b/assets/src/ba_data/python/ba/_servermode.py index 7f06ddaa..6df38d79 100644 --- a/assets/src/ba_data/python/ba/_servermode.py +++ b/assets/src/ba_data/python/ba/_servermode.py @@ -19,7 +19,7 @@ from ba._dualteamsession import DualTeamSession from ba._coopsession import CoopSession if TYPE_CHECKING: - from typing import Optional, Dict, Any, Type + from typing import Optional, Any import ba from bacommon.servermanager import ServerConfig @@ -198,7 +198,7 @@ class ServerController: callback=self._access_check_response, ) - def _access_check_response(self, data: Optional[Dict[str, Any]]) -> None: + def _access_check_response(self, data: Optional[dict[str, Any]]) -> None: import os if data is None: print('error on UDP port access check (internet down?)') @@ -267,7 +267,7 @@ class ServerController: def _on_playlist_fetch_response( self, - result: Optional[Dict[str, Any]], + result: Optional[dict[str, Any]], ) -> None: if result is None: print('Error fetching playlist; aborting.') @@ -283,7 +283,7 @@ class ServerController: self._config.session_type = typename self._playlist_name = (result['playlistName']) - def _get_session_type(self) -> Type[ba.Session]: + def _get_session_type(self) -> type[ba.Session]: # Convert string session type to the class. # Hmm should we just keep this as a string? if self._config.session_type == 'ffa': diff --git a/assets/src/ba_data/python/ba/_session.py b/assets/src/ba_data/python/ba/_session.py index dc471f50..0b59fed4 100644 --- a/assets/src/ba_data/python/ba/_session.py +++ b/assets/src/ba_data/python/ba/_session.py @@ -12,7 +12,7 @@ from ba._language import Lstr from ba._player import Player if TYPE_CHECKING: - from typing import Sequence, List, Dict, Any, Optional, Set + from typing import Sequence, Any, Optional import ba @@ -76,9 +76,9 @@ class Session: lobby: ba.Lobby max_players: int min_players: int - sessionplayers: List[ba.SessionPlayer] + sessionplayers: list[ba.SessionPlayer] customdata: dict - sessionteams: List[ba.SessionTeam] + sessionteams: list[ba.SessionTeam] def __init__(self, depsets: Sequence[ba.DependencySet], @@ -108,7 +108,7 @@ class Session: # If things are missing, we'll try to gather them into a single # missing-deps exception if possible to give the caller a clean # path to download missing stuff and try again. - missing_asset_packages: Set[str] = set() + missing_asset_packages: set[str] = set() for depset in depsets: try: depset.resolve() @@ -133,7 +133,7 @@ class Session: # Ok; looks like our dependencies check out. # Now give the engine a list of asset-set-ids to pass along to clients. - required_asset_packages: Set[str] = set() + required_asset_packages: set[str] = set() for depset in depsets: required_asset_packages.update(depset.get_asset_package_ids()) @@ -495,7 +495,7 @@ class Session: """Return the current foreground activity for this session.""" return self._activity_weak() - def get_custom_menu_entries(self) -> List[Dict[str, Any]]: + def get_custom_menu_entries(self) -> list[dict[str, Any]]: """Subclasses can override this to provide custom menu entries. The returned value should be a list of dicts, each containing diff --git a/assets/src/ba_data/python/ba/_settings.py b/assets/src/ba_data/python/ba/_settings.py index 1b3e4040..cf590b52 100644 --- a/assets/src/ba_data/python/ba/_settings.py +++ b/assets/src/ba_data/python/ba/_settings.py @@ -8,7 +8,7 @@ from typing import TYPE_CHECKING from dataclasses import dataclass if TYPE_CHECKING: - from typing import Any, List, Tuple + from typing import Any @dataclass @@ -61,7 +61,7 @@ class ChoiceSetting(Setting): Category: Settings Classes """ - choices: List[Tuple[str, Any]] + choices: list[tuple[str, Any]] @dataclass @@ -71,7 +71,7 @@ class IntChoiceSetting(ChoiceSetting): Category: Settings Classes """ default: int - choices: List[Tuple[str, int]] + choices: list[tuple[str, int]] @dataclass @@ -81,4 +81,4 @@ class FloatChoiceSetting(ChoiceSetting): Category: Settings Classes """ default: float - choices: List[Tuple[str, float]] + choices: list[tuple[str, float]] diff --git a/assets/src/ba_data/python/ba/_stats.py b/assets/src/ba_data/python/ba/_stats.py index bf3becb0..486a39e2 100644 --- a/assets/src/ba_data/python/ba/_stats.py +++ b/assets/src/ba_data/python/ba/_stats.py @@ -14,8 +14,7 @@ from ba._error import (print_exception, print_error, SessionTeamNotFoundError, if TYPE_CHECKING: import ba - from weakref import ReferenceType - from typing import Any, Dict, Optional, Sequence, Union, Tuple + from typing import Any, Optional, Sequence, Union @dataclass @@ -58,7 +57,7 @@ class PlayerRecord: self._stats = weakref.ref(stats) self._last_sessionplayer: Optional[ba.SessionPlayer] = None self._sessionplayer: Optional[ba.SessionPlayer] = None - self._sessionteam: Optional[ReferenceType[ba.SessionTeam]] = None + self._sessionteam: Optional[weakref.ref[ba.SessionTeam]] = None self.streak = 0 self.associate_with_sessionplayer(sessionplayer) @@ -90,7 +89,7 @@ class PlayerRecord: """Return the player entry's name.""" return self.name_full if full else self.name - def get_icon(self) -> Dict[str, Any]: + def get_icon(self) -> dict[str, Any]: """Get the icon for this instance's player.""" player = self._last_sessionplayer assert player is not None @@ -181,7 +180,7 @@ class PlayerRecord: sound = stats.orchestrahitsound4 def _apply(name2: Lstr, score2: int, showpoints2: bool, - color2: Tuple[float, float, float, float], scale2: float, + color2: tuple[float, float, float, float], scale2: float, sound2: Optional[ba.Sound]) -> None: from bastd.actor.popuptext import PopupText @@ -237,8 +236,8 @@ class Stats: """ def __init__(self) -> None: - self._activity: Optional[ReferenceType[ba.Activity]] = None - self._player_records: Dict[str, PlayerRecord] = {} + self._activity: Optional[weakref.ref[ba.Activity]] = None + self._player_records: dict[str, PlayerRecord] = {} self.orchestrahitsound1: Optional[ba.Sound] = None self.orchestrahitsound2: Optional[ba.Sound] = None self.orchestrahitsound3: Optional[ba.Sound] = None @@ -303,7 +302,7 @@ class Stats: self._player_records[name] = PlayerRecord(name, name_full, player, self) - def get_records(self) -> Dict[str, ba.PlayerRecord]: + def get_records(self) -> dict[str, ba.PlayerRecord]: """Get PlayerRecord corresponding to still-existing players.""" records = {} diff --git a/assets/src/ba_data/python/ba/_store.py b/assets/src/ba_data/python/ba/_store.py index 14cd6080..0dc91f9c 100644 --- a/assets/src/ba_data/python/ba/_store.py +++ b/assets/src/ba_data/python/ba/_store.py @@ -9,11 +9,11 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Type, List, Dict, Tuple, Optional, Any + from typing import Optional, Any import ba -def get_store_item(item: str) -> Dict[str, Any]: +def get_store_item(item: str) -> dict[str, Any]: """(internal)""" return get_store_items()[item] @@ -32,17 +32,17 @@ def get_store_item_name_translated(item_name: str) -> ba.Lstr: subs=[('${APP_NAME}', _language.Lstr(resource='titleText'))]) if item_name.startswith('maps.'): - map_type: Type[ba.Map] = item_info['map_type'] + map_type: type[ba.Map] = item_info['map_type'] return _map.get_map_display_string(map_type.name) if item_name.startswith('games.'): - gametype: Type[ba.GameActivity] = item_info['gametype'] + gametype: type[ba.GameActivity] = item_info['gametype'] return gametype.get_display_string() if item_name.startswith('icons.'): return _language.Lstr(resource='editProfileWindow.iconText') raise ValueError('unrecognized item: ' + item_name) -def get_store_item_display_size(item_name: str) -> Tuple[float, float]: +def get_store_item_display_size(item_name: str) -> tuple[float, float]: """(internal)""" if item_name.startswith('characters.'): return 340 * 0.6, 430 * 0.6 @@ -55,7 +55,7 @@ def get_store_item_display_size(item_name: str) -> Tuple[float, float]: return 450 * 0.6, 450 * 0.6 -def get_store_items() -> Dict[str, Dict]: +def get_store_items() -> dict[str, dict]: """Returns info about purchasable items. (internal) @@ -285,7 +285,7 @@ def get_store_items() -> Dict[str, Dict]: return store_items -def get_store_layout() -> Dict[str, List[Dict[str, Any]]]: +def get_store_layout() -> dict[str, list[dict[str, Any]]]: """Return what's available in the store at a given time. Categorized by tab and by section.""" @@ -421,7 +421,7 @@ def get_available_purchase_count(tab: str = None) -> int: return 0 -def _calc_count_for_tab(tabval: List[Dict[str, Any]], our_tickets: int, +def _calc_count_for_tab(tabval: list[dict[str, Any]], our_tickets: int, count: int) -> int: for section in tabval: for item in section['items']: @@ -442,7 +442,7 @@ def get_available_sale_time(tab: str) -> Optional[int]: import datetime from ba._generated.enums import TimeType, TimeFormat app = _ba.app - sale_times: List[Optional[int]] = [] + sale_times: list[Optional[int]] = [] # Calc time for our pro sale (old special case). if tab == 'extras': diff --git a/assets/src/ba_data/python/ba/_team.py b/assets/src/ba_data/python/ba/_team.py index 67e254b2..0cdfbe75 100644 --- a/assets/src/ba_data/python/ba/_team.py +++ b/assets/src/ba_data/python/ba/_team.py @@ -10,8 +10,7 @@ from typing import TYPE_CHECKING, TypeVar, Generic from ba._error import print_exception if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Dict, List, Sequence, Tuple, Union, Optional + from typing import Sequence, Union, Optional import ba @@ -47,8 +46,8 @@ class SessionTeam: # Annotate our attr types at the class level so they're introspectable. name: Union[ba.Lstr, str] - color: Tuple[float, ...] # FIXME: can't we make this fixed len? - players: List[ba.SessionPlayer] + color: tuple[float, ...] # FIXME: can't we make this fixed len? + players: list[ba.SessionPlayer] customdata: dict id: int @@ -88,11 +87,11 @@ class Team(Generic[PlayerType]): # Defining these types at the class level instead of in __init__ so # that types are introspectable (these are still instance attrs). - players: List[PlayerType] + players: list[PlayerType] id: int name: Union[ba.Lstr, str] - color: Tuple[float, ...] # FIXME: can't we make this fixed length? - _sessionteam: ReferenceType[SessionTeam] + color: tuple[float, ...] # FIXME: can't we make this fixed length? + _sessionteam: weakref.ref[SessionTeam] _expired: bool _postinited: bool _customdata: dict @@ -127,7 +126,7 @@ class Team(Generic[PlayerType]): self._postinited = True def manual_init(self, team_id: int, name: Union[ba.Lstr, str], - color: Tuple[float, ...]) -> None: + color: tuple[float, ...]) -> None: """Manually init a team for uses such as bots.""" self.id = team_id self.name = name diff --git a/assets/src/ba_data/python/ba/_teamgame.py b/assets/src/ba_data/python/ba/_teamgame.py index afa8519e..93076210 100644 --- a/assets/src/ba_data/python/ba/_teamgame.py +++ b/assets/src/ba_data/python/ba/_teamgame.py @@ -13,7 +13,7 @@ from ba._gameresults import GameResults from ba._dualteamsession import DualTeamSession if TYPE_CHECKING: - from typing import Any, Dict, Type, Sequence + from typing import Any, Sequence from bastd.actor.playerspaz import PlayerSpaz import ba @@ -31,7 +31,7 @@ class TeamGameActivity(GameActivity[PlayerType, TeamType]): """ @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: """ Class method override; returns True for ba.DualTeamSessions and ba.FreeForAllSessions; diff --git a/assets/src/ba_data/python/ba/_tips.py b/assets/src/ba_data/python/ba/_tips.py index 7a2501d5..c6e8955e 100644 --- a/assets/src/ba_data/python/ba/_tips.py +++ b/assets/src/ba_data/python/ba/_tips.py @@ -3,12 +3,16 @@ """Functionality related to game tips. These can be shown at opportune times such as between rounds.""" +from __future__ import annotations +from typing import TYPE_CHECKING import random -from typing import List import _ba +if TYPE_CHECKING: + pass + def get_next_tip() -> str: """Returns the next tip to be displayed.""" @@ -20,7 +24,7 @@ def get_next_tip() -> str: return tip -def get_all_tips() -> List[str]: +def get_all_tips() -> list[str]: """Return the complete list of tips.""" tips = [ ('If you are short on controllers, install the \'${REMOTE_APP_NAME}\' ' diff --git a/assets/src/ba_data/python/ba/_tournament.py b/assets/src/ba_data/python/ba/_tournament.py index b246ff87..ec1618ae 100644 --- a/assets/src/ba_data/python/ba/_tournament.py +++ b/assets/src/ba_data/python/ba/_tournament.py @@ -9,10 +9,10 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Dict, List, Any + from typing import Any -def get_tournament_prize_strings(entry: Dict[str, Any]) -> List[str]: +def get_tournament_prize_strings(entry: dict[str, Any]) -> list[str]: """Given a tournament entry, return strings for its prize levels.""" # pylint: disable=too-many-locals from ba._generated.enums import SpecialChar diff --git a/assets/src/ba_data/python/ba/_ui.py b/assets/src/ba_data/python/ba/_ui.py index dcf5df47..bf019471 100644 --- a/assets/src/ba_data/python/ba/_ui.py +++ b/assets/src/ba_data/python/ba/_ui.py @@ -10,7 +10,7 @@ import _ba from ba._generated.enums import UIScale if TYPE_CHECKING: - from typing import Optional, Dict, Any, Callable, List, Type + from typing import Optional, Any, Callable from ba.ui import UICleanupCheck import ba @@ -43,13 +43,13 @@ class UISubsystem: else: raise RuntimeError(f'Invalid UIScale value: {interfacetype}') - self.window_states: Dict[Type, Any] = {} # FIXME: Kill this. + self.window_states: dict[type, Any] = {} # FIXME: Kill this. self.main_menu_selection: Optional[str] = None # FIXME: Kill this. self.have_party_queue_window = False self.quit_window: Any = None self.dismiss_wii_remotes_window_call: (Optional[Callable[[], Any]]) = None - self.cleanupchecks: List[UICleanupCheck] = [] + self.cleanupchecks: list[UICleanupCheck] = [] self.upkeeptimer: Optional[ba.Timer] = None self.use_toolbars = env.get('toolbar_test', True) self.party_window: Any = None # FIXME: Don't use Any. diff --git a/assets/src/ba_data/python/ba/macmusicapp.py b/assets/src/ba_data/python/ba/macmusicapp.py index 9149b3d9..598f5725 100644 --- a/assets/src/ba_data/python/ba/macmusicapp.py +++ b/assets/src/ba_data/python/ba/macmusicapp.py @@ -10,7 +10,7 @@ import _ba from ba._music import MusicPlayer if TYPE_CHECKING: - from typing import List, Optional, Callable, Any + from typing import Optional, Callable, Any class MacMusicAppMusicPlayer(MusicPlayer): @@ -60,7 +60,7 @@ class _MacMusicAppThread(threading.Thread): def __init__(self) -> None: super().__init__() self._commands_available = threading.Event() - self._commands: List[List] = [] + self._commands: list[list] = [] self._volume = 1.0 self._current_playlist: Optional[str] = None self._orig_volume: Optional[int] = None @@ -153,7 +153,7 @@ class _MacMusicAppThread(threading.Thread): self._commands_available.set() def _handle_get_playlists_command( - self, target: Callable[[List[str]], None]) -> None: + self, target: Callable[[list[str]], None]) -> None: from ba._general import Call try: playlists = _ba.mac_music_app_get_playlists() diff --git a/assets/src/ba_data/python/ba/modutils.py b/assets/src/ba_data/python/ba/modutils.py index cdd6ecaf..5984f25c 100644 --- a/assets/src/ba_data/python/ba/modutils.py +++ b/assets/src/ba_data/python/ba/modutils.py @@ -9,7 +9,7 @@ import os import _ba if TYPE_CHECKING: - from typing import Optional, List, Sequence + from typing import Optional, Sequence def get_human_readable_user_scripts_path() -> str: diff --git a/assets/src/ba_data/python/ba/osmusic.py b/assets/src/ba_data/python/ba/osmusic.py index 5257e0aa..64f2bd1e 100644 --- a/assets/src/ba_data/python/ba/osmusic.py +++ b/assets/src/ba_data/python/ba/osmusic.py @@ -12,7 +12,7 @@ import _ba from ba._music import MusicPlayer if TYPE_CHECKING: - from typing import Callable, Any, Union, List, Optional + from typing import Callable, Any, Union, Optional class OSMusicPlayer(MusicPlayer): @@ -26,7 +26,7 @@ class OSMusicPlayer(MusicPlayer): self._actually_playing = False @classmethod - def get_valid_music_file_extensions(cls) -> List[str]: + def get_valid_music_file_extensions(cls) -> list[str]: """Return file extensions for types playable on this device.""" # FIXME: should ask the C++ layer for these; just hard-coding for now. return ['mp3', 'ogg', 'm4a', 'wav', 'flac', 'mid'] @@ -60,7 +60,7 @@ class OSMusicPlayer(MusicPlayer): self._on_play_folder_cb).start() def _on_play_folder_cb(self, - result: Union[str, List[str]], + result: Union[str, list[str]], error: Optional[str] = None) -> None: from ba import _language if error is not None: @@ -94,8 +94,8 @@ class OSMusicPlayer(MusicPlayer): class _PickFolderSongThread(threading.Thread): - def __init__(self, path: str, valid_extensions: List[str], - callback: Callable[[Union[str, List[str]], Optional[str]], + def __init__(self, path: str, valid_extensions: list[str], + callback: Callable[[Union[str, list[str]], Optional[str]], None]): super().__init__() self._valid_extensions = valid_extensions @@ -108,7 +108,7 @@ class _PickFolderSongThread(threading.Thread): do_print_error = True try: _ba.set_thread_name('BA_PickFolderSongThread') - all_files: List[str] = [] + all_files: list[str] = [] valid_extensions = ['.' + x for x in self._valid_extensions] for root, _subdirs, filenames in os.walk(self._path): for fname in filenames: diff --git a/assets/src/ba_data/python/ba/ui/__init__.py b/assets/src/ba_data/python/ba/ui/__init__.py index a7fe5747..a3b16de3 100644 --- a/assets/src/ba_data/python/ba/ui/__init__.py +++ b/assets/src/ba_data/python/ba/ui/__init__.py @@ -14,8 +14,7 @@ from ba._generated.enums import TimeType from ba._general import print_active_refs if TYPE_CHECKING: - from typing import Optional, List, Any - from weakref import ReferenceType + from typing import Optional, Any import ba @@ -45,7 +44,7 @@ class Window: @dataclass class UICleanupCheck: """Holds info about a uicleanupcheck target.""" - obj: ReferenceType + obj: weakref.ref widget: ba.Widget widget_death_time: Optional[float] @@ -126,15 +125,15 @@ class UIController: def __init__(self) -> None: # FIXME: document why we have separate stacks for game and menu... - self._main_stack_game: List[UIEntry] = [] - self._main_stack_menu: List[UIEntry] = [] + self._main_stack_game: list[UIEntry] = [] + self._main_stack_menu: list[UIEntry] = [] # This points at either the game or menu stack. - self._main_stack: Optional[List[UIEntry]] = None + self._main_stack: Optional[list[UIEntry]] = None # There's only one of these since we don't need to preserve its state # between sessions. - self._dialog_stack: List[UIEntry] = [] + self._dialog_stack: list[UIEntry] = [] def show_main_menu(self, in_game: bool = True) -> None: """Show the main menu, clearing other UIs from location stacks.""" diff --git a/assets/src/ba_data/python/bastd/activity/coopjoin.py b/assets/src/ba_data/python/bastd/activity/coopjoin.py index 1bb614a4..9c44baa9 100644 --- a/assets/src/ba_data/python/bastd/activity/coopjoin.py +++ b/assets/src/ba_data/python/bastd/activity/coopjoin.py @@ -11,7 +11,7 @@ import ba from ba.internal import JoinActivity if TYPE_CHECKING: - from typing import Any, Dict, List, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class CoopJoinActivity(JoinActivity): @@ -54,7 +54,7 @@ class CoopJoinActivity(JoinActivity): ControlsGuide(delay=1.0).autoretain() def _on_got_scores_to_beat(self, - scores: Optional[List[Dict[str, Any]]]) -> None: + scores: Optional[list[dict[str, Any]]]) -> None: # pylint: disable=too-many-locals # pylint: disable=too-many-statements from efro.util import asserttype diff --git a/assets/src/ba_data/python/bastd/activity/coopscore.py b/assets/src/ba_data/python/bastd/activity/coopscore.py index dc201f55..9df3badd 100644 --- a/assets/src/ba_data/python/bastd/activity/coopscore.py +++ b/assets/src/ba_data/python/bastd/activity/coopscore.py @@ -14,7 +14,7 @@ from bastd.actor.text import Text from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Optional, Tuple, List, Dict, Any, Sequence + from typing import Optional, Any, Sequence from bastd.ui.store.button import StoreButton from bastd.ui.league.rankbutton import LeagueRankButton @@ -96,7 +96,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._game_config_str: Optional[str] = None # Ui bits. - self._corner_button_offs: Optional[Tuple[float, float]] = None + self._corner_button_offs: Optional[tuple[float, float]] = None self._league_rank_button: Optional[LeagueRankButton] = None self._store_button_instance: Optional[StoreButton] = None self._restart_button: Optional[ba.Widget] = None @@ -110,7 +110,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._is_more_levels: Optional[bool] = None self._next_level_name: Optional[str] = None self._show_friend_scores: Optional[bool] = None - self._show_info: Optional[Dict[str, Any]] = None + self._show_info: Optional[dict[str, Any]] = None self._name_str: Optional[str] = None self._friends_loading_status: Optional[ba.Actor] = None self._score_loading_status: Optional[ba.Actor] = None @@ -124,7 +124,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): self._allow_server_transition = False self._server_transitioning: Optional[bool] = None - self._playerinfos: List[ba.PlayerInfo] = settings['playerinfos'] + self._playerinfos: list[ba.PlayerInfo] = settings['playerinfos'] assert isinstance(self._playerinfos, list) assert (isinstance(i, ba.PlayerInfo) for i in self._playerinfos) @@ -831,7 +831,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): scale = 0.65 elif p_count == 4: scale = 0.5 - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(display_count): times.insert(random.randrange(0, len(times) + 1), @@ -929,7 +929,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): 'loop': False })).autoretain() - def _got_friend_score_results(self, results: Optional[List[Any]]) -> None: + def _got_friend_score_results(self, results: Optional[list[Any]]) -> None: # FIXME: tidy this up # pylint: disable=too-many-locals @@ -990,7 +990,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): while len(results) < 5: results.append([0, '-', False]) results = results[:5] - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(len(results)): times.insert(random.randrange(0, len(times) + 1), @@ -1044,7 +1044,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): transition=Text.Transition.IN_RIGHT, transition_delay=tdelay2).autoretain() - def _got_score_results(self, results: Optional[Dict[str, Any]]) -> None: + def _got_score_results(self, results: Optional[dict[str, Any]]) -> None: # FIXME: tidy this up # pylint: disable=too-many-locals @@ -1142,7 +1142,7 @@ class CoopScoreScreen(ba.Activity[ba.Player, ba.Team]): while len(self._show_info['tops']) < 10: self._show_info['tops'].append([0, '-']) - times: List[Tuple[float, float]] = [] + times: list[tuple[float, float]] = [] for i in range(len(self._show_info['tops'])): times.insert( random.randrange(0, diff --git a/assets/src/ba_data/python/bastd/activity/drawscore.py b/assets/src/ba_data/python/bastd/activity/drawscore.py index c12b82b7..38109f7b 100644 --- a/assets/src/ba_data/python/bastd/activity/drawscore.py +++ b/assets/src/ba_data/python/bastd/activity/drawscore.py @@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Any, Dict + pass class DrawScoreScreenActivity(MultiTeamScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/dualteamscore.py b/assets/src/ba_data/python/bastd/activity/dualteamscore.py index b031bb80..aae7fdeb 100644 --- a/assets/src/ba_data/python/bastd/activity/dualteamscore.py +++ b/assets/src/ba_data/python/bastd/activity/dualteamscore.py @@ -11,7 +11,7 @@ from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity from bastd.actor.zoomtext import ZoomText if TYPE_CHECKING: - from typing import Any, Dict + pass class TeamVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py index 10150580..0aab7144 100644 --- a/assets/src/ba_data/python/bastd/activity/freeforallvictory.py +++ b/assets/src/ba_data/python/bastd/activity/freeforallvictory.py @@ -10,7 +10,7 @@ import ba from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity if TYPE_CHECKING: - from typing import Any, Dict, Optional, Set, Tuple + from typing import Any, Optional class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): @@ -71,7 +71,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): scale=1.2, x_offset=-110.0) - sound_times: Set[float] = set() + sound_times: set[float] = set() def _scoretxt(text: str, x_offs: float, @@ -260,7 +260,7 @@ class FreeForAllVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): v_offs -= spacing def _safe_animate(self, node: Optional[ba.Node], attr: str, - keys: Dict[float, float]) -> None: + keys: dict[float, float]) -> None: """Run an animation on a node if the node still exists.""" if node: ba.animate(node, attr, keys) diff --git a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py index 9c278590..a1a2586e 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamjoin.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamjoin.py @@ -11,7 +11,7 @@ from ba.internal import JoinActivity from bastd.actor.text import Text if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Optional class MultiTeamJoinActivity(JoinActivity): diff --git a/assets/src/ba_data/python/bastd/activity/multiteamscore.py b/assets/src/ba_data/python/bastd/activity/multiteamscore.py index ba87a616..3701ff89 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamscore.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamscore.py @@ -11,7 +11,7 @@ from bastd.actor.text import Text from bastd.actor.image import Image if TYPE_CHECKING: - from typing import Any, Dict, Optional, Union + from typing import Optional, Union class MultiTeamScoreScreenActivity(ScoreScreenActivity): diff --git a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py index 9acc7846..061ad68f 100644 --- a/assets/src/ba_data/python/bastd/activity/multiteamvictory.py +++ b/assets/src/ba_data/python/bastd/activity/multiteamvictory.py @@ -10,7 +10,7 @@ import ba from bastd.activity.multiteamscore import MultiTeamScoreScreenActivity if TYPE_CHECKING: - from typing import Any, Dict, List, Tuple, Optional + from typing import Optional class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): @@ -51,7 +51,7 @@ class TeamSeriesVictoryScoreScreenActivity(MultiTeamScoreScreenActivity): ba.timer(4.6, ba.Call(ba.playsound, self._score_display_sound)) # Score / Name / Player-record. - player_entries: List[Tuple[int, str, ba.PlayerRecord]] = [] + player_entries: list[tuple[int, str, ba.PlayerRecord]] = [] # Note: for ffa, exclude players who haven't entered the game yet. if self._is_ffa: diff --git a/assets/src/ba_data/python/bastd/actor/bomb.py b/assets/src/ba_data/python/bastd/actor/bomb.py index 99d7dd12..1c86f1fa 100644 --- a/assets/src/ba_data/python/bastd/actor/bomb.py +++ b/assets/src/ba_data/python/bastd/actor/bomb.py @@ -14,7 +14,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Sequence, Optional, Callable, List, Tuple, Type + from typing import Any, Sequence, Optional, Callable PlayerType = TypeVar('PlayerType', bound='ba.Player') @@ -693,7 +693,7 @@ class Bomb(ba.Actor): elif self.bomb_type == 'tnt': self.blast_radius *= 1.45 - self._explode_callbacks: List[Callable[[Bomb, Blast], Any]] = [] + self._explode_callbacks: list[Callable[[Bomb, Blast], Any]] = [] # The player this came from. self._source_player = source_player @@ -716,7 +716,7 @@ class Bomb(ba.Actor): # since players carrying those things and thus touching footing # objects will think they're on solid ground.. perhaps we don't # wanna add this even in the tnt case? - materials: Tuple[ba.Material, ...] + materials: tuple[ba.Material, ...] if self.bomb_type == 'tnt': materials = (factory.bomb_material, shared.footing_material, shared.object_material) @@ -847,7 +847,7 @@ class Bomb(ba.Actor): }) def get_source_player( - self, playertype: Type[PlayerType]) -> Optional[PlayerType]: + self, playertype: type[PlayerType]) -> Optional[PlayerType]: """Return the source-player if one exists and is the provided type.""" player: Any = self._source_player return (player if isinstance(player, playertype) and player.exists() diff --git a/assets/src/ba_data/python/bastd/actor/controlsguide.py b/assets/src/ba_data/python/bastd/actor/controlsguide.py index db0d8cee..70279a9e 100644 --- a/assets/src/ba_data/python/bastd/actor/controlsguide.py +++ b/assets/src/ba_data/python/bastd/actor/controlsguide.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class ControlsGuide(ba.Actor): @@ -24,7 +24,7 @@ class ControlsGuide(ba.Actor): """ def __init__(self, - position: Tuple[float, float] = (390.0, 120.0), + position: tuple[float, float] = (390.0, 120.0), scale: float = 1.0, delay: float = 0.0, lifespan: float = None, @@ -57,8 +57,8 @@ class ControlsGuide(ba.Actor): self._update_timer: Optional[ba.Timer] = None self._title_text: Optional[ba.Node] clr: Sequence[float] - extra_pos_1: Optional[Tuple[float, float]] - extra_pos_2: Optional[Tuple[float, float]] + extra_pos_1: Optional[tuple[float, float]] + extra_pos_2: Optional[tuple[float, float]] if ba.app.iircade_mode: xtweak = 0.2 ytweak = 0.2 diff --git a/assets/src/ba_data/python/bastd/actor/image.py b/assets/src/ba_data/python/bastd/actor/image.py index 2db08a1e..915ea44b 100644 --- a/assets/src/ba_data/python/bastd/actor/image.py +++ b/assets/src/ba_data/python/bastd/actor/image.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, Union, Dict, Optional + from typing import Any, Sequence, Union, Optional class Image(ba.Actor): @@ -33,13 +33,13 @@ class Image(ba.Actor): BOTTOM_CENTER = 'bottomCenter' def __init__(self, - texture: Union[ba.Texture, Dict[str, Any]], - position: Tuple[float, float] = (0, 0), + texture: Union[ba.Texture, dict[str, Any]], + position: tuple[float, float] = (0, 0), transition: Optional[Transition] = None, transition_delay: float = 0.0, attach: Attach = Attach.CENTER, color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), - scale: Tuple[float, float] = (100.0, 100.0), + scale: tuple[float, float] = (100.0, 100.0), transition_out_delay: float = None, model_opaque: ba.Model = None, model_transparent: ba.Model = None, diff --git a/assets/src/ba_data/python/bastd/actor/playerspaz.py b/assets/src/ba_data/python/bastd/actor/playerspaz.py index b77aa8a4..7969dc75 100644 --- a/assets/src/ba_data/python/bastd/actor/playerspaz.py +++ b/assets/src/ba_data/python/bastd/actor/playerspaz.py @@ -10,7 +10,7 @@ import ba from bastd.actor.spaz import Spaz if TYPE_CHECKING: - from typing import Any, Sequence, Tuple, Optional, Type, Literal + from typing import Any, Sequence, Optional, Literal PlayerType = TypeVar('PlayerType', bound=ba.Player) TeamType = TypeVar('TeamType', bound=ba.Team) @@ -65,7 +65,7 @@ class PlayerSpaz(Spaz): powerups_expire=powerups_expire) self.last_player_attacked_by: Optional[ba.Player] = None self.last_attacked_time = 0.0 - self.last_attacked_type: Optional[Tuple[str, str]] = None + self.last_attacked_type: Optional[tuple[str, str]] = None self.held_count = 0 self.last_player_held_by: Optional[ba.Player] = None self._player = player @@ -75,17 +75,17 @@ class PlayerSpaz(Spaz): @overload def getplayer(self, - playertype: Type[PlayerType], + playertype: type[PlayerType], doraise: Literal[False] = False) -> Optional[PlayerType]: ... @overload - def getplayer(self, playertype: Type[PlayerType], + def getplayer(self, playertype: type[PlayerType], doraise: Literal[True]) -> PlayerType: ... def getplayer(self, - playertype: Type[PlayerType], + playertype: type[PlayerType], doraise: bool = False) -> Optional[PlayerType]: """Get the ba.Player associated with this Spaz. diff --git a/assets/src/ba_data/python/bastd/actor/powerupbox.py b/assets/src/ba_data/python/bastd/actor/powerupbox.py index aac89f07..bed2de5d 100644 --- a/assets/src/ba_data/python/bastd/actor/powerupbox.py +++ b/assets/src/ba_data/python/bastd/actor/powerupbox.py @@ -11,7 +11,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import List, Any, Optional, Sequence + from typing import Any, Optional, Sequence DEFAULT_POWERUP_INTERVAL = 8.0 @@ -133,14 +133,14 @@ class PowerupBoxFactory: actions=('impact_sound', self.drop_sound, 0.5, 0.1), ) - self._powerupdist: List[str] = [] + self._powerupdist: list[str] = [] for powerup, freq in get_default_powerup_distribution(): for _i in range(int(freq)): self._powerupdist.append(powerup) def get_random_powerup_type(self, forcetype: str = None, - excludetypes: List[str] = None) -> str: + excludetypes: list[str] = None) -> str: """Returns a random powerup type (string). See ba.Powerup.poweruptype for available type values. diff --git a/assets/src/ba_data/python/bastd/actor/respawnicon.py b/assets/src/ba_data/python/bastd/actor/respawnicon.py index 504a8e66..66c8bf16 100644 --- a/assets/src/ba_data/python/bastd/actor/respawnicon.py +++ b/assets/src/ba_data/python/bastd/actor/respawnicon.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Optional, Dict, Tuple + from typing import Optional class RespawnIcon: @@ -116,7 +116,7 @@ class RespawnIcon: """Is this icon still visible?""" return self._visible - def _get_context(self, player: ba.Player) -> Tuple[bool, float, Dict]: + def _get_context(self, player: ba.Player) -> tuple[bool, float, dict]: """Return info on where we should be shown and stored.""" activity = ba.getactivity() diff --git a/assets/src/ba_data/python/bastd/actor/scoreboard.py b/assets/src/ba_data/python/bastd/actor/scoreboard.py index 54e13129..8432946d 100644 --- a/assets/src/ba_data/python/bastd/actor/scoreboard.py +++ b/assets/src/ba_data/python/bastd/actor/scoreboard.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Optional, Sequence, Dict, Union + from typing import Any, Optional, Sequence, Union class _Entry: @@ -334,7 +334,7 @@ class Scoreboard: show up on boards if provided. """ self._flat_tex = ba.gettexture('null') - self._entries: Dict[int, _Entry] = {} + self._entries: dict[int, _Entry] = {} self._label = label self.score_split = score_split diff --git a/assets/src/ba_data/python/bastd/actor/spaz.py b/assets/src/ba_data/python/bastd/actor/spaz.py index 064b90b0..45931bb1 100644 --- a/assets/src/ba_data/python/bastd/actor/spaz.py +++ b/assets/src/ba_data/python/bastd/actor/spaz.py @@ -15,8 +15,7 @@ from bastd.actor.spazfactory import SpazFactory from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import (Any, Sequence, Optional, Dict, List, Union, Callable, - Tuple, Set) + from typing import Any, Sequence, Optional, Union, Callable from bastd.actor.spazfactory import SpazFactory POWERUP_WEAR_OFF_TIME = 20000 @@ -104,7 +103,7 @@ class Spaz(ba.Actor): self._hockey = activity.map.is_hockey else: self._hockey = False - self._punched_nodes: Set[ba.Node] = set() + self._punched_nodes: set[ba.Node] = set() self._cursed = False self._connected_to_player: Optional[ba.Player] = None materials = [ @@ -203,9 +202,9 @@ class Spaz(ba.Actor): self.last_run_time_ms = -9999 self._last_run_value = 0.0 self.last_bomb_time_ms = -9999 - self._turbo_filter_times: Dict[str, int] = {} + self._turbo_filter_times: dict[str, int] = {} self._turbo_filter_time_bucket = 0 - self._turbo_filter_counts: Dict[str, int] = {} + self._turbo_filter_counts: dict[str, int] = {} self.frozen = False self.shattered = False self._last_hit_time: Optional[int] = None @@ -213,7 +212,7 @@ class Spaz(ba.Actor): self._bomb_held = False if self.default_shields: self.equip_shields() - self._dropped_bomb_callbacks: List[Callable[[Spaz, ba.Actor], + self._dropped_bomb_callbacks: list[Callable[[Spaz, ba.Actor], Any]] = [] self._score_text: Optional[ba.Node] = None @@ -561,7 +560,7 @@ class Spaz(ba.Actor): def on_punched(self, damage: int) -> None: """Called when this spaz gets punched.""" - def get_death_points(self, how: ba.DeathType) -> Tuple[int, int]: + def get_death_points(self, how: ba.DeathType) -> tuple[int, int]: """Get the points awarded for killing this spaz.""" del how # Unused. num_hits = float(max(1, self._num_times_hit)) diff --git a/assets/src/ba_data/python/bastd/actor/spazappearance.py b/assets/src/ba_data/python/bastd/actor/spazappearance.py index 166b1f84..bc229407 100644 --- a/assets/src/ba_data/python/bastd/actor/spazappearance.py +++ b/assets/src/ba_data/python/bastd/actor/spazappearance.py @@ -9,10 +9,10 @@ import _ba import ba if TYPE_CHECKING: - from typing import List, Optional, Tuple + from typing import Optional -def get_appearances(include_locked: bool = False) -> List[str]: +def get_appearances(include_locked: bool = False) -> list[str]: """Get the list of available spaz appearances.""" # pylint: disable=too-many-statements # pylint: disable=too-many-branches @@ -104,15 +104,15 @@ class Appearance: self.upper_leg_model = '' self.lower_leg_model = '' self.toes_model = '' - self.jump_sounds: List[str] = [] - self.attack_sounds: List[str] = [] - self.impact_sounds: List[str] = [] - self.death_sounds: List[str] = [] - self.pickup_sounds: List[str] = [] - self.fall_sounds: List[str] = [] + self.jump_sounds: list[str] = [] + self.attack_sounds: list[str] = [] + self.impact_sounds: list[str] = [] + self.death_sounds: list[str] = [] + self.pickup_sounds: list[str] = [] + self.fall_sounds: list[str] = [] self.style = 'spaz' - self.default_color: Optional[Tuple[float, float, float]] = None - self.default_highlight: Optional[Tuple[float, float, float]] = None + self.default_color: Optional[tuple[float, float, float]] = None + self.default_highlight: Optional[tuple[float, float, float]] = None def register_appearances() -> None: diff --git a/assets/src/ba_data/python/bastd/actor/spazbot.py b/assets/src/ba_data/python/bastd/actor/spazbot.py index ac950ef6..9d4d92ec 100644 --- a/assets/src/ba_data/python/bastd/actor/spazbot.py +++ b/assets/src/ba_data/python/bastd/actor/spazbot.py @@ -13,7 +13,7 @@ import ba from bastd.actor.spaz import Spaz if TYPE_CHECKING: - from typing import Any, Optional, List, Tuple, Sequence, Type, Callable + from typing import Any, Optional, Sequence, Callable from bastd.actor.flag import Flag LITE_BOT_COLOR = (1.2, 0.9, 0.2) @@ -125,7 +125,7 @@ class SpazBot(Spaz): self._map = weakref.ref(activity.map) self.last_player_attacked_by: Optional[ba.Player] = None self.last_attacked_time = 0.0 - self.last_attacked_type: Optional[Tuple[str, str]] = None + self.last_attacked_type: Optional[tuple[str, str]] = None self.target_point_default: Optional[ba.Vec3] = None self.held_count = 0 self.last_player_held_by: Optional[ba.Player] = None @@ -141,7 +141,7 @@ class SpazBot(Spaz): self._throw_release_time: Optional[float] = None self._have_dropped_throw_bomb: Optional[bool] = None - self._player_pts: Optional[List[Tuple[ba.Vec3, ba.Vec3]]] = None + self._player_pts: Optional[list[tuple[ba.Vec3, ba.Vec3]]] = None # These cooldowns didn't exist when these bots were calibrated, # so take them out of the equation. @@ -161,7 +161,7 @@ class SpazBot(Spaz): return mval def _get_target_player_pt( - self) -> Tuple[Optional[ba.Vec3], Optional[ba.Vec3]]: + self) -> tuple[Optional[ba.Vec3], Optional[ba.Vec3]]: """Returns the position and velocity of our target. Both values will be None in the case of no target. @@ -189,7 +189,7 @@ class SpazBot(Spaz): ba.Vec3(closest_vel[0], closest_vel[1], closest_vel[2])) return None, None - def set_player_points(self, pts: List[Tuple[ba.Vec3, ba.Vec3]]) -> None: + def set_player_points(self, pts: list[tuple[ba.Vec3, ba.Vec3]]) -> None: """Provide the spaz-bot with the locations of its enemies.""" self._player_pts = pts @@ -882,7 +882,7 @@ class SpazBotSet: self._bot_list_count = 5 self._bot_add_list = 0 self._bot_update_list = 0 - self._bot_lists: List[List[SpazBot]] = [ + self._bot_lists: list[list[SpazBot]] = [ [] for _ in range(self._bot_list_count) ] self._spawn_sound = ba.getsound('spawn') @@ -894,7 +894,7 @@ class SpazBotSet: self.clear() def spawn_bot(self, - bot_type: Type[SpazBot], + bot_type: type[SpazBot], pos: Sequence[float], spawn_time: float = 3.0, on_spawn_call: Callable[[SpazBot], Any] = None) -> None: @@ -907,7 +907,7 @@ class SpazBotSet: on_spawn_call)) self._spawning_count += 1 - def _spawn_bot(self, bot_type: Type[SpazBot], pos: Sequence[float], + def _spawn_bot(self, bot_type: type[SpazBot], pos: Sequence[float], on_spawn_call: Optional[Callable[[SpazBot], Any]]) -> None: spaz = bot_type() ba.playsound(self._spawn_sound, position=pos) @@ -925,9 +925,9 @@ class SpazBotSet: return (self._spawning_count > 0 or any(any(b.is_alive() for b in l) for l in self._bot_lists)) - def get_living_bots(self) -> List[SpazBot]: + def get_living_bots(self) -> list[SpazBot]: """Get the living bots in the set.""" - bots: List[SpazBot] = [] + bots: list[SpazBot] = [] for botlist in self._bot_lists: for bot in botlist: if bot.is_alive(): diff --git a/assets/src/ba_data/python/bastd/actor/spazfactory.py b/assets/src/ba_data/python/bastd/actor/spazfactory.py index 7363ec43..ed06d72e 100644 --- a/assets/src/ba_data/python/bastd/actor/spazfactory.py +++ b/assets/src/ba_data/python/bastd/actor/spazfactory.py @@ -11,7 +11,7 @@ from bastd.gameutils import SharedObjects import _ba if TYPE_CHECKING: - from typing import Any, Dict + from typing import Any class SpazFactory: @@ -206,7 +206,7 @@ class SpazFactory: actions=('modify_node_collision', 'collide', False), ) - self.spaz_media: Dict[str, Any] = {} + self.spaz_media: dict[str, Any] = {} # Lets load some basic rules. # (allows them to be tweaked from the master server) @@ -227,7 +227,7 @@ class SpazFactory: """ return ba.app.spaz_appearances[character].style - def get_media(self, character: str) -> Dict[str, Any]: + def get_media(self, character: str) -> dict[str, Any]: """Return the set of media used by this variant of spaz.""" char = ba.app.spaz_appearances[character] if character not in self.spaz_media: diff --git a/assets/src/ba_data/python/bastd/actor/text.py b/assets/src/ba_data/python/bastd/actor/text.py index 96e3be58..7b84d0d5 100644 --- a/assets/src/ba_data/python/bastd/actor/text.py +++ b/assets/src/ba_data/python/bastd/actor/text.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Union, Tuple, Sequence, Optional + from typing import Any, Union, Sequence, Optional class Text(ba.Actor): @@ -50,7 +50,7 @@ class Text(ba.Actor): def __init__(self, text: Union[str, ba.Lstr], - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), h_align: HAlign = HAlign.LEFT, v_align: VAlign = VAlign.NONE, color: Sequence[float] = (1.0, 1.0, 1.0, 1.0), diff --git a/assets/src/ba_data/python/bastd/actor/zoomtext.py b/assets/src/ba_data/python/bastd/actor/zoomtext.py index 4c0b2c9c..5288bb66 100644 --- a/assets/src/ba_data/python/bastd/actor/zoomtext.py +++ b/assets/src/ba_data/python/bastd/actor/zoomtext.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Union, Tuple, Sequence + from typing import Any, Union, Sequence class ZoomText(ba.Actor): @@ -23,8 +23,8 @@ class ZoomText(ba.Actor): def __init__(self, text: Union[str, ba.Lstr], - position: Tuple[float, float] = (0.0, 0.0), - shiftposition: Tuple[float, float] = None, + position: tuple[float, float] = (0.0, 0.0), + shiftposition: tuple[float, float] = None, shiftdelay: float = None, lifespan: float = None, flash: bool = True, @@ -171,7 +171,7 @@ class ZoomText(ba.Actor): return None return super().handlemessage(msg) - def _jitter(self, position: Tuple[float, float], + def _jitter(self, position: tuple[float, float], jitter_amount: float) -> None: if not self.node: return @@ -187,8 +187,8 @@ class ZoomText(ba.Actor): ba.animate(cmb, attr, keys, loop=True) cmb.connectattr('output', self.node, 'position') - def _shift(self, position1: Tuple[float, float], - position2: Tuple[float, float]) -> None: + def _shift(self, position1: tuple[float, float], + position2: tuple[float, float]) -> None: if not self.node: return cmb = ba.newnode('combine', owner=self.node, attrs={'size': 2}) diff --git a/assets/src/ba_data/python/bastd/appdelegate.py b/assets/src/ba_data/python/bastd/appdelegate.py index 9ae96c62..6a7d2776 100644 --- a/assets/src/ba_data/python/bastd/appdelegate.py +++ b/assets/src/ba_data/python/bastd/appdelegate.py @@ -8,15 +8,15 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Type, Any, Dict, Callable, Optional + from typing import Any, Callable, Optional class AppDelegate(ba.AppDelegate): """Defines handlers for high level app functionality.""" def create_default_game_settings_ui( - self, gameclass: Type[ba.GameActivity], - sessiontype: Type[ba.Session], settings: Optional[dict], + self, gameclass: type[ba.GameActivity], + sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], Any]) -> None: """(internal)""" diff --git a/assets/src/ba_data/python/bastd/game/assault.py b/assets/src/ba_data/python/bastd/game/assault.py index 44dc8ca0..6389b4bd 100644 --- a/assets/src/ba_data/python/bastd/game/assault.py +++ b/assets/src/ba_data/python/bastd/game/assault.py @@ -17,7 +17,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Sequence, Union + from typing import Any, Sequence, Union class Player(ba.Player['Team']): @@ -72,11 +72,11 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('team_flag') def __init__(self, settings: dict): @@ -84,7 +84,7 @@ class AssaultGame(ba.TeamGameActivity[Player, Team]): self._scoreboard = Scoreboard() self._last_score_time = 0.0 self._score_sound = ba.getsound('score') - self._base_region_materials: Dict[int, ba.Material] = {} + self._base_region_materials: dict[int, ba.Material] = {} self._epic_mode = bool(settings['Epic Mode']) self._score_to_win = int(settings['Score to Win']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/capturetheflag.py b/assets/src/ba_data/python/bastd/game/capturetheflag.py index 638d2d3b..0e910620 100644 --- a/assets/src/ba_data/python/bastd/game/capturetheflag.py +++ b/assets/src/ba_data/python/bastd/game/capturetheflag.py @@ -16,7 +16,7 @@ from bastd.actor.flag import (FlagFactory, Flag, FlagPickedUpMessage, FlagDroppedMessage, FlagDiedMessage) if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Sequence, Union, Optional + from typing import Any, Sequence, Union, Optional class CTFFlag(Flag): @@ -132,11 +132,11 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('team_flag') def __init__(self, settings: dict): @@ -491,10 +491,10 @@ class CaptureTheFlagGame(ba.TeamGameActivity[Player, Team]): player = spaz.getplayer(Player, True) team: Team = player.team player.touching_own_flag = 0 - no_physical_mats: List[ba.Material] = [ + no_physical_mats: list[ba.Material] = [ team.spaz_material_no_flag_physical ] - no_collide_mats: List[ba.Material] = [ + no_collide_mats: list[ba.Material] = [ team.spaz_material_no_flag_collide ] diff --git a/assets/src/ba_data/python/bastd/game/chosenone.py b/assets/src/ba_data/python/bastd/game/chosenone.py index 465dec97..9f5e3315 100644 --- a/assets/src/ba_data/python/bastd/game/chosenone.py +++ b/assets/src/ba_data/python/bastd/game/chosenone.py @@ -16,7 +16,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class Player(ba.Player['Team']): @@ -81,7 +81,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): scoreconfig = ba.ScoreConfig(label='Time Held') @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('keep_away') def __init__(self, settings: dict): @@ -89,7 +89,7 @@ class ChosenOneGame(ba.TeamGameActivity[Player, Team]): self._scoreboard = Scoreboard() self._chosen_one_player: Optional[Player] = None self._swipsound = ba.getsound('swip') - self._countdownsounds: Dict[int, ba.Sound] = { + self._countdownsounds: dict[int, ba.Sound] = { 10: ba.getsound('announceTen'), 9: ba.getsound('announceNine'), 8: ba.getsound('announceEight'), diff --git a/assets/src/ba_data/python/bastd/game/conquest.py b/assets/src/ba_data/python/bastd/game/conquest.py index 7f41819b..93bb279d 100644 --- a/assets/src/ba_data/python/bastd/game/conquest.py +++ b/assets/src/ba_data/python/bastd/game/conquest.py @@ -17,7 +17,7 @@ from bastd.actor.playerspaz import PlayerSpaz from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Optional, Type, List, Dict, Sequence, Union + from typing import Any, Optional, Sequence, Union from bastd.actor.respawnicon import RespawnIcon @@ -105,11 +105,11 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]): ] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('conquest') def __init__(self, settings: dict): @@ -119,7 +119,7 @@ class ConquestGame(ba.TeamGameActivity[Player, Team]): self._score_sound = ba.getsound('score') self._swipsound = ba.getsound('swip') self._extraflagmat = ba.Material() - self._flags: List[ConquestFlag] = [] + self._flags: list[ConquestFlag] = [] self._epic_mode = bool(settings['Epic Mode']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/deathmatch.py b/assets/src/ba_data/python/bastd/game/deathmatch.py index f91c7aff..ddfa0d46 100644 --- a/assets/src/ba_data/python/bastd/game/deathmatch.py +++ b/assets/src/ba_data/python/bastd/game/deathmatch.py @@ -14,7 +14,7 @@ from bastd.actor.playerspaz import PlayerSpaz from bastd.actor.scoreboard import Scoreboard if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Tuple, Union, Sequence, Optional + from typing import Any, Union, Sequence, Optional class Player(ba.Player['Team']): @@ -40,7 +40,7 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting( 'Kills to Win Per Player', @@ -86,12 +86,12 @@ class DeathMatchGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('melee') def __init__(self, settings: dict): diff --git a/assets/src/ba_data/python/bastd/game/easteregghunt.py b/assets/src/ba_data/python/bastd/game/easteregghunt.py index 2c5b9b02..d7f3655b 100644 --- a/assets/src/ba_data/python/bastd/game/easteregghunt.py +++ b/assets/src/ba_data/python/bastd/game/easteregghunt.py @@ -20,7 +20,7 @@ from bastd.actor.respawnicon import RespawnIcon from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Type, Dict, List, Tuple, Optional + from typing import Any, Optional class Player(ba.Player['Team']): @@ -49,12 +49,12 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): # We're currently hard-coded for one map. @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Tower D'] # We support teams, free-for-all, and co-op sessions. @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.CoopSession) or issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @@ -75,7 +75,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): self.egg_material.add_actions( conditions=('they_have_material', shared.player_material), actions=(('call', 'at_connect', self._on_egg_player_collide), )) - self._eggs: List[Egg] = [] + self._eggs: list[Egg] = [] self._update_timer: Optional[ba.Timer] = None self._countdown: Optional[OnScreenCountdown] = None self._bots: Optional[SpazBotSet] = None @@ -224,7 +224,7 @@ class EasterEggHuntGame(ba.TeamGameActivity[Player, Team]): class Egg(ba.Actor): """A lovely egg that can be picked up for points.""" - def __init__(self, position: Tuple[float, float, float] = (0.0, 1.0, 0.0)): + def __init__(self, position: tuple[float, float, float] = (0.0, 1.0, 0.0)): super().__init__() activity = self.activity assert isinstance(activity, EasterEggHuntGame) diff --git a/assets/src/ba_data/python/bastd/game/elimination.py b/assets/src/ba_data/python/bastd/game/elimination.py index dd95a469..a0df7705 100644 --- a/assets/src/ba_data/python/bastd/game/elimination.py +++ b/assets/src/ba_data/python/bastd/game/elimination.py @@ -14,8 +14,7 @@ from bastd.actor.spazfactory import SpazFactory from bastd.actor.scoreboard import Scoreboard if TYPE_CHECKING: - from typing import (Any, Tuple, Dict, Type, List, Sequence, Optional, - Union) + from typing import Any, Sequence, Optional, Union class Icon(ba.Actor): @@ -23,7 +22,7 @@ class Icon(ba.Actor): def __init__(self, player: Player, - position: Tuple[float, float], + position: tuple[float, float], scale: float, show_lives: bool = True, show_death: bool = True, @@ -83,7 +82,7 @@ class Icon(ba.Actor): }) self.set_position_and_scale(position, scale) - def set_position_and_scale(self, position: Tuple[float, float], + def set_position_and_scale(self, position: tuple[float, float], scale: float) -> None: """(Re)position the icon.""" assert self.node @@ -156,7 +155,7 @@ class Player(ba.Player['Team']): def __init__(self) -> None: self.lives = 0 - self.icons: List[Icon] = [] + self.icons: list[Icon] = [] class Team(ba.Team[Player]): @@ -164,7 +163,7 @@ class Team(ba.Team[Player]): def __init__(self) -> None: self.survival_seconds: Optional[int] = None - self.spawn_order: List[Player] = [] + self.spawn_order: list[Player] = [] # ba_meta export game @@ -183,7 +182,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting( 'Lives Per Player', @@ -224,12 +223,12 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('melee') def __init__(self, settings: dict): @@ -421,7 +420,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): if living_player: assert living_player_pos is not None player_pos = ba.Vec3(living_player_pos) - points: List[Tuple[float, ba.Vec3]] = [] + points: list[tuple[float, ba.Vec3]] = [] for team in self.teams: start_pos = ba.Vec3(self.map.get_start_position(team.id)) points.append( @@ -539,7 +538,7 @@ class EliminationGame(ba.TeamGameActivity[Player, Team]): if len(self._get_living_teams()) < 2: self._round_end_timer = ba.Timer(0.5, self.end_game) - def _get_living_teams(self) -> List[Team]: + def _get_living_teams(self) -> list[Team]: return [ team for team in self.teams if len(team.players) > 0 and any(player.lives > 0 diff --git a/assets/src/ba_data/python/bastd/game/football.py b/assets/src/ba_data/python/bastd/game/football.py index 8773e272..bcddc8bc 100644 --- a/assets/src/ba_data/python/bastd/game/football.py +++ b/assets/src/ba_data/python/bastd/game/football.py @@ -26,7 +26,7 @@ from bastd.actor.spazbot import (SpazBotDiedMessage, SpazBotPunchedMessage, StickyBot, ExplodeyBot) if TYPE_CHECKING: - from typing import Any, List, Type, Dict, Sequence, Optional, Union + from typing import Any, Sequence, Optional, Union from bastd.actor.spaz import Spaz from bastd.actor.spazbot import SpazBot @@ -110,12 +110,12 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.FOOTBALL @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We only support two-team play. return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('football') def __init__(self, settings: dict): @@ -137,7 +137,7 @@ class FootballTeamGame(ba.TeamGameActivity[Player, Team]): ('call', 'at_connect', self._handle_score), )) self._flag_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: List[ba.NodeActor] = [] + self._score_regions: list[ba.NodeActor] = [] self._flag: Optional[FootballFlag] = None self._flag_respawn_timer: Optional[ba.Timer] = None self._flag_respawn_light: Optional[ba.NodeActor] = None @@ -377,12 +377,12 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._player_has_punched = False self._scoreboard: Optional[Scoreboard] = None self._flag_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: List[ba.NodeActor] = [] - self._exclude_powerups: List[str] = [] + self._score_regions: list[ba.NodeActor] = [] + self._exclude_powerups: list[str] = [] self._have_tnt = False - self._bot_types_initial: Optional[List[Type[SpazBot]]] = None - self._bot_types_7: Optional[List[Type[SpazBot]]] = None - self._bot_types_14: Optional[List[Type[SpazBot]]] = None + self._bot_types_initial: Optional[list[type[SpazBot]]] = None + self._bot_types_7: Optional[list[type[SpazBot]]] = None + self._bot_types_14: Optional[list[type[SpazBot]]] = None self._bot_team: Optional[Team] = None self._starttime_ms: Optional[int] = None self._time_text: Optional[ba.NodeActor] = None @@ -436,9 +436,9 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): controlsguide.ControlsGuide(delay=3.0, lifespan=10.0, bright=True).autoretain() assert self.initialplayerinfos is not None - abot: Type[SpazBot] - bbot: Type[SpazBot] - cbot: Type[SpazBot] + abot: type[SpazBot] + bbot: type[SpazBot] + cbot: type[SpazBot] if self._preset in ['rookie', 'rookie_easy']: self._exclude_powerups = ['curse'] self._have_tnt = False @@ -467,7 +467,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._bot_types_initial = [ChargerBot] * len( self.initialplayerinfos) abot = (BrawlerBot if self._preset == 'pro' else BrawlerBotLite) - typed_bot_list: List[Type[SpazBot]] = [] + typed_bot_list: list[type[SpazBot]] = [] self._bot_types_7 = ( typed_bot_list + [abot] + [BomberBot] * (1 if len(self.initialplayerinfos) < 3 else 2)) @@ -479,7 +479,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): self._have_tnt = True abot = (BrawlerBotPro if self._preset == 'uber' else BrawlerBot) bbot = (TriggerBotPro if self._preset == 'uber' else TriggerBot) - typed_bot_list_2: List[Type[SpazBot]] = [] + typed_bot_list_2: list[type[SpazBot]] = [] self._bot_types_initial = (typed_bot_list_2 + [StickyBot] + [abot] * len(self.initialplayerinfos)) self._bot_types_7 = ( @@ -542,7 +542,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): for bottype in self._bot_types_initial: self._spawn_bot(bottype) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def _on_bot_spawn(self, spaz: SpazBot) -> None: @@ -550,7 +550,7 @@ class FootballCoopGame(ba.CoopGameActivity[Player, Team]): spaz.target_point_default = ba.Vec3(0, 0, 0) def _spawn_bot(self, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], immediate: bool = False) -> None: assert self._bot_team is not None pos = self.map.get_start_position(self._bot_team.id) diff --git a/assets/src/ba_data/python/bastd/game/hockey.py b/assets/src/ba_data/python/bastd/game/hockey.py index 0e988c05..7f47bf78 100644 --- a/assets/src/ba_data/python/bastd/game/hockey.py +++ b/assets/src/ba_data/python/bastd/game/hockey.py @@ -16,7 +16,7 @@ from bastd.actor.powerupbox import PowerupBoxFactory from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, Sequence, Dict, Type, List, Optional, Union + from typing import Any, Sequence, Optional, Union class PuckDiedMessage: @@ -36,7 +36,7 @@ class Puck(ba.Actor): # Spawn just above the provided point. self._spawn_pos = (position[0], position[1] + 1.0, position[2]) - self.last_players_to_touch: Dict[int, Player] = {} + self.last_players_to_touch: dict[int, Player] = {} self.scored = False assert activity is not None assert isinstance(activity, HockeyGame) @@ -141,11 +141,11 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.HOCKEY @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.DualTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('hockey') def __init__(self, settings: dict): @@ -199,7 +199,7 @@ class HockeyGame(ba.TeamGameActivity[Player, Team]): True), ('modify_part_collision', 'physical', False), ('call', 'at_connect', self._handle_score))) self._puck_spawn_pos: Optional[Sequence[float]] = None - self._score_regions: Optional[List[ba.NodeActor]] = None + self._score_regions: Optional[list[ba.NodeActor]] = None self._puck: Optional[Puck] = None self._score_to_win = int(settings['Score to Win']) self._time_limit = float(settings['Time Limit']) diff --git a/assets/src/ba_data/python/bastd/game/keepaway.py b/assets/src/ba_data/python/bastd/game/keepaway.py index 7810b2e6..263326a7 100644 --- a/assets/src/ba_data/python/bastd/game/keepaway.py +++ b/assets/src/ba_data/python/bastd/game/keepaway.py @@ -17,7 +17,7 @@ from bastd.actor.flag import (Flag, FlagDroppedMessage, FlagDiedMessage, FlagPickedUpMessage) if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class FlagState(Enum): @@ -81,12 +81,12 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.KEEP_AWAY @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession)) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('keep_away') def __init__(self, settings: dict): @@ -108,7 +108,7 @@ class KeepAwayGame(ba.TeamGameActivity[Player, Team]): } self._flag_spawn_pos: Optional[Sequence[float]] = None self._update_timer: Optional[ba.Timer] = None - self._holding_players: List[Player] = [] + self._holding_players: list[Player] = [] self._flag_state: Optional[FlagState] = None self._flag_light: Optional[ba.Node] = None self._scoring_team: Optional[Team] = None diff --git a/assets/src/ba_data/python/bastd/game/kingofthehill.py b/assets/src/ba_data/python/bastd/game/kingofthehill.py index 66726261..9194f5ac 100644 --- a/assets/src/ba_data/python/bastd/game/kingofthehill.py +++ b/assets/src/ba_data/python/bastd/game/kingofthehill.py @@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from weakref import ReferenceType - from typing import Any, Type, List, Dict, Optional, Sequence, Union + from typing import Any, Optional, Sequence, Union class FlagState(Enum): @@ -84,11 +83,11 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]): scoreconfig = ba.ScoreConfig(label='Time Held') @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.MultiTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('king_of_the_hill') def __init__(self, settings: dict): @@ -113,7 +112,7 @@ class KingOfTheHillGame(ba.TeamGameActivity[Player, Team]): self._flag_state: Optional[FlagState] = None self._flag: Optional[Flag] = None self._flag_light: Optional[ba.Node] = None - self._scoring_team: Optional[ReferenceType[Team]] = None + self._scoring_team: Optional[weakref.ref[Team]] = None self._hold_time = int(settings['Hold Time']) self._time_limit = float(settings['Time Limit']) self._flag_region_material = ba.Material() diff --git a/assets/src/ba_data/python/bastd/game/meteorshower.py b/assets/src/ba_data/python/bastd/game/meteorshower.py index 32c62c0d..e346160e 100644 --- a/assets/src/ba_data/python/bastd/game/meteorshower.py +++ b/assets/src/ba_data/python/bastd/game/meteorshower.py @@ -15,7 +15,7 @@ from bastd.actor.bomb import Bomb from bastd.actor.onscreentimer import OnScreenTimer if TYPE_CHECKING: - from typing import Any, Sequence, Optional, List, Dict, Type, Type + from typing import Any, Sequence, Optional class Player(ba.Player['Team']): @@ -50,12 +50,12 @@ class MeteorShowerGame(ba.TeamGameActivity[Player, Team]): # We're currently hard-coded for one map. @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Rampage'] # We support teams, free-for-all, and co-op sessions. @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return (issubclass(sessiontype, ba.DualTeamSession) or issubclass(sessiontype, ba.FreeForAllSession) or issubclass(sessiontype, ba.CoopSession)) diff --git a/assets/src/ba_data/python/bastd/game/ninjafight.py b/assets/src/ba_data/python/bastd/game/ninjafight.py index 37ba0215..13b6341f 100644 --- a/assets/src/ba_data/python/bastd/game/ninjafight.py +++ b/assets/src/ba_data/python/bastd/game/ninjafight.py @@ -15,7 +15,7 @@ from bastd.actor.spazbot import SpazBotSet, ChargerBot, SpazBotDiedMessage from bastd.actor.onscreentimer import OnScreenTimer if TYPE_CHECKING: - from typing import Any, Type, Dict, List, Optional + from typing import Any, Optional class Player(ba.Player['Team']): @@ -41,14 +41,14 @@ class NinjaFightGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.TO_THE_DEATH @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: # For now we're hard-coding spawn positions and whatnot # so we need to be sure to specify that we only support # a specific map. return ['Courtyard'] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We currently support Co-Op only. return issubclass(sessiontype, ba.CoopSession) diff --git a/assets/src/ba_data/python/bastd/game/onslaught.py b/assets/src/ba_data/python/bastd/game/onslaught.py index 9b8efe85..d56f3fac 100644 --- a/assets/src/ba_data/python/bastd/game/onslaught.py +++ b/assets/src/ba_data/python/bastd/game/onslaught.py @@ -28,21 +28,21 @@ from bastd.actor.spazbot import ( TriggerBotProShielded, BrawlerBotPro, BomberBotProShielded) if TYPE_CHECKING: - from typing import Any, Type, Dict, Optional, List, Tuple, Union, Sequence + from typing import Any, Optional, Union, Sequence from bastd.actor.spazbot import SpazBot @dataclass class Wave: """A wave of enemies.""" - entries: List[Union[Spawn, Spacing, Delay, None]] + entries: list[Union[Spawn, Spacing, Delay, None]] base_angle: float = 0.0 @dataclass class Spawn: """A bot spawn event in a wave.""" - bottype: Union[Type[SpazBot], str] + bottype: Union[type[SpazBot], str] point: Optional[Point] = None spacing: float = 5.0 @@ -123,7 +123,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): name = 'Onslaught' description = 'Defeat all enemies.' - tips: List[Union[str, ba.GameTip]] = [ + tips: list[Union[str, ba.GameTip]] = [ 'Hold any button to run.' ' (Trigger buttons work well if you have them)', 'Try tricking enemies into killing eachother or running off cliffs.', @@ -179,8 +179,8 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): self._dingsound = ba.getsound('dingSmall') self._dingsoundhigh = ba.getsound('dingSmallHigh') self._have_tnt = False - self._excluded_powerups: Optional[List[str]] = None - self._waves: List[Wave] = [] + self._excluded_powerups: Optional[list[str]] = None + self._waves: list[Wave] = [] self._tntspawner: Optional[TNTSpawner] = None self._bots: Optional[SpazBotSet] = None self._powerup_drop_timer: Optional[ba.Timer] = None @@ -538,10 +538,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): self._bots = SpazBotSet() ba.timer(4.0, self._start_updating_waves) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) - def _get_dist_grp_totals(self, grps: List[Any]) -> Tuple[int, int]: + def _get_dist_grp_totals(self, grps: list[Any]) -> tuple[int, int]: totalpts = 0 totaldudes = 0 for grp in grps: @@ -553,11 +553,11 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def _get_distribution(self, target_points: int, min_dudes: int, max_dudes: int, group_count: int, - max_level: int) -> List[List[Tuple[int, int]]]: + max_level: int) -> list[list[tuple[int, int]]]: """Calculate a distribution of bad guys given some params.""" max_iterations = 10 + max_dudes * 2 - groups: List[List[Tuple[int, int]]] = [] + groups: list[list[tuple[int, int]]] = [] for _g in range(group_count): groups.append([]) types = [1] @@ -599,9 +599,9 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return groups - def _add_dist_entry_if_possible(self, groups: List[List[Tuple[int, int]]], + def _add_dist_entry_if_possible(self, groups: list[list[tuple[int, int]]], max_dudes: int, target_points: int, - types: List[int]) -> int: + types: list[int]) -> int: # See how much we're off our target by. total_points, total_dudes = self._get_dist_grp_totals(groups) diff = target_points - total_points @@ -624,7 +624,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return diff def _delete_smallest_dist_entry( - self, groups: List[List[Tuple[int, int]]]) -> None: + self, groups: list[list[tuple[int, int]]]) -> None: smallest_value = 9999 smallest_entry = None smallest_entry_group = None @@ -639,7 +639,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): smallest_entry_group.remove(smallest_entry) def _delete_biggest_dist_entry( - self, groups: List[List[Tuple[int, int]]]) -> None: + self, groups: list[list[tuple[int, int]]]) -> None: biggest_value = 9999 biggest_entry = None biggest_entry_group = None @@ -654,7 +654,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): biggest_entry_group.remove(biggest_entry) def _delete_random_dist_entry(self, - groups: List[List[Tuple[int, int]]]) -> None: + groups: list[list[tuple[int, int]]]) -> None: entry_count = 0 for group in groups: for _ in group: @@ -1025,7 +1025,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): 'text': wttxt })) - def _bot_levels_for_wave(self) -> List[List[Type[SpazBot]]]: + def _bot_levels_for_wave(self) -> list[list[type[SpazBot]]]: level = self._wavenum bot_types = [ BomberBot, BrawlerBot, TriggerBot, ChargerBot, BomberBotPro, @@ -1068,10 +1068,10 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): return bot_levels def _add_entries_for_distribution_group( - self, group: List[Tuple[int, int]], - bot_levels: List[List[Type[SpazBot]]], - all_entries: List[Union[Spawn, Spacing, Delay, None]]) -> None: - entries: List[Union[Spawn, Spacing, Delay, None]] = [] + self, group: list[tuple[int, int]], + bot_levels: list[list[type[SpazBot]]], + all_entries: list[Union[Spawn, Spacing, Delay, None]]) -> None: + entries: list[Union[Spawn, Spacing, Delay, None]] = [] for entry in group: bot_level = bot_levels[entry[0] - 1] bot_type = bot_level[random.randrange(len(bot_level))] @@ -1106,7 +1106,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): distribution = self._get_distribution(target_points, min_dudes, max_dudes, group_count, max_level) - all_entries: List[Union[Spawn, Spacing, Delay, None]] = [] + all_entries: list[Union[Spawn, Spacing, Delay, None]] = [] for group in distribution: self._add_entries_for_distribution_group(group, bot_levels, all_entries) @@ -1125,7 +1125,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_point(self, point: Point, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], spawn_time: float = 1.0) -> None: """Add a new bot at a specified named point.""" if self._game_over: @@ -1137,7 +1137,7 @@ class OnslaughtGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_angle(self, angle: float, - spaz_type: Type[SpazBot], + spaz_type: type[SpazBot], spawn_time: float = 1.0) -> None: """Add a new bot at a specified angle (for circular maps).""" if self._game_over: diff --git a/assets/src/ba_data/python/bastd/game/race.py b/assets/src/ba_data/python/bastd/game/race.py index 0a058ac4..c8e6f3d3 100644 --- a/assets/src/ba_data/python/bastd/game/race.py +++ b/assets/src/ba_data/python/bastd/game/race.py @@ -18,8 +18,7 @@ from bastd.actor.scoreboard import Scoreboard from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import (Any, Type, Tuple, List, Sequence, Optional, Dict, - Union) + from typing import Any, Sequence, Optional, Union from bastd.actor.onscreentimer import OnScreenTimer @@ -83,7 +82,7 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): @classmethod def get_available_settings( - cls, sessiontype: Type[ba.Session]) -> List[ba.Setting]: + cls, sessiontype: type[ba.Session]) -> list[ba.Setting]: settings = [ ba.IntSetting('Laps', min_value=1, default=3, increment=1), ba.IntChoiceSetting( @@ -129,11 +128,11 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): return settings @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: return issubclass(sessiontype, ba.MultiTeamSession) @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ba.getmaps('race') def __init__(self, settings: dict): @@ -148,15 +147,15 @@ class RaceGame(ba.TeamGameActivity[Player, Team]): self._beep_1_sound = ba.getsound('raceBeep1') self._beep_2_sound = ba.getsound('raceBeep2') self.race_region_material: Optional[ba.Material] = None - self._regions: List[RaceRegion] = [] + self._regions: list[RaceRegion] = [] self._team_finish_pts: Optional[int] = None self._time_text: Optional[ba.Actor] = None self._timer: Optional[OnScreenTimer] = None - self._race_mines: Optional[List[RaceMine]] = None + self._race_mines: Optional[list[RaceMine]] = None self._race_mine_timer: Optional[ba.Timer] = None self._scoreboard_timer: Optional[ba.Timer] = None self._player_order_update_timer: Optional[ba.Timer] = None - self._start_lights: Optional[List[ba.Node]] = None + self._start_lights: Optional[list[ba.Node]] = None self._bomb_spawn_timer: Optional[ba.Timer] = None self._laps = int(settings['Laps']) self._entire_team_must_finish = bool( diff --git a/assets/src/ba_data/python/bastd/game/runaround.py b/assets/src/ba_data/python/bastd/game/runaround.py index 3607ecbd..e22d4581 100644 --- a/assets/src/ba_data/python/bastd/game/runaround.py +++ b/assets/src/ba_data/python/bastd/game/runaround.py @@ -26,7 +26,7 @@ from bastd.actor.spazbot import ( BomberBotPro, BrawlerBotPro) if TYPE_CHECKING: - from typing import Type, Any, List, Dict, Tuple, Sequence, Optional, Union + from typing import Any, Sequence, Optional, Union class Preset(Enum): @@ -51,7 +51,7 @@ class Point(Enum): @dataclass class Spawn: """Defines a bot spawn event.""" - type: Type[SpazBot] + type: type[SpazBot] path: int = 0 point: Optional[Point] = None @@ -65,7 +65,7 @@ class Spacing: @dataclass class Wave: """Defines a wave of enemies.""" - entries: List[Union[Spawn, Spacing, None]] + entries: list[Union[Spawn, Spacing, None]] class Player(ba.Player['Team']): @@ -93,7 +93,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): default_music = ba.MusicType.MARCHING # How fast our various bot types walk. - _bot_speed_map: Dict[Type[SpazBot], float] = { + _bot_speed_map: dict[type[SpazBot], float] = { BomberBot: 0.48, BomberBotPro: 0.48, BomberBotProShielded: 0.48, @@ -152,9 +152,9 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): self._score_region: Optional[ba.Actor] = None self._dingsound = ba.getsound('dingSmall') self._dingsoundhigh = ba.getsound('dingSmallHigh') - self._exclude_powerups: Optional[List[str]] = None + self._exclude_powerups: Optional[list[str]] = None self._have_tnt: Optional[bool] = None - self._waves: Optional[List[Wave]] = None + self._waves: Optional[list[Wave]] = None self._bots = SpazBotSet() self._tntspawner: Optional[TNTSpawner] = None self._lives_bg: Optional[ba.NodeActor] = None @@ -571,7 +571,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): 'playerinfos': self.initialplayerinfos }) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def _update_waves(self) -> None: @@ -722,14 +722,14 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): t_sec = 0.0 base_delay = 0.5 delay = 0.0 - bot_types: List[Union[Spawn, Spacing, None]] = [] + bot_types: list[Union[Spawn, Spacing, None]] = [] if self._preset in {Preset.ENDLESS, Preset.ENDLESS_TOURNAMENT}: level = self._wavenum target_points = (level + 1) * 8.0 group_count = random.randint(1, 3) - entries: List[Union[Spawn, Spacing, None]] = [] - spaz_types: List[Tuple[Type[SpazBot], float]] = [] + entries: list[Union[Spawn, Spacing, None]] = [] + spaz_types: list[tuple[type[SpazBot], float]] = [] if level < 6: spaz_types += [(BomberBot, 5.0)] if level < 10: @@ -751,7 +751,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): ] * (1 + (level - 7) // 3) # Bot type, their effect on target points. - defender_types: List[Tuple[Type[SpazBot], float]] = [ + defender_types: list[tuple[type[SpazBot], float]] = [ (BomberBot, 0.9), (BrawlerBot, 0.9), (TriggerBot, 0.85), @@ -815,8 +815,8 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): elif path == 6: this_target_point_s *= 0.7 - def _add_defender(defender_type: Tuple[Type[SpazBot], float], - pnt: Point) -> Tuple[float, Spawn]: + def _add_defender(defender_type: tuple[type[SpazBot], float], + pnt: Point) -> tuple[float, Spawn]: # This is ok because we call it immediately. # pylint: disable=cell-var-from-loop return this_target_point_s * defender_type[1], Spawn( @@ -979,7 +979,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): def add_bot_at_point(self, point: Point, - spaztype: Type[SpazBot], + spaztype: type[SpazBot], path: int, spawn_time: float = 0.1) -> None: """Add the given type bot with the given delay (in seconds).""" @@ -1152,7 +1152,7 @@ class RunaroundGame(ba.CoopGameActivity[Player, Team]): return super().handlemessage(msg) return None - def _get_bot_speed(self, bot_type: Type[SpazBot]) -> float: + def _get_bot_speed(self, bot_type: type[SpazBot]) -> float: speed = self._bot_speed_map.get(bot_type) if speed is None: raise TypeError('Invalid bot type to _get_bot_speed(): ' + diff --git a/assets/src/ba_data/python/bastd/game/targetpractice.py b/assets/src/ba_data/python/bastd/game/targetpractice.py index 91d0e131..c6213065 100644 --- a/assets/src/ba_data/python/bastd/game/targetpractice.py +++ b/assets/src/ba_data/python/bastd/game/targetpractice.py @@ -17,7 +17,7 @@ from bastd.actor.bomb import Bomb from bastd.actor.popuptext import PopupText if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional, Sequence + from typing import Any, Optional, Sequence from bastd.actor.bomb import Blast @@ -49,11 +49,11 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]): default_music = ba.MusicType.FORWARD_MARCH @classmethod - def get_supported_maps(cls, sessiontype: Type[ba.Session]) -> List[str]: + def get_supported_maps(cls, sessiontype: type[ba.Session]) -> list[str]: return ['Doom Shroom'] @classmethod - def supports_session_type(cls, sessiontype: Type[ba.Session]) -> bool: + def supports_session_type(cls, sessiontype: type[ba.Session]) -> bool: # We support any teams or versus sessions. return (issubclass(sessiontype, ba.CoopSession) or issubclass(sessiontype, ba.MultiTeamSession)) @@ -61,7 +61,7 @@ class TargetPracticeGame(ba.TeamGameActivity[Player, Team]): def __init__(self, settings: dict): super().__init__(settings) self._scoreboard = Scoreboard() - self._targets: List[Target] = [] + self._targets: list[Target] = [] self._update_timer: Optional[ba.Timer] = None self._countdown: Optional[OnScreenCountdown] = None self._target_count = int(settings['Target Count']) @@ -280,7 +280,7 @@ class Target(ba.Actor): # Inform our activity that we were hit self._hit = True activity.handlemessage(self.TargetHitMessage()) - keys: Dict[float, Sequence[float]] = { + keys: dict[float, Sequence[float]] = { 0.0: (1.0, 0.0, 0.0), 0.049: (1.0, 0.0, 0.0), 0.05: (1.0, 1.0, 1.0), diff --git a/assets/src/ba_data/python/bastd/game/thelaststand.py b/assets/src/ba_data/python/bastd/game/thelaststand.py index 5a24cc4d..b4235915 100644 --- a/assets/src/ba_data/python/bastd/game/thelaststand.py +++ b/assets/src/ba_data/python/bastd/game/thelaststand.py @@ -21,7 +21,7 @@ from bastd.actor.spazbot import (SpazBotSet, SpazBotDiedMessage, BomberBot, ChargerBot, StickyBot, ExplodeyBot) if TYPE_CHECKING: - from typing import Any, Dict, Type, List, Optional, Sequence + from typing import Any, Optional, Sequence from bastd.actor.spazbot import SpazBot @@ -70,7 +70,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): self._powerup_center = (0, 7, -4.14) self._powerup_spread = (7, 2) self._preset = str(settings.get('preset', 'default')) - self._excludepowerups: List[str] = [] + self._excludepowerups: list[str] = [] self._scoreboard: Optional[Scoreboard] = None self._score = 0 self._bots = SpazBotSet() @@ -185,11 +185,11 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): self._bot_update_interval = max(0.5, self._bot_update_interval * 0.98) self._bot_update_timer = ba.Timer(self._bot_update_interval, ba.WeakCall(self._update_bots)) - botspawnpts: List[Sequence[float]] = [[-5.0, 5.5, -4.14], + botspawnpts: list[Sequence[float]] = [[-5.0, 5.5, -4.14], [0.0, 5.5, -4.14], [5.0, 5.5, -4.14]] dists = [0.0, 0.0, 0.0] - playerpts: List[Sequence[float]] = [] + playerpts: list[Sequence[float]] = [] for player in self.players: try: if player.is_alive(): @@ -220,7 +220,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): # Now go back through and see where this value falls. total = 0 - bottype: Optional[Type[SpazBot]] = None + bottype: Optional[type[SpazBot]] = None for spawntype, spawninfo in self._bot_spawn_types.items(): total += spawninfo.spawnrate if randval <= total: @@ -284,7 +284,7 @@ class TheLastStandGame(ba.CoopGameActivity[Player, Team]): else: super().handlemessage(msg) - def _on_got_scores_to_beat(self, scores: List[Dict[str, Any]]) -> None: + def _on_got_scores_to_beat(self, scores: list[dict[str, Any]]) -> None: self._show_standard_scores_to_beat_ui(scores) def end_game(self) -> None: diff --git a/assets/src/ba_data/python/bastd/gameutils.py b/assets/src/ba_data/python/bastd/gameutils.py index 280e5742..01a913f6 100644 --- a/assets/src/ba_data/python/bastd/gameutils.py +++ b/assets/src/ba_data/python/bastd/gameutils.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Sequence, Optional + from typing import Optional class SharedObjects: diff --git a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py index a7e197d2..8b8ff490 100644 --- a/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py +++ b/assets/src/ba_data/python/bastd/keyboard/englishkeyboard.py @@ -12,13 +12,13 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Iterable, List, Tuple, Dict + from typing import Iterable -def split(chars: Iterable[str], maxlen: int) -> List[List[str]]: +def split(chars: Iterable[str], maxlen: int) -> list[list[str]]: """Returns char groups with a fixed number of elements""" result = [] - shatter: List[str] = [] + shatter: list[str] = [] for i in chars: if len(shatter) < maxlen: shatter.append(i) @@ -32,7 +32,7 @@ def split(chars: Iterable[str], maxlen: int) -> List[List[str]]: return result -def generate_emojis(maxlen: int) -> List[List[str]]: +def generate_emojis(maxlen: int) -> list[list[str]]: """Generates a lot of UTF8 emojis prepared for ba.Keyboard pages""" all_emojis = split([chr(i) for i in range(0x1F601, 0x1F650)], maxlen) all_emojis += split([chr(i) for i in range(0x2702, 0x27B1)], maxlen) @@ -49,7 +49,7 @@ class EnglishKeyboard(ba.Keyboard): ('z', 'x', 'c', 'v', 'b', 'n', 'm')] nums = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '/', ':', ';', '(', ')', '$', '&', '@', '"', '.', ',', '?', '!', '\'', '_') - pages: Dict[str, Tuple[str, ...]] = { + pages: dict[str, tuple[str, ...]] = { f'emoji{i}': tuple(page) for i, page in enumerate(generate_emojis(len(nums))) } diff --git a/assets/src/ba_data/python/bastd/mainmenu.py b/assets/src/ba_data/python/bastd/mainmenu.py index 5889631a..e7f2db68 100644 --- a/assets/src/ba_data/python/bastd/mainmenu.py +++ b/assets/src/ba_data/python/bastd/mainmenu.py @@ -13,7 +13,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Any, List, Optional + from typing import Any, Optional # FIXME: Clean this up if I ever revisit it. # pylint: disable=attribute-defined-outside-init @@ -34,7 +34,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]): random.seed(123) self._logo_node: Optional[ba.Node] = None self._custom_logo_tex_name: Optional[str] = None - self._word_actors: List[ba.Actor] = [] + self._word_actors: list[ba.Actor] = [] app = ba.app # FIXME: We shouldn't be doing things conditionally based on whether @@ -364,7 +364,7 @@ class MainMenuActivity(ba.Activity[ba.Player, ba.Team]): return with ba.Context(activity): - self._phrases: List[str] = [] + self._phrases: list[str] = [] # Show upcoming achievements in non-vr versions # (currently too hard to read in vr). diff --git a/assets/src/ba_data/python/bastd/maps.py b/assets/src/ba_data/python/bastd/maps.py index 03f41255..7d3779e4 100644 --- a/assets/src/ba_data/python/bastd/maps.py +++ b/assets/src/ba_data/python/bastd/maps.py @@ -11,7 +11,7 @@ import ba from bastd.gameutils import SharedObjects if TYPE_CHECKING: - from typing import Any, List, Dict + from typing import Any class HockeyStadium(ba.Map): @@ -21,7 +21,7 @@ class HockeyStadium(ba.Map): name = 'Hockey Stadium' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'hockey', 'team_flag', 'keep_away'] @@ -31,7 +31,7 @@ class HockeyStadium(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'models': (ba.getmodel('hockeyStadiumOuter'), ba.getmodel('hockeyStadiumInner'), ba.getmodel('hockeyStadiumStands')), @@ -106,7 +106,7 @@ class FootballStadium(ba.Map): name = 'Football Stadium' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'football', 'team_flag', 'keep_away'] @@ -116,7 +116,7 @@ class FootballStadium(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('footballStadium'), 'vr_fill_model': ba.getmodel('footballStadiumVRFill'), 'collide_model': ba.getcollidemodel('footballStadiumCollide'), @@ -170,7 +170,7 @@ class Bridgit(ba.Map): dataname = 'bridgit' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" # print('getting playtypes', cls._getdata()['play_types']) return ['melee', 'team_flag', 'keep_away'] @@ -181,7 +181,7 @@ class Bridgit(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model_top': ba.getmodel('bridgitLevelTop'), 'model_bottom': ba.getmodel('bridgitLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -264,7 +264,7 @@ class BigG(ba.Map): name = 'Big G' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'race', 'melee', 'keep_away', 'team_flag', 'king_of_the_hill', @@ -277,7 +277,7 @@ class BigG(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model_top': ba.getmodel('bigG'), 'model_bottom': ba.getmodel('bigGBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -361,7 +361,7 @@ class Roundabout(ba.Map): name = 'Roundabout' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -371,7 +371,7 @@ class Roundabout(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('roundaboutLevel'), 'model_bottom': ba.getmodel('roundaboutLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -455,7 +455,7 @@ class MonkeyFace(ba.Map): name = 'Monkey Face' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -465,7 +465,7 @@ class MonkeyFace(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('monkeyFaceLevel'), 'bottom_model': ba.getmodel('monkeyFaceLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -549,7 +549,7 @@ class ZigZag(ba.Map): name = 'Zigzag' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill' @@ -561,7 +561,7 @@ class ZigZag(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('zigZagLevel'), 'model_bottom': ba.getmodel('zigZagLevelBottom'), 'model_bg': ba.getmodel('natureBackground'), @@ -643,7 +643,7 @@ class ThePad(ba.Map): name = 'The Pad' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill'] @@ -653,7 +653,7 @@ class ThePad(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('thePadLevel'), 'bottom_model': ba.getmodel('thePadLevelBottom'), 'collide_model': ba.getcollidemodel('thePadLevelCollide'), @@ -724,7 +724,7 @@ class DoomShroom(ba.Map): name = 'Doom Shroom' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -734,7 +734,7 @@ class DoomShroom(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('doomShroomLevel'), 'collide_model': ba.getcollidemodel('doomShroomLevelCollide'), 'tex': ba.gettexture('doomShroomLevelColor'), @@ -814,7 +814,7 @@ class LakeFrigid(ba.Map): name = 'Lake Frigid' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'race'] @@ -824,7 +824,7 @@ class LakeFrigid(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('lakeFrigid'), 'model_top': ba.getmodel('lakeFrigidTop'), 'model_reflections': ba.getmodel('lakeFrigidReflections'), @@ -895,7 +895,7 @@ class TipTop(ba.Map): name = 'Tip Top' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'king_of_the_hill'] @@ -905,7 +905,7 @@ class TipTop(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('tipTopLevel'), 'bottom_model': ba.getmodel('tipTopLevelBottom'), 'collide_model': ba.getcollidemodel('tipTopLevelCollide'), @@ -967,7 +967,7 @@ class CragCastle(ba.Map): name = 'Crag Castle' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'conquest'] @@ -977,7 +977,7 @@ class CragCastle(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('cragCastleLevel'), 'bottom_model': ba.getmodel('cragCastleLevelBottom'), 'collide_model': ba.getcollidemodel('cragCastleLevelCollide'), @@ -1052,7 +1052,7 @@ class TowerD(ba.Map): name = 'Tower D' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [] @@ -1062,7 +1062,7 @@ class TowerD(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('towerDLevel'), 'model_bottom': @@ -1169,7 +1169,7 @@ class HappyThoughts(ba.Map): name = 'Happy Thoughts' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return [ 'melee', 'keep_away', 'team_flag', 'conquest', 'king_of_the_hill' @@ -1181,7 +1181,7 @@ class HappyThoughts(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('alwaysLandLevel'), 'bottom_model': ba.getmodel('alwaysLandLevelBottom'), 'bgmodel': ba.getmodel('alwaysLandBG'), @@ -1275,7 +1275,7 @@ class StepRightUp(ba.Map): name = 'Step Right Up' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag', 'conquest'] @@ -1285,7 +1285,7 @@ class StepRightUp(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('stepRightUpLevel'), 'model_bottom': ba.getmodel('stepRightUpLevelBottom'), 'collide_model': ba.getcollidemodel('stepRightUpLevelCollide'), @@ -1350,7 +1350,7 @@ class Courtyard(ba.Map): name = 'Courtyard' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -1360,7 +1360,7 @@ class Courtyard(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('courtyardLevel'), 'model_bottom': ba.getmodel('courtyardLevelBottom'), 'collide_model': ba.getcollidemodel('courtyardLevelCollide'), @@ -1456,7 +1456,7 @@ class Rampage(ba.Map): name = 'Rampage' @classmethod - def get_play_types(cls) -> List[str]: + def get_play_types(cls) -> list[str]: """Return valid play types for this map.""" return ['melee', 'keep_away', 'team_flag'] @@ -1466,7 +1466,7 @@ class Rampage(ba.Map): @classmethod def on_preload(cls) -> Any: - data: Dict[str, Any] = { + data: dict[str, Any] = { 'model': ba.getmodel('rampageLevel'), 'bottom_model': ba.getmodel('rampageLevelBottom'), 'collide_model': ba.getcollidemodel('rampageLevelCollide'), diff --git a/assets/src/ba_data/python/bastd/stdmap.py b/assets/src/ba_data/python/bastd/stdmap.py index 2508fa8b..4522eaca 100644 --- a/assets/src/ba_data/python/bastd/stdmap.py +++ b/assets/src/ba_data/python/bastd/stdmap.py @@ -9,10 +9,10 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Dict, Any, Optional + from typing import Any, Optional -def _get_map_data(name: str) -> Dict[str, Any]: +def _get_map_data(name: str) -> dict[str, Any]: import json print('Would get map data', name) with open('ba_data/data/maps/' + name + '.json', @@ -26,10 +26,10 @@ class StdMap(ba.Map): """A map completely defined by asset data. """ - _data: Optional[Dict[str, Any]] = None + _data: Optional[dict[str, Any]] = None @classmethod - def _getdata(cls) -> Dict[str, Any]: + def _getdata(cls) -> dict[str, Any]: if cls._data is None: cls._data = _get_map_data('bridgit') return cls._data diff --git a/assets/src/ba_data/python/bastd/tutorial.py b/assets/src/ba_data/python/bastd/tutorial.py index 39bad74d..6eb78163 100644 --- a/assets/src/ba_data/python/bastd/tutorial.py +++ b/assets/src/ba_data/python/bastd/tutorial.py @@ -23,8 +23,7 @@ import ba from bastd.actor import spaz as basespaz if TYPE_CHECKING: - from typing import (Any, Optional, Dict, List, Tuple, Callable, Sequence, - Union) + from typing import Any, Optional, Callable, Sequence, Union def _safesetattr(node: Optional[ba.Node], attr: str, value: Any) -> None: @@ -187,7 +186,7 @@ class TutorialActivity(ba.Activity[Player, Team]): self.current_spaz: Optional[basespaz.Spaz] = None self._benchmark_type = getattr(ba.getsession(), 'benchmark_type', None) self.last_start_time: Optional[int] = None - self.cycle_times: List[int] = [] + self.cycle_times: list[int] = [] self.allow_pausing = True self.allow_kick_idle_players = False self._issued_warning = False @@ -206,8 +205,8 @@ class TutorialActivity(ba.Activity[Player, Team]): self._skip_text: Optional[ba.Node] = None self._skip_count_text: Optional[ba.Node] = None self._scale: Optional[float] = None - self._stick_base_position: Tuple[float, float] = (0.0, 0.0) - self._stick_nub_position: Tuple[float, float] = (0.0, 0.0) + self._stick_base_position: tuple[float, float] = (0.0, 0.0) + self._stick_nub_position: tuple[float, float] = (0.0, 0.0) self._stick_base_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0) self._stick_nub_image_color: Sequence[float] = (1.0, 1.0, 1.0, 1.0) self._time: int = -1 @@ -220,10 +219,10 @@ class TutorialActivity(ba.Activity[Player, Team]): self._stick_nub_image: Optional[ba.Node] = None self.bomb_image_color = (1.0, 1.0, 1.0) self.pickup_image_color = (1.0, 1.0, 1.0) - self.control_ui_nodes: List[ba.Node] = [] - self.spazzes: Dict[int, basespaz.Spaz] = {} + self.control_ui_nodes: list[ba.Node] = [] + self.spazzes: dict[int, basespaz.Spaz] = {} self.jump_image_color = (1.0, 1.0, 1.0) - self._entries: List[Any] = [] + self._entries: list[Any] = [] self._read_entries_timer: Optional[ba.Timer] = None self._entry_timer: Optional[ba.Timer] = None @@ -300,7 +299,7 @@ class TutorialActivity(ba.Activity[Player, Team]): nub_size = 110.0 * scale p = (position[0] + center_offs, position[1] - offs) - def _sc(r: float, g: float, b: float) -> Tuple[float, float, float]: + def _sc(r: float, g: float, b: float) -> tuple[float, float, float]: return 0.6 * r, 0.6 * g, 0.6 * b self.jump_image_color = c = _sc(0.4, 1, 0.4) diff --git a/assets/src/ba_data/python/bastd/ui/account/link.py b/assets/src/ba_data/python/bastd/ui/account/link.py index f82985b2..df01fc9a 100644 --- a/assets/src/ba_data/python/bastd/ui/account/link.py +++ b/assets/src/ba_data/python/bastd/ui/account/link.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Dict + from typing import Any, Optional class AccountLinkWindow(ba.Window): """Window for linking accounts.""" def __init__(self, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -111,7 +111,7 @@ class AccountLinkWindow(ba.Window): class AccountLinkCodeWindow(ba.Window): """Window showing code for account-linking.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): self._width = 350 self._height = 200 uiscale = ba.app.ui.uiscale diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py index 785f186e..3e517b1b 100644 --- a/assets/src/ba_data/python/bastd/ui/account/settings.py +++ b/assets/src/ba_data/python/bastd/ui/account/settings.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple, List, Union + from typing import Optional, Union class AccountSettingsWindow(ba.Window): @@ -29,7 +29,7 @@ class AccountSettingsWindow(ba.Window): ba.set_analytics_screen('Account Window') # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -74,7 +74,7 @@ class AccountSettingsWindow(ba.Window): self._sub_width = self._scroll_width - 20 # Determine which sign-in/sign-out buttons we should show. - self._show_sign_in_buttons: List[str] = [] + self._show_sign_in_buttons: list[str] = [] if app.platform == 'android' and app.subplatform == 'google': self._show_sign_in_buttons.append('Google Play') diff --git a/assets/src/ba_data/python/bastd/ui/account/unlink.py b/assets/src/ba_data/python/bastd/ui/account/unlink.py index ef3b0114..8ef04517 100644 --- a/assets/src/ba_data/python/bastd/ui/account/unlink.py +++ b/assets/src/ba_data/python/bastd/ui/account/unlink.py @@ -11,14 +11,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict + from typing import Any, Optional class AccountUnlinkWindow(ba.Window): """A window to kick off account unlinks.""" def __init__(self, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -104,7 +104,7 @@ class AccountUnlinkWindow(ba.Window): if i == 0: ba.widget(edit=txt, up_widget=self._cancel_button) - def _on_entry_selected(self, entry: Dict[str, Any]) -> None: + def _on_entry_selected(self, entry: dict[str, Any]) -> None: ba.screenmessage(ba.Lstr(resource='pleaseWaitText', fallback_resource='requestingText'), color=(0, 1, 0)) diff --git a/assets/src/ba_data/python/bastd/ui/account/viewer.py b/assets/src/ba_data/python/bastd/ui/account/viewer.py index a8ea39af..01f18c14 100644 --- a/assets/src/ba_data/python/bastd/ui/account/viewer.py +++ b/assets/src/ba_data/python/bastd/ui/account/viewer.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Dict, Optional + from typing import Any, Optional class AccountViewerWindow(popup.PopupWindow): @@ -20,9 +20,9 @@ class AccountViewerWindow(popup.PopupWindow): def __init__(self, account_id: str, profile_id: str = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0)): + offset: tuple[float, float] = (0.0, 0.0)): from ba.internal import is_browser_likely_available, master_server_get self._account_id = account_id @@ -169,7 +169,7 @@ class AccountViewerWindow(popup.PopupWindow): ba.open_url(_ba.get_master_server_address() + '/highscores?profile=' + self._account_id) - def _on_query_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_query_response(self, data: Optional[dict[str, Any]]) -> None: # FIXME: Tidy this up. # pylint: disable=too-many-locals # pylint: disable=too-many-branches diff --git a/assets/src/ba_data/python/bastd/ui/achievements.py b/assets/src/ba_data/python/bastd/ui/achievements.py index ca56c436..5ca7d516 100644 --- a/assets/src/ba_data/python/bastd/ui/achievements.py +++ b/assets/src/ba_data/python/bastd/ui/achievements.py @@ -10,13 +10,13 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Tuple + pass class AchievementsWindow(popup.PopupWindow): """Popup window to view achievements.""" - def __init__(self, position: Tuple[float, float], scale: float = None): + def __init__(self, position: tuple[float, float], scale: float = None): # pylint: disable=too-many-locals uiscale = ba.app.ui.uiscale if scale is None: diff --git a/assets/src/ba_data/python/bastd/ui/appinvite.py b/assets/src/ba_data/python/bastd/ui/appinvite.py index c058f762..9d3cb384 100644 --- a/assets/src/ba_data/python/bastd/ui/appinvite.py +++ b/assets/src/ba_data/python/bastd/ui/appinvite.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, Union + from typing import Any, Optional, Union class AppInviteWindow(ba.Window): @@ -20,7 +20,7 @@ class AppInviteWindow(ba.Window): def __init__(self) -> None: ba.set_analytics_screen('AppInviteWindow') - self._data: Optional[Dict[str, Any]] = None + self._data: Optional[dict[str, Any]] = None self._width = 650 self._height = 400 @@ -114,7 +114,7 @@ class AppInviteWindow(ba.Window): callback=ba.WeakCall(self._on_code_result)) _ba.run_transactions() - def _on_code_result(self, result: Optional[Dict[str, Any]]) -> None: + def _on_code_result(self, result: Optional[dict[str, Any]]) -> None: if result is not None: self._data = result @@ -151,7 +151,7 @@ class AppInviteWindow(ba.Window): class ShowFriendCodeWindow(ba.Window): """Window showing a code for sharing with friends.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): from ba.internal import is_browser_likely_available ba.set_analytics_screen('Friend Promo Code') self._width = 650 @@ -317,7 +317,7 @@ def handle_app_invites_press(force_code: bool = False) -> None: ba.Lstr(resource='gatherWindow.requestingAPromoCodeText'), color=(0, 1, 0)) - def handle_result(result: Optional[Dict[str, Any]]) -> None: + def handle_result(result: Optional[dict[str, Any]]) -> None: with ba.Context('ui'): if result is None: ba.screenmessage(ba.Lstr(resource='errorText'), diff --git a/assets/src/ba_data/python/bastd/ui/characterpicker.py b/assets/src/ba_data/python/bastd/ui/characterpicker.py index 6f57a20b..b60a4767 100644 --- a/assets/src/ba_data/python/bastd/ui/characterpicker.py +++ b/assets/src/ba_data/python/bastd/ui/characterpicker.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Sequence + from typing import Any, Sequence class CharacterPicker(popup.PopupWindow): @@ -20,10 +20,10 @@ class CharacterPicker(popup.PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_character: str = None): diff --git a/assets/src/ba_data/python/bastd/ui/colorpicker.py b/assets/src/ba_data/python/bastd/ui/colorpicker.py index 42cbb3a4..14e935c9 100644 --- a/assets/src/ba_data/python/bastd/ui/colorpicker.py +++ b/assets/src/ba_data/python/bastd/ui/colorpicker.py @@ -10,7 +10,7 @@ import ba from bastd.ui.popup import PopupWindow if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, List, Optional + from typing import Any, Sequence, Optional class ColorPicker(PopupWindow): @@ -21,11 +21,11 @@ class ColorPicker(PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], initial_color: Sequence[float] = (1.0, 1.0, 1.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tag: Any = ''): # pylint: disable=too-many-locals from ba.internal import get_player_colors @@ -56,11 +56,11 @@ class ColorPicker(PopupWindow): focus_size=(190, 220), bg_color=(0.5, 0.5, 0.5), offset=offset) - rows: List[List[ba.Widget]] = [] + rows: list[list[ba.Widget]] = [] closest_dist = 9999.0 closest = (0, 0) for y in range(4): - row: List[ba.Widget] = [] + row: list[ba.Widget] = [] rows.append(row) for x in range(4): color = self.colors[y][x] @@ -159,11 +159,11 @@ class ColorPickerExact(PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], initial_color: Sequence[float] = (1.0, 1.0, 1.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tag: Any = ''): # pylint: disable=too-many-locals del parent # Unused var. diff --git a/assets/src/ba_data/python/bastd/ui/config.py b/assets/src/ba_data/python/bastd/ui/config.py index 0c11ff4e..b9e74000 100644 --- a/assets/src/ba_data/python/bastd/ui/config.py +++ b/assets/src/ba_data/python/bastd/ui/config.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Tuple, Union, Callable + from typing import Any, Union, Callable class ConfigCheckBox: @@ -27,8 +27,8 @@ class ConfigCheckBox: def __init__(self, parent: ba.Widget, configkey: str, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], displayname: Union[str, ba.Lstr] = None, scale: float = None, maxwidth: float = None, @@ -84,7 +84,7 @@ class ConfigNumberEdit: def __init__(self, parent: ba.Widget, configkey: str, - position: Tuple[float, float], + position: tuple[float, float], minval: float = 0.0, maxval: float = 100.0, increment: float = 1.0, diff --git a/assets/src/ba_data/python/bastd/ui/confirm.py b/assets/src/ba_data/python/bastd/ui/confirm.py index 82e2ac48..37ed99a4 100644 --- a/assets/src/ba_data/python/bastd/ui/confirm.py +++ b/assets/src/ba_data/python/bastd/ui/confirm.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Union, Callable, Tuple, Optional + from typing import Any, Union, Callable, Optional class ConfirmWindow: @@ -23,7 +23,7 @@ class ConfirmWindow: height: float = 100.0, cancel_button: bool = True, cancel_is_selected: bool = False, - color: Tuple[float, float, float] = (1, 1, 1), + color: tuple[float, float, float] = (1, 1, 1), text_scale: float = 1.0, ok_text: Union[str, ba.Lstr] = None, cancel_text: Union[str, ba.Lstr] = None, @@ -39,7 +39,7 @@ class ConfirmWindow: # if they provided an origin-widget, scale up from that self._transition_out: Optional[str] - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/coop/browser.py b/assets/src/ba_data/python/bastd/ui/coop/browser.py index a0a008b8..6fb34fef 100644 --- a/assets/src/ba_data/python/bastd/ui/coop/browser.py +++ b/assets/src/ba_data/python/bastd/ui/coop/browser.py @@ -16,7 +16,7 @@ from bastd.ui.league.rankbutton import LeagueRankButton from bastd.ui.store.browser import StoreBrowserWindow if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict, List, Union + from typing import Any, Optional, Union class CoopBrowserWindow(ba.Window): @@ -62,7 +62,7 @@ class CoopBrowserWindow(ba.Window): timetype=ba.TimeType.REAL) # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -361,7 +361,7 @@ class CoopBrowserWindow(ba.Window): except Exception: ba.print_exception('Error updating campaign lock.') - def _update_for_data(self, data: Optional[List[Dict[str, Any]]]) -> None: + def _update_for_data(self, data: Optional[list[dict[str, Any]]]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-locals # pylint: disable=too-many-branches @@ -380,7 +380,7 @@ class CoopBrowserWindow(ba.Window): # Update all of our tourney buttons based on whats in data. for i, tbtn in enumerate(self._tournament_buttons): assert data is not None - entry: Dict[str, Any] = data[i] + entry: dict[str, Any] = data[i] prize_y_offs = (34 if 'prizeRange3' in entry else 20 if 'prizeRange2' in entry else 12) x_offs = 90 @@ -589,7 +589,7 @@ class CoopBrowserWindow(ba.Window): ('' + str(free_tries_remaining))), color=(0.6, 0.6, 0.6, 1)) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: accounts = ba.app.accounts if data is not None: @@ -835,7 +835,7 @@ class CoopBrowserWindow(ba.Window): # Tournaments - self._tournament_buttons: List[Dict[str, Any]] = [] + self._tournament_buttons: list[dict[str, Any]] = [] v -= 53 # FIXME shouldn't use hard-coded strings here. @@ -976,7 +976,7 @@ class CoopBrowserWindow(ba.Window): 30 + 200 * len(items)), 200), background=False) h_spacing = 200 - self._custom_buttons: List[GameButton] = [] + self._custom_buttons: list[GameButton] = [] h = 0 v2 = -2 for item in items: @@ -1034,10 +1034,10 @@ class CoopBrowserWindow(ba.Window): self._do_selection_callbacks = True def _tournament_button(self, parent: ba.Widget, x: float, y: float, - select: bool) -> Dict[str, Any]: + select: bool) -> dict[str, Any]: sclx = 300 scly = 195.0 - data: Dict[str, Any] = { + data: dict[str, Any] = { 'tournament_id': None, 'time_remaining': 0, 'has_time_remaining': False, @@ -1374,7 +1374,7 @@ class CoopBrowserWindow(ba.Window): show_tab=show_tab, back_location='CoopBrowserWindow').get_root_widget()) - def _show_leader(self, tournament_button: Dict[str, Any]) -> None: + def _show_leader(self, tournament_button: dict[str, Any]) -> None: # pylint: disable=cyclic-import from bastd.ui.account.viewer import AccountViewerWindow tournament_id = tournament_button['tournament_id'] @@ -1392,7 +1392,7 @@ class CoopBrowserWindow(ba.Window): position=tournament_button['current_leader_name_text']. get_screen_space_center()) - def _show_scores(self, tournament_button: Dict[str, Any]) -> None: + def _show_scores(self, tournament_button: dict[str, Any]) -> None: # pylint: disable=cyclic-import from bastd.ui.tournamentscores import TournamentScoresWindow tournament_id = tournament_button['tournament_id'] @@ -1411,7 +1411,7 @@ class CoopBrowserWindow(ba.Window): def run(self, game: Optional[str], - tournament_button: Dict[str, Any] = None) -> None: + tournament_button: dict[str, Any] = None) -> None: """Run the provided game.""" # pylint: disable=too-many-branches # pylint: disable=too-many-statements @@ -1421,7 +1421,7 @@ class CoopBrowserWindow(ba.Window): from bastd.ui.tournamententry import TournamentEntryWindow from bastd.ui.purchase import PurchaseWindow from bastd.ui.account import show_sign_in_prompt - args: Dict[str, Any] = {} + args: dict[str, Any] = {} # Do a bit of pre-flight for tournament options. if tournament_button is not None: diff --git a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py index 8aee88b7..2a6a75b4 100644 --- a/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py +++ b/assets/src/ba_data/python/bastd/ui/coop/gamebutton.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, List, Tuple + from typing import Optional from bastd.ui.coop.browser import CoopBrowserWindow @@ -98,7 +98,7 @@ class GameButton: starscale = 35.0 if self._achievements else 45.0 - self._star_widgets: List[ba.Widget] = [] + self._star_widgets: list[ba.Widget] = [] for _i in range(stars): imw = ba.imagewidget(parent=parent, draw_controller=btn, @@ -120,7 +120,7 @@ class GameButton: xach = x + 69 yach = y + scly - 168 a_scale = 30.0 - self._achievement_widgets: List[Tuple[ba.Widget, ba.Widget]] = [] + self._achievement_widgets: list[tuple[ba.Widget, ba.Widget]] = [] for ach in self._achievements: a_complete = ach.complete imw = ba.imagewidget( diff --git a/assets/src/ba_data/python/bastd/ui/creditslist.py b/assets/src/ba_data/python/bastd/ui/creditslist.py index 161b77d2..d6a37c8d 100644 --- a/assets/src/ba_data/python/bastd/ui/creditslist.py +++ b/assets/src/ba_data/python/bastd/ui/creditslist.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Sequence + from typing import Optional, Sequence class CreditsListWindow(ba.Window): @@ -23,7 +23,7 @@ class CreditsListWindow(ba.Window): ba.set_analytics_screen('Credits Window') # if they provided an origin-widget, scale up from that - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/fileselector.py b/assets/src/ba_data/python/bastd/ui/fileselector.py index da6e2b2f..e48b456a 100644 --- a/assets/src/ba_data/python/bastd/ui/fileselector.py +++ b/assets/src/ba_data/python/bastd/ui/fileselector.py @@ -13,7 +13,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Callable, Sequence, List, Optional + from typing import Any, Callable, Sequence, Optional class FileSelectorWindow(ba.Window): @@ -34,7 +34,7 @@ class FileSelectorWindow(ba.Window): self._callback = callback self._base_path = path self._path: Optional[str] = None - self._recent_paths: List[str] = [] + self._recent_paths: list[str] = [] self._show_base_path = show_base_path self._valid_file_extensions = [ '.' + ext for ext in valid_file_extensions @@ -173,7 +173,7 @@ class FileSelectorWindow(ba.Window): class _RefreshThread(threading.Thread): def __init__(self, path: str, - callback: Callable[[List[str], Optional[str]], Any]): + callback: Callable[[list[str], Optional[str]], Any]): super().__init__() self._callback = callback self._path = path @@ -195,7 +195,7 @@ class FileSelectorWindow(ba.Window): # Ignore permission-denied. if 'Errno 13' not in str(exc): ba.print_exception() - nofiles: List[str] = [] + nofiles: list[str] = [] ba.pushcall(ba.Call(self._callback, nofiles, str(exc)), from_other_thread=True) @@ -205,7 +205,7 @@ class FileSelectorWindow(ba.Window): self._recent_paths.append(path) self._RefreshThread(path, self._refresh).start() - def _refresh(self, file_names: List[str], error: Optional[str]) -> None: + def _refresh(self, file_names: list[str], error: Optional[str]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-branches # pylint: disable=too-many-locals diff --git a/assets/src/ba_data/python/bastd/ui/gather/__init__.py b/assets/src/ba_data/python/bastd/ui/gather/__init__.py index 3d21747c..8dca6cc5 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/gather/__init__.py @@ -13,8 +13,7 @@ import ba from bastd.ui.tabs import TabRow if TYPE_CHECKING: - from typing import (Any, Optional, Tuple, Dict, List, Union, Callable, - Type) + from typing import Optional class GatherTab: @@ -80,7 +79,7 @@ class GatherWindow(ba.Window): from bastd.ui.gather.nearbytab import NearbyGatherTab ba.set_analytics_screen('Gather Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -149,7 +148,7 @@ class GatherWindow(ba.Window): tab_buffer_h = ((320 if condensed else 250) + 2 * x_offs) # Build up the set of tabs we want. - tabdefs: List[Tuple[GatherWindow.TabID, ba.Lstr]] = [ + tabdefs: list[tuple[GatherWindow.TabID, ba.Lstr]] = [ (self.TabID.ABOUT, ba.Lstr(resource=self._r + '.aboutText')) ] if _ba.get_account_misc_read_val('enablePublicParties', True): @@ -173,14 +172,14 @@ class GatherWindow(ba.Window): on_select_call=ba.WeakCall(self._set_tab)) # Now instantiate handlers for these tabs. - tabtypes: Dict[GatherWindow.TabID, Type[GatherTab]] = { + tabtypes: dict[GatherWindow.TabID, type[GatherTab]] = { self.TabID.ABOUT: AboutGatherTab, self.TabID.MANUAL: ManualGatherTab, self.TabID.PRIVATE: PrivateGatherTab, self.TabID.INTERNET: PublicGatherTab, self.TabID.NEARBY: NearbyGatherTab } - self._tabs: Dict[GatherWindow.TabID, GatherTab] = {} + self._tabs: dict[GatherWindow.TabID, GatherTab] = {} for tab_id in self._tab_row.tabs: tabtype = tabtypes.get(tab_id) if tabtype is not None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py index 367b0eb8..798b11f6 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/manualtab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/manualtab.py @@ -15,7 +15,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict, List, Tuple, Type, Union, Callable + from typing import Any, Optional, Union, Callable from bastd.ui.gather import GatherWindow from bastd.ui.confirm import ConfirmWindow @@ -850,7 +850,7 @@ class ManualGatherTab(GatherTab): callback=ba.WeakCall( self._on_accessible_response)) - def _on_accessible_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_accessible_response(self, data: Optional[dict[str, Any]]) -> None: t_addr = self._t_addr t_accessible = self._t_accessible t_accessible_extra = self._t_accessible_extra diff --git a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py index 19fe1c53..03561cbd 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/nearbytab.py @@ -12,7 +12,7 @@ import _ba from bastd.ui.gather import GatherTab if TYPE_CHECKING: - from typing import Optional, Dict, Any + from typing import Optional, Any from bastd.ui.gather import GatherWindow @@ -30,7 +30,7 @@ class NetScanner: left_border=10) ba.widget(edit=self._columnwidget, up_widget=tab_button) self._width = width - self._last_selected_host: Optional[Dict[str, Any]] = None + self._last_selected_host: Optional[dict[str, Any]] = None self._update_timer = ba.Timer(1.0, ba.WeakCall(self.update), @@ -44,10 +44,10 @@ class NetScanner: def __del__(self) -> None: _ba.end_host_scanning() - def _on_select(self, host: Dict[str, Any]) -> None: + def _on_select(self, host: dict[str, Any]) -> None: self._last_selected_host = host - def _on_activate(self, host: Dict[str, Any]) -> None: + def _on_activate(self, host: dict[str, Any]) -> None: _ba.connect_to_party(host['address']) def update(self) -> None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py index 941be6d2..839ba787 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/privatetab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/privatetab.py @@ -20,7 +20,7 @@ from bastd.ui.gather import GatherTab from bastd.ui import getcurrency if TYPE_CHECKING: - from typing import Optional, Dict, Any, List, Type + from typing import Optional, Any from bastd.ui.gather import GatherWindow # Print a bit of info about queries, etc. @@ -160,7 +160,7 @@ class PrivateGatherTab(GatherTab): raise RuntimeError(f'Invalid sessiontype {sessiontypestr}') hcfg.session_type = sessiontypestr - sessiontype: Type[ba.Session] + sessiontype: type[ba.Session] if hcfg.session_type == 'ffa': sessiontype = ba.FreeForAllSession elif hcfg.session_type == 'teams': @@ -177,7 +177,7 @@ class PrivateGatherTab(GatherTab): if playlist_name == '__default__' else playlist_name) - playlist: Optional[List[Dict[str, Any]]] = None + playlist: Optional[list[dict[str, Any]]] = None if playlist_name != '__default__': playlist = (cfg.get(f'{pvars.config_name} Playlists', {}).get(playlist_name)) @@ -197,7 +197,7 @@ class PrivateGatherTab(GatherTab): hcfg.tutorial = tutorial if hcfg.session_type == 'teams': - ctn: Optional[List[str]] = cfg.get('Custom Team Names') + ctn: Optional[list[str]] = cfg.get('Custom Team Names') if ctn is not None: if (isinstance(ctn, (list, tuple)) and len(ctn) == 2 and all(isinstance(x, str) for x in ctn)): @@ -205,7 +205,7 @@ class PrivateGatherTab(GatherTab): else: print(f'Found invalid custom-team-names data: {ctn}') - ctc: Optional[List[List[float]]] = cfg.get('Custom Team Colors') + ctc: Optional[list[list[float]]] = cfg.get('Custom Team Colors') if ctc is not None: if (isinstance(ctc, (list, tuple)) and len(ctc) == 2 and all(isinstance(x, (list, tuple)) for x in ctc) @@ -269,7 +269,7 @@ class PrivateGatherTab(GatherTab): self._last_hosting_state_query_time = now def _hosting_state_idle_response(self, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: # This simply passes through to our standard response handler. # The one exception is if we've recently sent an action to the @@ -284,7 +284,7 @@ class PrivateGatherTab(GatherTab): return self._hosting_state_response(result) - def _hosting_state_response(self, result: Optional[Dict[str, + def _hosting_state_response(self, result: Optional[dict[str, Any]]) -> None: # Its possible for this to come back to us after our UI is dead; @@ -344,7 +344,7 @@ class PrivateGatherTab(GatherTab): # Kick off an update to get any needed messages sent/etc. ba.pushcall(self._update) - def _selwidgets(self) -> List[Optional[ba.Widget]]: + def _selwidgets(self) -> list[Optional[ba.Widget]]: """An indexed list of widgets we can use for saving/restoring sel.""" return [ self._host_playlist_button, self._host_copy_button, @@ -844,7 +844,7 @@ class PrivateGatherTab(GatherTab): self._connect_to_party_code(code) - def _connect_response(self, result: Optional[Dict[str, Any]]) -> None: + def _connect_response(self, result: Optional[dict[str, Any]]) -> None: try: self._connect_press_time = None if result is None: diff --git a/assets/src/ba_data/python/bastd/ui/gather/publictab.py b/assets/src/ba_data/python/bastd/ui/gather/publictab.py index 7a6999b5..b2c1b647 100644 --- a/assets/src/ba_data/python/bastd/ui/gather/publictab.py +++ b/assets/src/ba_data/python/bastd/ui/gather/publictab.py @@ -17,7 +17,7 @@ import ba from bastd.ui.gather import GatherTab if TYPE_CHECKING: - from typing import Callable, Any, Optional, Dict, Union, Tuple, List + from typing import Callable, Any, Optional, Union from bastd.ui.gather import GatherWindow # Print a bit of info about pings, queries, etc. @@ -182,7 +182,7 @@ class UIRow: class State: """State saved/restored only while the app is running.""" sub_tab: SubTabType = SubTabType.JOIN - parties: Optional[List[Tuple[str, PartyEntry]]] = None + parties: Optional[list[tuple[str, PartyEntry]]] = None next_entry_index: int = 0 filter_value: str = '' have_server_list_response: bool = False @@ -312,26 +312,26 @@ class PublicGatherTab(GatherTab): self._host_max_party_size_plus_button: (Optional[ba.Widget]) = None self._host_status_text: Optional[ba.Widget] = None self._signed_in = False - self._ui_rows: List[UIRow] = [] + self._ui_rows: list[UIRow] = [] self._refresh_ui_row = 0 self._have_user_selected_row = False self._first_valid_server_list_time: Optional[float] = None # Parties indexed by id: - self._parties: Dict[str, PartyEntry] = {} + self._parties: dict[str, PartyEntry] = {} # Parties sorted in display order: - self._parties_sorted: List[Tuple[str, PartyEntry]] = [] + self._parties_sorted: list[tuple[str, PartyEntry]] = [] self._party_lists_dirty = True # Sorted parties with filter applied: - self._parties_displayed: Dict[str, PartyEntry] = {} + self._parties_displayed: dict[str, PartyEntry] = {} self._next_entry_index = 0 self._have_server_list_response = False self._have_valid_server_list = False self._filter_value = '' - self._pending_party_infos: List[Dict[str, Any]] = [] + self._pending_party_infos: list[dict[str, Any]] = [] self._last_sub_scroll_height = 0.0 def on_activate( @@ -715,7 +715,7 @@ class PublicGatherTab(GatherTab): self._do_status_check() def _on_public_party_query_result( - self, result: Optional[Dict[str, Any]]) -> None: + self, result: Optional[dict[str, Any]]) -> None: starttime = time.time() self._have_server_list_response = True @@ -1100,7 +1100,7 @@ class PublicGatherTab(GatherTab): self._local_address = str(val) def _on_public_party_accessible_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: # If we've got status text widgets, update them. text = self._host_status_text diff --git a/assets/src/ba_data/python/bastd/ui/getcurrency.py b/assets/src/ba_data/python/bastd/ui/getcurrency.py index ef9f7118..d2674060 100644 --- a/assets/src/ba_data/python/bastd/ui/getcurrency.py +++ b/assets/src/ba_data/python/bastd/ui/getcurrency.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Union, Dict + from typing import Any, Optional, Union class GetCurrencyWindow(ba.Window): @@ -38,7 +38,7 @@ class GetCurrencyWindow(ba.Window): self._ad_time_text = None # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -102,8 +102,8 @@ class GetCurrencyWindow(ba.Window): self._ad_button = None def _add_button(item: str, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], label: ba.Lstr, price: str = None, tex_name: str = None, @@ -528,7 +528,7 @@ class GetCurrencyWindow(ba.Window): item)) def _purchase_check_result(self, item: str, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: if result is None: ba.playsound(ba.getsound('error')) ba.screenmessage( diff --git a/assets/src/ba_data/python/bastd/ui/helpui.py b/assets/src/ba_data/python/bastd/ui/helpui.py index 2fda7f8a..77594b0a 100644 --- a/assets/src/ba_data/python/bastd/ui/helpui.py +++ b/assets/src/ba_data/python/bastd/ui/helpui.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class HelpWindow(ba.Window): @@ -25,7 +25,7 @@ class HelpWindow(ba.Window): ba.set_analytics_screen('Help Window') # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/iconpicker.py b/assets/src/ba_data/python/bastd/ui/iconpicker.py index 1d1820f4..6c6f07db 100644 --- a/assets/src/ba_data/python/bastd/ui/iconpicker.py +++ b/assets/src/ba_data/python/bastd/ui/iconpicker.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Sequence + from typing import Any, Sequence class IconPicker(popup.PopupWindow): @@ -20,10 +20,10 @@ class IconPicker(popup.PopupWindow): def __init__(self, parent: ba.Widget, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_icon: str = None): diff --git a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py index f299f5ff..d7ab53e2 100644 --- a/assets/src/ba_data/python/bastd/ui/league/rankbutton.py +++ b/assets/src/ba_data/python/bastd/ui/league/rankbutton.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Optional, Callable, Dict, Union + from typing import Any, Optional, Callable, Union class LeagueRankButton: @@ -18,13 +18,13 @@ class LeagueRankButton: def __init__(self, parent: ba.Widget, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], scale: float, on_activate_call: Callable[[], Any] = None, transition_delay: float = None, - color: Tuple[float, float, float] = None, - textcolor: Tuple[float, float, float] = None, + color: tuple[float, float, float] = None, + textcolor: tuple[float, float, float] = None, smooth_update_delay: float = None): if on_activate_call is None: on_activate_call = ba.WeakCall(self._default_on_activate_call) @@ -42,7 +42,7 @@ class LeagueRankButton: self._textcolor = textcolor self._header_color = (0.8, 0.8, 2.0) self._parent = parent - self._position: Tuple[float, float] = (0.0, 0.0) + self._position: tuple[float, float] = (0.0, 0.0) self._button = ba.buttonwidget(parent=parent, size=size, @@ -211,7 +211,7 @@ class LeagueRankButton: ba.print_exception('Error doing smooth update.') self._smooth_update_timer = None - def _update_for_league_rank_data(self, data: Optional[Dict[str, + def _update_for_league_rank_data(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-branches # pylint: disable=too-many-statements @@ -325,7 +325,7 @@ class LeagueRankButton: ba.textwidget(edit=self._value_text, text=status_text) def _on_power_ranking_query_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: self._doing_power_ranking_query = False ba.app.accounts.cache_league_rank_data(data) self._update_for_league_rank_data(data) @@ -357,7 +357,7 @@ class LeagueRankButton: from bastd.ui.league.rankwindow import LeagueRankWindow LeagueRankWindow(modal=True, origin_widget=self._button) - def set_position(self, position: Tuple[float, float]) -> None: + def set_position(self, position: tuple[float, float]) -> None: """Set the button's position.""" self._position = position if not self._button: diff --git a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py index 48bb1667..d1e31c46 100644 --- a/assets/src/ba_data/python/bastd/ui/league/rankwindow.py +++ b/assets/src/ba_data/python/bastd/ui/league/rankwindow.py @@ -12,7 +12,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Any, Optional, Tuple, List, Dict, Union + from typing import Any, Optional, Union class LeagueRankWindow(ba.Window): @@ -24,11 +24,11 @@ class LeagueRankWindow(ba.Window): origin_widget: ba.Widget = None): ba.set_analytics_screen('League Rank Window') - self._league_rank_data: Optional[Dict[str, Any]] = None + self._league_rank_data: Optional[dict[str, Any]] = None self._modal = modal # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -111,7 +111,7 @@ class LeagueRankWindow(ba.Window): self._subcontainer: Optional[ba.Widget] = None self._subcontainerwidth = 800 self._subcontainerheight = 483 - self._power_ranking_score_widgets: List[ba.Widget] = [] + self._power_ranking_score_widgets: list[ba.Widget] = [] self._season_popup_menu: Optional[popup_ui.PopupMenu] = None self._requested_season: Optional[str] = None @@ -192,7 +192,7 @@ class LeagueRankWindow(ba.Window): ba.playsound(ba.getsound('error')) def _on_power_ranking_query_response( - self, data: Optional[Dict[str, Any]]) -> None: + self, data: Optional[dict[str, Any]]) -> None: self._doing_power_ranking_query = False # important: *only* cache this if we requested the current season.. if data is not None and data.get('s', None) is None: @@ -587,7 +587,7 @@ class LeagueRankWindow(ba.Window): '/highscores?list=powerRankings&v=2' + league_str + season_str + '&player=' + our_login_id) - def _update_for_league_rank_data(self, data: Optional[Dict[str, + def _update_for_league_rank_data(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-statements # pylint: disable=too-many-branches diff --git a/assets/src/ba_data/python/bastd/ui/mainmenu.py b/assets/src/ba_data/python/bastd/ui/mainmenu.py index c82c7eb1..420b6cf6 100644 --- a/assets/src/ba_data/python/bastd/ui/mainmenu.py +++ b/assets/src/ba_data/python/bastd/ui/mainmenu.py @@ -11,7 +11,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Any, Callable, List, Dict, Tuple, Optional, Union + from typing import Any, Callable, Optional, Union class MainMenuWindow(ba.Window): @@ -190,7 +190,7 @@ class MainMenuWindow(ba.Window): input_device.is_connected_to_remote_player() if input_device else False) - positions: List[Tuple[float, float, float]] = [] + positions: list[tuple[float, float, float]] = [] self._p_index = 0 if self._in_game: @@ -412,8 +412,8 @@ class MainMenuWindow(ba.Window): scale=3.0 * t_scale) def _refresh_not_in_game( - self, positions: List[Tuple[float, float, - float]]) -> Tuple[float, float, float]: + self, positions: list[tuple[float, float, + float]]) -> tuple[float, float, float]: # pylint: disable=too-many-branches # pylint: disable=too-many-locals # pylint: disable=too-many-statements @@ -675,12 +675,12 @@ class MainMenuWindow(ba.Window): return h, v, scale def _refresh_in_game( - self, positions: List[Tuple[float, float, - float]]) -> Tuple[float, float, float]: + self, positions: list[tuple[float, float, + float]]) -> tuple[float, float, float]: # pylint: disable=too-many-branches # pylint: disable=too-many-locals # pylint: disable=too-many-statements - custom_menu_entries: List[Dict[str, Any]] = [] + custom_menu_entries: list[dict[str, Any]] = [] session = _ba.get_foreground_host_session() if session is not None: try: diff --git a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py index d5ad875a..4a446a3c 100644 --- a/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py +++ b/assets/src/ba_data/python/bastd/ui/onscreenkeyboard.py @@ -12,7 +12,7 @@ from ba import charstr from ba import SpecialChar as SpCh if TYPE_CHECKING: - from typing import List, Tuple, Optional + from typing import Optional class OnScreenKeyboardWindow(ba.Window): @@ -78,14 +78,14 @@ class OnScreenKeyboardWindow(ba.Window): self._double_press_shift = False self._num_mode_button: Optional[ba.Widget] = None self._emoji_button: Optional[ba.Widget] = None - self._char_keys: List[ba.Widget] = [] + self._char_keys: list[ba.Widget] = [] self._keyboard_index = 0 self._last_space_press = 0.0 self._double_space_interval = 0.3 self._keyboard: ba.Keyboard - self._chars: List[str] - self._modes: List[str] + self._chars: list[str] + self._modes: list[str] self._mode: str self._mode_index: int self._load_keyboard() @@ -116,7 +116,7 @@ class OnScreenKeyboardWindow(ba.Window): # dummy data just used for row/column lengths... we don't actually # set things until refresh - chars: List[Tuple[str, ...]] = self._keyboard.chars + chars: list[tuple[str, ...]] = self._keyboard.chars for row_num, row in enumerate(chars): h = row_starts[row_num] @@ -244,7 +244,7 @@ class OnScreenKeyboardWindow(ba.Window): return kbclass() def _refresh(self) -> None: - chars: Optional[List[str]] = None + chars: Optional[list[str]] = None if self._mode in ['normal', 'caps']: chars = list(self._chars) if self._mode == 'caps': diff --git a/assets/src/ba_data/python/bastd/ui/party.py b/assets/src/ba_data/python/bastd/ui/party.py index 041fc4f7..307b5704 100644 --- a/assets/src/ba_data/python/bastd/ui/party.py +++ b/assets/src/ba_data/python/bastd/ui/party.py @@ -13,7 +13,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import List, Sequence, Optional, Dict, Any + from typing import Sequence, Optional, Any class PartyWindow(ba.Window): @@ -113,7 +113,7 @@ class PartyWindow(ba.Window): h_align='center', v_align='center', text=ba.Lstr(resource='chatMutedText')) - self._chat_texts: List[ba.Widget] = [] + self._chat_texts: list[ba.Widget] = [] # add all existing messages if chat is not muted if not ba.app.config.resolve('Chat Muted'): @@ -153,8 +153,8 @@ class PartyWindow(ba.Window): position=(self._width - 70, 35), on_activate_call=self._send_chat_message) ba.textwidget(edit=txt, on_return_press_call=btn.activate) - self._name_widgets: List[ba.Widget] = [] - self._roster: Optional[List[Dict[str, Any]]] = None + self._name_widgets: list[ba.Widget] = [] + self._roster: Optional[list[dict[str, Any]]] = None self._update_timer = ba.Timer(1.0, ba.WeakCall(self._update), repeat=True, diff --git a/assets/src/ba_data/python/bastd/ui/partyqueue.py b/assets/src/ba_data/python/bastd/ui/partyqueue.py index fd8df48b..f1b5a235 100644 --- a/assets/src/ba_data/python/bastd/ui/partyqueue.py +++ b/assets/src/ba_data/python/bastd/ui/partyqueue.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Sequence, List, Dict + from typing import Any, Optional, Sequence class PartyQueueWindow(ba.Window): @@ -181,8 +181,8 @@ class PartyQueueWindow(ba.Window): self._boost_price: Optional[ba.Widget] = None self._boost_label: Optional[ba.Widget] = None self._field_shown = False - self._dudes: List[PartyQueueWindow.Dude] = [] - self._dudes_by_id: Dict[int, PartyQueueWindow.Dude] = {} + self._dudes: list[PartyQueueWindow.Dude] = [] + self._dudes_by_id: dict[int, PartyQueueWindow.Dude] = {} self._line_left = 40.0 self._line_width = self._width - 190 self._line_bottom = self._height * 0.4 @@ -292,7 +292,7 @@ class PartyQueueWindow(ba.Window): """Close the ui.""" ba.containerwidget(edit=self._root_widget, transition='out_scale') - def _update_field(self, response: Dict[str, Any]) -> None: + def _update_field(self, response: dict[str, Any]) -> None: if self._angry_computer_image is None: self._angry_computer_image = ba.imagewidget( parent=self._root_widget, @@ -356,7 +356,7 @@ class PartyQueueWindow(ba.Window): self._dudes = [] self._dudes_by_id = {} - def on_update_response(self, response: Optional[Dict[str, Any]]) -> None: + def on_update_response(self, response: Optional[dict[str, Any]]) -> None: """We've received a response from an update to the server.""" # pylint: disable=too-many-branches if not self._root_widget: diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py index 620b7a04..adfeb3e9 100644 --- a/assets/src/ba_data/python/bastd/ui/play.py +++ b/assets/src/ba_data/python/bastd/ui/play.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class PlayWindow(ba.Window): @@ -37,7 +37,7 @@ class PlayWindow(ba.Window): height = 550 button_width = 400 - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -476,8 +476,8 @@ class PlayWindow(ba.Window): sessiontype=ba.FreeForAllSession).get_root_widget()) def _draw_dude(self, i: int, btn: ba.Widget, hoffs: float, v: float, - scl: float, position: Tuple[float, float], - color: Tuple[float, float, float]) -> None: + scl: float, position: tuple[float, float], + color: tuple[float, float, float]) -> None: h_extra = -100 v_extra = 130 eye_color = (0.7 * 1.0 + 0.3 * color[0], 0.7 * 1.0 + 0.3 * color[1], diff --git a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py index 483008c9..5aeadf67 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py @@ -9,17 +9,17 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Type + pass # FIXME: Could change this to be a classmethod of session types? class PlaylistTypeVars: """Defines values for a playlist type (config names to use, etc).""" - def __init__(self, sessiontype: Type[ba.Session]): + def __init__(self, sessiontype: type[ba.Session]): from ba.internal import (get_default_teams_playlist, get_default_free_for_all_playlist) - self.sessiontype: Type[ba.Session] + self.sessiontype: type[ba.Session] if issubclass(sessiontype, ba.DualTeamSession): play_mode_name = ba.Lstr(resource='playModes.teamsText', diff --git a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py index af51c57e..f12f26bf 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/addgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/addgame.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Optional + from typing import Optional from bastd.ui.playlist.editcontroller import PlaylistEditController @@ -112,7 +112,7 @@ class PlaylistAddGameWindow(ba.Window): ba.containerwidget(edit=self._root_widget, cancel_button=self._back_button, start_button=select_button) - self._selected_game_type: Optional[Type[ba.GameActivity]] = None + self._selected_game_type: Optional[type[ba.GameActivity]] = None ba.containerwidget(edit=self._root_widget, selected_child=self._scrollwidget) @@ -193,7 +193,7 @@ class PlaylistAddGameWindow(ba.Window): assert self._selected_game_type is not None self._editcontroller.add_game_type_selected(self._selected_game_type) - def _set_selected_game_type(self, gametype: Type[ba.GameActivity]) -> None: + def _set_selected_game_type(self, gametype: type[ba.GameActivity]) -> None: self._selected_game_type = gametype ba.textwidget(edit=self._selected_title_text, text=gametype.get_display_string()) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py index 0a3c7ef9..7646b3ff 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Optional, Tuple, Union + from typing import Optional, Union class PlaylistBrowserWindow(ba.Window): """Window for starting teams games.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], transition: Optional[str] = 'in_right', origin_widget: ba.Widget = None): # pylint: disable=too-many-statements @@ -27,7 +27,7 @@ class PlaylistBrowserWindow(ba.Window): from bastd.ui.playlist import PlaylistTypeVars # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -432,7 +432,7 @@ class PlaylistBrowserWindow(ba.Window): mark_unowned=True) for entry in playlist: mapname = entry['settings']['map'] - maptype: Optional[Type[ba.Map]] + maptype: Optional[type[ba.Map]] try: maptype = get_map_class(mapname) except ba.NotFoundError: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py index 4ee5b297..917e65ed 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/customizebrowser.py @@ -12,14 +12,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Type, Optional, Tuple, List, Dict + from typing import Any, Optional class PlaylistCustomizeBrowserWindow(ba.Window): """Window for viewing a playlist.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], transition: str = 'in_right', select_playlist: str = None, origin_widget: ba.Widget = None): @@ -28,7 +28,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): # pylint: disable=too-many-statements # pylint: disable=cyclic-import from bastd.ui import playlist - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -86,7 +86,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): h = 41 + x_inset b_color = (0.6, 0.53, 0.63) b_textcolor = (0.75, 0.7, 0.8) - self._lock_images: List[ba.Widget] = [] + self._lock_images: list[ba.Widget] = [] lock_tex = ba.gettexture('lock') scl = (1.1 if uiscale is ba.UIScale.SMALL else @@ -236,7 +236,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): self._selected_playlist_name: Optional[str] = None self._selected_playlist_index: Optional[int] = None - self._playlist_widgets: List[ba.Widget] = [] + self._playlist_widgets: list[ba.Widget] = [] self._refresh(select_playlist=select_playlist) @@ -539,7 +539,7 @@ class PlaylistCustomizeBrowserWindow(ba.Window): return if self._selected_playlist_name is None: return - plst: Optional[List[Dict[str, Any]]] + plst: Optional[list[dict[str, Any]]] if self._selected_playlist_name == '__default__': plst = self._pvars.get_default_list_call() else: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/edit.py b/assets/src/ba_data/python/bastd/ui/playlist/edit.py index cb5388a2..2b9e4c4b 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/edit.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/edit.py @@ -10,7 +10,7 @@ import ba import _ba if TYPE_CHECKING: - from typing import Optional, List + from typing import Optional from bastd.ui.playlist.editcontroller import PlaylistEditController @@ -106,7 +106,7 @@ class PlaylistEditWindow(ba.Window): on_return_press_call=self._save_press_with_sound) ba.widget(edit=cancel_button, down_widget=self._text_field) - self._list_widgets: List[ba.Widget] = [] + self._list_widgets: list[ba.Widget] = [] h = 40 + x_inset v = self._height - 172.0 diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py index 5c37c539..bf3e8326 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editcontroller.py @@ -10,17 +10,17 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, Type, List, Dict, Optional + from typing import Any, Optional class PlaylistEditController: """Coordinates various UIs involved in playlist editing.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], existing_playlist_name: str = None, transition: str = 'in_right', - playlist: List[Dict[str, Any]] = None, + playlist: list[dict[str, Any]] = None, playlist_name: str = None): from ba.internal import preload_map_preview_media, filter_playlist from bastd.ui.playlist import PlaylistTypeVars @@ -34,7 +34,7 @@ class PlaylistEditController: self._sessiontype = sessiontype self._editing_game = False - self._editing_game_type: Optional[Type[ba.GameActivity]] = None + self._editing_game_type: Optional[type[ba.GameActivity]] = None self._pvars = PlaylistTypeVars(sessiontype) self._existing_playlist_name = existing_playlist_name self._config_name_full = self._pvars.config_name + ' Playlists' @@ -106,15 +106,15 @@ class PlaylistEditController: """(internal)""" self._name = name - def get_playlist(self) -> List[Dict[str, Any]]: + def get_playlist(self) -> list[dict[str, Any]]: """Return the current state of the edited playlist.""" return copy.deepcopy(self._playlist) - def set_playlist(self, playlist: List[Dict[str, Any]]) -> None: + def set_playlist(self, playlist: list[dict[str, Any]]) -> None: """Set the playlist contents.""" self._playlist = copy.deepcopy(playlist) - def get_session_type(self) -> Type[ba.Session]: + def get_session_type(self) -> type[ba.Session]: """Return the ba.Session type for this edit-session.""" return self._sessiontype @@ -155,19 +155,19 @@ class PlaylistEditController: PlaylistEditWindow(editcontroller=self, transition='in_left').get_root_widget()) - def _show_edit_ui(self, gametype: Type[ba.GameActivity], - settings: Optional[Dict[str, Any]]) -> None: + def _show_edit_ui(self, gametype: type[ba.GameActivity], + settings: Optional[dict[str, Any]]) -> None: self._editing_game = (settings is not None) self._editing_game_type = gametype assert self._sessiontype is not None gametype.create_settings_ui(self._sessiontype, copy.deepcopy(settings), self._edit_game_done) - def add_game_type_selected(self, gametype: Type[ba.GameActivity]) -> None: + def add_game_type_selected(self, gametype: type[ba.GameActivity]) -> None: """(internal)""" self._show_edit_ui(gametype=gametype, settings=None) - def _edit_game_done(self, config: Optional[Dict[str, Any]]) -> None: + def _edit_game_done(self, config: Optional[dict[str, Any]]) -> None: from bastd.ui.playlist.edit import PlaylistEditWindow from bastd.ui.playlist.addgame import PlaylistAddGameWindow from ba.internal import get_type_name diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py index 8533cc11..98441087 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py @@ -12,20 +12,20 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Any, Dict, Callable, Optional, Union, List + from typing import Any, Callable, Optional, Union class PlaylistEditGameWindow(ba.Window): """Window for editing a game config.""" def __init__(self, - gametype: Type[ba.GameActivity], - sessiontype: Type[ba.Session], - config: Optional[Dict[str, Any]], - completion_call: Callable[[Optional[Dict[str, Any]]], Any], + gametype: type[ba.GameActivity], + sessiontype: type[ba.Session], + config: Optional[dict[str, Any]], + completion_call: Callable[[Optional[dict[str, Any]]], Any], default_selection: str = None, transition: str = 'in_right', - edit_info: Dict[str, Any] = None): + edit_info: dict[str, Any] = None): # pylint: disable=too-many-branches # pylint: disable=too-many-statements # pylint: disable=too-many-locals @@ -86,7 +86,7 @@ class PlaylistEditGameWindow(ba.Window): else: self._settings = {} - self._choice_selections: Dict[str, int] = {} + self._choice_selections: dict[str, int] = {} uiscale = ba.app.ui.uiscale width = 720 if uiscale is ba.UIScale.SMALL else 620 @@ -176,7 +176,7 @@ class PlaylistEditGameWindow(ba.Window): # Keep track of all the selectable widgets we make so we can wire # them up conveniently. - widget_column: List[List[ba.Widget]] = [] + widget_column: list[list[ba.Widget]] = [] # Map select button. ba.textwidget(parent=self._subcontainer, @@ -392,7 +392,7 @@ class PlaylistEditGameWindow(ba.Window): # Ok now wire up the column. try: # pylint: disable=unsubscriptable-object - prev_widgets: Optional[List[ba.Widget]] = None + prev_widgets: Optional[list[ba.Widget]] = None for cwdg in widget_column: if prev_widgets is not None: # Wire our rightmost to their rightmost. @@ -458,7 +458,7 @@ class PlaylistEditGameWindow(ba.Window): resource='offText')) self._settings[setting_name] = value - def _getconfig(self) -> Dict[str, Any]: + def _getconfig(self) -> dict[str, Any]: settings = copy.deepcopy(self._settings) settings['map'] = self._map return {'settings': settings} @@ -468,7 +468,7 @@ class PlaylistEditGameWindow(ba.Window): def _inc(self, ctrl: ba.Widget, min_val: Union[int, float], max_val: Union[int, float], increment: Union[int, float], - setting_type: Type, setting_name: str) -> None: + setting_type: type, setting_name: str) -> None: if setting_type == float: val = float(cast(str, ba.textwidget(query=ctrl))) else: diff --git a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py index 2381f6c5..fc79ce76 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/mapselect.py @@ -11,18 +11,18 @@ import _ba import ba if TYPE_CHECKING: - from typing import Type, Any, Callable, Dict, List, Tuple, Optional + from typing import Any, Callable, Optional class PlaylistMapSelectWindow(ba.Window): """Window to select a map.""" def __init__(self, - gametype: Type[ba.GameActivity], - sessiontype: Type[ba.Session], - config: Dict[str, Any], - edit_info: Dict[str, Any], - completion_call: Callable[[Optional[Dict[str, Any]]], Any], + gametype: type[ba.GameActivity], + sessiontype: type[ba.Session], + config: dict[str, Any], + edit_info: dict[str, Any], + completion_call: Callable[[Optional[dict[str, Any]]], Any], transition: str = 'in_right'): from ba.internal import get_filtered_map_name self._gametype = gametype @@ -30,7 +30,7 @@ class PlaylistMapSelectWindow(ba.Window): self._config = config self._completion_call = completion_call self._edit_info = edit_info - self._maps: List[Tuple[str, ba.Texture]] = [] + self._maps: list[tuple[str, ba.Texture]] = [] try: self._previous_map = get_filtered_map_name( config['settings']['map']) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/share.py b/assets/src/ba_data/python/bastd/ui/playlist/share.py index 0cd1ea4b..8355c39a 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/share.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/share.py @@ -12,7 +12,7 @@ import ba from bastd.ui import promocode if TYPE_CHECKING: - from typing import Any, Callable, Dict, Optional, Tuple + from typing import Any, Callable, Optional class SharePlaylistImportWindow(promocode.PromoCodeWindow): @@ -26,7 +26,7 @@ class SharePlaylistImportWindow(promocode.PromoCodeWindow): origin_widget=origin_widget) self._on_success_callback = on_success_callback - def _on_import_response(self, response: Optional[Dict[str, Any]]) -> None: + def _on_import_response(self, response: Optional[dict[str, Any]]) -> None: if response is None: ba.screenmessage(ba.Lstr(resource='errorText'), color=(1, 0, 0)) ba.playsound(ba.getsound('error')) @@ -67,7 +67,7 @@ class SharePlaylistResultsWindow(ba.Window): def __init__(self, name: str, data: str, - origin: Tuple[float, float] = (0.0, 0.0)): + origin: tuple[float, float] = (0.0, 0.0)): del origin # unused arg self._width = 450 self._height = 300 diff --git a/assets/src/ba_data/python/bastd/ui/playoptions.py b/assets/src/ba_data/python/bastd/ui/playoptions.py index af6725d9..e4b16d5a 100644 --- a/assets/src/ba_data/python/bastd/ui/playoptions.py +++ b/assets/src/ba_data/python/bastd/ui/playoptions.py @@ -11,16 +11,16 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Type, Tuple, Optional, Union + from typing import Any, Optional, Union class PlayOptionsWindow(popup.PopupWindow): """A popup window for configuring play options.""" def __init__(self, - sessiontype: Type[ba.Session], + sessiontype: type[ba.Session], playlist: str, - scale_origin: Tuple[float, float], + scale_origin: tuple[float, float], delegate: Any = None): # FIXME: Tidy this up. # pylint: disable=too-many-branches @@ -90,7 +90,7 @@ class PlayOptionsWindow(popup.PopupWindow): game_count = len(plst) for entry in plst: mapname = entry['settings']['map'] - maptype: Optional[Type[ba.Map]] + maptype: Optional[type[ba.Map]] try: maptype = get_map_class(mapname) except ba.NotFoundError: diff --git a/assets/src/ba_data/python/bastd/ui/popup.py b/assets/src/ba_data/python/bastd/ui/popup.py index 500c3796..d89374b2 100644 --- a/assets/src/ba_data/python/bastd/ui/popup.py +++ b/assets/src/ba_data/python/bastd/ui/popup.py @@ -11,20 +11,20 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Any, Sequence, Callable, Optional, List, Union + from typing import Any, Sequence, Callable, Optional, Union class PopupWindow: """A transient window that positions and scales itself for visibility.""" def __init__(self, - position: Tuple[float, float], - size: Tuple[float, float], + position: tuple[float, float], + size: tuple[float, float], scale: float = 1.0, - offset: Tuple[float, float] = (0, 0), - bg_color: Tuple[float, float, float] = (0.35, 0.55, 0.15), - focus_position: Tuple[float, float] = (0, 0), - focus_size: Tuple[float, float] = None, + offset: tuple[float, float] = (0, 0), + bg_color: tuple[float, float, float] = (0.35, 0.55, 0.15), + focus_position: tuple[float, float] = (0, 0), + focus_size: tuple[float, float] = None, toolbar_visibility: str = 'menu_minimal_no_back'): # pylint: disable=too-many-locals if focus_size is None: @@ -101,7 +101,7 @@ class PopupMenuWindow(PopupWindow): """A menu built using popup-window functionality.""" def __init__(self, - position: Tuple[float, float], + position: tuple[float, float], choices: Sequence[str], current_choice: str, delegate: Any = None, @@ -121,7 +121,7 @@ class PopupMenuWindow(PopupWindow): # FIXME: For the moment we base our width on these strings so # we need to flatten them. - choices_display_fin: List[str] = [] + choices_display_fin: list[str] = [] for choice_display in choices_display: choices_display_fin.append(choice_display.evaluate()) @@ -264,7 +264,7 @@ class PopupMenu: def __init__(self, parent: ba.Widget, - position: Tuple[float, float], + position: tuple[float, float], choices: Sequence[str], current_choice: str = None, on_value_change_call: Callable[[str], Any] = None, @@ -275,7 +275,7 @@ class PopupMenu: scale: float = None, choices_disabled: Sequence[str] = None, choices_display: Sequence[ba.Lstr] = None, - button_size: Tuple[float, float] = (160.0, 50.0), + button_size: tuple[float, float] = (160.0, 50.0), autoselect: bool = True): # pylint: disable=too-many-locals if choices_disabled is None: diff --git a/assets/src/ba_data/python/bastd/ui/profile/browser.py b/assets/src/ba_data/python/bastd/ui/profile/browser.py index e82fd29d..8d0ac7e7 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/browser.py +++ b/assets/src/ba_data/python/bastd/ui/profile/browser.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, List, Dict + from typing import Any, Optional class ProfileBrowserWindow(ba.Window): @@ -39,7 +39,7 @@ class ProfileBrowserWindow(ba.Window): ba.app.pause() # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -162,9 +162,9 @@ class ProfileBrowserWindow(ba.Window): border=2, margin=0) v -= 255 - self._profiles: Optional[Dict[str, Dict[str, Any]]] = None + self._profiles: Optional[dict[str, dict[str, Any]]] = None self._selected_profile = selected_profile - self._profile_widgets: List[ba.Widget] = [] + self._profile_widgets: list[ba.Widget] = [] self._refresh() self._restore_state() diff --git a/assets/src/ba_data/python/bastd/ui/profile/edit.py b/assets/src/ba_data/python/bastd/ui/profile/edit.py index c63cd165..d7df39ac 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/edit.py +++ b/assets/src/ba_data/python/bastd/ui/profile/edit.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, List + from typing import Optional from bastd.ui.colorpicker import ColorPicker @@ -38,9 +38,9 @@ class EditProfileWindow(ba.Window): self._in_main_menu = in_main_menu self._existing_profile = existing_profile self._r = 'editProfileWindow' - self._spazzes: List[str] = [] - self._icon_textures: List[ba.Texture] = [] - self._icon_tint_textures: List[ba.Texture] = [] + self._spazzes: list[str] = [] + self._icon_textures: list[ba.Texture] = [] + self._icon_tint_textures: list[ba.Texture] = [] # Grab profile colors or pick random ones. self._color, self._highlight = get_player_profile_colors( @@ -523,7 +523,7 @@ class EditProfileWindow(ba.Window): tint_color=self._color, tint2_color=self._highlight) - def _make_picker(self, picker_type: str, origin: Tuple[float, + def _make_picker(self, picker_type: str, origin: tuple[float, float]) -> None: from bastd.ui import colorpicker if picker_type == 'color': @@ -550,12 +550,12 @@ class EditProfileWindow(ba.Window): selected_profile=self._existing_profile, in_main_menu=self._in_main_menu).get_root_widget()) - def _set_color(self, color: Tuple[float, float, float]) -> None: + def _set_color(self, color: tuple[float, float, float]) -> None: self._color = color if self._color_button: ba.buttonwidget(edit=self._color_button, color=color) - def _set_highlight(self, color: Tuple[float, float, float]) -> None: + def _set_highlight(self, color: tuple[float, float, float]) -> None: self._highlight = color if self._highlight_button: ba.buttonwidget(edit=self._highlight_button, color=color) @@ -575,7 +575,7 @@ class EditProfileWindow(ba.Window): print('color_picker_closing got unknown tag ' + str(tag)) def color_picker_selected_color(self, picker: ColorPicker, - color: Tuple[float, float, float]) -> None: + color: tuple[float, float, float]) -> None: """Called when a color is selected in a color picker.""" if not self._root_widget: return diff --git a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py index c28777fd..5d2c8f16 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/upgrade.py +++ b/assets/src/ba_data/python/bastd/ui/profile/upgrade.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Dict + from typing import Any, Optional from bastd.ui.profile.edit import EditProfileWindow @@ -134,7 +134,7 @@ class ProfileUpgradeWindow(ba.Window): repeat=True) self._update() - def _profile_check_result(self, result: Optional[Dict[str, Any]]) -> None: + def _profile_check_result(self, result: Optional[dict[str, Any]]) -> None: if result is None: ba.textwidget( edit=self._status_text, diff --git a/assets/src/ba_data/python/bastd/ui/promocode.py b/assets/src/ba_data/python/bastd/ui/promocode.py index dfd1fddd..ce416a54 100644 --- a/assets/src/ba_data/python/bastd/ui/promocode.py +++ b/assets/src/ba_data/python/bastd/ui/promocode.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Optional, Tuple + from typing import Optional class PromoCodeWindow(ba.Window): @@ -19,7 +19,7 @@ class PromoCodeWindow(ba.Window): def __init__(self, modal: bool = False, origin_widget: ba.Widget = None): - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/purchase.py b/assets/src/ba_data/python/bastd/ui/purchase.py index 519fb489..c516b43e 100644 --- a/assets/src/ba_data/python/bastd/ui/purchase.py +++ b/assets/src/ba_data/python/bastd/ui/purchase.py @@ -10,14 +10,14 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, List, Optional + from typing import Any, Optional class PurchaseWindow(ba.Window): """Window for purchasing one or more items.""" def __init__(self, - items: List[str], + items: list[str], transition: str = 'in_right', header_text: ba.Lstr = None): from ba.internal import get_store_item_display_size @@ -50,7 +50,7 @@ class PurchaseWindow(ba.Window): scale=1.2, color=(1, 0.8, 0.3, 1)) size = get_store_item_display_size(items[0]) - display: Dict[str, Any] = {} + display: dict[str, Any] = {} storeitemui.instantiate_store_item_display( items[0], display, diff --git a/assets/src/ba_data/python/bastd/ui/radiogroup.py b/assets/src/ba_data/python/bastd/ui/radiogroup.py index 20d3f9cc..39f2aff7 100644 --- a/assets/src/ba_data/python/bastd/ui/radiogroup.py +++ b/assets/src/ba_data/python/bastd/ui/radiogroup.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import List, Any, Callable, Sequence + from typing import Any, Callable, Sequence def make_radio_group(check_boxes: Sequence[ba.Widget], @@ -17,7 +17,7 @@ def make_radio_group(check_boxes: Sequence[ba.Widget], value_change_call: Callable[[str], Any]) -> None: """Link the provided check_boxes together into a radio group.""" - def _radio_press(check_string: str, other_check_boxes: List[ba.Widget], + def _radio_press(check_string: str, other_check_boxes: list[ba.Widget], val: int) -> None: if val == 1: value_change_call(check_string) diff --git a/assets/src/ba_data/python/bastd/ui/serverdialog.py b/assets/src/ba_data/python/bastd/ui/serverdialog.py index 17565036..1f98ef7b 100644 --- a/assets/src/ba_data/python/bastd/ui/serverdialog.py +++ b/assets/src/ba_data/python/bastd/ui/serverdialog.py @@ -10,13 +10,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, Optional + from typing import Any, Optional class ServerDialogWindow(ba.Window): """A dialog window driven by the master-server.""" - def __init__(self, data: Dict[str, Any]): + def __init__(self, data: dict[str, Any]): self._dialog_id = data['dialogID'] txt = ba.Lstr(translate=('serverResponses', data['text']), subs=data.get('subs', [])).evaluate() diff --git a/assets/src/ba_data/python/bastd/ui/settings/advanced.py b/assets/src/ba_data/python/bastd/ui/settings/advanced.py index 5d428cb7..d281b4f3 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/advanced.py +++ b/assets/src/ba_data/python/bastd/ui/settings/advanced.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Tuple, Any, Optional, List, Dict + from typing import Any, Optional class AdvancedSettingsWindow(ba.Window): @@ -31,7 +31,7 @@ class AdvancedSettingsWindow(ba.Window): app = ba.app # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -57,8 +57,8 @@ class AdvancedSettingsWindow(ba.Window): 1.4 if uiscale is ba.UIScale.MEDIUM else 1.0), stack_offset=(0, -25) if uiscale is ba.UIScale.SMALL else (0, 0))) self._prev_lang = '' - self._prev_lang_list: List[str] = [] - self._complete_langs_list: Optional[List] = None + self._prev_lang_list: list[str] = [] + self._complete_langs_list: Optional[list] = None self._complete_langs_error = False self._language_popup: Optional[popup_ui.PopupMenu] = None @@ -693,7 +693,7 @@ class AdvancedSettingsWindow(ba.Window): self._save_state() ba.timer(0.1, ba.WeakCall(self._rebuild), timetype=ba.TimeType.REAL) - def _completed_langs_cb(self, results: Optional[Dict[str, Any]]) -> None: + def _completed_langs_cb(self, results: Optional[dict[str, Any]]) -> None: if results is not None and results['langs'] is not None: self._complete_langs_list = results['langs'] self._complete_langs_error = False diff --git a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py index ede3823d..cf44b215 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py +++ b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Union + from typing import Optional, Union class AllSettingsWindow(ba.Window): @@ -28,7 +28,7 @@ class AllSettingsWindow(ba.Window): threading.Thread(target=self._preload_modules).start() ba.set_analytics_screen('Settings Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/audio.py b/assets/src/ba_data/python/bastd/ui/settings/audio.py index 99f98d93..0e27e38f 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/audio.py +++ b/assets/src/ba_data/python/bastd/ui/settings/audio.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class AudioSettingsWindow(ba.Window): @@ -28,7 +28,7 @@ class AudioSettingsWindow(ba.Window): music = ba.app.music # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/controls.py b/assets/src/ba_data/python/bastd/ui/settings/controls.py index ee06d279..81aa0715 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/controls.py +++ b/assets/src/ba_data/python/bastd/ui/settings/controls.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class ControlsSettingsWindow(ba.Window): @@ -27,7 +27,7 @@ class ControlsSettingsWindow(ba.Window): from bastd.ui import popup as popup_ui self._have_selected_child = False - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] # If they provided an origin-widget, scale up from that. if origin_widget is not None: diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py index 4c345094..b9511382 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepad.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepad.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Any, Optional, Union, Tuple, Callable + from typing import Any, Optional, Union, Callable class GamepadSettingsWindow(ba.Window): @@ -62,7 +62,7 @@ class GamepadSettingsWindow(ba.Window): for widget in self._root_widget.get_children(): widget.delete() - self._textwidgets: Dict[str, ba.Widget] = {} + self._textwidgets: dict[str, ba.Widget] = {} # If we were supplied with settings, we're a secondary joystick and # just operate on that. in the other (normal) case we make our own. @@ -348,7 +348,7 @@ class GamepadSettingsWindow(ba.Window): """(internal)""" return self._is_secondary - def get_settings(self) -> Dict[str, Any]: + def get_settings(self) -> dict[str, Any]: """(internal)""" assert self._settings is not None return self._settings @@ -528,7 +528,7 @@ class GamepadSettingsWindow(ba.Window): return self._input.get_button_name(self._settings[control]) return ba.Lstr(resource=self._r + '.unsetText') - def _gamepad_event(self, control: str, event: Dict[str, Any], + def _gamepad_event(self, control: str, event: dict[str, Any], dialog: AwaitGamepadInputWindow) -> None: # pylint: disable=too-many-nested-blocks # pylint: disable=too-many-branches @@ -647,8 +647,8 @@ class GamepadSettingsWindow(ba.Window): dialog.die() def _capture_button(self, - pos: Tuple[float, float], - color: Tuple[float, float, float], + pos: tuple[float, float], + color: tuple[float, float, float], texture: ba.Texture, button: str, scale: float = 1.0, @@ -713,7 +713,7 @@ class GamepadSettingsWindow(ba.Window): assert self._settings is not None if self._input: dst = get_input_device_config(self._input, default=True) - dst2: Dict[str, Any] = dst[0][dst[1]] + dst2: dict[str, Any] = dst[0][dst[1]] dst2.clear() # Store any values that aren't -1. @@ -752,7 +752,7 @@ class AwaitGamepadInputWindow(ba.Window): self, gamepad: ba.InputDevice, button: str, - callback: Callable[[str, Dict[str, Any], AwaitGamepadInputWindow], + callback: Callable[[str, dict[str, Any], AwaitGamepadInputWindow], Any], message: ba.Lstr = None, message2: ba.Lstr = None): @@ -815,7 +815,7 @@ class AwaitGamepadInputWindow(ba.Window): if self._root_widget: ba.containerwidget(edit=self._root_widget, transition='out_scale') - def _event_callback(self, event: Dict[str, Any]) -> None: + def _event_callback(self, event: dict[str, Any]) -> None: input_device = event['input_device'] assert isinstance(input_device, ba.InputDevice) diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py index 07c1074d..116d0fec 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadadvanced.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Dict, Tuple, Optional, Any + from typing import Optional, Any from bastd.ui.settings import gamepad as gpsui @@ -27,7 +27,7 @@ class GamepadAdvancedSettingsWindow(ba.Window): self._width = 900 if uiscale is ba.UIScale.SMALL else 700 self._x_inset = x_inset = 100 if uiscale is ba.UIScale.SMALL else 0 self._height = 402 if uiscale is ba.UIScale.SMALL else 512 - self._textwidgets: Dict[str, ba.Widget] = {} + self._textwidgets: dict[str, ba.Widget] = {} super().__init__(root_widget=ba.containerwidget( transition='in_scale', size=(self._width, self._height), @@ -331,10 +331,10 @@ class GamepadAdvancedSettingsWindow(ba.Window): def _capture_button( self, - pos: Tuple[float, float], + pos: tuple[float, float], name: ba.Lstr, control: str, - message: Optional[ba.Lstr] = None) -> Tuple[ba.Widget, ba.Widget]: + message: Optional[ba.Lstr] = None) -> tuple[ba.Widget, ba.Widget]: if message is None: message = ba.Lstr(resource=self._parent_window.get_r() + '.pressAnyButtonText') @@ -398,13 +398,13 @@ class GamepadAdvancedSettingsWindow(ba.Window): self, name: ba.Lstr, control: str, - position: Tuple[float, float], + position: tuple[float, float], min_val: float = 0.0, max_val: float = 100.0, increment: float = 1.0, change_sound: bool = True, x_offset: float = 0.0, - displayname: ba.Lstr = None) -> Tuple[ba.Widget, ba.Widget]: + displayname: ba.Lstr = None) -> tuple[ba.Widget, ba.Widget]: if displayname is None: displayname = name @@ -455,7 +455,7 @@ class GamepadAdvancedSettingsWindow(ba.Window): ba.textwidget(edit=self._textwidgets[control], text=self._parent_window.get_control_value_name(control)) - def _gamepad_event(self, control: str, event: Dict[str, Any], + def _gamepad_event(self, control: str, event: dict[str, Any], dialog: gpsui.AwaitGamepadInputWindow) -> None: ext = self._parent_window.get_ext() if control in ['triggerRun1' + ext, 'triggerRun2' + ext]: diff --git a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py index 71b867c8..8053fe30 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py +++ b/assets/src/ba_data/python/bastd/ui/settings/gamepadselect.py @@ -10,10 +10,10 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Any + from typing import Any -def gamepad_configure_callback(event: Dict[str, Any]) -> None: +def gamepad_configure_callback(event: dict[str, Any]) -> None: """Respond to a gamepad button press during config selection.""" from ba.internal import get_remote_app_name from bastd.ui.settings import gamepad diff --git a/assets/src/ba_data/python/bastd/ui/settings/graphics.py b/assets/src/ba_data/python/bastd/ui/settings/graphics.py index df3e89ca..b4e5955a 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/graphics.py +++ b/assets/src/ba_data/python/bastd/ui/settings/graphics.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Tuple, Optional + from typing import Optional class GraphicsSettingsWindow(ba.Window): @@ -25,7 +25,7 @@ class GraphicsSettingsWindow(ba.Window): from bastd.ui import popup from bastd.ui.config import ConfigCheckBox, ConfigNumberEdit # if they provided an origin-widget, scale up from that - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() diff --git a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py index 7482381c..42c634cb 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/keyboard.py +++ b/assets/src/ba_data/python/bastd/ui/settings/keyboard.py @@ -10,7 +10,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Dict, Tuple, Any, Optional + from typing import Any, Optional class ConfigKeyboardWindow(ba.Window): @@ -47,7 +47,7 @@ class ConfigKeyboardWindow(ba.Window): widget.delete() # Fill our temp config with present values. - self._settings: Dict[str, int] = {} + self._settings: dict[str, int] = {} for button in [ 'buttonJump', 'buttonPunch', 'buttonBomb', 'buttonPickUp', 'buttonStart', 'buttonStart2', 'buttonUp', 'buttonDown', @@ -165,8 +165,8 @@ class ConfigKeyboardWindow(ba.Window): scale=1.0) def _capture_button(self, - pos: Tuple[float, float], - color: Tuple[float, float, float], + pos: tuple[float, float], + color: tuple[float, float, float], texture: ba.Texture, button: str, scale: float = 1.0) -> None: @@ -224,7 +224,7 @@ class ConfigKeyboardWindow(ba.Window): return dst = get_input_device_config(self._input, default=False) - dst2: Dict[str, Any] = dst[0][dst[1]] + dst2: dict[str, Any] = dst[0][dst[1]] dst2.clear() # Store any values that aren't -1. @@ -292,7 +292,7 @@ class AwaitKeyboardInputWindow(ba.Window): if self._root_widget: ba.containerwidget(edit=self._root_widget, transition='out_left') - def _button_callback(self, event: Dict[str, Any]) -> None: + def _button_callback(self, event: dict[str, Any]) -> None: self._settings[self._capture_button] = event['button'] if event['type'] == 'BUTTONDOWN': bname = event['input_device'].get_button_name(event['button']) diff --git a/assets/src/ba_data/python/bastd/ui/settings/plugins.py b/assets/src/ba_data/python/bastd/ui/settings/plugins.py index 72e44805..13706eff 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/plugins.py +++ b/assets/src/ba_data/python/bastd/ui/settings/plugins.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Tuple, Optional, Dict + from typing import Optional class PluginSettingsWindow(ba.Window): @@ -22,7 +22,7 @@ class PluginSettingsWindow(ba.Window): app = ba.app # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -98,7 +98,7 @@ class PluginSettingsWindow(ba.Window): color=(1, 0, 0)) ba.playsound(ba.getsound('error')) pluglist = ba.app.plugins.potential_plugins - plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) for i, availplug in enumerate(pluglist): active = availplug.class_path in ba.app.plugins.active_plugins @@ -134,7 +134,7 @@ class PluginSettingsWindow(ba.Window): ba.screenmessage( ba.Lstr(resource='settingsWindowAdvanced.mustRestartText'), color=(1.0, 0.5, 0.0)) - plugstates: Dict[str, Dict] = ba.app.config.setdefault('Plugins', {}) + plugstates: dict[str, dict] = ba.app.config.setdefault('Plugins', {}) assert isinstance(plugstates, dict) plugstate = plugstates.setdefault(plug.class_path, {}) plugstate['enabled'] = value diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py index 810311da..51f237e8 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/testing.py +++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, List + from typing import Any class TestingWindow(ba.Window): @@ -19,7 +19,7 @@ class TestingWindow(ba.Window): def __init__(self, title: ba.Lstr, - entries: List[Dict[str, Any]], + entries: list[dict[str, Any]], transition: str = 'in_right'): uiscale = ba.app.ui.uiscale self._width = 600 @@ -146,7 +146,7 @@ class TestingWindow(ba.Window): right_widget=btn, on_activate_call=self._on_reset_press) - def _get_entry(self, name: str) -> Dict[str, Any]: + def _get_entry(self, name: str) -> dict[str, Any]: for entry in self._entries: if entry['name'] == name: return entry diff --git a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py index 7065d463..a899caac 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py +++ b/assets/src/ba_data/python/bastd/ui/settings/vrtesting.py @@ -10,7 +10,7 @@ import ba from bastd.ui.settings import testing if TYPE_CHECKING: - from typing import Any, Dict, List + from typing import Any class VRTestingWindow(testing.TestingWindow): @@ -18,7 +18,7 @@ class VRTestingWindow(testing.TestingWindow): def __init__(self, transition: str = 'in_right'): - entries: List[Dict[str, Any]] = [] + entries: list[dict[str, Any]] = [] app = ba.app # these are gear-vr only if app.platform == 'android' and app.subplatform == 'oculus': diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py index 7989d329..cc125175 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py @@ -11,7 +11,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, List, Tuple, Dict + from typing import Any, Optional class SoundtrackBrowserWindow(ba.Window): @@ -24,7 +24,7 @@ class SoundtrackBrowserWindow(ba.Window): # pylint: disable=too-many-statements # If they provided an origin-widget, scale up from that. - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -81,7 +81,7 @@ class SoundtrackBrowserWindow(ba.Window): b_color = (0.6, 0.53, 0.63) b_textcolor = (0.75, 0.7, 0.8) lock_tex = ba.gettexture('lock') - self._lock_images: List[ba.Widget] = [] + self._lock_images: list[ba.Widget] = [] scl = (1.0 if uiscale is ba.UIScale.SMALL else 1.13 if uiscale is ba.UIScale.MEDIUM else 1.4) @@ -195,10 +195,10 @@ class SoundtrackBrowserWindow(ba.Window): if ba.app.ui.use_toolbars else self._scrollwidget) self._col = ba.columnwidget(parent=scrollwidget, border=2, margin=0) - self._soundtracks: Optional[Dict[str, Any]] = None + self._soundtracks: Optional[dict[str, Any]] = None self._selected_soundtrack: Optional[str] = None self._selected_soundtrack_index: Optional[int] = None - self._soundtrack_widgets: List[ba.Widget] = [] + self._soundtrack_widgets: list[ba.Widget] = [] self._allow_changing_soundtracks = False self._refresh() if self._back_button is not None: @@ -259,7 +259,7 @@ class SoundtrackBrowserWindow(ba.Window): if self._selected_soundtrack is None: return - sdtk: Dict[str, Any] + sdtk: dict[str, Any] if self._selected_soundtrack == '__default__': sdtk = {} else: diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py index e264d115..7e08f0f0 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/edit.py @@ -11,14 +11,14 @@ from typing import TYPE_CHECKING, cast import ba if TYPE_CHECKING: - from typing import Any, Dict, Union, Optional + from typing import Any, Union, Optional class SoundtrackEditWindow(ba.Window): """Window for editing a soundtrack.""" def __init__(self, - existing_soundtrack: Optional[Union[str, Dict[str, Any]]], + existing_soundtrack: Optional[Union[str, dict[str, Any]]], transition: str = 'in_right'): # pylint: disable=too-many-statements appconfig = ba.app.config @@ -147,7 +147,7 @@ class SoundtrackEditWindow(ba.Window): claims_tab=True, selection_loops_to_parent=True) - self._song_type_buttons: Dict[str, ba.Widget] = {} + self._song_type_buttons: dict[str, ba.Widget] = {} self._refresh() ba.buttonwidget(edit=cancel_button, on_activate_call=self._cancel) ba.containerwidget(edit=self._root_widget, cancel_button=cancel_button) @@ -266,7 +266,7 @@ class SoundtrackEditWindow(ba.Window): prev_test_button = btn @classmethod - def _restore_editor(cls, state: Dict[str, Any], musictype: str, + def _restore_editor(cls, state: dict[str, Any], musictype: str, entry: Any) -> None: music = ba.app.music diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py index 1f149b02..ff50e6b9 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/macmusicapp.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING import ba if TYPE_CHECKING: - from typing import Any, List, Optional, Callable + from typing import Any, Optional, Callable class MacMusicAppPlaylistSelectWindow(ba.Window): @@ -66,7 +66,7 @@ class MacMusicAppPlaylistSelectWindow(ba.Window): ba.containerwidget(edit=self._root_widget, selected_child=self._scrollwidget) - def _playlists_cb(self, playlists: List[str]) -> None: + def _playlists_cb(self, playlists: list[str]) -> None: if self._column: for widget in self._column.get_children(): widget.delete() diff --git a/assets/src/ba_data/python/bastd/ui/specialoffer.py b/assets/src/ba_data/python/bastd/ui/specialoffer.py index 3e3a5421..5b2c2ab6 100644 --- a/assets/src/ba_data/python/bastd/ui/specialoffer.py +++ b/assets/src/ba_data/python/bastd/ui/specialoffer.py @@ -11,13 +11,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Dict, Optional, Union + from typing import Any, Optional, Union class SpecialOfferWindow(ba.Window): """Window for presenting sales/etc.""" - def __init__(self, offer: Dict[str, Any], transition: str = 'in_right'): + def __init__(self, offer: dict[str, Any], transition: str = 'in_right'): # pylint: disable=too-many-statements # pylint: disable=too-many-branches # pylint: disable=too-many-locals @@ -159,7 +159,7 @@ class SpecialOfferWindow(ba.Window): timetype=ba.TimeType.REAL) size = get_store_item_display_size(self._offer_item) - display: Dict[str, Any] = {} + display: dict[str, Any] = {} storeitemui.instantiate_store_item_display( self._offer_item, display, diff --git a/assets/src/ba_data/python/bastd/ui/store/browser.py b/assets/src/ba_data/python/bastd/ui/store/browser.py index 990f4067..6d757c2a 100644 --- a/assets/src/ba_data/python/bastd/ui/store/browser.py +++ b/assets/src/ba_data/python/bastd/ui/store/browser.py @@ -14,8 +14,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import (Any, Callable, Optional, Tuple, Dict, Union, Sequence, - List) + from typing import Any, Callable, Optional, Union, Sequence class StoreBrowserWindow(ba.Window): @@ -46,7 +45,7 @@ class StoreBrowserWindow(ba.Window): ba.set_analytics_screen('Store Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] # If they provided an origin-widget, scale up from that. if origin_widget is not None: @@ -57,7 +56,7 @@ class StoreBrowserWindow(ba.Window): self._transition_out = 'out_right' scale_origin = None - self.button_infos: Optional[Dict[str, Dict[str, Any]]] = None + self.button_infos: Optional[dict[str, dict[str, Any]]] = None self.update_buttons_timer: Optional[ba.Timer] = None self._status_textwidget_update_timer = None @@ -185,8 +184,8 @@ class StoreBrowserWindow(ba.Window): size=(self._width - tab_buffer_h, 50), on_select_call=self._set_tab) - self._purchasable_count_widgets: Dict[StoreBrowserWindow.TabID, - Dict[str, Any]] = {} + self._purchasable_count_widgets: dict[StoreBrowserWindow.TabID, + dict[str, Any]] = {} # Create our purchasable-items tags and have them update over time. for tab_id, tab in self._tab_row.tabs.items(): @@ -388,7 +387,7 @@ class StoreBrowserWindow(ba.Window): ba.WeakCall(self._on_response, data), timetype=ba.TimeType.REAL) - def _on_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_response(self, data: Optional[dict[str, Any]]) -> None: # FIXME: clean this up. # pylint: disable=protected-access window = self._window() @@ -402,7 +401,7 @@ class StoreBrowserWindow(ba.Window): # Actually start the purchase locally. def _purchase_check_result(self, item: str, is_ticket_purchase: bool, - result: Optional[Dict[str, Any]]) -> None: + result: Optional[dict[str, Any]]) -> None: if result is None: ba.playsound(ba.getsound('error')) ba.screenmessage( @@ -685,7 +684,7 @@ class StoreBrowserWindow(ba.Window): ba.textwidget(edit=b_info['descriptionText'], color=description_color) - def _on_response(self, data: Optional[Dict[str, Any]]) -> None: + def _on_response(self, data: Optional[dict[str, Any]]) -> None: # pylint: disable=too-many-statements # clear status text.. @@ -710,7 +709,7 @@ class StoreBrowserWindow(ba.Window): class _Store: def __init__(self, store_window: StoreBrowserWindow, - sdata: Dict[str, Any], width: float): + sdata: dict[str, Any], width: float): from ba.internal import (get_store_item_display_size, get_store_layout) self._store_window = store_window @@ -855,7 +854,7 @@ class StoreBrowserWindow(ba.Window): maxwidth=700, transition_delay=0.4) - prev_row_buttons: Optional[List] = None + prev_row_buttons: Optional[list] = None this_row_buttons = [] delay = 0.3 @@ -881,7 +880,7 @@ class StoreBrowserWindow(ba.Window): math.floor((self._width - boffs_h - 20) / (b_width + button_spacing))) col = 0 - item: Dict[str, Any] + item: dict[str, Any] assert self._store_window.button_infos is not None for i, item_name in enumerate(section['items']): item = self._store_window.button_infos[ diff --git a/assets/src/ba_data/python/bastd/ui/store/item.py b/assets/src/ba_data/python/bastd/ui/store/item.py index 841ae1f2..ea49deda 100644 --- a/assets/src/ba_data/python/bastd/ui/store/item.py +++ b/assets/src/ba_data/python/bastd/ui/store/item.py @@ -9,13 +9,13 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Tuple, Dict, Optional + from typing import Any, Optional def instantiate_store_item_display(item_name: str, - item: Dict[str, Any], + item: dict[str, Any], parent_widget: ba.Widget, - b_pos: Tuple[float, float], + b_pos: tuple[float, float], b_width: float, b_height: float, boffs_h: float = 0.0, diff --git a/assets/src/ba_data/python/bastd/ui/tabs.py b/assets/src/ba_data/python/bastd/ui/tabs.py index 62e8a2fd..b3dc38a0 100644 --- a/assets/src/ba_data/python/bastd/ui/tabs.py +++ b/assets/src/ba_data/python/bastd/ui/tabs.py @@ -10,15 +10,15 @@ from typing import TYPE_CHECKING, TypeVar, Generic import ba if TYPE_CHECKING: - from typing import Any, Callable, Dict, Tuple, List, Sequence, Optional + from typing import Any, Callable, Optional @dataclass class Tab: """Info for an individual tab in a TabRow""" button: ba.Widget - position: Tuple[float, float] - size: Tuple[float, float] + position: tuple[float, float] + size: tuple[float, float] T = TypeVar('T') @@ -32,13 +32,13 @@ class TabRow(Generic[T]): def __init__(self, parent: ba.Widget, - tabdefs: List[Tuple[T, ba.Lstr]], - pos: Tuple[float, float], - size: Tuple[float, float], + tabdefs: list[tuple[T, ba.Lstr]], + pos: tuple[float, float], + size: tuple[float, float], on_select_call: Callable[[T], None] = None) -> None: if not tabdefs: raise ValueError('At least one tab def is required') - self.tabs: Dict[T, Tab] = {} + self.tabs: dict[T, Tab] = {} tab_pos_v = pos[1] tab_button_width = float(size[0]) / len(tabdefs) tab_spacing = (250.0 - tab_button_width) * 0.06 diff --git a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py index 9f8450e7..fc789717 100644 --- a/assets/src/ba_data/python/bastd/ui/teamnamescolors.py +++ b/assets/src/ba_data/python/bastd/ui/teamnamescolors.py @@ -10,14 +10,14 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Tuple, List, Sequence + from typing import Sequence from bastd.ui.colorpicker import ColorPicker class TeamNamesColorsWindow(popup.PopupWindow): """A popup window for customizing team names and colors.""" - def __init__(self, scale_origin: Tuple[float, float]): + def __init__(self, scale_origin: tuple[float, float]): from ba.internal import DEFAULT_TEAM_COLORS, DEFAULT_TEAM_NAMES self._width = 500 self._height = 330 @@ -44,8 +44,8 @@ class TeamNamesColorsWindow(popup.PopupWindow): self._colors = list( appconfig.get('Custom Team Colors', DEFAULT_TEAM_COLORS)) - self._color_buttons: List[ba.Widget] = [] - self._color_text_fields: List[ba.Widget] = [] + self._color_buttons: list[ba.Widget] = [] + self._color_text_fields: list[ba.Widget] = [] resetbtn = ba.buttonwidget( parent=self.root_widget, @@ -145,7 +145,7 @@ class TeamNamesColorsWindow(popup.PopupWindow): # either the default raw value or its translation we consider it # default. (the fact that team names get translated makes this # situation a bit sloppy) - new_names: List[str] = [] + new_names: list[str] = [] is_default = True for i in range(2): name = cast(str, ba.textwidget(query=self._color_text_fields[i])) diff --git a/assets/src/ba_data/python/bastd/ui/tournamententry.py b/assets/src/ba_data/python/bastd/ui/tournamententry.py index 12ed8b3a..17373870 100644 --- a/assets/src/ba_data/python/bastd/ui/tournamententry.py +++ b/assets/src/ba_data/python/bastd/ui/tournamententry.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Callable, Optional, Dict + from typing import Any, Callable, Optional class TournamentEntryWindow(popup.PopupWindow): @@ -20,10 +20,10 @@ class TournamentEntryWindow(popup.PopupWindow): def __init__(self, tournament_id: str, tournament_activity: ba.Activity = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), delegate: Any = None, scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), on_close_call: Callable[[], Any] = None): # Needs some tidying. # pylint: disable=too-many-branches @@ -302,7 +302,7 @@ class TournamentEntryWindow(popup.PopupWindow): self._update() self._restore_state() - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: accounts = ba.app.accounts self._running_query = False diff --git a/assets/src/ba_data/python/bastd/ui/tournamentscores.py b/assets/src/ba_data/python/bastd/ui/tournamentscores.py index e162b47b..ec704d93 100644 --- a/assets/src/ba_data/python/bastd/ui/tournamentscores.py +++ b/assets/src/ba_data/python/bastd/ui/tournamentscores.py @@ -11,7 +11,7 @@ import ba from bastd.ui import popup as popup_ui if TYPE_CHECKING: - from typing import Any, Tuple, Sequence, Callable, Dict, Optional, List + from typing import Any, Sequence, Callable, Optional class TournamentScoresWindow(popup_ui.PopupWindow): @@ -20,9 +20,9 @@ class TournamentScoresWindow(popup_ui.PopupWindow): def __init__(self, tournament_id: str, tournament_activity: ba.GameActivity = None, - position: Tuple[float, float] = (0.0, 0.0), + position: tuple[float, float] = (0.0, 0.0), scale: float = None, - offset: Tuple[float, float] = (0.0, 0.0), + offset: tuple[float, float] = (0.0, 0.0), tint_color: Sequence[float] = (1.0, 1.0, 1.0), tint2_color: Sequence[float] = (1.0, 1.0, 1.0), selected_character: str = None, @@ -107,11 +107,11 @@ class TournamentScoresWindow(popup_ui.PopupWindow): callback=ba.WeakCall( self._on_tournament_query_response)) - def _on_tournament_query_response(self, data: Optional[Dict[str, + def _on_tournament_query_response(self, data: Optional[dict[str, Any]]) -> None: if data is not None: # this used to be the whole payload - data_t: List[Dict[str, Any]] = data['t'] + data_t: list[dict[str, Any]] = data['t'] # kill our loading text if we've got scores.. otherwise just # replace it with 'no scores yet' if data_t[0]['scores']: diff --git a/assets/src/ba_data/python/bastd/ui/trophies.py b/assets/src/ba_data/python/bastd/ui/trophies.py index 4763172c..4e0ceac8 100644 --- a/assets/src/ba_data/python/bastd/ui/trophies.py +++ b/assets/src/ba_data/python/bastd/ui/trophies.py @@ -10,15 +10,15 @@ import ba from bastd.ui import popup if TYPE_CHECKING: - from typing import Any, Tuple, Dict, List + from typing import Any class TrophiesWindow(popup.PopupWindow): """Popup window for viewing trophies.""" def __init__(self, - position: Tuple[float, float], - data: Dict[str, Any], + position: tuple[float, float], + data: dict[str, Any], scale: float = None): self._data = data uiscale = ba.app.ui.uiscale @@ -110,7 +110,7 @@ class TrophiesWindow(popup.PopupWindow): def _create_trophy_type_widgets(self, eq_text: str, incr: int, multi_txt: str, sub_height: int, sub_width: int, - trophy_types: List[List[str]]) -> int: + trophy_types: list[list[str]]) -> int: from ba.internal import get_trophy_string pts = 0 for i, trophy_type in enumerate(trophy_types): diff --git a/assets/src/ba_data/python/bastd/ui/watch.py b/assets/src/ba_data/python/bastd/ui/watch.py index b27a381a..c7e871e6 100644 --- a/assets/src/ba_data/python/bastd/ui/watch.py +++ b/assets/src/ba_data/python/bastd/ui/watch.py @@ -12,7 +12,7 @@ import _ba import ba if TYPE_CHECKING: - from typing import Any, Optional, Tuple, Dict + from typing import Any, Optional class WatchWindow(ba.Window): @@ -30,7 +30,7 @@ class WatchWindow(ba.Window): # pylint: disable=too-many-statements from bastd.ui.tabs import TabRow ba.set_analytics_screen('Watch Window') - scale_origin: Optional[Tuple[float, float]] + scale_origin: Optional[tuple[float, float]] if origin_widget is not None: self._transition_out = 'out_scale' scale_origin = origin_widget.get_screen_space_center() @@ -39,7 +39,7 @@ class WatchWindow(ba.Window): self._transition_out = 'out_right' scale_origin = None ba.app.ui.set_main_menu_location('Watch') - self._tab_data: Dict[str, Any] = {} + self._tab_data: dict[str, Any] = {} self._my_replays_scroll_width: Optional[float] = None self._my_replays_watch_replay_button: Optional[ba.Widget] = None self._scrollwidget: Optional[ba.Widget] = None diff --git a/assets/src/server/ballisticacore_server.py b/assets/src/server/ballisticacore_server.py index 9267d190..50492300 100755 --- a/assets/src/server/ballisticacore_server.py +++ b/assets/src/server/ballisticacore_server.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """BallisticaCore server manager.""" @@ -28,7 +28,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import Optional, List, Dict, Union, Tuple + from typing import Optional, Union from types import FrameType from bacommon.servermanager import ServerCommand @@ -81,7 +81,7 @@ class ServerManagerApp: self._interactive = sys.stdin.isatty() self._wrapper_shutdown_desired = False self._done = False - self._subprocess_commands: List[Union[str, ServerCommand]] = [] + self._subprocess_commands: list[Union[str, ServerCommand]] = [] self._subprocess_commands_lock = Lock() self._subprocess_force_kill_time: Optional[float] = None self._auto_restart = True @@ -251,8 +251,8 @@ class ServerManagerApp: def screenmessage(self, message: str, - color: Optional[Tuple[float, float, float]] = None, - clients: Optional[List[int]] = None) -> None: + color: Optional[tuple[float, float, float]] = None, + clients: Optional[list[int]] = None) -> None: """Display a screen-message. This will have no name attached and not show up in chat history. @@ -265,7 +265,7 @@ class ServerManagerApp: def chatmessage(self, message: str, - clients: Optional[List[int]] = None) -> None: + clients: Optional[list[int]] = None) -> None: """Send a chat message from the server. This will have the server's name attached and will be logged @@ -533,7 +533,7 @@ class ServerManagerApp: flush=True) return out - def _enable_tab_completion(self, locs: Dict) -> None: + def _enable_tab_completion(self, locs: dict) -> None: """Enable tab-completion on platforms where available (linux/mac).""" try: import readline diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml index b4e73a88..680dfd01 100644 --- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml +++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml @@ -4,6 +4,7 @@ NOMINMAX aabb abcdefghijklmnopqrstuvwxyz + abcdefghjkmnpqrtuvwxy abouttab absval accel @@ -51,6 +52,7 @@ anyval aosp apientry + apost appconfig appname appnameupper @@ -120,6 +122,7 @@ boostrapping bootconfig bootstrappy + bootsubprocess bouyancy bppv bresult @@ -192,6 +195,7 @@ cmath cmds cmdvals + cmodules codedata codewarrior codewarrior's @@ -271,6 +275,7 @@ dirslash dlfcn dlife + dliwk dllpath dmake dname @@ -332,6 +337,7 @@ ewww ewwww ewwwww + exargs exctype execinfo execing @@ -351,6 +357,7 @@ fastlsolve fastltsolve fbos + fcntl fdata fdirx fdiry @@ -454,6 +461,7 @@ googleplaytab gpgs gqualstr + graphlib grav grisha gstate @@ -566,12 +574,16 @@ lasti lastline lastvalid + lbzip leaderboard leaderboards lenval lgui lhalf + libbz + libbzip libutf + libuuid lightshad linearsize linearstep @@ -597,6 +609,7 @@ lsync ltypes lubyte + luuid lvec lvoid macbuild @@ -757,6 +770,7 @@ optin ortho osis + ossaudiodev osssssssssss ostype ourcode @@ -791,6 +805,7 @@ pname podcast podcasts + popd portaudio positivex positivey @@ -1055,6 +1070,7 @@ tempvec tenum testint + testinternalcapi testnode texel texqualstr @@ -1105,6 +1121,7 @@ twst typeobj typestr + tzpath uber uibounds uiid @@ -1127,6 +1144,7 @@ uppercased userspace uther + uuidmodule uuids uval uxxxx @@ -1168,6 +1186,7 @@ wdeprecated weakref weakthis + weeeird welp whaaaaaaa wheee @@ -1195,6 +1214,9 @@ xmmintrin xoffset xtweak + xxlimited + xxsubinterpreters + xxtestfuzz yclamped ydiff ydist @@ -1207,6 +1229,7 @@ zmin zoffset zomg + zoneinfo zoomable zrot diff --git a/ballisticacore-cmake/CMakeLists.txt b/ballisticacore-cmake/CMakeLists.txt index 3a9ba470..f0457266 100644 --- a/ballisticacore-cmake/CMakeLists.txt +++ b/ballisticacore-cmake/CMakeLists.txt @@ -27,12 +27,12 @@ if (APPLE) # to load a 3.X library from within it which doesn't exist. So we need # to be a bit more explicit telling it where to look. Note: this was last # tested with 3.7; should revisit sometime to make sure still applies. - execute_process(COMMAND "python3.8-config" "--prefix" + execute_process(COMMAND "python3.9-config" "--prefix" OUTPUT_VARIABLE Python_ROOT_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) endif () -find_package (Python 3.8 REQUIRED EXACT COMPONENTS Development) +find_package (Python 3.9 REQUIRED EXACT COMPONENTS Development) if (HEADLESS) diff --git a/config/toolconfigsrc/pylintrc b/config/toolconfigsrc/pylintrc index cbe6f4f0..bf42b893 100644 --- a/config/toolconfigsrc/pylintrc +++ b/config/toolconfigsrc/pylintrc @@ -5,6 +5,8 @@ load-plugins=efrotools.pylintplugins persistent=no +extension-pkg-allow-list=math, readline, zlib, binascii + __EFRO_PYLINT_INIT__ [REPORTS] diff --git a/docs/ba_module.md b/docs/ba_module.md index 25acdaa2..1354e171 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated on 2021-10-14 for Ballistica version 1.6.5 build 20393

+

last updated on 2021-10-23 for Ballistica version 1.6.5 build 20395

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


@@ -323,7 +323,7 @@

create_display()

-

create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'List[ba.Actor]'

+

create_display(self, x: 'float', y: 'float', delay: 'float', outdelay: 'float' = None, color: 'Sequence[float]' = None, style: 'str' = 'post_game') -> 'list[ba.Actor]'

Create a display for the Achievement.

@@ -383,7 +383,7 @@ actually award achievements.

achievements_for_coop_level()

-

achievements_for_coop_level(self, level_name: str) -> List[Achievement]

+

achievements_for_coop_level(self, level_name: str) -> list[Achievement]

Given a level name, return achievements available for it.

@@ -439,14 +439,14 @@ actually award achievements.

players

-

List[PlayerType]

+

list[PlayerType]

The list of ba.Players in the Activity. This gets populated just before on_begin() is called and is updated automatically as players join or leave the game.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -458,7 +458,7 @@ join or leave the game.

settings_raw

-

Dict[str, Any]

+

dict[str, Any]

The settings dict passed in when the activity was made. This attribute is deprecated and should be avoided when possible; activities should pull all values they need from the 'settings' arg @@ -473,7 +473,7 @@ passed to the Activity __init__ call.

teams

-

List[TeamType]

+

list[TeamType]

The list of ba.Teams in the Activity. This gets populated just before before on_begin() is called and is updated automatically as players join or leave the game. (at least in free-for-all mode where every @@ -482,7 +482,7 @@ regardless of the player count).

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -939,7 +939,7 @@ likely result in errors.

ui_bounds

-

Tuple[float, float, float, float]

+

tuple[float, float, float, float]

Bounds of the 'safe' screen area in ui space.

This tuple contains: (x-min, x-max, y-min, y-max)

@@ -975,7 +975,7 @@ likely result in errors.

launch_coop_game()

-

launch_coop_game(self, game: str, force: bool = False, args: Dict = None) -> bool

+

launch_coop_game(self, game: str, force: bool = False, args: dict = None) -> bool

High level way to launch a local co-op session.

@@ -1065,7 +1065,7 @@ to resume.

builtin_keys()

-

builtin_keys(self) -> List[str]

+

builtin_keys(self) -> list[str]

Return the list of valid key names recognized by ba.AppConfig.

@@ -1134,7 +1134,7 @@ manually.

Methods:

create_default_game_settings_ui()

-

create_default_game_settings_ui(self, gameclass: Type[ba.GameActivity], sessiontype: Type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

+

create_default_game_settings_ui(self, gameclass: type[ba.GameActivity], sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

Launch a UI to configure the given game config.

@@ -1274,12 +1274,12 @@ mycall()
configdict, levels, name, sequential

configdict

-

Dict[str, Any]

+

dict[str, Any]

Return the live config dict for this campaign.

levels

-

List[ba.Level]

+

list[ba.Level]

The list of ba.Levels in the Campaign.

@@ -1366,7 +1366,7 @@ mycall()

Methods:

<constructor>

-

ba.ChoiceSetting(name: str, default: Any, choices: List[Tuple[str, Any]])

+

ba.ChoiceSetting(name: str, default: Any, choices: list[tuple[str, Any]])

@@ -1672,7 +1672,7 @@ start_long_action(callback_when_done=ba.ContextC

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -1691,7 +1691,7 @@ start_long_action(callback_when_done=ba.ContextC

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -1752,7 +1752,7 @@ and it should begin its actual game logic.

supports_session_type()

<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Return whether this game supports the provided Session type.

@@ -1804,7 +1804,7 @@ there is no associated Campaign.

get_custom_menu_entries()

-

get_custom_menu_entries(self) -> List[Dict[str, Any]]

+

get_custom_menu_entries(self) -> list[dict[str, Any]]

Subclasses can override this to provide custom menu entries.

@@ -1918,7 +1918,7 @@ the data object is requested and when it's value is accessed.

<constructor>, get_hash()

<constructor>

-

ba.Dependency(cls: Type[T], config: Any = None)

+

ba.Dependency(cls: type[T], config: Any = None)

Instantiate a Dependency given a ba.DependencyComponent type.

@@ -1960,7 +1960,7 @@ influence dependency calculation for the target class.

get_dynamic_deps()

<class method>
-

get_dynamic_deps(config: Any = None) -> List[Dependency]

+

get_dynamic_deps(config: Any = None) -> list[Dependency]

Return any dynamically-calculated deps for this component/config.

@@ -1983,7 +1983,7 @@ on the dep config value. (for instance a map required by a game type)

Attributes:

deps

-

List[ba.Dependency]

+

list[ba.Dependency]

The list of missing dependencies causing this error.

@@ -1993,7 +1993,7 @@ on the dep config value. (for instance a map required by a game type)

Methods Defined or Overridden:

<constructor>

-

ba.DependencyError(deps: List[ba.Dependency])

+

ba.DependencyError(deps: list[ba.Dependency])

@@ -2031,7 +2031,7 @@ on the dep config value. (for instance a map required by a game type)

get_asset_package_ids()

-

get_asset_package_ids(self) -> Set[str]

+

get_asset_package_ids(self) -> set[str]

Return the set of asset-package-ids required by this dep-set.

@@ -2291,7 +2291,7 @@ its time with lingering corpses, sound effects, etc.

Methods:

<constructor>

-

ba.FloatChoiceSetting(name: str, default: float, choices: List[Tuple[str, float]])

+

ba.FloatChoiceSetting(name: str, default: float, choices: list[tuple[str, float]])

@@ -2340,7 +2340,7 @@ its time with lingering corpses, sound effects, etc.

get_ffa_point_awards()

-

get_ffa_point_awards(self) -> Dict[int, int]

+

get_ffa_point_awards(self) -> dict[int, int]

Return the number of points awarded for different rankings.

@@ -2410,7 +2410,7 @@ its time with lingering corpses, sound effects, etc.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -2429,7 +2429,7 @@ its time with lingering corpses, sound effects, etc.

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -2454,7 +2454,7 @@ and calls either end_game or continue_game depending on the result

create_settings_ui()

<class method>
-

create_settings_ui(sessiontype: Type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

+

create_settings_ui(sessiontype: type[ba.Session], settings: Optional[dict], completion_call: Callable[[Optional[dict]], None]) -> None

Launch an in-game UI to configure settings for a game type.

@@ -2496,7 +2496,7 @@ yet; this way things like the standard time-limit

get_available_settings()

<class method>
-

get_available_settings(sessiontype: Type[ba.Session]) -> List[ba.Setting]

+

get_available_settings(sessiontype: type[ba.Session]) -> list[ba.Setting]

Return a list of settings relevant to this game type when running under the provided session type.

@@ -2504,7 +2504,7 @@ running under the provided session type.

get_description()

<class method>
-

get_description(sessiontype: Type[ba.Session]) -> str

+

get_description(sessiontype: type[ba.Session]) -> str

Get a str description of this game type.

@@ -2515,7 +2515,7 @@ can override this method.

get_description_display_string()

<class method>
-

get_description_display_string(sessiontype: Type[ba.Session]) -> ba.Lstr

+

get_description_display_string(sessiontype: type[ba.Session]) -> ba.Lstr

Return a translated version of get_description().

@@ -2524,7 +2524,7 @@ can override this method.

get_display_string()

<class method>
-

get_display_string(settings: Optional[Dict] = None) -> ba.Lstr

+

get_display_string(settings: Optional[dict] = None) -> ba.Lstr

Return a descriptive name for this game/settings combo.

@@ -2602,7 +2602,7 @@ of the screen, so it should be as concise as possible.

get_settings_display_string()

<class method>
-

get_settings_display_string(config: Dict[str, Any]) -> ba.Lstr

+

get_settings_display_string(config: dict[str, Any]) -> ba.Lstr

Given a game config dict, return a short description for it.

@@ -2612,7 +2612,7 @@ is up next in a series.

get_supported_maps()

<class method>
-

get_supported_maps(sessiontype: Type[ba.Session]) -> List[str]

+

get_supported_maps(sessiontype: type[ba.Session]) -> list[str]

Called by the default ba.GameActivity.create_settings_ui() implementation; should return a list of map names valid @@ -2748,7 +2748,7 @@ If the time-limit expires, end_game() will be called.

supports_session_type()

<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Return whether this game supports the provided Session type.

@@ -2775,7 +2775,7 @@ Results for a completed game.

playerinfos

-

List[ba.PlayerInfo]

+

list[ba.PlayerInfo]

Get info about the players represented by the results.

@@ -2790,12 +2790,12 @@ Results for a completed game.

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

Return all ba.SessionTeams in the results.

winnergroups

-

List[WinnerGroup]

+

list[WinnerGroup]

Get an ordered list of winner groups.

@@ -2886,7 +2886,7 @@ Results for a completed game.

get_source_player()

-

get_source_player(self, playertype: Type[PlayerType]) -> Optional[PlayerType]

+

get_source_player(self, playertype: type[PlayerType]) -> Optional[PlayerType]

Return the source-player if one exists and is the provided type.

@@ -3077,7 +3077,7 @@ prefs, etc.

Methods:

<constructor>

-

ba.IntChoiceSetting(name: str, default: int, choices: List[Tuple[str, int]])

+

ba.IntChoiceSetting(name: str, default: int, choices: list[tuple[str, int]])

@@ -3112,7 +3112,7 @@ prefs, etc.

chars, name, nums, pages

chars

-

List[Tuple[str, ...]]

+

list[tuple[str, ...]]

Used for row/column lengths.

@@ -3122,12 +3122,12 @@ prefs, etc.

nums

-

Tuple[str, ...]

+

tuple[str, ...]

The 'num' page.

pages

-

Dict[str, Tuple[str, ...]]

+

dict[str, tuple[str, ...]]

Extra chars like emojis.

@@ -3147,7 +3147,7 @@ prefs, etc.

available_languages, language, locale

available_languages

-

List[str]

+

list[str]

A list of all available languages.

Note that languages that may be present in game assets but which @@ -3239,7 +3239,7 @@ prefs, etc.

gametype

-

Type[ba.GameActivity]

+

type[ba.GameActivity]

The type of game used for this Level.

@@ -3271,7 +3271,7 @@ prefs, etc.

<constructor>, get_high_scores(), get_preview_texture(), get_score_version_string(), get_settings(), set_complete(), set_high_scores(), set_rating()

<constructor>

-

ba.Level(name: str, gametype: Type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None)

+

ba.Level(name: str, gametype: type[ba.GameActivity], settings: dict, preview_texture_name: str, displayname: str = None)

get_high_scores()

@@ -3296,7 +3296,7 @@ can be changed to separate its new high score lists/etc. from the old.

get_settings()

-

get_settings(self) -> Dict[str, Any]

+

get_settings(self) -> dict[str, Any]

Returns the settings for this Level.

@@ -3308,7 +3308,7 @@ can be changed to separate its new high score lists/etc. from the old.

set_high_scores()

-

set_high_scores(self, high_scores: Dict) -> None

+

set_high_scores(self, high_scores: dict) -> None

Set high scores for this level.

@@ -3333,7 +3333,7 @@ can be changed to separate its new high score lists/etc. from the old.

sessionteams, use_team_colors

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

ba.SessionTeams available in this lobby.

@@ -3374,7 +3374,7 @@ Intended for use in initial joining-screens.

get_choosers()

-

get_choosers(self) -> List[Chooser]

+

get_choosers(self) -> list[Chooser]

Return the lobby's current choosers.

@@ -3558,7 +3558,7 @@ even if myactor is set to None.

get_def_bound_box()

-

get_def_bound_box(self, name: str) -> Optional[Tuple[float, float, float, float, float, float]]

+

get_def_bound_box(self, name: str) -> Optional[tuple[float, float, float, float, float, float]]

Return a 6 member bounds tuple or None if it is not defined.

@@ -3570,7 +3570,7 @@ even if myactor is set to None.

get_def_points()

-

get_def_points(self, name: str) -> List[Sequence[float]]

+

get_def_points(self, name: str) -> list[Sequence[float]]

Return a list of named points.

@@ -3607,7 +3607,7 @@ as far from these players as possible.

get_play_types()

<class method>
-

get_play_types() -> List[str]

+

get_play_types() -> list[str]

Return valid play types for this map.

@@ -3706,7 +3706,7 @@ add_actions() method to define what the material does.

Methods:

add_actions()

-

add_actions(actions: Tuple, conditions: Optional[Tuple] = None) +

add_actions(actions: tuple, conditions: Optional[tuple] = None) -> None

Add one or more actions to the material, optionally with conditions.

@@ -3861,7 +3861,7 @@ m.add_actions(conditions=('they_have_material',

get_game_types()

-

get_game_types(self) -> List[Type[ba.GameActivity]]

+

get_game_types(self) -> list[type[ba.GameActivity]]

Return available game types.

@@ -3873,7 +3873,7 @@ m.add_actions(conditions=('they_have_material',

get_unowned_game_types()

-

get_unowned_game_types(self) -> Set[Type[ba.GameActivity]]

+

get_unowned_game_types(self) -> set[type[ba.GameActivity]]

Return present game types not owned by the current account.

@@ -4114,7 +4114,7 @@ signify that the default soundtrack should be used..

do_play_music()

-

do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: Dict[str, Any] = None) -> None

+

do_play_music(self, musictype: Union[MusicType, str, None], continuous: bool = False, mode: MusicPlayMode = <MusicPlayMode.REGULAR: regular>, testsoundtrack: dict[str, Any] = None) -> None

Plays the requested music type/mode.

@@ -4290,7 +4290,7 @@ the right thing both for Node objects and values of None.

getdelegate()

-

getdelegate(type: Type, doraise: bool = False) -> <varies>

+

getdelegate(type: type, doraise: bool = False) -> <varies>

Return the node's current delegate object if it matches a certain type.

@@ -4552,7 +4552,7 @@ even if myactor is set to None.

assigninput(), exists(), get_icon(), getname(), is_alive(), on_expire(), resetinput()

assigninput()

-

assigninput(self, inputtype: Union[ba.InputType, Tuple[ba.InputType, ...]], call: Callable) -> None

+

assigninput(self, inputtype: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None

assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], call: Callable) -> None

@@ -4575,9 +4575,9 @@ the right thing both for Player objects and values of None.

get_icon()

-

get_icon(self) -> Dict[str, Any]

+

get_icon(self) -> dict[str, Any]

-

get_icon() -> Dict[str, Any]

+

get_icon() -> dict[str, Any]

Returns the character's icon (images, colors, etc contained in a dict)

@@ -4653,7 +4653,7 @@ If False, they left the game or the round ended.

getkillerplayer()

-

getkillerplayer(self, playertype: Type[PlayerType]) -> Optional[PlayerType]

+

getkillerplayer(self, playertype: type[PlayerType]) -> Optional[PlayerType]

Return the ba.Player responsible for the killing, if any.

@@ -4661,7 +4661,7 @@ If False, they left the game or the round ended.

getplayer()

-

getplayer(self, playertype: Type[PlayerType]) -> PlayerType

+

getplayer(self, playertype: type[PlayerType]) -> PlayerType

Return the ba.Player that died.

@@ -4749,7 +4749,7 @@ the type-checker properly identifies the returned value as one.

get_icon()

-

get_icon(self) -> Dict[str, Any]

+

get_icon(self) -> dict[str, Any]

Get the icon for this instance's player.

@@ -5123,7 +5123,7 @@ to proceed past the initial joining screen.

sessionplayers

-

List[ba.SessionPlayer]

+

list[ba.SessionPlayer]

All ba.SessionPlayers in the Session. Most things should use the list of ba.Players in ba.Activity; not this. Some players, such as those who have not yet selected a character, will only be @@ -5131,7 +5131,7 @@ found on this list.

sessionteams

-

List[ba.SessionTeam]

+

list[ba.SessionTeam]

All the ba.SessionTeams in the Session. Most things should use the list of ba.Teams in ba.Activity; not this.

@@ -5192,7 +5192,7 @@ will replace the old.

get_custom_menu_entries()

-

get_custom_menu_entries(self) -> List[Dict[str, Any]]

+

get_custom_menu_entries(self) -> list[dict[str, Any]]

Subclasses can override this to provide custom menu entries.

@@ -5357,7 +5357,7 @@ is still in its lobby selecting a team/etc. then a
assigninput(), exists(), get_account_id(), get_icon(), getname(), remove_from_game(), resetinput(), setname()

assigninput()

-

assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]], +

assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]], call: Callable) -> None

Set the python callable to be run for one or more types of input.

@@ -5381,7 +5381,7 @@ joins (while verification occurs).

get_icon()

-

get_icon() -> Dict[str, Any]

+

get_icon() -> dict[str, Any]

Returns the character's icon (images, colors, etc contained in a dict)

@@ -5441,7 +5441,7 @@ other players.

color, customdata, id, name, players

color

-

Tuple[float, ...]

+

tuple[float, ...]

The team's color.

@@ -5464,7 +5464,7 @@ of the session.

players

-

List[ba.SessionPlayer]

+

list[ba.SessionPlayer]

The list of ba.SessionPlayers on the team.

@@ -5698,7 +5698,7 @@ of the session.

get_records()

-

get_records(self) -> Dict[str, ba.PlayerRecord]

+

get_records(self) -> dict[str, ba.PlayerRecord]

Get PlayerRecord corresponding to still-existing players.

@@ -5787,7 +5787,7 @@ of the session.

manual_init(), on_expire()

manual_init()

-

manual_init(self, team_id: int, name: Union[ba.Lstr, str], color: Tuple[float, ...]) -> None

+

manual_init(self, team_id: int, name: Union[ba.Lstr, str], color: tuple[float, ...]) -> None

Manually init a team for uses such as bots.

@@ -5846,7 +5846,7 @@ of the session.

playertype

-

Type[PlayerType]

+

type[PlayerType]

The type of ba.Player this Activity is using.

@@ -5865,7 +5865,7 @@ of the session.

teamtype

-

Type[TeamType]

+

type[TeamType]

The type of ba.Team this Activity is using.

@@ -5921,7 +5921,7 @@ on the ba.Player and their supports_session_type()
<class method>
-

supports_session_type(sessiontype: Type[ba.Session]) -> bool

+

supports_session_type(sessiontype: type[ba.Session]) -> bool

Class method override; returns True for ba.DualTeamSessions and ba.FreeForAllSessions; @@ -6331,13 +6331,13 @@ the right thing both for Widget objects and values of None.

get_children()

-

get_children() -> List[ba.Widget]

+

get_children() -> list[ba.Widget]

Returns any child Widgets of this Widget.

get_screen_space_center()

-

get_screen_space_center() -> Tuple[float, float]

+

get_screen_space_center() -> tuple[float, float]

Returns the coords of the Widget center relative to the center of the screen. This can be useful for placing pop-up windows and other special @@ -6394,7 +6394,7 @@ widgets.


ba.animate()

-

animate(node: ba.Node, attr: str, keys: Dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node

+

animate(node: ba.Node, attr: str, keys: dict[float, float], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> ba.Node

Animate values on a target ba.Node.

@@ -6409,7 +6409,7 @@ but timeformat can also be set to MILLISECONDS to recreate the old behavior

ba.animate_array()

-

animate_array(node: ba.Node, attr: str, size: int, keys: Dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None

+

animate_array(node: ba.Node, attr: str, size: int, keys: dict[float, Sequence[float]], loop: bool = False, offset: float = 0, timetype: ba.TimeType = <TimeType.SIM: 0>, timeformat: ba.TimeFormat = <TimeFormat.SECONDS: 0>, suppress_format_warning: bool = False) -> None

Animate an array of values on a target ba.Node.

@@ -6724,7 +6724,7 @@ If doraise is False, None will be returned instead in that case.


ba.getclass()

-

getclass(name: str, subclassof: Type[T]) -> Type[T]

+

getclass(name: str, subclassof: type[T]) -> type[T]

Given a full class name such as foo.bar.MyClass, return the class.

@@ -6759,7 +6759,7 @@ in the background if necessary.


ba.getmaps()

-

getmaps(playtype: str) -> List[str]

+

getmaps(playtype: str) -> list[str]

Return a list of ba.Map types supporting a playtype str.

@@ -6948,7 +6948,7 @@ so in most cases you can just use that.


ba.newactivity()

-

newactivity(activity_type: Type[ba.Activity], +

newactivity(activity_type: type[ba.Activity], settings: dict = None) -> ba.Activity

Instantiates a ba.Activity given a type object.

@@ -6984,7 +6984,7 @@ object dies. 'owner' can be another node or a ba.Actor

ba.normalized_color()

-

normalized_color(color: Sequence[float]) -> Tuple[float, ...]

+

normalized_color(color: Sequence[float]) -> tuple[float, ...]

Scale a color so its largest value is 1; useful for coloring lights.

@@ -7110,7 +7110,7 @@ are applied to the Widget.


ba.safecolor()

safecolor(color: Sequence[float], target_intensity: float = 0.6) - -> Tuple[float, ...]

+ -> tuple[float, ...]

Given a color tuple, return a color safe to display as text.

@@ -7123,7 +7123,7 @@ dark colors, etc.

ba.screenmessage()

screenmessage(message: Union[str, ba.Lstr], color: Sequence[float] = None, top: bool = False, - image: Dict[str, Any] = None, log: bool = False, + image: dict[str, Any] = None, log: bool = False, clients: Sequence[int] = None, transient: bool = False) -> None

Print a message to the local client's screen, in a given color.

diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 6d97a0db..d6fd206a 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,7 +21,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20393; +const int kAppBuildNumber = 20395; const char* kAppVersion = "1.6.5"; // Our standalone globals. diff --git a/src/ballistica/platform/windows/platform_windows.cc b/src/ballistica/platform/windows/platform_windows.cc index f7eb2b69..2948c519 100644 --- a/src/ballistica/platform/windows/platform_windows.cc +++ b/src/ballistica/platform/windows/platform_windows.cc @@ -18,9 +18,9 @@ #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "iphlpapi.lib") #if BA_DEBUG_BUILD -#pragma comment(lib, "python38_d.lib") +#pragma comment(lib, "python39_d.lib") #else -#pragma comment(lib, "python38.lib") +#pragma comment(lib, "python39.lib") #endif #if !BA_HEADLESS_BUILD diff --git a/src/ballistica/python/class/python_class_material.cc b/src/ballistica/python/class/python_class_material.cc index 16ac06a9..fb6717e1 100644 --- a/src/ballistica/python/class/python_class_material.cc +++ b/src/ballistica/python/class/python_class_material.cc @@ -275,7 +275,7 @@ auto PythonClassMaterial::AddActions(PythonClassMaterial* self, PyObject* args, PyMethodDef PythonClassMaterial::tp_methods[] = { {"add_actions", (PyCFunction)AddActions, METH_VARARGS | METH_KEYWORDS, - "add_actions(actions: Tuple, conditions: Optional[Tuple] = None)\n" + "add_actions(actions: tuple, conditions: Optional[tuple] = None)\n" " -> None\n" "\n" "Add one or more actions to the material, optionally with conditions.\n" diff --git a/src/ballistica/python/class/python_class_node.cc b/src/ballistica/python/class/python_class_node.cc index bc3b5df6..2b0d74df 100644 --- a/src/ballistica/python/class/python_class_node.cc +++ b/src/ballistica/python/class/python_class_node.cc @@ -402,7 +402,7 @@ PyMethodDef PythonClassNode::tp_methods[] = { "\n" "Return the name assigned to a Node; used mainly for debugging"}, {"getdelegate", (PyCFunction)GetDelegate, METH_VARARGS | METH_KEYWORDS, - "getdelegate(type: Type, doraise: bool = False) -> \n" + "getdelegate(type: type, doraise: bool = False) -> \n" "\n" "Return the node's current delegate object if it matches a certain type.\n" "\n" diff --git a/src/ballistica/python/class/python_class_session_player.cc b/src/ballistica/python/class/python_class_session_player.cc index cefc59f9..d1a45162 100644 --- a/src/ballistica/python/class/python_class_session_player.cc +++ b/src/ballistica/python/class/python_class_session_player.cc @@ -696,7 +696,7 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = { "\n" "Return whether the underlying player is still in the game."}, {"assigninput", (PyCFunction)AssignInputCall, METH_VARARGS | METH_KEYWORDS, - "assigninput(type: Union[ba.InputType, Tuple[ba.InputType, ...]],\n" + "assigninput(type: Union[ba.InputType, tuple[ba.InputType, ...]],\n" " call: Callable) -> None\n" "\n" "Set the python callable to be run for one or more types of input."}, @@ -732,11 +732,11 @@ PyMethodDef PythonClassSessionPlayer::tp_methods[] = { "\n" "(internal)"}, {"get_icon", (PyCFunction)GetIcon, METH_NOARGS, - "get_icon() -> Dict[str, Any]\n" + "get_icon() -> dict[str, Any]\n" "\n" "Returns the character's icon (images, colors, etc contained in a dict)"}, {"get_icon_info", (PyCFunction)GetIconInfo, METH_NOARGS, - "get_icon_info() -> Dict[str, Any]\n" + "get_icon_info() -> dict[str, Any]\n" "\n" "(internal)"}, {"__dir__", (PyCFunction)Dir, METH_NOARGS, diff --git a/src/ballistica/python/class/python_class_widget.cc b/src/ballistica/python/class/python_class_widget.cc index 92c60bc1..11d35d6b 100644 --- a/src/ballistica/python/class/python_class_widget.cc +++ b/src/ballistica/python/class/python_class_widget.cc @@ -256,11 +256,11 @@ PyMethodDef PythonClassWidget::tp_methods[] = { "\n" "Activates a widget; the same as if it had been clicked."}, {"get_children", (PyCFunction)GetChildren, METH_NOARGS, - "get_children() -> List[ba.Widget]\n" + "get_children() -> list[ba.Widget]\n" "\n" "Returns any child Widgets of this Widget."}, {"get_screen_space_center", (PyCFunction)GetScreenSpaceCenter, METH_NOARGS, - "get_screen_space_center() -> Tuple[float, float]\n" + "get_screen_space_center() -> tuple[float, float]\n" "\n" "Returns the coords of the Widget center relative to the center of the\n" "screen. This can be useful for placing pop-up windows and other special\n" diff --git a/src/ballistica/python/methods/python_methods_app.cc b/src/ballistica/python/methods/python_methods_app.cc index dcbca8f6..a2ae06a0 100644 --- a/src/ballistica/python/methods/python_methods_app.cc +++ b/src/ballistica/python/methods/python_methods_app.cc @@ -998,7 +998,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { METH_VARARGS | METH_KEYWORDS, "screenmessage(message: Union[str, ba.Lstr],\n" " color: Sequence[float] = None, top: bool = False,\n" - " image: Dict[str, Any] = None, log: bool = False,\n" + " image: dict[str, Any] = None, log: bool = False,\n" " clients: Sequence[int] = None, transient: bool = False) -> None\n" "\n" "Print a message to the local client's screen, in a given color.\n" @@ -1155,7 +1155,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { {"newactivity", (PyCFunction)PyNewActivity, METH_VARARGS | METH_KEYWORDS, - "newactivity(activity_type: Type[ba.Activity],\n" + "newactivity(activity_type: type[ba.Activity],\n" " settings: dict = None) -> ba.Activity\n" "\n" "Instantiates a ba.Activity given a type object.\n" @@ -1201,7 +1201,7 @@ auto PythonMethodsApp::GetMethods() -> std::vector { {"new_host_session", (PyCFunction)PyNewHostSession, METH_VARARGS | METH_KEYWORDS, - "new_host_session(sessiontype: Type[ba.Session],\n" + "new_host_session(sessiontype: type[ba.Session],\n" " benchmark_type: str = None) -> None\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_gameplay.cc b/src/ballistica/python/methods/python_methods_gameplay.cc index d4d8825e..d5f63310 100644 --- a/src/ballistica/python/methods/python_methods_gameplay.cc +++ b/src/ballistica/python/methods/python_methods_gameplay.cc @@ -652,7 +652,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector { {"get_game_roster", (PyCFunction)PyGetGameRoster, METH_VARARGS | METH_KEYWORDS, - "get_game_roster() -> List[Dict[str, Any]]\n" + "get_game_roster() -> list[dict[str, Any]]\n" "\n" "(internal)"}, @@ -667,7 +667,7 @@ auto PythonMethodsGameplay::GetMethods() -> std::vector { {"set_map_bounds", (PyCFunction)PySetMapBounds, METH_VARARGS | METH_KEYWORDS, - "set_map_bounds(bounds: Tuple[float, float, float, float, float, " + "set_map_bounds(bounds: tuple[float, float, float, float, float, " "float])\n" " -> None\n" "\n" diff --git a/src/ballistica/python/methods/python_methods_graphics.cc b/src/ballistica/python/methods/python_methods_graphics.cc index debe7a4c..8e642ec9 100644 --- a/src/ballistica/python/methods/python_methods_graphics.cc +++ b/src/ballistica/python/methods/python_methods_graphics.cc @@ -225,7 +225,7 @@ auto PyGetDisplayResolution(PyObject* self, PyObject* args) -> PyObject* { auto PythonMethodsGraphics::GetMethods() -> std::vector { return { {"get_display_resolution", PyGetDisplayResolution, METH_VARARGS, - "get_display_resolution() -> Optional[Tuple[int, int]]\n" + "get_display_resolution() -> Optional[tuple[int, int]]\n" "\n" "(internal)\n" "\n" @@ -290,7 +290,7 @@ auto PythonMethodsGraphics::GetMethods() -> std::vector { {"safecolor", (PyCFunction)PySafeColor, METH_VARARGS | METH_KEYWORDS, "safecolor(color: Sequence[float], target_intensity: float = 0.6)\n" - " -> Tuple[float, ...]\n" + " -> tuple[float, ...]\n" "\n" "Given a color tuple, return a color safe to display as text.\n" "\n" diff --git a/src/ballistica/python/methods/python_methods_media.cc b/src/ballistica/python/methods/python_methods_media.cc index 5c438ba0..cac8d070 100644 --- a/src/ballistica/python/methods/python_methods_media.cc +++ b/src/ballistica/python/methods/python_methods_media.cc @@ -412,7 +412,7 @@ auto PythonMethodsMedia::GetMethods() -> std::vector { {"mac_music_app_get_playlists", (PyCFunction)PyMacMusicAppGetPlaylists, METH_VARARGS | METH_KEYWORDS, - "mac_music_app_get_playlists() -> List[str]\n" + "mac_music_app_get_playlists() -> list[str]\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_system.cc b/src/ballistica/python/methods/python_methods_system.cc index ed2d65cd..0a64f147 100644 --- a/src/ballistica/python/methods/python_methods_system.cc +++ b/src/ballistica/python/methods/python_methods_system.cc @@ -890,8 +890,8 @@ auto PythonMethodsSystem::GetMethods() -> std::vector { "Returns whether we're running the ouya-specific version"}, {"set_internal_language_keys", PySetInternalLanguageKeys, METH_VARARGS, - "set_internal_language_keys(listobj: List[Tuple[str, str]],\n" - " random_names_list: List[Tuple[str, str]]) -> None\n" + "set_internal_language_keys(listobj: list[tuple[str, str]],\n" + " random_names_list: list[tuple[str, str]]) -> None\n" "\n" "(internal)"}, @@ -987,7 +987,7 @@ auto PythonMethodsSystem::GetMethods() -> std::vector { {"get_appconfig_builtin_keys", (PyCFunction)PyAppConfigGetBuiltinKeys, METH_VARARGS | METH_KEYWORDS, - "get_appconfig_builtin_keys() -> List[str]\n" + "get_appconfig_builtin_keys() -> list[str]\n" "\n" "(internal)"}, diff --git a/src/ballistica/python/methods/python_methods_ui.cc b/src/ballistica/python/methods/python_methods_ui.cc index 5aa77f39..ee0ac6f7 100644 --- a/src/ballistica/python/methods/python_methods_ui.cc +++ b/src/ballistica/python/methods/python_methods_ui.cc @@ -2372,7 +2372,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector { {"get_chat_messages", (PyCFunction)PyGetChatMessages, METH_VARARGS | METH_KEYWORDS, - "get_chat_messages() -> List[str]\n" + "get_chat_messages() -> list[str]\n" "\n" "(internal)"}, @@ -2456,7 +2456,7 @@ auto PythonMethodsUI::GetMethods() -> std::vector { "A workaround for some unintentional backgrounding that occurs on mac"}, {"uibounds", (PyCFunction)PyUIBounds, METH_VARARGS | METH_KEYWORDS, - "uibounds() -> Tuple[float, float, float, float]\n" + "uibounds() -> tuple[float, float, float, float]\n" "\n" "(internal)\n" "\n" diff --git a/src/ballistica/python/python.cc b/src/ballistica/python/python.cc index 5ed6f336..86ab60f4 100644 --- a/src/ballistica/python/python.cc +++ b/src/ballistica/python/python.cc @@ -945,8 +945,8 @@ void Python::Reset(bool do_init) { BA_PRECONDITION(main_dict_ = PyModule_GetDict(m)); const char* ver = Py_GetVersion(); - if (strncmp(ver, "3.8", 3) != 0) { - throw Exception("We require Python 3.8.x; instead found " + if (strncmp(ver, "3.9", 3) != 0) { + throw Exception("We require Python 3.9.x; instead found " + std::string(ver)); } diff --git a/src/external/windows/include/python/Python-ast.h b/src/external/windows/include/python/Python-ast.h index 9e7a621c..dfa0b1aa 100755 --- a/src/external/windows/include/python/Python-ast.h +++ b/src/external/windows/include/python/Python-ast.h @@ -6,6 +6,7 @@ extern "C" { #endif +#ifndef Py_LIMITED_API #include "asdl.h" #undef Yield /* undefine macro conflicting with */ @@ -16,10 +17,7 @@ typedef struct _stmt *stmt_ty; typedef struct _expr *expr_ty; -typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5, - Param=6 } expr_context_ty; - -typedef struct _slice *slice_ty; +typedef enum _expr_context { Load=1, Store=2, Del=3 } expr_context_ty; typedef enum _boolop { And=1, Or=2 } boolop_ty; @@ -50,7 +48,7 @@ typedef struct _type_ignore *type_ignore_ty; enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, - FunctionType_kind=4, Suite_kind=5}; + FunctionType_kind=4}; struct _mod { enum _mod_kind kind; union { @@ -72,10 +70,6 @@ struct _mod { expr_ty returns; } FunctionType; - struct { - asdl_seq *body; - } Suite; - } v; }; @@ -236,7 +230,7 @@ enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4, YieldFrom_kind=15, Compare_kind=16, Call_kind=17, FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20, Attribute_kind=21, Subscript_kind=22, Starred_kind=23, - Name_kind=24, List_kind=25, Tuple_kind=26}; + Name_kind=24, List_kind=25, Tuple_kind=26, Slice_kind=27}; struct _expr { enum _expr_kind kind; union { @@ -349,7 +343,7 @@ struct _expr { struct { expr_ty value; - slice_ty slice; + expr_ty slice; expr_context_ty ctx; } Subscript; @@ -373,32 +367,17 @@ struct _expr { expr_context_ty ctx; } Tuple; - } v; - int lineno; - int col_offset; - int end_lineno; - int end_col_offset; -}; - -enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}; -struct _slice { - enum _slice_kind kind; - union { struct { expr_ty lower; expr_ty upper; expr_ty step; } Slice; - struct { - asdl_seq *dims; - } ExtSlice; - - struct { - expr_ty value; - } Index; - } v; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; }; struct _comprehension { @@ -448,6 +427,10 @@ struct _arg { struct _keyword { identifier arg; expr_ty value; + int lineno; + int col_offset; + int end_lineno; + int end_col_offset; }; struct _alias { @@ -482,8 +465,6 @@ mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena); mod_ty _Py_Expression(expr_ty body, PyArena *arena); #define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2) mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena); -#define Suite(a0, a1) _Py_Suite(a0, a1) -mod_ty _Py_Suite(asdl_seq * body, PyArena *arena); #define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq * decorator_list, expr_ty returns, string @@ -653,7 +634,7 @@ expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); #define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7) -expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int +expr_ty _Py_Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); #define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6) @@ -672,12 +653,10 @@ expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3) -slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena); -#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1) -slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena); -#define Index(a0, a1) _Py_Index(a0, a1) -slice_ty _Py_Index(expr_ty value, PyArena *arena); +#define Slice(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Slice(a0, a1, a2, a3, a4, a5, a6, a7) +expr_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); #define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4) comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async, PyArena *arena); @@ -695,8 +674,10 @@ arguments_ty _Py_arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int col_offset, int end_lineno, int end_col_offset, PyArena *arena); -#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2) -keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena); +#define keyword(a0, a1, a2, a3, a4, a5, a6) _Py_keyword(a0, a1, a2, a3, a4, a5, a6) +keyword_ty _Py_keyword(identifier arg, expr_ty value, int lineno, int + col_offset, int end_lineno, int end_col_offset, PyArena + *arena); #define alias(a0, a1, a2) _Py_alias(a0, a1, a2) alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); #define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2) @@ -708,6 +689,7 @@ type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena); PyObject* PyAST_mod2obj(mod_ty t); mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode); int PyAST_Check(PyObject* obj); +#endif /* !Py_LIMITED_API */ #ifdef __cplusplus } diff --git a/src/external/windows/include/python/Python.h b/src/external/windows/include/python/Python.h index 7729fb07..613453db 100755 --- a/src/external/windows/include/python/Python.h +++ b/src/external/windows/include/python/Python.h @@ -63,13 +63,22 @@ #include "pyport.h" #include "pymacro.h" -/* A convenient way for code to know if clang's memory sanitizer is enabled. */ +/* A convenient way for code to know if sanitizers are enabled. */ #if defined(__has_feature) # if __has_feature(memory_sanitizer) # if !defined(_Py_MEMORY_SANITIZER) # define _Py_MEMORY_SANITIZER # endif # endif +# if __has_feature(address_sanitizer) +# if !defined(_Py_ADDRESS_SANITIZER) +# define _Py_ADDRESS_SANITIZER +# endif +# endif +#elif defined(__GNUC__) +# if defined(__SANITIZE_ADDRESS__) +# define _Py_ADDRESS_SANITIZER +# endif #endif /* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. @@ -114,12 +123,15 @@ #include "classobject.h" #include "fileobject.h" #include "pycapsule.h" +#include "code.h" +#include "pyframe.h" #include "traceback.h" #include "sliceobject.h" #include "cellobject.h" #include "iterobject.h" #include "genobject.h" #include "descrobject.h" +#include "genericaliasobject.h" #include "warnings.h" #include "weakrefobject.h" #include "structseq.h" @@ -130,6 +142,7 @@ #include "pyerrors.h" #include "cpython/initconfig.h" +#include "pythread.h" #include "pystate.h" #include "context.h" @@ -152,7 +165,6 @@ #include "pyctype.h" #include "pystrtod.h" #include "pystrcmp.h" -#include "dtoa.h" #include "fileutils.h" #include "pyfpe.h" #include "tracemalloc.h" diff --git a/src/external/windows/include/python/abstract.h b/src/external/windows/include/python/abstract.h index fd85882a..2baa6981 100755 --- a/src/external/windows/include/python/abstract.h +++ b/src/external/windows/include/python/abstract.h @@ -141,6 +141,12 @@ extern "C" { #endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* Call a callable Python object without any arguments */ +PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func); +#endif + + /* Call a callable Python object 'callable' with arguments given by the tuple 'args' and keywords arguments given by the dictionary 'kwargs'. @@ -696,7 +702,7 @@ PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) /* Return a pointer to the underlying item array for - an object retured by PySequence_Fast */ + an object returned by PySequence_Fast */ #define PySequence_Fast_ITEMS(sf) \ (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ : ((PyTupleObject *)(sf))->ob_item) diff --git a/src/external/windows/include/python/asdl.h b/src/external/windows/include/python/asdl.h index c8e49f0a..31db708b 100755 --- a/src/external/windows/include/python/asdl.h +++ b/src/external/windows/include/python/asdl.h @@ -1,11 +1,10 @@ +#ifndef Py_LIMITED_API #ifndef Py_ASDL_H #define Py_ASDL_H typedef PyObject * identifier; typedef PyObject * string; -typedef PyObject * bytes; typedef PyObject * object; -typedef PyObject * singleton; typedef PyObject * constant; /* It would be nice if the code generated by asdl_c.py was completely @@ -44,3 +43,4 @@ asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena); #endif #endif /* !Py_ASDL_H */ +#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/ast.h b/src/external/windows/include/python/ast.h index 27f11b7a..389113a7 100755 --- a/src/external/windows/include/python/ast.h +++ b/src/external/windows/include/python/ast.h @@ -1,3 +1,4 @@ +#ifndef Py_LIMITED_API #ifndef Py_AST_H #define Py_AST_H #ifdef __cplusplus @@ -19,19 +20,16 @@ PyAPI_FUNC(mod_ty) PyAST_FromNodeObject( PyObject *filename, PyArena *arena); -#ifndef Py_LIMITED_API - /* _PyAST_ExprAsUnicode is defined in ast_unparse.c */ PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty); /* Return the borrowed reference to the first literal string in the - sequence of statemnts or NULL if it doesn't start from a literal string. + sequence of statements or NULL if it doesn't start from a literal string. Doesn't set exception. */ PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *); -#endif /* !Py_LIMITED_API */ - #ifdef __cplusplus } #endif #endif /* !Py_AST_H */ +#endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/boolobject.h b/src/external/windows/include/python/boolobject.h index 79501fd9..e9e48673 100755 --- a/src/external/windows/include/python/boolobject.h +++ b/src/external/windows/include/python/boolobject.h @@ -9,7 +9,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyBool_Type; -#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) +#define PyBool_Check(x) Py_IS_TYPE(x, &PyBool_Type) /* Py_False and Py_True are the only two bools in existence. Don't forget to apply Py_INCREF() when returning either!!! */ diff --git a/src/external/windows/include/python/bytearrayobject.h b/src/external/windows/include/python/bytearrayobject.h index 0d93e06b..1ef0cf3b 100755 --- a/src/external/windows/include/python/bytearrayobject.h +++ b/src/external/windows/include/python/bytearrayobject.h @@ -18,25 +18,13 @@ extern "C" { * to contain a char pointer, not an unsigned char pointer. */ -/* Object layout */ -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ - char *ob_bytes; /* Physical backing buffer */ - char *ob_start; /* Logical start inside ob_bytes */ - /* XXX(nnorwitz): should ob_exports be Py_ssize_t? */ - int ob_exports; /* How many buffer exports */ -} PyByteArrayObject; -#endif - /* Type object */ PyAPI_DATA(PyTypeObject) PyByteArray_Type; PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type; /* Type check macros */ #define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type) -#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type) +#define PyByteArray_CheckExact(self) Py_IS_TYPE(self, &PyByteArray_Type) /* Direct API functions */ PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *); @@ -46,14 +34,10 @@ PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *); PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *); PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t); -/* Macros, trading safety for speed */ #ifndef Py_LIMITED_API -#define PyByteArray_AS_STRING(self) \ - (assert(PyByteArray_Check(self)), \ - Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) -#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) - -PyAPI_DATA(char) _PyByteArray_empty_string[]; +# define Py_CPYTHON_BYTEARRAYOBJECT_H +# include "cpython/bytearrayobject.h" +# undef Py_CPYTHON_BYTEARRAYOBJECT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/bytesobject.h b/src/external/windows/include/python/bytesobject.h index fd08ba6e..3643f530 100755 --- a/src/external/windows/include/python/bytesobject.h +++ b/src/external/windows/include/python/bytesobject.h @@ -27,26 +27,12 @@ functions should be applied to nil objects. /* Caching the hash (ob_shash) saves recalculation of a string's hash value. This significantly speeds up dict lookups. */ -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - Py_hash_t ob_shash; - char ob_sval[1]; - - /* Invariants: - * ob_sval contains space for 'ob_size+1' elements. - * ob_sval[ob_size] == 0. - * ob_shash is the hash of the string or -1 if not computed yet. - */ -} PyBytesObject; -#endif - PyAPI_DATA(PyTypeObject) PyBytes_Type; PyAPI_DATA(PyTypeObject) PyBytesIter_Type; #define PyBytes_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS) -#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type) +#define PyBytes_CheckExact(op) Py_IS_TYPE(op, &PyBytes_Type) PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); @@ -60,40 +46,9 @@ PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *); PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *); -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); -PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( - const char *format, - Py_ssize_t format_len, - PyObject *args, - int use_bytearray); -PyAPI_FUNC(PyObject*) _PyBytes_FromHex( - PyObject *string, - int use_bytearray); -#endif PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t, const char *, Py_ssize_t, const char *); -#ifndef Py_LIMITED_API -/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */ -PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t, - const char *, Py_ssize_t, - const char *, - const char **); -#endif - -/* Macro, trading safety for speed */ -#ifndef Py_LIMITED_API -#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ - (((PyBytesObject *)(op))->ob_sval)) -#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) -#endif - -/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, - x must be an iterable object. */ -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); -#endif /* Provides access to the internal data buffer and size of a string object or the default encoded version of a Unicode object. Passing @@ -108,28 +63,6 @@ PyAPI_FUNC(int) PyBytes_AsStringAndSize( strings) */ ); -/* Using the current locale, insert the thousands grouping - into the string pointed to by buffer. For the argument descriptions, - see Objects/stringlib/localeutil.h */ -#ifndef Py_LIMITED_API -PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer, - Py_ssize_t n_buffer, - char *digits, - Py_ssize_t n_digits, - Py_ssize_t min_width); - -/* Using explicit passed-in values, insert the thousands grouping - into the string pointed to by buffer. For the argument descriptions, - see Objects/stringlib/localeutil.h */ -PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, - Py_ssize_t n_buffer, - char *digits, - Py_ssize_t n_digits, - Py_ssize_t min_width, - const char *grouping, - const char *thousands_sep); -#endif - /* Flags used by string formatting */ #define F_LJUST (1<<0) #define F_SIGN (1<<1) @@ -138,85 +71,10 @@ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer, #define F_ZERO (1<<4) #ifndef Py_LIMITED_API -/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer". - A _PyBytesWriter variable must be declared at the end of variables in a - function to optimize the memory allocation on the stack. */ -typedef struct { - /* bytes, bytearray or NULL (when the small buffer is used) */ - PyObject *buffer; - - /* Number of allocated size. */ - Py_ssize_t allocated; - - /* Minimum number of allocated bytes, - incremented by _PyBytesWriter_Prepare() */ - Py_ssize_t min_size; - - /* If non-zero, use a bytearray instead of a bytes object for buffer. */ - int use_bytearray; - - /* If non-zero, overallocate the buffer (default: 0). - This flag must be zero if use_bytearray is non-zero. */ - int overallocate; - - /* Stack buffer */ - int use_small_buffer; - char small_buffer[512]; -} _PyBytesWriter; - -/* Initialize a bytes writer - - By default, the overallocation is disabled. Set the overallocate attribute - to control the allocation of the buffer. */ -PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); - -/* Get the buffer content and reset the writer. - Return a bytes object, or a bytearray object if use_bytearray is non-zero. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, - void *str); - -/* Deallocate memory of a writer (clear its internal buffer). */ -PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); - -/* Allocate the buffer to write size bytes. - Return the pointer to the beginning of buffer data. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, - Py_ssize_t size); - -/* Ensure that the buffer is large enough to write *size* bytes. - Add size to the writer minimum size (min_size attribute). - - str is the current pointer inside the buffer. - Return the updated current pointer inside the buffer. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, - void *str, - Py_ssize_t size); - -/* Resize the buffer to make it larger. - The new buffer may be larger than size bytes because of overallocation. - Return the updated current pointer inside the buffer. - Raise an exception and return NULL on error. - - Note: size must be greater than the number of allocated bytes in the writer. - - This function doesn't use the writer minimum size (min_size attribute). - - See also _PyBytesWriter_Prepare(). - */ -PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, - void *str, - Py_ssize_t size); - -/* Write bytes. - Raise an exception and return NULL on error. */ -PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, - void *str, - const void *bytes, - Py_ssize_t size); -#endif /* Py_LIMITED_API */ +# define Py_CPYTHON_BYTESOBJECT_H +# include "cpython/bytesobject.h" +# undef Py_CPYTHON_BYTESOBJECT_H +#endif #ifdef __cplusplus } diff --git a/src/external/windows/include/python/cellobject.h b/src/external/windows/include/python/cellobject.h index d38bf130..00749aed 100755 --- a/src/external/windows/include/python/cellobject.h +++ b/src/external/windows/include/python/cellobject.h @@ -13,7 +13,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyCell_Type; -#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type) +#define PyCell_Check(op) Py_IS_TYPE(op, &PyCell_Type) PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); diff --git a/src/external/windows/include/python/ceval.h b/src/external/windows/include/python/ceval.h index 31b92ffa..1b32417e 100755 --- a/src/external/windows/include/python/ceval.h +++ b/src/external/windows/include/python/ceval.h @@ -8,52 +8,30 @@ extern "C" { /* Interface to random parts in ceval.c */ /* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction - * and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(), - * PyObject_CallFunction() and PyObject_CallMethod() are recommended to call - * a callable object. + * and PyEval_CallMethod are deprecated. Since they are officially part of the + * stable ABI (PEP 384), they must be kept for backward compatibility. + * PyObject_Call(), PyObject_CallFunction() and PyObject_CallMethod() are + * recommended to call a callable object. */ -PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( PyObject *callable, PyObject *args, PyObject *kwargs); -/* Inline this */ +/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */ #define PyEval_CallObject(callable, arg) \ PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL) -PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable, - const char *format, ...); -PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj, - const char *name, - const char *format, ...); - -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); -PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth); -PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void); -PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *); -PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void); -PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *); -PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void); -#endif - -struct _frame; /* Avoid including frameobject.h */ +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction( + PyObject *callable, const char *format, ...); +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallMethod( + PyObject *obj, const char *name, const char *format, ...); PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); -PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void); - -#ifndef Py_LIMITED_API -/* Helper to look up a builtin object */ -PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); -/* Look at the current frame's (if any) code's co_flags, and turn on - the corresponding compiler flags in cf->cf_flags. Return 1 if any - flag was set, else return 0. */ -PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); -#endif +PyAPI_FUNC(PyFrameObject *) PyEval_GetFrame(void); PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); PyAPI_FUNC(int) Py_MakePendingCalls(void); @@ -86,41 +64,8 @@ PyAPI_FUNC(int) Py_MakePendingCalls(void); PyAPI_FUNC(void) Py_SetRecursionLimit(int); PyAPI_FUNC(int) Py_GetRecursionLimit(void); -#define Py_EnterRecursiveCall(where) \ - (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ - _Py_CheckRecursiveCall(where)) -#define Py_LeaveRecursiveCall() \ - do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \ - PyThreadState_GET()->overflowed = 0; \ - } while(0) -PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where); - -/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in - the stable ABI. It should be removed therefrom when possible. -*/ -PyAPI_DATA(int) _Py_CheckRecursionLimit; - -#ifdef USE_STACKCHECK -/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall() - on every 64th call to Py_EnterRecursiveCall. -*/ -# define _Py_MakeRecCheck(x) \ - (++(x) > _Py_CheckRecursionLimit || \ - ++(PyThreadState_GET()->stackcheck_counter) > 64) -#else -# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) -#endif - -/* Compute the "lower-water mark" for a recursion limit. When - * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, - * the overflowed flag is reset to 0. */ -#define _Py_RecursionLimitLowerWaterMark(limit) \ - (((limit) > 200) \ - ? ((limit) - 50) \ - : (3 * ((limit) >> 2))) - -#define _Py_MakeEndRecCheck(x) \ - (--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit)) +PyAPI_FUNC(int) Py_EnterRecursiveCall(const char *where); +PyAPI_FUNC(void) Py_LeaveRecursiveCall(void); #define Py_ALLOW_RECURSION \ do { unsigned char _old = PyThreadState_GET()->recursion_critical;\ @@ -133,11 +78,8 @@ PyAPI_DATA(int) _Py_CheckRecursionLimit; PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); -PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *); -PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc); -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); -#endif +PyAPI_FUNC(PyObject *) PyEval_EvalFrame(PyFrameObject *); +PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(PyFrameObject *f, int exc); /* Interface for threads. @@ -177,9 +119,6 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND Py_END_ALLOW_THREADS!!! - The function PyEval_InitThreads() should be called only from - init_thread() in "_threadmodule.c". - Note that not yet all candidates have been converted to use this mechanism! */ @@ -187,22 +126,17 @@ PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc); PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); -PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); -PyAPI_FUNC(void) PyEval_InitThreads(void); +Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); +Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void); +/* PyEval_AcquireLock() and PyEval_ReleaseLock() are part of stable ABI. + * They will be removed from this header file in the future version. + * But they will be remained in ABI until Python 4.0. + */ Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void); -/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void); +Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_ReleaseLock(void); PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); -PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); -#endif - -#ifndef Py_LIMITED_API -PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); -#endif - #define Py_BEGIN_ALLOW_THREADS { \ PyThreadState *_save; \ _save = PyEval_SaveThread(); @@ -211,11 +145,6 @@ PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); #define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ } -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); -PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); -#endif - /* Masks and values used by FORMAT_VALUE opcode. */ #define FVC_MASK 0x3 #define FVC_NONE 0x0 @@ -225,6 +154,12 @@ PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); #define FVS_MASK 0x4 #define FVS_HAVE_SPEC 0x4 +#ifndef Py_LIMITED_API +# define Py_CPYTHON_CEVAL_H +# include "cpython/ceval.h" +# undef Py_CPYTHON_CEVAL_H +#endif + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/classobject.h b/src/external/windows/include/python/classobject.h index 4c513eb3..5ee99b3b 100755 --- a/src/external/windows/include/python/classobject.h +++ b/src/external/windows/include/python/classobject.h @@ -19,7 +19,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyMethod_Type; -#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type) +#define PyMethod_Check(op) Py_IS_TYPE(op, &PyMethod_Type) PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *); @@ -33,8 +33,6 @@ PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); #define PyMethod_GET_SELF(meth) \ (((PyMethodObject *)meth) -> im_self) -PyAPI_FUNC(int) PyMethod_ClearFreeList(void); - typedef struct { PyObject_HEAD PyObject *func; @@ -42,7 +40,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type; -#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type) +#define PyInstanceMethod_Check(op) Py_IS_TYPE(op, &PyInstanceMethod_Type) PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *); PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *); diff --git a/src/external/windows/include/python/code.h b/src/external/windows/include/python/code.h index 6c79cf19..1f948e52 100755 --- a/src/external/windows/include/python/code.h +++ b/src/external/windows/include/python/code.h @@ -1,180 +1,20 @@ /* Definitions for bytecode */ -#ifndef Py_LIMITED_API #ifndef Py_CODE_H #define Py_CODE_H #ifdef __cplusplus extern "C" { #endif -typedef uint16_t _Py_CODEUNIT; - -#ifdef WORDS_BIGENDIAN -# define _Py_OPCODE(word) ((word) >> 8) -# define _Py_OPARG(word) ((word) & 255) -#else -# define _Py_OPCODE(word) ((word) & 255) -# define _Py_OPARG(word) ((word) >> 8) -#endif - -typedef struct _PyOpcache _PyOpcache; - -/* Bytecode object */ -typedef struct { - PyObject_HEAD - int co_argcount; /* #arguments, except *args */ - int co_posonlyargcount; /* #positional only arguments */ - int co_kwonlyargcount; /* #keyword only arguments */ - int co_nlocals; /* #local variables */ - int co_stacksize; /* #entries needed for evaluation stack */ - int co_flags; /* CO_..., see below */ - int co_firstlineno; /* first source line number */ - PyObject *co_code; /* instruction opcodes */ - PyObject *co_consts; /* list (constants used) */ - PyObject *co_names; /* list of strings (names used) */ - PyObject *co_varnames; /* tuple of strings (local variable names) */ - PyObject *co_freevars; /* tuple of strings (free variable names) */ - PyObject *co_cellvars; /* tuple of strings (cell variable names) */ - /* The rest aren't used in either hash or comparisons, except for co_name, - used in both. This is done to preserve the name and line number - for tracebacks and debuggers; otherwise, constant de-duplication - would collapse identical functions/lambdas defined on different lines. - */ - Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */ - PyObject *co_filename; /* unicode (where it was loaded from) */ - PyObject *co_name; /* unicode (name, for reference) */ - PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See - Objects/lnotab_notes.txt for details. */ - void *co_zombieframe; /* for optimization only (see frameobject.c) */ - PyObject *co_weakreflist; /* to support weakrefs to code objects */ - /* Scratch space for extra data relating to the code object. - Type is a void* to keep the format private in codeobject.c to force - people to go through the proper APIs. */ - void *co_extra; - - /* Per opcodes just-in-time cache - * - * To reduce cache size, we use indirect mapping from opcode index to - * cache object: - * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1] - */ - - // co_opcache_map is indexed by (next_instr - first_instr). - // * 0 means there is no cache for this opcode. - // * n > 0 means there is cache in co_opcache[n-1]. - unsigned char *co_opcache_map; - _PyOpcache *co_opcache; - int co_opcache_flag; // used to determine when create a cache. - unsigned char co_opcache_size; // length of co_opcache. -} PyCodeObject; - -/* Masks for co_flags above */ -#define CO_OPTIMIZED 0x0001 -#define CO_NEWLOCALS 0x0002 -#define CO_VARARGS 0x0004 -#define CO_VARKEYWORDS 0x0008 -#define CO_NESTED 0x0010 -#define CO_GENERATOR 0x0020 -/* The CO_NOFREE flag is set if there are no free or cell variables. - This information is redundant, but it allows a single flag test - to determine whether there is any extra work to be done when the - call frame it setup. -*/ -#define CO_NOFREE 0x0040 - -/* The CO_COROUTINE flag is set for coroutine functions (defined with - ``async def`` keywords) */ -#define CO_COROUTINE 0x0080 -#define CO_ITERABLE_COROUTINE 0x0100 -#define CO_ASYNC_GENERATOR 0x0200 - -/* bpo-39562: These constant values are changed in Python 3.9 - to prevent collision with compiler flags. CO_FUTURE_ and PyCF_ - constants must be kept unique. PyCF_ constants can use bits from - 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */ -#define CO_FUTURE_DIVISION 0x20000 -#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */ -#define CO_FUTURE_WITH_STATEMENT 0x80000 -#define CO_FUTURE_PRINT_FUNCTION 0x100000 -#define CO_FUTURE_UNICODE_LITERALS 0x200000 - -#define CO_FUTURE_BARRY_AS_BDFL 0x400000 -#define CO_FUTURE_GENERATOR_STOP 0x800000 -#define CO_FUTURE_ANNOTATIONS 0x1000000 - -/* This value is found in the co_cell2arg array when the associated cell - variable does not correspond to an argument. */ -#define CO_CELL_NOT_AN_ARG (-1) - -/* This should be defined if a future statement modifies the syntax. - For example, when a keyword is added. -*/ -#define PY_PARSER_REQUIRES_FUTURE_KEYWORD - -#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ - -PyAPI_DATA(PyTypeObject) PyCode_Type; - -#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type) -#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) - -/* Public interface */ -PyAPI_FUNC(PyCodeObject *) PyCode_New( - int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); - -PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs( - int, int, int, int, int, int, PyObject *, PyObject *, - PyObject *, PyObject *, PyObject *, PyObject *, - PyObject *, PyObject *, int, PyObject *); - /* same as struct above */ - -/* Creates a new empty code object with the specified source location. */ -PyAPI_FUNC(PyCodeObject *) -PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); - -/* Return the line number associated with the specified bytecode index - in this code object. If you just need the line number of a frame, - use PyFrame_GetLineNumber() instead. */ -PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); - -/* for internal use only */ -typedef struct _addr_pair { - int ap_lower; - int ap_upper; -} PyAddrPair; +typedef struct PyCodeObject PyCodeObject; #ifndef Py_LIMITED_API -/* Update *bounds to describe the first and one-past-the-last instructions in the - same line as lasti. Return the number of that line. -*/ -PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, - int lasti, PyAddrPair *bounds); - -/* Create a comparable key used to compare constants taking in account the - * object type. It is used to make sure types are not coerced (e.g., float and - * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms - * - * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items) - * depending on the type and the value. The type is the first item to not - * compare bytes and str which can raise a BytesWarning exception. */ -PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj); -#endif - -PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, - PyObject *names, PyObject *lnotab); - - -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index, - void **extra); -PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, - void *extra); +# define Py_CPYTHON_CODE_H +# include "cpython/code.h" +# undef Py_CPYTHON_CODE_H #endif #ifdef __cplusplus } #endif #endif /* !Py_CODE_H */ -#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/compile.h b/src/external/windows/include/python/compile.h index eac3d9b5..4d6a0f6c 100755 --- a/src/external/windows/include/python/compile.h +++ b/src/external/windows/include/python/compile.h @@ -2,7 +2,6 @@ #define Py_COMPILE_H #ifndef Py_LIMITED_API -#include "code.h" #ifdef __cplusplus extern "C" { @@ -10,6 +9,9 @@ extern "C" { /* Public interface */ struct _node; /* Declare the existence of this type */ +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *); /* XXX (ncoghlan): Unprefixed type name in a public API! */ @@ -89,7 +91,12 @@ PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name); PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg); PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump); -PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize); +typedef struct { + int optimize; + int ff_features; +} _PyASTOptimizeState; + +PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, _PyASTOptimizeState *state); #ifdef __cplusplus } @@ -103,4 +110,7 @@ PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize); #define Py_eval_input 258 #define Py_func_type_input 345 +/* This doesn't need to match anything */ +#define Py_fstring_input 800 + #endif /* !Py_COMPILE_H */ diff --git a/src/external/windows/include/python/complexobject.h b/src/external/windows/include/python/complexobject.h index a189212d..a912a55f 100755 --- a/src/external/windows/include/python/complexobject.h +++ b/src/external/windows/include/python/complexobject.h @@ -39,7 +39,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyComplex_Type; #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type) -#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type) +#define PyComplex_CheckExact(op) Py_IS_TYPE(op, &PyComplex_Type) #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); diff --git a/src/external/windows/include/python/context.h b/src/external/windows/include/python/context.h index cb21c429..e1a0f0fb 100755 --- a/src/external/windows/include/python/context.h +++ b/src/external/windows/include/python/context.h @@ -17,9 +17,9 @@ PyAPI_DATA(PyTypeObject) PyContextToken_Type; typedef struct _pycontexttokenobject PyContextToken; -#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type) -#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type) -#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type) +#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type) +#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type) +#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type) PyAPI_FUNC(PyObject *) PyContext_New(void); @@ -73,9 +73,6 @@ PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token); PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void); -PyAPI_FUNC(int) PyContext_ClearFreeList(void); - - #endif /* !Py_LIMITED_API */ #ifdef __cplusplus diff --git a/src/external/windows/include/python/cpython/abstract.h b/src/external/windows/include/python/cpython/abstract.h index 8b921dae..91c15448 100755 --- a/src/external/windows/include/python/cpython/abstract.h +++ b/src/external/windows/include/python/cpython/abstract.h @@ -26,28 +26,10 @@ PyAPI_FUNC(PyObject *) _PyStack_AsDict( PyObject *const *values, PyObject *kwnames); -/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple). - - Return 0 on success, raise an exception and return -1 on error. - - Write the new stack into *p_stack. If *p_stack is differen than args, it - must be released by PyMem_Free(). - - The stack uses borrowed references. - - The type of keyword keys is not checked, these checks should be done - later (ex: _PyArg_ParseStackAndKeywords). */ -PyAPI_FUNC(int) _PyStack_UnpackDict( - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs, - PyObject *const **p_stack, - PyObject **p_kwnames); - /* Suggested size (number of positional arguments) for arrays of PyObject* allocated on a C stack to avoid allocating memory on the heap memory. Such array is used to pass positional arguments to call functions of the - _PyObject_Vectorcall() family. + PyObject_Vectorcall() family. The size is chosen to not abuse the C stack and so limit the risk of stack overflow. The size is also chosen to allow using the small stack for most @@ -55,16 +37,19 @@ PyAPI_FUNC(int) _PyStack_UnpackDict( 40 bytes on the stack. */ #define _PY_FASTCALL_SMALL_STACK 5 -PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable, - PyObject *result, - const char *where); +PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult( + PyThreadState *tstate, + PyObject *callable, + PyObject *result, + const char *where); /* === Vectorcall protocol (PEP 590) ============================= */ -/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall() - or _PyObject_FastCallDict() (both forms are supported), +/* Call callable using tp_call. Arguments are like PyObject_Vectorcall() + or PyObject_FastCallDict() (both forms are supported), except that nargs is plainly the number of arguments without flags. */ PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall( + PyThreadState *tstate, PyObject *callable, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords); @@ -78,18 +63,22 @@ PyVectorcall_NARGS(size_t n) } static inline vectorcallfunc -_PyVectorcall_Function(PyObject *callable) +PyVectorcall_Function(PyObject *callable) { - PyTypeObject *tp = Py_TYPE(callable); - Py_ssize_t offset = tp->tp_vectorcall_offset; - vectorcallfunc *ptr; - if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) { + PyTypeObject *tp; + Py_ssize_t offset; + vectorcallfunc ptr; + + assert(callable != NULL); + tp = Py_TYPE(callable); + if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) { return NULL; } assert(PyCallable_Check(callable)); + offset = tp->tp_vectorcall_offset; assert(offset > 0); - ptr = (vectorcallfunc*)(((char *)callable) + offset); - return *ptr; + memcpy(&ptr, (char *) callable + offset, sizeof(ptr)); + return ptr; } /* Call the callable object 'callable' with the "vectorcall" calling @@ -106,31 +95,51 @@ _PyVectorcall_Function(PyObject *callable) of keyword arguments does not change nargsf). kwnames can also be NULL if there are no keyword arguments. - keywords must only contains str strings (no subclass), and all keys must - be unique. + keywords must only contain strings and all keys must be unique. Return the result on success. Raise an exception and return NULL on error. */ static inline PyObject * -_PyObject_Vectorcall(PyObject *callable, PyObject *const *args, - size_t nargsf, PyObject *kwnames) +_PyObject_VectorcallTstate(PyThreadState *tstate, PyObject *callable, + PyObject *const *args, size_t nargsf, + PyObject *kwnames) { - PyObject *res; vectorcallfunc func; + PyObject *res; + assert(kwnames == NULL || PyTuple_Check(kwnames)); assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0); - func = _PyVectorcall_Function(callable); + + func = PyVectorcall_Function(callable); if (func == NULL) { Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); - return _PyObject_MakeTpCall(callable, args, nargs, kwnames); + return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames); } res = func(callable, args, nargsf, kwnames); - return _Py_CheckFunctionResult(callable, res, NULL); + return _Py_CheckFunctionResult(tstate, callable, res, NULL); } -/* Same as _PyObject_Vectorcall except that keyword arguments are passed as +static inline PyObject * +PyObject_Vectorcall(PyObject *callable, PyObject *const *args, + size_t nargsf, PyObject *kwnames) +{ + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_VectorcallTstate(tstate, callable, + args, nargsf, kwnames); +} + +// Backwards compatibility aliases for API that was provisional in Python 3.8 +#define _PyObject_Vectorcall PyObject_Vectorcall +#define _PyObject_VectorcallMethod PyObject_VectorcallMethod +#define _PyObject_FastCallDict PyObject_VectorcallDict +#define _PyVectorcall_Function PyVectorcall_Function +#define _PyObject_CallOneArg PyObject_CallOneArg +#define _PyObject_CallMethodNoArgs PyObject_CallMethodNoArgs +#define _PyObject_CallMethodOneArg PyObject_CallMethodOneArg + +/* Same as PyObject_Vectorcall except that keyword arguments are passed as dict, which may be NULL if there are no keyword arguments. */ -PyAPI_FUNC(PyObject *) _PyObject_FastCallDict( +PyAPI_FUNC(PyObject *) PyObject_VectorcallDict( PyObject *callable, PyObject *const *args, size_t nargsf, @@ -140,30 +149,65 @@ PyAPI_FUNC(PyObject *) _PyObject_FastCallDict( "tuple" and keyword arguments "dict". "dict" may also be NULL */ PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict); -/* Same as _PyObject_Vectorcall except without keyword arguments */ +static inline PyObject * +_PyObject_FastCallTstate(PyThreadState *tstate, PyObject *func, PyObject *const *args, Py_ssize_t nargs) +{ + return _PyObject_VectorcallTstate(tstate, func, args, (size_t)nargs, NULL); +} + +/* Same as PyObject_Vectorcall except without keyword arguments */ static inline PyObject * _PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs) { - return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL); + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_FastCallTstate(tstate, func, args, nargs); } -/* Call a callable without any arguments */ +/* Call a callable without any arguments + Private static inline function variant of public function + PyObject_CallNoArgs(). */ static inline PyObject * _PyObject_CallNoArg(PyObject *func) { - return _PyObject_Vectorcall(func, NULL, 0, NULL); + PyThreadState *tstate = PyThreadState_GET(); + return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); } -PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend( - PyObject *callable, - PyObject *obj, - PyObject *args, - PyObject *kwargs); +static inline PyObject * +PyObject_CallOneArg(PyObject *func, PyObject *arg) +{ + PyObject *_args[2]; + PyObject **args; + PyThreadState *tstate; + size_t nargsf; -PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend( - PyObject *callable, - PyObject *obj, - PyObject *const *args, - Py_ssize_t nargs); + assert(arg != NULL); + args = _args + 1; // For PY_VECTORCALL_ARGUMENTS_OFFSET + args[0] = arg; + tstate = PyThreadState_GET(); + nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET; + return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL); +} + +PyAPI_FUNC(PyObject *) PyObject_VectorcallMethod( + PyObject *name, PyObject *const *args, + size_t nargsf, PyObject *kwnames); + +static inline PyObject * +PyObject_CallMethodNoArgs(PyObject *self, PyObject *name) +{ + return PyObject_VectorcallMethod(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + +static inline PyObject * +PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg) +{ + PyObject *args[2] = {self, arg}; + + assert(arg != NULL); + return PyObject_VectorcallMethod(name, args, + 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} /* Like PyObject_CallMethod(), but expect a _Py_Identifier* as the method name. */ @@ -181,6 +225,35 @@ PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs( struct _Py_Identifier *name, ...); +static inline PyObject * +_PyObject_VectorcallMethodId( + _Py_Identifier *name, PyObject *const *args, + size_t nargsf, PyObject *kwnames) +{ + PyObject *oname = _PyUnicode_FromId(name); /* borrowed */ + if (!oname) { + return NULL; + } + return PyObject_VectorcallMethod(oname, args, nargsf, kwnames); +} + +static inline PyObject * +_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name) +{ + return _PyObject_VectorcallMethodId(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + +static inline PyObject * +_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg) +{ + PyObject *args[2] = {self, arg}; + + assert(arg != NULL); + return _PyObject_VectorcallMethodId(name, args, + 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o); /* Guess the size of object 'o' using len(o) or o.__length_hint__(). @@ -191,9 +264,7 @@ PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t); /* === New Buffer API ============================================ */ /* Return 1 if the getbuffer function is available, otherwise return 0. */ -#define PyObject_CheckBuffer(obj) \ - (((obj)->ob_type->tp_as_buffer != NULL) && \ - ((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL)) +PyAPI_FUNC(int) PyObject_CheckBuffer(PyObject *obj); /* This is a C-API version of the getbuffer function call. It checks to make sure object has the required function pointer and issues the @@ -209,7 +280,7 @@ PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices); /* Return the implied itemsize of the data-format area from a struct-style description. */ -PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *); +PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format); /* Implementation in memoryobject.c */ PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view, @@ -261,14 +332,8 @@ PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view); /* ==== Iterators ================================================ */ #define PyIter_Check(obj) \ - ((obj)->ob_type->tp_iternext != NULL && \ - (obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented) - -/* === Number Protocol ================================================== */ - -#define PyIndex_Check(obj) \ - ((obj)->ob_type->tp_as_number != NULL && \ - (obj)->ob_type->tp_as_number->nb_index != NULL) + (Py_TYPE(obj)->tp_iternext != NULL && \ + Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented) /* === Sequence protocol ================================================ */ diff --git a/src/external/windows/include/python/cpython/bytearrayobject.h b/src/external/windows/include/python/cpython/bytearrayobject.h new file mode 100755 index 00000000..061de138 --- /dev/null +++ b/src/external/windows/include/python/cpython/bytearrayobject.h @@ -0,0 +1,20 @@ +#ifndef Py_CPYTHON_BYTEARRAYOBJECT_H +# error "this header file must not be included directly" +#endif + +/* Object layout */ +typedef struct { + PyObject_VAR_HEAD + Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */ + char *ob_bytes; /* Physical backing buffer */ + char *ob_start; /* Logical start inside ob_bytes */ + Py_ssize_t ob_exports; /* How many buffer exports */ +} PyByteArrayObject; + +/* Macros, trading safety for speed */ +#define PyByteArray_AS_STRING(self) \ + (assert(PyByteArray_Check(self)), \ + Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string) +#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self)) + +PyAPI_DATA(char) _PyByteArray_empty_string[]; diff --git a/src/external/windows/include/python/cpython/bytesobject.h b/src/external/windows/include/python/cpython/bytesobject.h new file mode 100755 index 00000000..370513c0 --- /dev/null +++ b/src/external/windows/include/python/cpython/bytesobject.h @@ -0,0 +1,118 @@ +#ifndef Py_CPYTHON_BYTESOBJECT_H +# error "this header file must not be included directly" +#endif + +typedef struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[1]; + + /* Invariants: + * ob_sval contains space for 'ob_size+1' elements. + * ob_sval[ob_size] == 0. + * ob_shash is the hash of the string or -1 if not computed yet. + */ +} PyBytesObject; + +PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t); +PyAPI_FUNC(PyObject*) _PyBytes_FormatEx( + const char *format, + Py_ssize_t format_len, + PyObject *args, + int use_bytearray); +PyAPI_FUNC(PyObject*) _PyBytes_FromHex( + PyObject *string, + int use_bytearray); + +/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */ +PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t, + const char *, const char **); + +/* Macro, trading safety for speed */ +#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \ + (((PyBytesObject *)(op))->ob_sval)) +#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op)) + +/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*, + x must be an iterable object. */ +PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x); + + +/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer". + A _PyBytesWriter variable must be declared at the end of variables in a + function to optimize the memory allocation on the stack. */ +typedef struct { + /* bytes, bytearray or NULL (when the small buffer is used) */ + PyObject *buffer; + + /* Number of allocated size. */ + Py_ssize_t allocated; + + /* Minimum number of allocated bytes, + incremented by _PyBytesWriter_Prepare() */ + Py_ssize_t min_size; + + /* If non-zero, use a bytearray instead of a bytes object for buffer. */ + int use_bytearray; + + /* If non-zero, overallocate the buffer (default: 0). + This flag must be zero if use_bytearray is non-zero. */ + int overallocate; + + /* Stack buffer */ + int use_small_buffer; + char small_buffer[512]; +} _PyBytesWriter; + +/* Initialize a bytes writer + + By default, the overallocation is disabled. Set the overallocate attribute + to control the allocation of the buffer. */ +PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer); + +/* Get the buffer content and reset the writer. + Return a bytes object, or a bytearray object if use_bytearray is non-zero. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, + void *str); + +/* Deallocate memory of a writer (clear its internal buffer). */ +PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); + +/* Allocate the buffer to write size bytes. + Return the pointer to the beginning of buffer data. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, + Py_ssize_t size); + +/* Ensure that the buffer is large enough to write *size* bytes. + Add size to the writer minimum size (min_size attribute). + + str is the current pointer inside the buffer. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Resize the buffer to make it larger. + The new buffer may be larger than size bytes because of overallocation. + Return the updated current pointer inside the buffer. + Raise an exception and return NULL on error. + + Note: size must be greater than the number of allocated bytes in the writer. + + This function doesn't use the writer minimum size (min_size attribute). + + See also _PyBytesWriter_Prepare(). + */ +PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer, + void *str, + Py_ssize_t size); + +/* Write bytes. + Raise an exception and return NULL on error. */ +PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, + void *str, + const void *bytes, + Py_ssize_t size); diff --git a/src/external/windows/include/python/cpython/ceval.h b/src/external/windows/include/python/cpython/ceval.h new file mode 100755 index 00000000..ce4fdfe3 --- /dev/null +++ b/src/external/windows/include/python/cpython/ceval.h @@ -0,0 +1,38 @@ +#ifndef Py_CPYTHON_CEVAL_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); +PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); +PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); +PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); +PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void); +PyAPI_FUNC(int) _PyEval_SetAsyncGenFirstiter(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void); +PyAPI_FUNC(int) _PyEval_SetAsyncGenFinalizer(PyObject *); +PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void); + +/* Helper to look up a builtin object */ +PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *); +/* Look at the current frame's (if any) code's co_flags, and turn on + the corresponding compiler flags in cf->cf_flags. Return 1 if any + flag was set, else return 0. */ +PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); + +PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int exc); + +PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds); +PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void); + +PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc); + +PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); +PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *); + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/code.h b/src/external/windows/include/python/cpython/code.h new file mode 100755 index 00000000..e0d1f1cb --- /dev/null +++ b/src/external/windows/include/python/cpython/code.h @@ -0,0 +1,165 @@ +#ifndef Py_CPYTHON_CODE_H +# error "this header file must not be included directly" +#endif + +typedef uint16_t _Py_CODEUNIT; + +#ifdef WORDS_BIGENDIAN +# define _Py_OPCODE(word) ((word) >> 8) +# define _Py_OPARG(word) ((word) & 255) +#else +# define _Py_OPCODE(word) ((word) & 255) +# define _Py_OPARG(word) ((word) >> 8) +#endif + +typedef struct _PyOpcache _PyOpcache; + +/* Bytecode object */ +struct PyCodeObject { + PyObject_HEAD + int co_argcount; /* #arguments, except *args */ + int co_posonlyargcount; /* #positional only arguments */ + int co_kwonlyargcount; /* #keyword only arguments */ + int co_nlocals; /* #local variables */ + int co_stacksize; /* #entries needed for evaluation stack */ + int co_flags; /* CO_..., see below */ + int co_firstlineno; /* first source line number */ + PyObject *co_code; /* instruction opcodes */ + PyObject *co_consts; /* list (constants used) */ + PyObject *co_names; /* list of strings (names used) */ + PyObject *co_varnames; /* tuple of strings (local variable names) */ + PyObject *co_freevars; /* tuple of strings (free variable names) */ + PyObject *co_cellvars; /* tuple of strings (cell variable names) */ + /* The rest aren't used in either hash or comparisons, except for co_name, + used in both. This is done to preserve the name and line number + for tracebacks and debuggers; otherwise, constant de-duplication + would collapse identical functions/lambdas defined on different lines. + */ + Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */ + PyObject *co_filename; /* unicode (where it was loaded from) */ + PyObject *co_name; /* unicode (name, for reference) */ + PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See + Objects/lnotab_notes.txt for details. */ + void *co_zombieframe; /* for optimization only (see frameobject.c) */ + PyObject *co_weakreflist; /* to support weakrefs to code objects */ + /* Scratch space for extra data relating to the code object. + Type is a void* to keep the format private in codeobject.c to force + people to go through the proper APIs. */ + void *co_extra; + + /* Per opcodes just-in-time cache + * + * To reduce cache size, we use indirect mapping from opcode index to + * cache object: + * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1] + */ + + // co_opcache_map is indexed by (next_instr - first_instr). + // * 0 means there is no cache for this opcode. + // * n > 0 means there is cache in co_opcache[n-1]. + unsigned char *co_opcache_map; + _PyOpcache *co_opcache; + int co_opcache_flag; // used to determine when create a cache. + unsigned char co_opcache_size; // length of co_opcache. +}; + +/* Masks for co_flags above */ +#define CO_OPTIMIZED 0x0001 +#define CO_NEWLOCALS 0x0002 +#define CO_VARARGS 0x0004 +#define CO_VARKEYWORDS 0x0008 +#define CO_NESTED 0x0010 +#define CO_GENERATOR 0x0020 +/* The CO_NOFREE flag is set if there are no free or cell variables. + This information is redundant, but it allows a single flag test + to determine whether there is any extra work to be done when the + call frame it setup. +*/ +#define CO_NOFREE 0x0040 + +/* The CO_COROUTINE flag is set for coroutine functions (defined with + ``async def`` keywords) */ +#define CO_COROUTINE 0x0080 +#define CO_ITERABLE_COROUTINE 0x0100 +#define CO_ASYNC_GENERATOR 0x0200 + +/* bpo-39562: These constant values are changed in Python 3.9 + to prevent collision with compiler flags. CO_FUTURE_ and PyCF_ + constants must be kept unique. PyCF_ constants can use bits from + 0x0100 to 0x10000. CO_FUTURE_ constants use bits starting at 0x20000. */ +#define CO_FUTURE_DIVISION 0x20000 +#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */ +#define CO_FUTURE_WITH_STATEMENT 0x80000 +#define CO_FUTURE_PRINT_FUNCTION 0x100000 +#define CO_FUTURE_UNICODE_LITERALS 0x200000 + +#define CO_FUTURE_BARRY_AS_BDFL 0x400000 +#define CO_FUTURE_GENERATOR_STOP 0x800000 +#define CO_FUTURE_ANNOTATIONS 0x1000000 + +/* This value is found in the co_cell2arg array when the associated cell + variable does not correspond to an argument. */ +#define CO_CELL_NOT_AN_ARG (-1) + +/* This should be defined if a future statement modifies the syntax. + For example, when a keyword is added. +*/ +#define PY_PARSER_REQUIRES_FUTURE_KEYWORD + +#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ + +PyAPI_DATA(PyTypeObject) PyCode_Type; + +#define PyCode_Check(op) Py_IS_TYPE(op, &PyCode_Type) +#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) + +/* Public interface */ +PyAPI_FUNC(PyCodeObject *) PyCode_New( + int, int, int, int, int, PyObject *, PyObject *, + PyObject *, PyObject *, PyObject *, PyObject *, + PyObject *, PyObject *, int, PyObject *); + +PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs( + int, int, int, int, int, int, PyObject *, PyObject *, + PyObject *, PyObject *, PyObject *, PyObject *, + PyObject *, PyObject *, int, PyObject *); + /* same as struct above */ + +/* Creates a new empty code object with the specified source location. */ +PyAPI_FUNC(PyCodeObject *) +PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); + +/* Return the line number associated with the specified bytecode index + in this code object. If you just need the line number of a frame, + use PyFrame_GetLineNumber() instead. */ +PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); + +/* for internal use only */ +typedef struct _addr_pair { + int ap_lower; + int ap_upper; +} PyAddrPair; + +/* Update *bounds to describe the first and one-past-the-last instructions in the + same line as lasti. Return the number of that line. +*/ +PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co, + int lasti, PyAddrPair *bounds); + +/* Create a comparable key used to compare constants taking in account the + * object type. It is used to make sure types are not coerced (e.g., float and + * complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms + * + * Return (type(obj), obj, ...): a tuple with variable size (at least 2 items) + * depending on the type and the value. The type is the first item to not + * compare bytes and str which can raise a BytesWarning exception. */ +PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj); + +PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts, + PyObject *names, PyObject *lnotab); + + +PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index, + void **extra); +PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, + void *extra); diff --git a/src/external/windows/include/python/cpython/dictobject.h b/src/external/windows/include/python/cpython/dictobject.h index e8c94964..3a0869de 100755 --- a/src/external/windows/include/python/cpython/dictobject.h +++ b/src/external/windows/include/python/cpython/dictobject.h @@ -62,8 +62,6 @@ PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *); PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *); #define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL) -PyAPI_FUNC(int) PyDict_ClearFreeList(void); - /* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0, the first occurrence of a key wins, if override is 1, the last occurrence of a key wins, if override is 2, a KeyError with conflicting key as diff --git a/src/external/windows/include/python/cpython/fileobject.h b/src/external/windows/include/python/cpython/fileobject.h index 7752c056..9aa0ead5 100755 --- a/src/external/windows/include/python/cpython/fileobject.h +++ b/src/external/windows/include/python/cpython/fileobject.h @@ -8,14 +8,6 @@ extern "C" { PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 -PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; -#endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 -PyAPI_DATA(int) Py_UTF8Mode; -#endif - /* The std printer acts as a preliminary sys.stderr until the new io infrastructure is in place. */ PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int); diff --git a/src/external/windows/include/python/cpython/fileutils.h b/src/external/windows/include/python/cpython/fileutils.h new file mode 100755 index 00000000..08139cf7 --- /dev/null +++ b/src/external/windows/include/python/cpython/fileutils.h @@ -0,0 +1,165 @@ +#ifndef Py_CPYTHON_FILEUTILS_H +# error "this header file must not be included directly" +#endif + +typedef enum { + _Py_ERROR_UNKNOWN=0, + _Py_ERROR_STRICT, + _Py_ERROR_SURROGATEESCAPE, + _Py_ERROR_REPLACE, + _Py_ERROR_IGNORE, + _Py_ERROR_BACKSLASHREPLACE, + _Py_ERROR_SURROGATEPASS, + _Py_ERROR_XMLCHARREFREPLACE, + _Py_ERROR_OTHER +} _Py_error_handler; + +PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors); + +PyAPI_FUNC(int) _Py_DecodeLocaleEx( + const char *arg, + wchar_t **wstr, + size_t *wlen, + const char **reason, + int current_locale, + _Py_error_handler errors); + +PyAPI_FUNC(int) _Py_EncodeLocaleEx( + const wchar_t *text, + char **str, + size_t *error_pos, + const char **reason, + int current_locale, + _Py_error_handler errors); + + +PyAPI_FUNC(PyObject *) _Py_device_encoding(int); + +#if defined(MS_WINDOWS) || defined(__APPLE__) + /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). + On macOS 10.13, read() and write() with more than INT_MAX bytes + fail with EINVAL (bpo-24658). */ +# define _PY_READ_MAX INT_MAX +# define _PY_WRITE_MAX INT_MAX +#else + /* write() should truncate the input to PY_SSIZE_T_MAX bytes, + but it's safer to do it ourself to have a portable behaviour */ +# define _PY_READ_MAX PY_SSIZE_T_MAX +# define _PY_WRITE_MAX PY_SSIZE_T_MAX +#endif + +#ifdef MS_WINDOWS +struct _Py_stat_struct { + unsigned long st_dev; + uint64_t st_ino; + unsigned short st_mode; + int st_nlink; + int st_uid; + int st_gid; + unsigned long st_rdev; + __int64 st_size; + time_t st_atime; + int st_atime_nsec; + time_t st_mtime; + int st_mtime_nsec; + time_t st_ctime; + int st_ctime_nsec; + unsigned long st_file_attributes; + unsigned long st_reparse_tag; +}; +#else +# define _Py_stat_struct stat +#endif + +PyAPI_FUNC(int) _Py_fstat( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_fstat_noraise( + int fd, + struct _Py_stat_struct *status); + +PyAPI_FUNC(int) _Py_stat( + PyObject *path, + struct stat *status); + +PyAPI_FUNC(int) _Py_open( + const char *pathname, + int flags); + +PyAPI_FUNC(int) _Py_open_noraise( + const char *pathname, + int flags); + +PyAPI_FUNC(FILE *) _Py_wfopen( + const wchar_t *path, + const wchar_t *mode); + +PyAPI_FUNC(FILE*) _Py_fopen( + const char *pathname, + const char *mode); + +PyAPI_FUNC(FILE*) _Py_fopen_obj( + PyObject *path, + const char *mode); + +PyAPI_FUNC(Py_ssize_t) _Py_read( + int fd, + void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write( + int fd, + const void *buf, + size_t count); + +PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( + int fd, + const void *buf, + size_t count); + +#ifdef HAVE_READLINK +PyAPI_FUNC(int) _Py_wreadlink( + const wchar_t *path, + wchar_t *buf, + /* Number of characters of 'buf' buffer + including the trailing NUL character */ + size_t buflen); +#endif + +#ifdef HAVE_REALPATH +PyAPI_FUNC(wchar_t*) _Py_wrealpath( + const wchar_t *path, + wchar_t *resolved_path, + /* Number of characters of 'resolved_path' buffer + including the trailing NUL character */ + size_t resolved_path_len); +#endif + +#ifndef MS_WINDOWS +PyAPI_FUNC(int) _Py_isabs(const wchar_t *path); +#endif + +PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p); + +PyAPI_FUNC(wchar_t*) _Py_wgetcwd( + wchar_t *buf, + /* Number of characters of 'buf' buffer + including the trailing NUL character */ + size_t buflen); + +PyAPI_FUNC(int) _Py_get_inheritable(int fd); + +PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, + int *atomic_flag_works); + +PyAPI_FUNC(int) _Py_dup(int fd); + +#ifndef MS_WINDOWS +PyAPI_FUNC(int) _Py_get_blocking(int fd); + +PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); +#endif /* !MS_WINDOWS */ diff --git a/src/external/windows/include/python/cpython/frameobject.h b/src/external/windows/include/python/cpython/frameobject.h new file mode 100755 index 00000000..85255fa5 --- /dev/null +++ b/src/external/windows/include/python/cpython/frameobject.h @@ -0,0 +1,84 @@ +/* Frame object interface */ + +#ifndef Py_CPYTHON_FRAMEOBJECT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + int b_type; /* what kind of block this is */ + int b_handler; /* where to jump to find handler */ + int b_level; /* value stack level to pop to */ +} PyTryBlock; + +struct _frame { + PyObject_VAR_HEAD + struct _frame *f_back; /* previous frame, or NULL */ + PyCodeObject *f_code; /* code segment */ + PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ + PyObject *f_globals; /* global symbol table (PyDictObject) */ + PyObject *f_locals; /* local symbol table (any mapping) */ + PyObject **f_valuestack; /* points after the last local */ + /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. + Frame evaluation usually NULLs it, but a frame that yields sets it + to the current stack top. */ + PyObject **f_stacktop; + PyObject *f_trace; /* Trace function */ + char f_trace_lines; /* Emit per-line trace events? */ + char f_trace_opcodes; /* Emit per-opcode trace events? */ + + /* Borrowed reference to a generator, or NULL */ + PyObject *f_gen; + + int f_lasti; /* Last instruction if called */ + /* Call PyFrame_GetLineNumber() instead of reading this field + directly. As of 2.3 f_lineno is only valid when tracing is + active (i.e. when f_trace is set). At other times we use + PyCode_Addr2Line to calculate the line from the current + bytecode index. */ + int f_lineno; /* Current line number */ + int f_iblock; /* index in f_blockstack */ + char f_executing; /* whether the frame is still executing */ + PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ + PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ +}; + + +/* Standard object interface */ + +PyAPI_DATA(PyTypeObject) PyFrame_Type; + +#define PyFrame_Check(op) Py_IS_TYPE(op, &PyFrame_Type) + +PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + +/* only internal use */ +PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *, + PyObject *, PyObject *); + + +/* The rest of the interface is specific for frame objects */ + +/* Block management functions */ + +PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); +PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); + +/* Conversions between "fast locals" and locals in dictionary */ + +PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); + +PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); +PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); + +PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); + +PyAPI_FUNC(PyFrameObject *) PyFrame_GetBack(PyFrameObject *frame); + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/import.h b/src/external/windows/include/python/cpython/import.h new file mode 100755 index 00000000..ab711e9a --- /dev/null +++ b/src/external/windows/include/python/cpython/import.h @@ -0,0 +1,50 @@ +#ifndef Py_CPYTHON_IMPORT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +PyMODINIT_FUNC PyInit__imp(void); + +PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *); + +PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name); +PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); +PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module); + +PyAPI_FUNC(void) _PyImport_AcquireLock(void); +PyAPI_FUNC(int) _PyImport_ReleaseLock(void); + +PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); + +PyAPI_FUNC(int) _PyImport_FixupBuiltin( + PyObject *mod, + const char *name, /* UTF-8 encoded string */ + PyObject *modules + ); +PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, + PyObject *, PyObject *); + +struct _inittab { + const char *name; /* ASCII encoded string */ + PyObject* (*initfunc)(void); +}; +PyAPI_DATA(struct _inittab *) PyImport_Inittab; +PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); + +struct _frozen { + const char *name; /* ASCII encoded string */ + const unsigned char *code; + int size; +}; + +/* Embedding apps may change this pointer to point to their favorite + collection of frozen modules: */ + +PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/initconfig.h b/src/external/windows/include/python/cpython/initconfig.h index 4bbe13c2..94922c00 100755 --- a/src/external/windows/include/python/cpython/initconfig.h +++ b/src/external/windows/include/python/cpython/initconfig.h @@ -113,7 +113,11 @@ typedef struct { "POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */ int utf8_mode; - int dev_mode; /* Development mode. PYTHONDEVMODE, -X dev */ + /* If non-zero, enable the Python Development Mode. + + Set to 1 by the -X dev command line option. Set by the PYTHONDEVMODE + environment variable. */ + int dev_mode; /* Memory allocator: PYTHONMALLOC env var. See PyMemAllocatorName for valid values. */ @@ -131,7 +135,7 @@ typedef struct { int isolated; /* Isolated mode? see PyPreConfig.isolated */ int use_environment; /* Use environment variables? see PyPreConfig.use_environment */ - int dev_mode; /* Development mode? See PyPreConfig.dev_mode */ + int dev_mode; /* Python Development Mode? See PyPreConfig.dev_mode */ /* Install signal handlers? Yes by default. */ int install_signal_handlers; @@ -143,13 +147,16 @@ typedef struct { Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */ int faulthandler; + /* Enable PEG parser? + 1 by default, set to 0 by -X oldparser and PYTHONOLDPARSER */ + int _use_peg_parser; + /* Enable tracemalloc? Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */ int tracemalloc; int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */ int show_ref_count; /* -X showrefcount */ - int show_alloc_count; /* -X showalloccount */ int dump_refs; /* PYTHONDUMPREFS */ int malloc_stats; /* PYTHONMALLOCSTATS */ @@ -381,6 +388,7 @@ typedef struct { wchar_t *base_prefix; /* sys.base_prefix */ wchar_t *exec_prefix; /* sys.exec_prefix */ wchar_t *base_exec_prefix; /* sys.base_exec_prefix */ + wchar_t *platlibdir; /* sys.platlibdir */ /* --- Parameter only used by Py_Main() ---------- */ @@ -402,6 +410,18 @@ typedef struct { /* If equal to 0, stop Python initialization before the "main" phase */ int _init_main; + + /* If non-zero, disallow threads, subprocesses, and fork. + Default: 0. */ + int _isolated_interpreter; + + /* Original command line arguments. If _orig_argv is empty and _argv is + not equal to [''], PyConfig_Read() copies the configuration 'argv' list + into '_orig_argv' list before modifying 'argv' list (if parse_argv + is non-zero). + + _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */ + PyWideStringList _orig_argv; } PyConfig; PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config); @@ -427,6 +447,14 @@ PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items); + +/* --- Helper functions --------------------------------------- */ + +/* Get the original command line arguments, before Python modified them. + + See also PyConfig._orig_argv. */ +PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/listobject.h b/src/external/windows/include/python/cpython/listobject.h new file mode 100755 index 00000000..54972b74 --- /dev/null +++ b/src/external/windows/include/python/cpython/listobject.h @@ -0,0 +1,43 @@ +#ifndef Py_CPYTHON_LISTOBJECT_H +# error "this header file must not be included directly" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PyObject_VAR_HEAD + /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ + PyObject **ob_item; + + /* ob_item contains space for 'allocated' elements. The number + * currently in use is ob_size. + * Invariants: + * 0 <= ob_size <= allocated + * len(list) == ob_size + * ob_item == NULL implies ob_size == allocated == 0 + * list.sort() temporarily sets allocated to -1 to detect mutations. + * + * Items must normally not be NULL, except during construction when + * the list is not yet visible outside the function that builds it. + */ + Py_ssize_t allocated; +} PyListObject; + +PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); +PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); + +/* Macro, trading safety for speed */ + +/* Cast argument to PyTupleObject* type. */ +#define _PyList_CAST(op) (assert(PyList_Check(op)), (PyListObject *)(op)) + +#define PyList_GET_ITEM(op, i) (_PyList_CAST(op)->ob_item[i]) +#define PyList_SET_ITEM(op, i, v) (_PyList_CAST(op)->ob_item[i] = (v)) +#define PyList_GET_SIZE(op) Py_SIZE(_PyList_CAST(op)) +#define _PyList_ITEMS(op) (_PyList_CAST(op)->ob_item) + +#ifdef __cplusplus +} +#endif diff --git a/src/external/windows/include/python/cpython/methodobject.h b/src/external/windows/include/python/cpython/methodobject.h new file mode 100755 index 00000000..a2c4857e --- /dev/null +++ b/src/external/windows/include/python/cpython/methodobject.h @@ -0,0 +1,35 @@ +#ifndef Py_CPYTHON_METHODOBJECT_H +# error "this header file must not be included directly" +#endif + +PyAPI_DATA(PyTypeObject) PyCMethod_Type; + +#define PyCMethod_CheckExact(op) Py_IS_TYPE(op, &PyCMethod_Type) +#define PyCMethod_Check(op) PyObject_TypeCheck(op, &PyCMethod_Type) + +/* Macros for direct access to these values. Type checks are *not* + done, so use with care. */ +#define PyCFunction_GET_FUNCTION(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_meth) +#define PyCFunction_GET_SELF(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ + NULL : ((PyCFunctionObject *)func) -> m_self) +#define PyCFunction_GET_FLAGS(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags) +#define PyCFunction_GET_CLASS(func) \ + (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_METHOD ? \ + ((PyCMethodObject *)func) -> mm_class : NULL) + +typedef struct { + PyObject_HEAD + PyMethodDef *m_ml; /* Description of the C function to call */ + PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ + PyObject *m_module; /* The __module__ attribute, can be anything */ + PyObject *m_weakreflist; /* List of weak references */ + vectorcallfunc vectorcall; +} PyCFunctionObject; + +typedef struct { + PyCFunctionObject func; + PyTypeObject *mm_class; /* Class that defines this method */ +} PyCMethodObject; diff --git a/src/external/windows/include/python/cpython/object.h b/src/external/windows/include/python/cpython/object.h index 12f53f57..98fb144c 100755 --- a/src/external/windows/include/python/cpython/object.h +++ b/src/external/windows/include/python/cpython/object.h @@ -6,6 +6,22 @@ extern "C" { #endif +PyAPI_FUNC(void) _Py_NewReference(PyObject *op); + +#ifdef Py_TRACE_REFS +/* Py_TRACE_REFS is such major surgery that we call external routines. */ +PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); +#endif + +/* Update the Python traceback of an object. This function must be called + when a memory block is reused from a free list. */ +PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op); + +#ifdef Py_REF_DEBUG +PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); +#endif + + /********************* String Literals ****************************************/ /* This structure helps managing static strings. The basic usage goes like this: Instead of doing @@ -20,7 +36,7 @@ extern "C" { PyId_foo is a static variable, either on block level or file level. On first usage, the string "foo" is interned, and the structures are linked. On interpreter - shutdown, all strings are released (through _PyUnicode_ClearStaticStrings). + shutdown, all strings are released. Alternatively, _Py_static_string allows choosing the variable name. _PyUnicode_FromId returns a borrowed reference to the interned string. @@ -176,7 +192,7 @@ typedef struct { * backwards-compatibility */ typedef Py_ssize_t printfunc; -typedef struct _typeobject { +struct _typeobject { PyObject_VAR_HEAD const char *tp_name; /* For printing, in format "." */ Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ @@ -257,19 +273,7 @@ typedef struct _typeobject { destructor tp_finalize; vectorcallfunc tp_vectorcall; - - /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */ - Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int); - -#ifdef COUNT_ALLOCS - /* these must be last and never explicitly initialized */ - Py_ssize_t tp_allocs; - Py_ssize_t tp_frees; - Py_ssize_t tp_maxalloc; - struct _typeobject *tp_prev; - struct _typeobject *tp_next; -#endif -} PyTypeObject; +}; /* The *real* layout of a type object when allocated on the heap */ typedef struct _heaptypeobject { @@ -287,6 +291,7 @@ typedef struct _heaptypeobject { PyBufferProcs as_buffer; PyObject *ht_name, *ht_slots, *ht_qualname; struct _dictkeysobject *ht_cached_keys; + PyObject *ht_module; /* here are optional user slots, followed by the members. */ } PyHeapTypeObject; @@ -323,6 +328,9 @@ PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *); */ PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **); PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **); + +PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *); PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *); @@ -336,20 +344,7 @@ PyAPI_FUNC(int) _PyObject_GenericSetAttrWithDict(PyObject *, PyObject *, PyObject *, PyObject *); -#define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) - -static inline void _Py_Dealloc_inline(PyObject *op) -{ - destructor dealloc = Py_TYPE(op)->tp_dealloc; -#ifdef Py_TRACE_REFS - _Py_ForgetReference(op); -#else - _Py_INC_TPFREES(op); -#endif - (*dealloc)(op); -} -#define _Py_Dealloc(op) _Py_Dealloc_inline(op) - +PyAPI_FUNC(PyObject *) _PyObject_FunctionStr(PyObject *); /* Safely decref `op` and set `op` to `op2`. * @@ -393,11 +388,6 @@ PyAPI_DATA(PyTypeObject) _PyNotImplemented_Type; */ PyAPI_DATA(int) _Py_SwappedOp[]; -/* This is the old private API, invoked by the macros before 3.2.4. - Kept for binary compatibility of extensions using the stable ABI. */ -PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); -PyAPI_FUNC(void) _PyTrash_destroy_chain(void); - PyAPI_FUNC(void) _PyDebugAllocatorStats(FILE *out, const char *block_name, int num_blocks, size_t sizeof_block); @@ -444,7 +434,7 @@ _PyObject_DebugTypeStats(FILE *out); NDEBUG against a Python built with NDEBUG defined. msg, expr and function can be NULL. */ -PyAPI_FUNC(void) _PyObject_AssertFailed( +PyAPI_FUNC(void) _Py_NO_RETURN _PyObject_AssertFailed( PyObject *obj, const char *expr, const char *msg, @@ -467,6 +457,100 @@ PyAPI_FUNC(int) _PyObject_CheckConsistency( PyObject *op, int check_content); + +/* Trashcan mechanism, thanks to Christian Tismer. + +When deallocating a container object, it's possible to trigger an unbounded +chain of deallocations, as each Py_DECREF in turn drops the refcount on "the +next" object in the chain to 0. This can easily lead to stack overflows, +especially in threads (which typically have less stack space to work with). + +A container object can avoid this by bracketing the body of its tp_dealloc +function with a pair of macros: + +static void +mytype_dealloc(mytype *p) +{ + ... declarations go here ... + + PyObject_GC_UnTrack(p); // must untrack first + Py_TRASHCAN_BEGIN(p, mytype_dealloc) + ... The body of the deallocator goes here, including all calls ... + ... to Py_DECREF on contained objects. ... + Py_TRASHCAN_END // there should be no code after this +} + +CAUTION: Never return from the middle of the body! If the body needs to +"get out early", put a label immediately before the Py_TRASHCAN_END +call, and goto it. Else the call-depth counter (see below) will stay +above 0 forever, and the trashcan will never get emptied. + +How it works: The BEGIN macro increments a call-depth counter. So long +as this counter is small, the body of the deallocator is run directly without +further ado. But if the counter gets large, it instead adds p to a list of +objects to be deallocated later, skips the body of the deallocator, and +resumes execution after the END macro. The tp_dealloc routine then returns +without deallocating anything (and so unbounded call-stack depth is avoided). + +When the call stack finishes unwinding again, code generated by the END macro +notices this, and calls another routine to deallocate all the objects that +may have been added to the list of deferred deallocations. In effect, a +chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces, +with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. + +Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base +class, we need to ensure that the trashcan is only triggered on the tp_dealloc +of the actual class being deallocated. Otherwise we might end up with a +partially-deallocated object. To check this, the tp_dealloc function must be +passed as second argument to Py_TRASHCAN_BEGIN(). +*/ + +/* This is the old private API, invoked by the macros before 3.2.4. + Kept for binary compatibility of extensions using the stable ABI. */ +PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_destroy_chain(void); + +/* This is the old private API, invoked by the macros before 3.9. + Kept for binary compatibility of extensions using the stable ABI. */ +PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); +PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); + +/* Forward declarations for PyThreadState */ +struct _ts; + +/* Python 3.9 private API, invoked by the macros below. */ +PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op); +PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate); + +#define PyTrash_UNWIND_LEVEL 50 + +#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \ + do { \ + PyThreadState *_tstate = NULL; \ + /* If "cond" is false, then _tstate remains NULL and the deallocator \ + * is run normally without involving the trashcan */ \ + if (cond) { \ + _tstate = PyThreadState_GET(); \ + if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \ + break; \ + } \ + } + /* The body of the deallocator is here. */ +#define Py_TRASHCAN_END \ + if (_tstate) { \ + _PyTrash_end(_tstate); \ + } \ + } while (0); + +#define Py_TRASHCAN_BEGIN(op, dealloc) \ + Py_TRASHCAN_BEGIN_CONDITION(op, \ + Py_TYPE(op)->tp_dealloc == (destructor)(dealloc)) + +/* For backwards compatibility, these macros enable the trashcan + * unconditionally */ +#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1) +#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/objimpl.h b/src/external/windows/include/python/cpython/objimpl.h index 7df222c2..0e06e372 100755 --- a/src/external/windows/include/python/cpython/objimpl.h +++ b/src/external/windows/include/python/cpython/objimpl.h @@ -6,6 +6,89 @@ extern "C" { #endif +#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) + +/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a + vrbl-size object with nitems items, exclusive of gc overhead (if any). The + value is rounded up to the closest multiple of sizeof(void *), in order to + ensure that pointer fields at the end of the object are correctly aligned + for the platform (this is of special importance for subclasses of, e.g., + str or int, so that pointers can be stored after the embedded data). + + Note that there's no memory wastage in doing this, as malloc has to + return (at worst) pointer-aligned memory anyway. +*/ +#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 +# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" +#endif + +#define _PyObject_VAR_SIZE(typeobj, nitems) \ + _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ + (nitems)*(typeobj)->tp_itemsize, \ + SIZEOF_VOID_P) + + +/* This example code implements an object constructor with a custom + allocator, where PyObject_New is inlined, and shows the important + distinction between two steps (at least): + 1) the actual allocation of the object storage; + 2) the initialization of the Python specific fields + in this storage with PyObject_{Init, InitVar}. + + PyObject * + YourObject_New(...) + { + PyObject *op; + + op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); + if (op == NULL) + return PyErr_NoMemory(); + + PyObject_Init(op, &YourTypeStruct); + + op->ob_field = value; + ... + return op; + } + + Note that in C++, the use of the new operator usually implies that + the 1st step is performed automatically for you, so in a C++ class + constructor you would start directly with PyObject_Init/InitVar. */ + + +/* Inline functions trading binary compatibility for speed: + PyObject_INIT() is the fast version of PyObject_Init(), and + PyObject_INIT_VAR() is the fast version of PyObject_InitVar(). + + These inline functions must not be called with op=NULL. */ +static inline PyObject* +_PyObject_INIT(PyObject *op, PyTypeObject *typeobj) +{ + assert(op != NULL); + Py_SET_TYPE(op, typeobj); + if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) { + Py_INCREF(typeobj); + } + _Py_NewReference(op); + return op; +} + +#define PyObject_INIT(op, typeobj) \ + _PyObject_INIT(_PyObject_CAST(op), (typeobj)) + +static inline PyVarObject* +_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size) +{ + assert(op != NULL); + Py_SET_SIZE(op, size); + PyObject_INIT((PyObject *)op, typeobj); + return op; +} + +#define PyObject_INIT_VAR(op, typeobj, size) \ + _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size)) + + /* This function returns the number of allocated memory blocks, regardless of size */ PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void); @@ -37,66 +120,16 @@ PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void); PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void); -/* Test if an object has a GC head */ -#define PyObject_IS_GC(o) \ - (PyType_IS_GC(Py_TYPE(o)) \ - && (Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o))) - -/* GC information is stored BEFORE the object structure. */ -typedef struct { - // Pointer to next object in the list. - // 0 means the object is not tracked - uintptr_t _gc_next; - - // Pointer to previous object in the list. - // Lowest two bits are used for flags documented later. - uintptr_t _gc_prev; -} PyGC_Head; - -#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) - -/* True if the object is currently tracked by the GC. */ -#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0) - -/* True if the object may be tracked by the GC in the future, or already is. - This can be useful to implement some optimizations. */ -#define _PyObject_GC_MAY_BE_TRACKED(obj) \ - (PyObject_IS_GC(obj) && \ - (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) +/* Test if an object implements the garbage collector protocol */ +PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj); -/* Bit flags for _gc_prev */ -/* Bit 0 is set when tp_finalize is called */ -#define _PyGC_PREV_MASK_FINALIZED (1) -/* Bit 1 is set when the object is in generation which is GCed currently. */ -#define _PyGC_PREV_MASK_COLLECTING (2) -/* The (N-2) most significant bits contain the real address. */ -#define _PyGC_PREV_SHIFT (2) -#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT) - -// Lowest bit of _gc_next is used for flags only in GC. -// But it is always 0 for normal code. -#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next) -#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p)) - -// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags. -#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK)) -#define _PyGCHead_SET_PREV(g, p) do { \ - assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \ - (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \ - | ((uintptr_t)(p)); \ - } while (0) - -#define _PyGCHead_FINALIZED(g) \ - (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0) -#define _PyGCHead_SET_FINALIZED(g) \ - ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED) - -#define _PyGC_FINALIZED(o) \ - _PyGCHead_FINALIZED(_Py_AS_GC(o)) -#define _PyGC_SET_FINALIZED(o) \ - _PyGCHead_SET_FINALIZED(_Py_AS_GC(o)) - +/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which + defines a different _PyGC_FINALIZED() macro. */ +#ifndef Py_BUILD_CORE + // Kept for backward compatibility with Python 3.8 +# define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o) +#endif PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size); PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size); @@ -105,8 +138,7 @@ PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size); /* Test if a type supports weak references */ #define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0) -#define PyObject_GET_WEAKREFS_LISTPTR(o) \ - ((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset)) +PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op); #ifdef __cplusplus } diff --git a/src/external/windows/include/python/cpython/pyerrors.h b/src/external/windows/include/python/cpython/pyerrors.h index cc16403b..f9efa158 100755 --- a/src/external/windows/include/python/cpython/pyerrors.h +++ b/src/external/windows/include/python/cpython/pyerrors.h @@ -75,7 +75,8 @@ typedef PyOSErrorObject PyWindowsErrorObject; /* Error handling definitions */ PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); -_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate); +PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate); +PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **); /* Context manipulation (PEP 3134) */ @@ -148,7 +149,10 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( PyObject *filename, int lineno); -/* Create a UnicodeEncodeError object */ +/* Create a UnicodeEncodeError object. + * + * TODO: This API will be removed in Python 3.11. + */ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *encoding, /* UTF-8 encoded string */ const Py_UNICODE *object, @@ -158,7 +162,10 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( const char *reason /* UTF-8 encoded string */ ); -/* Create a UnicodeTranslateError object */ +/* Create a UnicodeTranslateError object. + * + * TODO: This API will be removed in Python 3.11. + */ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( const Py_UNICODE *object, Py_ssize_t length, @@ -177,6 +184,17 @@ PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( const char *err_msg, PyObject *obj); +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( + const char *func, + const char *message); + +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat( + const char *func, + const char *format, + ...); + +#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/pylifecycle.h b/src/external/windows/include/python/cpython/pylifecycle.h index d93cd1d3..f226daca 100755 --- a/src/external/windows/include/python/cpython/pylifecycle.h +++ b/src/external/windows/include/python/cpython/pylifecycle.h @@ -32,14 +32,6 @@ PyAPI_FUNC(int) _Py_IsCoreInitialized(void); PyAPI_FUNC(PyStatus) Py_InitializeFromConfig( const PyConfig *config); -PyAPI_FUNC(PyStatus) _Py_InitializeFromArgs( - const PyConfig *config, - Py_ssize_t argc, - char * const *argv); -PyAPI_FUNC(PyStatus) _Py_InitializeFromWideArgs( - const PyConfig *config, - Py_ssize_t argc, - wchar_t * const *argv); PyAPI_FUNC(PyStatus) _Py_InitializeMain(void); PyAPI_FUNC(int) Py_RunMain(void); @@ -73,6 +65,8 @@ PyAPI_FUNC(int) _Py_CoerceLegacyLocale(int warn); PyAPI_FUNC(int) _Py_LegacyLocaleDetected(int warn); PyAPI_FUNC(char *) _Py_SetLocaleFromEnv(int category); +PyAPI_FUNC(PyThreadState *) _Py_NewInterpreter(int isolated_subinterpreter); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/cpython/pystate.h b/src/external/windows/include/python/cpython/pystate.h index 5addb1c3..5ce79d03 100755 --- a/src/external/windows/include/python/cpython/pystate.h +++ b/src/external/windows/include/python/cpython/pystate.h @@ -16,7 +16,7 @@ PyAPI_FUNC(PyObject *) _PyInterpreterState_GetMainModule(PyInterpreterState *); /* State unique per thread */ /* Py_tracefunc return -1 when raising an exception, or 0 for success. */ -typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); +typedef int (*Py_tracefunc)(PyObject *, PyFrameObject *, int, PyObject *); /* The following values are used for 'what' for tracefunc functions * @@ -56,7 +56,7 @@ struct _ts { PyInterpreterState *interp; /* Borrowed reference to the current frame (it can be NULL) */ - struct _frame *frame; + PyFrameObject *frame; int recursion_depth; char overflowed; /* The stack has overflowed. Allow 50 more calls to handle the runtime error. */ @@ -140,22 +140,17 @@ struct _ts { }; -/* Get the current interpreter state. +// Alias for backward compatibility with Python 3.8 +#define _PyInterpreterState_Get PyInterpreterState_Get - Issue a fatal error if there no current Python thread state or no current - interpreter. It cannot return NULL. - - The caller must hold the GIL.*/ -PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void); - -PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*); -PyAPI_FUNC(void) _PyState_ClearModules(void); PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); /* Similar to PyThreadState_Get(), but don't issue a fatal error * if it is NULL. */ PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void); +PyAPI_FUNC(PyObject *) _PyThreadState_GetDict(PyThreadState *tstate); + /* PyGILState */ /* Helper/diagnostic function - return 1 if the current thread @@ -170,7 +165,7 @@ PyAPI_FUNC(int) PyGILState_Check(void); This function doesn't check for error. Return NULL before _PyGILState_Init() is called and after _PyGILState_Fini() is called. - See also _PyInterpreterState_Get() and _PyInterpreterState_GET_UNSAFE(). */ + See also _PyInterpreterState_Get() and _PyInterpreterState_GET(). */ PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void); /* The implementation of sys._current_frames() Returns a dict mapping @@ -185,8 +180,24 @@ PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void); PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); +PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); + +/* Frame evaluation API */ + +typedef PyObject* (*_PyFrameEvalFunction)(PyThreadState *tstate, PyFrameObject *, int); + +PyAPI_FUNC(_PyFrameEvalFunction) _PyInterpreterState_GetEvalFrameFunc( + PyInterpreterState *interp); +PyAPI_FUNC(void) _PyInterpreterState_SetEvalFrameFunc( + PyInterpreterState *interp, + _PyFrameEvalFunction eval_frame); + +PyAPI_FUNC(const PyConfig*) _PyInterpreterState_GetConfig(PyInterpreterState *interp); + +// Get the configuration of the currrent interpreter. +// The caller must hold the GIL. +PyAPI_FUNC(const PyConfig*) _Py_GetConfig(void); -typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); /* cross-interpreter data */ diff --git a/src/external/windows/include/python/cpython/sysmodule.h b/src/external/windows/include/python/cpython/sysmodule.h index 785940ce..e11939ae 100755 --- a/src/external/windows/include/python/cpython/sysmodule.h +++ b/src/external/windows/include/python/cpython/sysmodule.h @@ -13,7 +13,10 @@ PyAPI_FUNC(size_t) _PySys_GetSizeOf(PyObject *); typedef int(*Py_AuditHookFunction)(const char *, PyObject *, void *); -PyAPI_FUNC(int) PySys_Audit(const char*, const char *, ...); +PyAPI_FUNC(int) PySys_Audit( + const char *event, + const char *argFormat, + ...); PyAPI_FUNC(int) PySys_AddAuditHook(Py_AuditHookFunction, void*); #ifdef __cplusplus diff --git a/src/external/windows/include/python/cpython/traceback.h b/src/external/windows/include/python/cpython/traceback.h index 93ad6866..227aa25c 100755 --- a/src/external/windows/include/python/cpython/traceback.h +++ b/src/external/windows/include/python/cpython/traceback.h @@ -9,7 +9,7 @@ extern "C" { typedef struct _traceback { PyObject_HEAD struct _traceback *tb_next; - struct _frame *tb_frame; + PyFrameObject *tb_frame; int tb_lasti; int tb_lineno; } PyTracebackObject; diff --git a/src/external/windows/include/python/cpython/unicodeobject.h b/src/external/windows/include/python/cpython/unicodeobject.h index 7fcdd634..f8bae0b1 100755 --- a/src/external/windows/include/python/cpython/unicodeobject.h +++ b/src/external/windows/include/python/cpython/unicodeobject.h @@ -22,7 +22,7 @@ extern "C" { */ #define Py_UNICODE_ISSPACE(ch) \ - ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) + ((Py_UCS4)(ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) #define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) #define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) @@ -50,13 +50,18 @@ extern "C" { Py_UNICODE_ISDIGIT(ch) || \ Py_UNICODE_ISNUMERIC(ch)) -#define Py_UNICODE_COPY(target, source, length) \ - memcpy((target), (source), (length)*sizeof(Py_UNICODE)) +Py_DEPRECATED(3.3) static inline void +Py_UNICODE_COPY(Py_UNICODE *target, const Py_UNICODE *source, Py_ssize_t length) { + memcpy(target, source, (size_t)(length) * sizeof(Py_UNICODE)); +} -#define Py_UNICODE_FILL(target, value, length) \ - do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ - for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ - } while (0) +Py_DEPRECATED(3.3) static inline void +Py_UNICODE_FILL(Py_UNICODE *target, Py_UNICODE value, Py_ssize_t length) { + Py_ssize_t i; + for (i = 0; i < length; i++) { + target[i] = value; + } +} /* macros to work with surrogates */ #define Py_UNICODE_IS_SURROGATE(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF) @@ -71,14 +76,6 @@ extern "C" { /* low surrogate = bottom 10 bits added to DC00 */ #define Py_UNICODE_LOW_SURROGATE(ch) (0xDC00 + ((ch) & 0x3FF)) -/* Check if substring matches at given offset. The offset must be - valid, and the substring must not be empty. */ - -#define Py_UNICODE_MATCH(string, offset, substring) \ - ((*((string)->wstr + (offset)) == *((substring)->wstr)) && \ - ((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \ - !memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE))) - /* --- Unicode Type ------------------------------------------------------- */ /* ASCII-only strings created through PyUnicode_New use the PyASCIIObject @@ -251,10 +248,6 @@ PyAPI_FUNC(int) _PyUnicode_CheckConsistency( int check_content); /* Fast access macros */ -#define PyUnicode_WSTR_LENGTH(op) \ - (PyUnicode_IS_COMPACT_ASCII(op) ? \ - ((PyASCIIObject*)op)->length : \ - ((PyCompactUnicodeObject*)op)->wstr_length) /* Returns the deprecated Py_UNICODE representation's size in code units (this includes surrogate pairs as 2 units). @@ -449,6 +442,14 @@ enum PyUnicode_Kind { (0xffffU) : \ (0x10ffffU))))) +Py_DEPRECATED(3.3) +static inline Py_ssize_t _PyUnicode_get_wstr_length(PyObject *op) { + return PyUnicode_IS_COMPACT_ASCII(op) ? + ((PyASCIIObject*)op)->length : + ((PyCompactUnicodeObject*)op)->wstr_length; +} +#define PyUnicode_WSTR_LENGTH(op) _PyUnicode_get_wstr_length((PyObject*)op) + /* === Public API ========================================================= */ /* --- Plain Py_UNICODE --------------------------------------------------- */ @@ -547,7 +548,7 @@ PyAPI_FUNC(void) _PyUnicode_FastFill( only allowed if u was set to NULL. The buffer is copied into the new object. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( const Py_UNICODE *u, /* Unicode buffer */ Py_ssize_t size /* size of buffer */ ); @@ -576,13 +577,13 @@ PyAPI_FUNC(Py_UCS4) _PyUnicode_FindMaxChar ( Py_UNICODE buffer. If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( PyObject *unicode /* Unicode object */ ); /* Similar to PyUnicode_AsUnicode(), but raises a ValueError if the string contains null characters. */ -PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( +Py_DEPRECATED(3.3) PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( PyObject *unicode /* Unicode object */ ); @@ -591,7 +592,7 @@ PyAPI_FUNC(const Py_UNICODE *) _PyUnicode_AsUnicode( If the wchar_t/Py_UNICODE representation is not yet available, this function will calculate it. */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( +Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicodeAndSize( PyObject *unicode, /* Unicode object */ Py_ssize_t *size /* location where to save the length */ ); @@ -726,12 +727,6 @@ PyAPI_FUNC(int) _PyUnicode_FormatAdvancedWriter( Py_ssize_t start, Py_ssize_t end); -/* --- wchar_t support for platforms which support it --------------------- */ - -#ifdef HAVE_WCHAR_H -PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); -#endif - /* --- Manage the default encoding ---------------------------------------- */ /* Returns a pointer to the default encoding (UTF-8) of the @@ -746,12 +741,6 @@ PyAPI_FUNC(void*) _PyUnicode_AsKind(PyObject *s, unsigned int kind); _PyUnicode_AsStringAndSize is a #define for PyUnicode_AsUTF8AndSize to support the previous internal function with the same behaviour. - - *** This API is for interpreter INTERNAL USE ONLY and will likely - *** be removed or changed in the future. - - *** If you need to access the Unicode object as UTF-8 bytes string, - *** please use PyUnicode_AsUTF8String() instead. */ PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( @@ -771,13 +760,6 @@ PyAPI_FUNC(const char *) PyUnicode_AsUTF8AndSize( Use of this API is DEPRECATED since no size information can be extracted from the returned data. - - *** This API is for interpreter INTERNAL USE ONLY and will likely - *** be removed or changed for Python 3.1. - - *** If you need to access the Unicode object as UTF-8 bytes string, - *** please use PyUnicode_AsUTF8String() instead. - */ PyAPI_FUNC(const char *) PyUnicode_AsUTF8(PyObject *unicode); @@ -990,7 +972,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( */ -/* Py_DEPRECATED(3.3) */ PyAPI_FUNC(int) PyUnicode_EncodeDecimal( +Py_DEPRECATED(3.3) PyAPI_FUNC(int) PyUnicode_EncodeDecimal( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ char *output, /* Output buffer; must have size >= length */ @@ -1003,7 +985,7 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( Returns a new Unicode string on success, NULL on failure. */ -/* Py_DEPRECATED(3.3) */ +Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject*) PyUnicode_TransformDecimalToASCII( Py_UNICODE *s, /* Unicode buffer */ Py_ssize_t length /* Number of Py_UNICODE chars to transform */ @@ -1227,13 +1209,13 @@ Py_DEPRECATED(3.3) PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy( /* Return an interned Unicode object for an Identifier; may fail if there is no memory.*/ PyAPI_FUNC(PyObject*) _PyUnicode_FromId(_Py_Identifier*); -/* Clear all static strings. */ -PyAPI_FUNC(void) _PyUnicode_ClearStaticStrings(void); /* Fast equality check when the inputs are known to be exact unicode types and where the hash values are equal (i.e. a very probable match) */ PyAPI_FUNC(int) _PyUnicode_EQ(PyObject *, PyObject *); +PyAPI_FUNC(Py_ssize_t) _PyUnicode_ScanIdentifier(PyObject *); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/datetime.h b/src/external/windows/include/python/datetime.h index d6483714..afb89470 100755 --- a/src/external/windows/include/python/datetime.h +++ b/src/external/windows/include/python/datetime.h @@ -196,19 +196,19 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; /* Macros for type checking when not building the Python core. */ #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) -#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType) +#define PyDate_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateType) #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) -#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType) +#define PyDateTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DateTimeType) #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) -#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType) +#define PyTime_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TimeType) #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType) -#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType) +#define PyDelta_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->DeltaType) #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) -#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) +#define PyTZInfo_CheckExact(op) Py_IS_TYPE(op, PyDateTimeAPI->TZInfoType) /* Macros for accessing constructors in a simplified fashion. */ diff --git a/src/external/windows/include/python/dictobject.h b/src/external/windows/include/python/dictobject.h index 1febc911..54fd57a5 100755 --- a/src/external/windows/include/python/dictobject.h +++ b/src/external/windows/include/python/dictobject.h @@ -16,7 +16,7 @@ PyAPI_DATA(PyTypeObject) PyDict_Type; #define PyDict_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS) -#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) +#define PyDict_CheckExact(op) Py_IS_TYPE(op, &PyDict_Type) PyAPI_FUNC(PyObject *) PyDict_New(void); PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); diff --git a/src/external/windows/include/python/errcode.h b/src/external/windows/include/python/errcode.h index 68104c1c..d5fed9dd 100755 --- a/src/external/windows/include/python/errcode.h +++ b/src/external/windows/include/python/errcode.h @@ -29,7 +29,6 @@ extern "C" { #define E_EOFS 23 /* EOF in triple-quoted string */ #define E_EOLS 24 /* EOL in single-quoted string */ #define E_LINECONT 25 /* Unexpected characters after a line continuation */ -#define E_IDENTIFIER 26 /* Invalid characters in identifier */ #define E_BADSINGLE 27 /* Ill-formed single statement input */ #ifdef __cplusplus diff --git a/src/external/windows/include/python/exports.h b/src/external/windows/include/python/exports.h new file mode 100755 index 00000000..20a74bb9 --- /dev/null +++ b/src/external/windows/include/python/exports.h @@ -0,0 +1,30 @@ +#ifndef Py_EXPORTS_H +#define Py_EXPORTS_H + +#if defined(_WIN32) || defined(__CYGWIN__) + #define Py_IMPORTED_SYMBOL __declspec(dllimport) + #define Py_EXPORTED_SYMBOL __declspec(dllexport) + #define Py_LOCAL_SYMBOL +#else +/* + * If we only ever used gcc >= 5, we could use __has_attribute(visibility) + * as a cross-platform way to determine if visibility is supported. However, + * we may still need to support gcc >= 4, as some Ubuntu LTS and Centos versions + * have 4 < gcc < 5. + */ + #ifndef __has_attribute + #define __has_attribute(x) 0 // Compatibility with non-clang compilers. + #endif + #if (defined(__GNUC__) && (__GNUC__ >= 4)) ||\ + (defined(__clang__) && __has_attribute(visibility)) + #define Py_IMPORTED_SYMBOL __attribute__ ((visibility ("default"))) + #define Py_EXPORTED_SYMBOL __attribute__ ((visibility ("default"))) + #define Py_LOCAL_SYMBOL __attribute__ ((visibility ("hidden"))) + #else + #define Py_IMPORTED_SYMBOL + #define Py_EXPORTED_SYMBOL + #define Py_LOCAL_SYMBOL + #endif +#endif + +#endif /* Py_EXPORTS_H */ diff --git a/src/external/windows/include/python/fileobject.h b/src/external/windows/include/python/fileobject.h index 1eee8261..cf7ba8df 100755 --- a/src/external/windows/include/python/fileobject.h +++ b/src/external/windows/include/python/fileobject.h @@ -20,8 +20,15 @@ PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); If non-NULL, this is different than the default encoding for strings */ PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000 +PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors; +#endif PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding; +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 +PyAPI_DATA(int) Py_UTF8Mode; +#endif + /* A routine to check if a file descriptor can be select()-ed. */ #ifdef _MSC_VER /* On Windows, any socket fd can be select()-ed, no matter how high */ diff --git a/src/external/windows/include/python/fileutils.h b/src/external/windows/include/python/fileutils.h index 2f206e92..132a6cf5 100755 --- a/src/external/windows/include/python/fileutils.h +++ b/src/external/windows/include/python/fileutils.h @@ -18,167 +18,12 @@ PyAPI_FUNC(char*) _Py_EncodeLocaleRaw( size_t *error_pos); #endif - -#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000 -typedef enum { - _Py_ERROR_UNKNOWN=0, - _Py_ERROR_STRICT, - _Py_ERROR_SURROGATEESCAPE, - _Py_ERROR_REPLACE, - _Py_ERROR_IGNORE, - _Py_ERROR_BACKSLASHREPLACE, - _Py_ERROR_SURROGATEPASS, - _Py_ERROR_XMLCHARREFREPLACE, - _Py_ERROR_OTHER -} _Py_error_handler; - -PyAPI_FUNC(_Py_error_handler) _Py_GetErrorHandler(const char *errors); - -PyAPI_FUNC(int) _Py_DecodeLocaleEx( - const char *arg, - wchar_t **wstr, - size_t *wlen, - const char **reason, - int current_locale, - _Py_error_handler errors); - -PyAPI_FUNC(int) _Py_EncodeLocaleEx( - const wchar_t *text, - char **str, - size_t *error_pos, - const char **reason, - int current_locale, - _Py_error_handler errors); -#endif - #ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _Py_device_encoding(int); - -#if defined(MS_WINDOWS) || defined(__APPLE__) - /* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611). - On macOS 10.13, read() and write() with more than INT_MAX bytes - fail with EINVAL (bpo-24658). */ -# define _PY_READ_MAX INT_MAX -# define _PY_WRITE_MAX INT_MAX -#else - /* write() should truncate the input to PY_SSIZE_T_MAX bytes, - but it's safer to do it ourself to have a portable behaviour */ -# define _PY_READ_MAX PY_SSIZE_T_MAX -# define _PY_WRITE_MAX PY_SSIZE_T_MAX +# define Py_CPYTHON_FILEUTILS_H +# include "cpython/fileutils.h" +# undef Py_CPYTHON_FILEUTILS_H #endif -#ifdef MS_WINDOWS -struct _Py_stat_struct { - unsigned long st_dev; - uint64_t st_ino; - unsigned short st_mode; - int st_nlink; - int st_uid; - int st_gid; - unsigned long st_rdev; - __int64 st_size; - time_t st_atime; - int st_atime_nsec; - time_t st_mtime; - int st_mtime_nsec; - time_t st_ctime; - int st_ctime_nsec; - unsigned long st_file_attributes; - unsigned long st_reparse_tag; -}; -#else -# define _Py_stat_struct stat -#endif - -PyAPI_FUNC(int) _Py_fstat( - int fd, - struct _Py_stat_struct *status); - -PyAPI_FUNC(int) _Py_fstat_noraise( - int fd, - struct _Py_stat_struct *status); - -PyAPI_FUNC(int) _Py_stat( - PyObject *path, - struct stat *status); - -PyAPI_FUNC(int) _Py_open( - const char *pathname, - int flags); - -PyAPI_FUNC(int) _Py_open_noraise( - const char *pathname, - int flags); - -PyAPI_FUNC(FILE *) _Py_wfopen( - const wchar_t *path, - const wchar_t *mode); - -PyAPI_FUNC(FILE*) _Py_fopen( - const char *pathname, - const char *mode); - -PyAPI_FUNC(FILE*) _Py_fopen_obj( - PyObject *path, - const char *mode); - -PyAPI_FUNC(Py_ssize_t) _Py_read( - int fd, - void *buf, - size_t count); - -PyAPI_FUNC(Py_ssize_t) _Py_write( - int fd, - const void *buf, - size_t count); - -PyAPI_FUNC(Py_ssize_t) _Py_write_noraise( - int fd, - const void *buf, - size_t count); - -#ifdef HAVE_READLINK -PyAPI_FUNC(int) _Py_wreadlink( - const wchar_t *path, - wchar_t *buf, - /* Number of characters of 'buf' buffer - including the trailing NUL character */ - size_t buflen); -#endif - -#ifdef HAVE_REALPATH -PyAPI_FUNC(wchar_t*) _Py_wrealpath( - const wchar_t *path, - wchar_t *resolved_path, - /* Number of characters of 'resolved_path' buffer - including the trailing NUL character */ - size_t resolved_path_len); -#endif - -PyAPI_FUNC(wchar_t*) _Py_wgetcwd( - wchar_t *buf, - /* Number of characters of 'buf' buffer - including the trailing NUL character */ - size_t buflen); - -PyAPI_FUNC(int) _Py_get_inheritable(int fd); - -PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable, - int *atomic_flag_works); - -PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable, - int *atomic_flag_works); - -PyAPI_FUNC(int) _Py_dup(int fd); - -#ifndef MS_WINDOWS -PyAPI_FUNC(int) _Py_get_blocking(int fd); - -PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking); -#endif /* !MS_WINDOWS */ - -#endif /* Py_LIMITED_API */ - #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/floatobject.h b/src/external/windows/include/python/floatobject.h index cc906f11..475f6add 100755 --- a/src/external/windows/include/python/floatobject.h +++ b/src/external/windows/include/python/floatobject.h @@ -21,7 +21,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyFloat_Type; #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) -#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type) +#define PyFloat_CheckExact(op) Py_IS_TYPE(op, &PyFloat_Type) #ifdef Py_NAN #define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN) @@ -88,15 +88,6 @@ PyAPI_FUNC(int) _PyFloat_Pack2(double x, unsigned char *p, int le); PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le); PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le); -/* Needed for the old way for marshal to store a floating point number. - Returns the string length copied into p, -1 on error. - */ -PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len); - -/* Used to get the important decimal digits of a double */ -PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum); -PyAPI_FUNC(void) _PyFloat_DigitsInit(void); - /* The unpack routines read 2, 4 or 8 bytes, starting at p. le is a bool * argument, true if the string is in little-endian format (exponent * last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p). @@ -109,9 +100,6 @@ PyAPI_FUNC(double) _PyFloat_Unpack2(const unsigned char *p, int le); PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le); PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le); -/* free list api */ -PyAPI_FUNC(int) PyFloat_ClearFreeList(void); - PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out); /* Format the object based on the format_spec, as defined in PEP 3101 diff --git a/src/external/windows/include/python/frameobject.h b/src/external/windows/include/python/frameobject.h index f0a97fcb..36e2ab33 100755 --- a/src/external/windows/include/python/frameobject.h +++ b/src/external/windows/include/python/frameobject.h @@ -1,92 +1,20 @@ /* Frame object interface */ -#ifndef Py_LIMITED_API #ifndef Py_FRAMEOBJECT_H #define Py_FRAMEOBJECT_H #ifdef __cplusplus extern "C" { #endif -typedef struct { - int b_type; /* what kind of block this is */ - int b_handler; /* where to jump to find handler */ - int b_level; /* value stack level to pop to */ -} PyTryBlock; +#include "pyframe.h" -typedef struct _frame { - PyObject_VAR_HEAD - struct _frame *f_back; /* previous frame, or NULL */ - PyCodeObject *f_code; /* code segment */ - PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ - PyObject *f_globals; /* global symbol table (PyDictObject) */ - PyObject *f_locals; /* local symbol table (any mapping) */ - PyObject **f_valuestack; /* points after the last local */ - /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. - Frame evaluation usually NULLs it, but a frame that yields sets it - to the current stack top. */ - PyObject **f_stacktop; - PyObject *f_trace; /* Trace function */ - char f_trace_lines; /* Emit per-line trace events? */ - char f_trace_opcodes; /* Emit per-opcode trace events? */ - - /* Borrowed reference to a generator, or NULL */ - PyObject *f_gen; - - int f_lasti; /* Last instruction if called */ - /* Call PyFrame_GetLineNumber() instead of reading this field - directly. As of 2.3 f_lineno is only valid when tracing is - active (i.e. when f_trace is set). At other times we use - PyCode_Addr2Line to calculate the line from the current - bytecode index. */ - int f_lineno; /* Current line number */ - int f_iblock; /* index in f_blockstack */ - char f_executing; /* whether the frame is still executing */ - PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ - PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ -} PyFrameObject; - - -/* Standard object interface */ - -PyAPI_DATA(PyTypeObject) PyFrame_Type; - -#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type) - -PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, - PyObject *, PyObject *); - -/* only internal use */ -PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *, - PyObject *, PyObject *); - - -/* The rest of the interface is specific for frame objects */ - -/* Block management functions */ - -PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); -PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); - -/* Extend the value stack */ - -PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int); - -/* Conversions between "fast locals" and locals in dictionary */ - -PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); - -PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f); -PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); - -PyAPI_FUNC(int) PyFrame_ClearFreeList(void); - -PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out); - -/* Return the line of code the frame is currently executing. */ -PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); +#ifndef Py_LIMITED_API +# define Py_CPYTHON_FRAMEOBJECT_H +# include "cpython/frameobject.h" +# undef Py_CPYTHON_FRAMEOBJECT_H +#endif #ifdef __cplusplus } #endif #endif /* !Py_FRAMEOBJECT_H */ -#endif /* Py_LIMITED_API */ diff --git a/src/external/windows/include/python/funcobject.h b/src/external/windows/include/python/funcobject.h index 051c73ab..5ea1481f 100755 --- a/src/external/windows/include/python/funcobject.h +++ b/src/external/windows/include/python/funcobject.h @@ -43,7 +43,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyFunction_Type; -#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type) +#define PyFunction_Check(op) Py_IS_TYPE(op, &PyFunction_Type) PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *); @@ -60,12 +60,6 @@ PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *); PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *); #ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict( - PyObject *func, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); - PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall( PyObject *func, PyObject *const *stack, diff --git a/src/external/windows/include/python/genericaliasobject.h b/src/external/windows/include/python/genericaliasobject.h new file mode 100755 index 00000000..70096093 --- /dev/null +++ b/src/external/windows/include/python/genericaliasobject.h @@ -0,0 +1,14 @@ +// Implementation of PEP 585: support list[int] etc. +#ifndef Py_GENERICALIASOBJECT_H +#define Py_GENERICALIASOBJECT_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) Py_GenericAlias(PyObject *, PyObject *); +PyAPI_DATA(PyTypeObject) Py_GenericAliasType; + +#ifdef __cplusplus +} +#endif +#endif /* !Py_GENERICALIASOBJECT_H */ diff --git a/src/external/windows/include/python/genobject.h b/src/external/windows/include/python/genobject.h index a10d9478..6139f7e4 100755 --- a/src/external/windows/include/python/genobject.h +++ b/src/external/windows/include/python/genobject.h @@ -10,14 +10,12 @@ extern "C" { #include "pystate.h" /* _PyErr_StackItem */ -struct _frame; /* Avoid including frameobject.h */ - /* _PyGenObject_HEAD defines the initial segment of generator and coroutine objects. */ #define _PyGenObject_HEAD(prefix) \ PyObject_HEAD \ /* Note: gi_frame can be NULL if the generator is "finished" */ \ - struct _frame *prefix##_frame; \ + PyFrameObject *prefix##_frame; \ /* True if generator is being executed. */ \ char prefix##_running; \ /* The code object backing the generator */ \ @@ -38,12 +36,11 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyGen_Type; #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) -#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type) +#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type) -PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); -PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *, +PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *); +PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *, PyObject *name, PyObject *qualname); -PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *); @@ -59,11 +56,9 @@ typedef struct { PyAPI_DATA(PyTypeObject) PyCoro_Type; PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type; -PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type; - -#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type) +#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type) PyObject *_PyCoro_GetAwaitableIter(PyObject *o); -PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *, +PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *, PyObject *name, PyObject *qualname); /* Asynchronous Generators */ @@ -89,15 +84,13 @@ PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type; PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type; -PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *, +PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *, PyObject *name, PyObject *qualname); -#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type) +#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type) PyObject *_PyAsyncGenValueWrapperNew(PyObject *); -int PyAsyncGen_ClearFreeLists(void); - #endif #undef _PyGenObject_HEAD diff --git a/src/external/windows/include/python/import.h b/src/external/windows/include/python/import.h index f59bee8b..468a6734 100755 --- a/src/external/windows/include/python/import.h +++ b/src/external/windows/include/python/import.h @@ -1,4 +1,3 @@ - /* Module definition and import interface */ #ifndef Py_IMPORT_H @@ -7,9 +6,6 @@ extern "C" { #endif -#ifndef Py_LIMITED_API -PyMODINIT_FUNC PyInit__imp(void); -#endif /* !Py_LIMITED_API */ PyAPI_FUNC(long) PyImport_GetMagicNumber(void); PyAPI_FUNC(const char *) PyImport_GetMagicTag(void); PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule( @@ -39,14 +35,6 @@ PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000 PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name); #endif -#ifndef Py_LIMITED_API -PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *); -PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name); -PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name, - PyObject *modules); -PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module); -PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module); -#endif #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(PyObject *) PyImport_AddModuleObject( PyObject *name @@ -84,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject( PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path); PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); -PyAPI_FUNC(void) PyImport_Cleanup(void); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject( PyObject *name @@ -94,53 +81,15 @@ PyAPI_FUNC(int) PyImport_ImportFrozenModule( const char *name /* UTF-8 encoded string */ ); -#ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyImport_AcquireLock(void); -PyAPI_FUNC(int) _PyImport_ReleaseLock(void); - -PyAPI_FUNC(void) _PyImport_ReInitLock(void); - -PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( - const char *name, /* UTF-8 encoded string */ - PyObject *modules - ); -PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *); -PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *, - PyObject *); -PyAPI_FUNC(int) _PyImport_FixupBuiltin( - PyObject *mod, - const char *name, /* UTF-8 encoded string */ - PyObject *modules - ); -PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *, - PyObject *, PyObject *); - -struct _inittab { - const char *name; /* ASCII encoded string */ - PyObject* (*initfunc)(void); -}; -PyAPI_DATA(struct _inittab *) PyImport_Inittab; -PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); -#endif /* Py_LIMITED_API */ - -PyAPI_DATA(PyTypeObject) PyNullImporter_Type; - PyAPI_FUNC(int) PyImport_AppendInittab( const char *name, /* ASCII encoded string */ PyObject* (*initfunc)(void) ); #ifndef Py_LIMITED_API -struct _frozen { - const char *name; /* ASCII encoded string */ - const unsigned char *code; - int size; -}; - -/* Embedding apps may change this pointer to point to their favorite - collection of frozen modules: */ - -PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules; +# define Py_CPYTHON_IMPORT_H +# include "cpython/import.h" +# undef Py_CPYTHON_IMPORT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/internal/pegen_interface.h b/src/external/windows/include/python/internal/pegen_interface.h new file mode 100755 index 00000000..32133bae --- /dev/null +++ b/src/external/windows/include/python/internal/pegen_interface.h @@ -0,0 +1,46 @@ +#ifndef Py_PEGENINTERFACE +#define Py_PEGENINTERFACE +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "Python.h" +#include "Python-ast.h" + +PyAPI_FUNC(mod_ty) PyPegen_ASTFromString( + const char *str, + const char *filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromStringObject( + const char *str, + PyObject* filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromFileObject( + FILE *fp, + PyObject *filename_ob, + int mode, + const char *enc, + const char *ps1, + const char *ps2, + PyCompilerFlags *flags, + int *errcode, + PyArena *arena); +PyAPI_FUNC(mod_ty) PyPegen_ASTFromFilename( + const char *filename, + int mode, + PyCompilerFlags *flags, + PyArena *arena); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PEGENINTERFACE*/ diff --git a/src/external/windows/include/python/internal/pycore_abstract.h b/src/external/windows/include/python/internal/pycore_abstract.h new file mode 100755 index 00000000..15aa7f58 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_abstract.h @@ -0,0 +1,22 @@ +#ifndef Py_INTERNAL_ABSTRACT_H +#define Py_INTERNAL_ABSTRACT_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +// Fast inlined version of PyIndex_Check() +static inline int +_PyIndex_Check(PyObject *obj) +{ + PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number; + return (tp_as_number != NULL && tp_as_number->nb_index != NULL); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_ABSTRACT_H */ diff --git a/src/external/windows/include/python/internal/pycore_atomic.h b/src/external/windows/include/python/internal/pycore_atomic.h index ec70fd7b..973b1aa5 100755 --- a/src/external/windows/include/python/internal/pycore_atomic.h +++ b/src/external/windows/include/python/internal/pycore_atomic.h @@ -8,8 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "dynamic_annotations.h" - +#include "dynamic_annotations.h" /* _Py_ANNOTATE_MEMORY_ORDER */ #include "pyconfig.h" #if defined(HAVE_STD_ATOMIC) diff --git a/src/external/windows/include/python/bytes_methods.h b/src/external/windows/include/python/internal/pycore_bytes_methods.h similarity index 95% rename from src/external/windows/include/python/bytes_methods.h rename to src/external/windows/include/python/internal/pycore_bytes_methods.h index ba3d12f0..cc3a303f 100755 --- a/src/external/windows/include/python/bytes_methods.h +++ b/src/external/windows/include/python/internal/pycore_bytes_methods.h @@ -2,6 +2,10 @@ #ifndef Py_BYTES_CTYPE_H #define Py_BYTES_CTYPE_H +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + /* * The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray) * methods of the given names, they operate on ASCII byte strings. diff --git a/src/external/windows/include/python/internal/pycore_byteswap.h b/src/external/windows/include/python/internal/pycore_byteswap.h new file mode 100755 index 00000000..efd5eecb --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_byteswap.h @@ -0,0 +1,88 @@ +/* Bytes swap functions, reverse order of bytes: + + - _Py_bswap16(uint16_t) + - _Py_bswap32(uint32_t) + - _Py_bswap64(uint64_t) +*/ + +#ifndef Py_INTERNAL_BSWAP_H +#define Py_INTERNAL_BSWAP_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#if defined(__GNUC__) \ + && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) + /* __builtin_bswap16() is available since GCC 4.8, + __builtin_bswap32() is available since GCC 4.3, + __builtin_bswap64() is available since GCC 4.3. */ +# define _PY_HAVE_BUILTIN_BSWAP +#endif + +#ifdef _MSC_VER + /* Get _byteswap_ushort(), _byteswap_ulong(), _byteswap_uint64() */ +# include +#endif + +static inline uint16_t +_Py_bswap16(uint16_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap16) + return __builtin_bswap16(word); +#elif defined(_MSC_VER) + Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned short)); + return _byteswap_ushort(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT16_C(0x00FF)) << 8) + | ((word & UINT16_C(0xFF00)) >> 8)); +#endif +} + +static inline uint32_t +_Py_bswap32(uint32_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap32) + return __builtin_bswap32(word); +#elif defined(_MSC_VER) + Py_BUILD_ASSERT(sizeof(word) == sizeof(unsigned long)); + return _byteswap_ulong(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT32_C(0x000000FF)) << 24) + | ((word & UINT32_C(0x0000FF00)) << 8) + | ((word & UINT32_C(0x00FF0000)) >> 8) + | ((word & UINT32_C(0xFF000000)) >> 24)); +#endif +} + +static inline uint64_t +_Py_bswap64(uint64_t word) +{ +#if defined(_PY_HAVE_BUILTIN_BSWAP) || _Py__has_builtin(__builtin_bswap64) + return __builtin_bswap64(word); +#elif defined(_MSC_VER) + return _byteswap_uint64(word); +#else + // Portable implementation which doesn't rely on circular bit shift + return ( ((word & UINT64_C(0x00000000000000FF)) << 56) + | ((word & UINT64_C(0x000000000000FF00)) << 40) + | ((word & UINT64_C(0x0000000000FF0000)) << 24) + | ((word & UINT64_C(0x00000000FF000000)) << 8) + | ((word & UINT64_C(0x000000FF00000000)) >> 8) + | ((word & UINT64_C(0x0000FF0000000000)) >> 24) + | ((word & UINT64_C(0x00FF000000000000)) >> 40) + | ((word & UINT64_C(0xFF00000000000000)) >> 56)); +#endif +} + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_BSWAP_H */ + diff --git a/src/external/windows/include/python/internal/pycore_call.h b/src/external/windows/include/python/internal/pycore_call.h new file mode 100755 index 00000000..6b301264 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_call.h @@ -0,0 +1,39 @@ +#ifndef Py_INTERNAL_CALL_H +#define Py_INTERNAL_CALL_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend( + PyThreadState *tstate, + PyObject *callable, + PyObject *obj, + PyObject *args, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyObject_FastCallDictTstate( + PyThreadState *tstate, + PyObject *callable, + PyObject *const *args, + size_t nargsf, + PyObject *kwargs); + +PyAPI_FUNC(PyObject *) _PyObject_Call( + PyThreadState *tstate, + PyObject *callable, + PyObject *args, + PyObject *kwargs); + +static inline PyObject * +_PyObject_CallNoArgTstate(PyThreadState *tstate, PyObject *func) { + return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_CALL_H */ diff --git a/src/external/windows/include/python/internal/pycore_ceval.h b/src/external/windows/include/python/internal/pycore_ceval.h index b3ba5d38..2affbf74 100755 --- a/src/external/windows/include/python/internal/pycore_ceval.h +++ b/src/external/windows/include/python/internal/pycore_ceval.h @@ -8,29 +8,116 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_atomic.h" -#include "pycore_pystate.h" -#include "pythread.h" +/* Forward declarations */ +struct pyruntimestate; +struct _ceval_runtime_state; -PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *); -PyAPI_FUNC(void) _PyEval_FiniThreads( - struct _ceval_runtime_state *ceval); -PyAPI_FUNC(void) _PyEval_SignalReceived( - struct _ceval_runtime_state *ceval); +#include "pycore_interp.h" /* PyInterpreterState.eval_frame */ + +extern void _Py_FinishPendingCalls(PyThreadState *tstate); +extern void _PyEval_InitRuntimeState(struct _ceval_runtime_state *); +extern int _PyEval_InitState(struct _ceval_state *ceval); +extern void _PyEval_FiniState(struct _ceval_state *ceval); +PyAPI_FUNC(void) _PyEval_SignalReceived(PyInterpreterState *interp); PyAPI_FUNC(int) _PyEval_AddPendingCall( - PyThreadState *tstate, - struct _ceval_runtime_state *ceval, + PyInterpreterState *interp, int (*func)(void *), void *arg); -PyAPI_FUNC(void) _PyEval_SignalAsyncExc( - struct _ceval_runtime_state *ceval); -PyAPI_FUNC(void) _PyEval_ReInitThreads( - _PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyThreadState *tstate); +#ifdef HAVE_FORK +extern void _PyEval_ReInitThreads(struct pyruntimestate *runtime); +#endif +PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth( + PyThreadState *tstate, + int new_depth); /* Private function */ void _PyEval_Fini(void); +static inline PyObject* +_PyEval_EvalFrame(PyThreadState *tstate, PyFrameObject *f, int throwflag) +{ + return tstate->interp->eval_frame(tstate, f, throwflag); +} + +extern PyObject *_PyEval_EvalCode( + PyThreadState *tstate, + PyObject *_co, PyObject *globals, PyObject *locals, + PyObject *const *args, Py_ssize_t argcount, + PyObject *const *kwnames, PyObject *const *kwargs, + Py_ssize_t kwcount, int kwstep, + PyObject *const *defs, Py_ssize_t defcount, + PyObject *kwdefs, PyObject *closure, + PyObject *name, PyObject *qualname); + +extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime); +extern PyStatus _PyEval_InitGIL(PyThreadState *tstate); +extern void _PyEval_FiniGIL(PyThreadState *tstate); + +extern void _PyEval_ReleaseLock(PyThreadState *tstate); + + +/* --- _Py_EnterRecursiveCall() ----------------------------------------- */ + +PyAPI_DATA(int) _Py_CheckRecursionLimit; + +#ifdef USE_STACKCHECK +/* With USE_STACKCHECK macro defined, trigger stack checks in + _Py_CheckRecursiveCall() on every 64th call to Py_EnterRecursiveCall. */ +static inline int _Py_MakeRecCheck(PyThreadState *tstate) { + return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit + || ++tstate->stackcheck_counter > 64); +} +#else +static inline int _Py_MakeRecCheck(PyThreadState *tstate) { + return (++tstate->recursion_depth > tstate->interp->ceval.recursion_limit); +} +#endif + +PyAPI_FUNC(int) _Py_CheckRecursiveCall( + PyThreadState *tstate, + const char *where); + +static inline int _Py_EnterRecursiveCall(PyThreadState *tstate, + const char *where) { + return (_Py_MakeRecCheck(tstate) && _Py_CheckRecursiveCall(tstate, where)); +} + +static inline int _Py_EnterRecursiveCall_inline(const char *where) { + PyThreadState *tstate = PyThreadState_GET(); + return _Py_EnterRecursiveCall(tstate, where); +} + +#define Py_EnterRecursiveCall(where) _Py_EnterRecursiveCall_inline(where) + +/* Compute the "lower-water mark" for a recursion limit. When + * Py_LeaveRecursiveCall() is called with a recursion depth below this mark, + * the overflowed flag is reset to 0. */ +static inline int _Py_RecursionLimitLowerWaterMark(int limit) { + if (limit > 200) { + return (limit - 50); + } + else { + return (3 * (limit >> 2)); + } +} + +static inline void _Py_LeaveRecursiveCall(PyThreadState *tstate) { + tstate->recursion_depth--; + int limit = tstate->interp->ceval.recursion_limit; + if (tstate->recursion_depth < _Py_RecursionLimitLowerWaterMark(limit)) { + tstate->overflowed = 0; + } +} + +static inline void _Py_LeaveRecursiveCall_inline(void) { + PyThreadState *tstate = PyThreadState_GET(); + _Py_LeaveRecursiveCall(tstate); +} + +#define Py_LeaveRecursiveCall() _Py_LeaveRecursiveCall_inline() + + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_context.h b/src/external/windows/include/python/internal/pycore_context.h index ad557657..884baa9c 100755 --- a/src/external/windows/include/python/internal/pycore_context.h +++ b/src/external/windows/include/python/internal/pycore_context.h @@ -5,7 +5,7 @@ # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_hamt.h" +#include "pycore_hamt.h" /* PyHamtObject */ struct _pycontextobject { PyObject_HEAD diff --git a/src/external/windows/include/python/dtoa.h b/src/external/windows/include/python/internal/pycore_dtoa.h similarity index 63% rename from src/external/windows/include/python/dtoa.h rename to src/external/windows/include/python/internal/pycore_dtoa.h index 0901d8fb..4cf08f61 100755 --- a/src/external/windows/include/python/dtoa.h +++ b/src/external/windows/include/python/internal/pycore_dtoa.h @@ -1,9 +1,15 @@ -#ifndef Py_LIMITED_API #ifndef PY_NO_SHORT_FLOAT_REPR #ifdef __cplusplus extern "C" { #endif +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* These functions are used by modules compiled as C extension like math: + they must be exported. */ + PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr); PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); @@ -11,9 +17,7 @@ PyAPI_FUNC(void) _Py_dg_freedtoa(char *s); PyAPI_FUNC(double) _Py_dg_stdnan(int sign); PyAPI_FUNC(double) _Py_dg_infinity(int sign); - #ifdef __cplusplus } #endif -#endif -#endif +#endif /* !PY_NO_SHORT_FLOAT_REPR */ diff --git a/src/external/windows/include/python/internal/pycore_fileutils.h b/src/external/windows/include/python/internal/pycore_fileutils.h index 77f0edfa..9636f252 100755 --- a/src/external/windows/include/python/internal/pycore_fileutils.h +++ b/src/external/windows/include/python/internal/pycore_fileutils.h @@ -48,6 +48,18 @@ PyAPI_FUNC(int) _Py_GetLocaleconvNumeric( PyObject **decimal_point, PyObject **thousands_sep); +#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION +extern int _Py_LocaleUsesNonUnicodeWchar(void); + +extern wchar_t* _Py_DecodeNonUnicodeWchar( + const wchar_t* native, + Py_ssize_t size); + +extern int _Py_EncodeNonUnicodeWchar_InPlace( + wchar_t* unicode, + Py_ssize_t size); +#endif + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_gc.h b/src/external/windows/include/python/internal/pycore_gc.h new file mode 100755 index 00000000..012407a5 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_gc.h @@ -0,0 +1,179 @@ +#ifndef Py_INTERNAL_GC_H +#define Py_INTERNAL_GC_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* GC information is stored BEFORE the object structure. */ +typedef struct { + // Pointer to next object in the list. + // 0 means the object is not tracked + uintptr_t _gc_next; + + // Pointer to previous object in the list. + // Lowest two bits are used for flags documented later. + uintptr_t _gc_prev; +} PyGC_Head; + +#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) + +/* True if the object is currently tracked by the GC. */ +#define _PyObject_GC_IS_TRACKED(o) (_Py_AS_GC(o)->_gc_next != 0) + +/* True if the object may be tracked by the GC in the future, or already is. + This can be useful to implement some optimizations. */ +#define _PyObject_GC_MAY_BE_TRACKED(obj) \ + (PyObject_IS_GC(obj) && \ + (!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj))) + + +/* Bit flags for _gc_prev */ +/* Bit 0 is set when tp_finalize is called */ +#define _PyGC_PREV_MASK_FINALIZED (1) +/* Bit 1 is set when the object is in generation which is GCed currently. */ +#define _PyGC_PREV_MASK_COLLECTING (2) +/* The (N-2) most significant bits contain the real address. */ +#define _PyGC_PREV_SHIFT (2) +#define _PyGC_PREV_MASK (((uintptr_t) -1) << _PyGC_PREV_SHIFT) + +// Lowest bit of _gc_next is used for flags only in GC. +// But it is always 0 for normal code. +#define _PyGCHead_NEXT(g) ((PyGC_Head*)(g)->_gc_next) +#define _PyGCHead_SET_NEXT(g, p) ((g)->_gc_next = (uintptr_t)(p)) + +// Lowest two bits of _gc_prev is used for _PyGC_PREV_MASK_* flags. +#define _PyGCHead_PREV(g) ((PyGC_Head*)((g)->_gc_prev & _PyGC_PREV_MASK)) +#define _PyGCHead_SET_PREV(g, p) do { \ + assert(((uintptr_t)p & ~_PyGC_PREV_MASK) == 0); \ + (g)->_gc_prev = ((g)->_gc_prev & ~_PyGC_PREV_MASK) \ + | ((uintptr_t)(p)); \ + } while (0) + +#define _PyGCHead_FINALIZED(g) \ + (((g)->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0) +#define _PyGCHead_SET_FINALIZED(g) \ + ((g)->_gc_prev |= _PyGC_PREV_MASK_FINALIZED) + +#define _PyGC_FINALIZED(o) \ + _PyGCHead_FINALIZED(_Py_AS_GC(o)) +#define _PyGC_SET_FINALIZED(o) \ + _PyGCHead_SET_FINALIZED(_Py_AS_GC(o)) + + +/* GC runtime state */ + +/* If we change this, we need to change the default value in the + signature of gc.collect. */ +#define NUM_GENERATIONS 3 +/* + NOTE: about untracking of mutable objects. + + Certain types of container cannot participate in a reference cycle, and + so do not need to be tracked by the garbage collector. Untracking these + objects reduces the cost of garbage collections. However, determining + which objects may be untracked is not free, and the costs must be + weighed against the benefits for garbage collection. + + There are two possible strategies for when to untrack a container: + + i) When the container is created. + ii) When the container is examined by the garbage collector. + + Tuples containing only immutable objects (integers, strings etc, and + recursively, tuples of immutable objects) do not need to be tracked. + The interpreter creates a large number of tuples, many of which will + not survive until garbage collection. It is therefore not worthwhile + to untrack eligible tuples at creation time. + + Instead, all tuples except the empty tuple are tracked when created. + During garbage collection it is determined whether any surviving tuples + can be untracked. A tuple can be untracked if all of its contents are + already not tracked. Tuples are examined for untracking in all garbage + collection cycles. It may take more than one cycle to untrack a tuple. + + Dictionaries containing only immutable objects also do not need to be + tracked. Dictionaries are untracked when created. If a tracked item is + inserted into a dictionary (either as a key or value), the dictionary + becomes tracked. During a full garbage collection (all generations), + the collector will untrack any dictionaries whose contents are not + tracked. + + The module provides the python function is_tracked(obj), which returns + the CURRENT tracking status of the object. Subsequent garbage + collections may change the tracking status of the object. + + Untracking of certain containers was introduced in issue #4688, and + the algorithm was refined in response to issue #14775. +*/ + +struct gc_generation { + PyGC_Head head; + int threshold; /* collection threshold */ + int count; /* count of allocations or collections of younger + generations */ +}; + +/* Running stats per generation */ +struct gc_generation_stats { + /* total number of collections */ + Py_ssize_t collections; + /* total number of collected objects */ + Py_ssize_t collected; + /* total number of uncollectable objects (put into gc.garbage) */ + Py_ssize_t uncollectable; +}; + +struct _gc_runtime_state { + /* List of objects that still need to be cleaned up, singly linked + * via their gc headers' gc_prev pointers. */ + PyObject *trash_delete_later; + /* Current call-stack depth of tp_dealloc calls. */ + int trash_delete_nesting; + + int enabled; + int debug; + /* linked lists of container objects */ + struct gc_generation generations[NUM_GENERATIONS]; + PyGC_Head *generation0; + /* a permanent generation which won't be collected */ + struct gc_generation permanent_generation; + struct gc_generation_stats generation_stats[NUM_GENERATIONS]; + /* true if we are currently running the collector */ + int collecting; + /* list of uncollectable objects */ + PyObject *garbage; + /* a list of callbacks to be invoked when collection is performed */ + PyObject *callbacks; + /* This is the number of objects that survived the last full + collection. It approximates the number of long lived objects + tracked by the GC. + + (by "full collection", we mean a collection of the oldest + generation). */ + Py_ssize_t long_lived_total; + /* This is the number of objects that survived all "non-full" + collections, and are awaiting to undergo a full collection for + the first time. */ + Py_ssize_t long_lived_pending; +}; + +PyAPI_FUNC(void) _PyGC_InitState(struct _gc_runtime_state *); + + +// Functions to clear types free lists +extern void _PyFrame_ClearFreeList(void); +extern void _PyTuple_ClearFreeList(void); +extern void _PyFloat_ClearFreeList(void); +extern void _PyList_ClearFreeList(void); +extern void _PyDict_ClearFreeList(void); +extern void _PyAsyncGen_ClearFreeLists(void); +extern void _PyContext_ClearFreeList(void); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_GC_H */ diff --git a/src/external/windows/include/python/internal/pycore_gil.h b/src/external/windows/include/python/internal/pycore_gil.h index 0f08f4cc..e1c8923c 100755 --- a/src/external/windows/include/python/internal/pycore_gil.h +++ b/src/external/windows/include/python/internal/pycore_gil.h @@ -8,8 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_condvar.h" -#include "pycore_atomic.h" +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_condvar.h" /* PyCOND_T */ #ifndef Py_HAVE_CONDVAR # error You need either a POSIX-compatible or a Windows system! diff --git a/src/external/windows/include/python/internal/pycore_hamt.h b/src/external/windows/include/python/internal/pycore_hamt.h index 44e22e2f..f6abb113 100755 --- a/src/external/windows/include/python/internal/pycore_hamt.h +++ b/src/external/windows/include/python/internal/pycore_hamt.h @@ -8,7 +8,7 @@ #define _Py_HAMT_MAX_TREE_DEPTH 7 -#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type) +#define PyHamt_Check(o) Py_IS_TYPE(o, &_PyHamt_Type) /* Abstract tree node. */ diff --git a/src/external/windows/include/python/internal/pycore_hashtable.h b/src/external/windows/include/python/internal/pycore_hashtable.h new file mode 100755 index 00000000..8fa411a1 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_hashtable.h @@ -0,0 +1,148 @@ +#ifndef Py_INTERNAL_HASHTABLE_H +#define Py_INTERNAL_HASHTABLE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +/* Single linked list */ + +typedef struct _Py_slist_item_s { + struct _Py_slist_item_s *next; +} _Py_slist_item_t; + +typedef struct { + _Py_slist_item_t *head; +} _Py_slist_t; + +#define _Py_SLIST_ITEM_NEXT(ITEM) (((_Py_slist_item_t *)ITEM)->next) + +#define _Py_SLIST_HEAD(SLIST) (((_Py_slist_t *)SLIST)->head) + + +/* _Py_hashtable: table entry */ + +typedef struct { + /* used by _Py_hashtable_t.buckets to link entries */ + _Py_slist_item_t _Py_slist_item; + + Py_uhash_t key_hash; + void *key; + void *value; +} _Py_hashtable_entry_t; + + +/* _Py_hashtable: prototypes */ + +/* Forward declaration */ +struct _Py_hashtable_t; +typedef struct _Py_hashtable_t _Py_hashtable_t; + +typedef Py_uhash_t (*_Py_hashtable_hash_func) (const void *key); +typedef int (*_Py_hashtable_compare_func) (const void *key1, const void *key2); +typedef void (*_Py_hashtable_destroy_func) (void *key); +typedef _Py_hashtable_entry_t* (*_Py_hashtable_get_entry_func)(_Py_hashtable_t *ht, + const void *key); + +typedef struct { + // Allocate a memory block + void* (*malloc) (size_t size); + + // Release a memory block + void (*free) (void *ptr); +} _Py_hashtable_allocator_t; + + +/* _Py_hashtable: table */ +struct _Py_hashtable_t { + size_t nentries; // Total number of entries in the table + size_t nbuckets; + _Py_slist_t *buckets; + + _Py_hashtable_get_entry_func get_entry_func; + _Py_hashtable_hash_func hash_func; + _Py_hashtable_compare_func compare_func; + _Py_hashtable_destroy_func key_destroy_func; + _Py_hashtable_destroy_func value_destroy_func; + _Py_hashtable_allocator_t alloc; +}; + +/* Hash a pointer (void*) */ +PyAPI_FUNC(Py_uhash_t) _Py_hashtable_hash_ptr(const void *key); + +/* Comparison using memcmp() */ +PyAPI_FUNC(int) _Py_hashtable_compare_direct( + const void *key1, + const void *key2); + +PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new( + _Py_hashtable_hash_func hash_func, + _Py_hashtable_compare_func compare_func); + +PyAPI_FUNC(_Py_hashtable_t *) _Py_hashtable_new_full( + _Py_hashtable_hash_func hash_func, + _Py_hashtable_compare_func compare_func, + _Py_hashtable_destroy_func key_destroy_func, + _Py_hashtable_destroy_func value_destroy_func, + _Py_hashtable_allocator_t *allocator); + +PyAPI_FUNC(void) _Py_hashtable_destroy(_Py_hashtable_t *ht); + +PyAPI_FUNC(void) _Py_hashtable_clear(_Py_hashtable_t *ht); + +typedef int (*_Py_hashtable_foreach_func) (_Py_hashtable_t *ht, + const void *key, const void *value, + void *user_data); + +/* Call func() on each entry of the hashtable. + Iteration stops if func() result is non-zero, in this case it's the result + of the call. Otherwise, the function returns 0. */ +PyAPI_FUNC(int) _Py_hashtable_foreach( + _Py_hashtable_t *ht, + _Py_hashtable_foreach_func func, + void *user_data); + +PyAPI_FUNC(size_t) _Py_hashtable_size(const _Py_hashtable_t *ht); + +/* Add a new entry to the hash. The key must not be present in the hash table. + Return 0 on success, -1 on memory error. */ +PyAPI_FUNC(int) _Py_hashtable_set( + _Py_hashtable_t *ht, + const void *key, + void *value); + + +/* Get an entry. + Return NULL if the key does not exist. */ +static inline _Py_hashtable_entry_t * +_Py_hashtable_get_entry(_Py_hashtable_t *ht, const void *key) +{ + return ht->get_entry_func(ht, key); +} + + +/* Get value from an entry. + Return NULL if the entry is not found. + + Use _Py_hashtable_get_entry() to distinguish entry value equal to NULL + and entry not found. */ +PyAPI_FUNC(void*) _Py_hashtable_get(_Py_hashtable_t *ht, const void *key); + + +/* Remove a key and its associated value without calling key and value destroy + functions. + + Return the removed value if the key was found. + Return NULL if the key was not found. */ +PyAPI_FUNC(void*) _Py_hashtable_steal( + _Py_hashtable_t *ht, + const void *key); + + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_HASHTABLE_H */ diff --git a/src/external/windows/include/python/internal/pycore_import.h b/src/external/windows/include/python/internal/pycore_import.h new file mode 100755 index 00000000..4c5e0e5e --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_import.h @@ -0,0 +1,22 @@ +#ifndef Py_LIMITED_API +#ifndef Py_INTERNAL_IMPORT_H +#define Py_INTERNAL_IMPORT_H +#ifdef __cplusplus +extern "C" { +#endif + +PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin( + PyThreadState *tstate, + const char *name /* UTF-8 encoded string */ + ); + +#ifdef HAVE_FORK +extern void _PyImport_ReInitLock(void); +#endif +extern void _PyImport_Cleanup(PyThreadState *tstate); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_IMPORT_H */ +#endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/internal/pycore_initconfig.h b/src/external/windows/include/python/internal/pycore_initconfig.h index 120d85e2..855fb550 100755 --- a/src/external/windows/include/python/internal/pycore_initconfig.h +++ b/src/external/windows/include/python/internal/pycore_initconfig.h @@ -8,7 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_pystate.h" /* _PyRuntimeState */ +/* Forward declaration */ +struct pyruntimestate; /* --- PyStatus ----------------------------------------------- */ @@ -60,7 +61,7 @@ PyAPI_FUNC(PyObject*) _PyWideStringList_AsList(const PyWideStringList *list); /* --- _PyArgv ---------------------------------------------------- */ -typedef struct { +typedef struct _PyArgv { Py_ssize_t argc; int use_bytes_argv; char * const *bytes_argv; @@ -149,8 +150,8 @@ extern PyStatus _PyConfig_Copy( PyConfig *config, const PyConfig *config2); extern PyStatus _PyConfig_InitPathConfig(PyConfig *config); -extern void _PyConfig_Write(const PyConfig *config, - _PyRuntimeState *runtime); +extern PyStatus _PyConfig_Write(const PyConfig *config, + struct pyruntimestate *runtime); extern PyStatus _PyConfig_SetPyArgv( PyConfig *config, const _PyArgv *args); diff --git a/src/external/windows/include/python/internal/pycore_interp.h b/src/external/windows/include/python/internal/pycore_interp.h new file mode 100755 index 00000000..1023483a --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_interp.h @@ -0,0 +1,192 @@ +#ifndef Py_INTERNAL_INTERP_H +#define Py_INTERNAL_INTERP_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_gil.h" /* struct _gil_runtime_state */ +#include "pycore_gc.h" /* struct _gc_runtime_state */ +#include "pycore_warnings.h" /* struct _warnings_runtime_state */ + +/* ceval state */ + +struct _pending_calls { + PyThread_type_lock lock; + /* Request for running pending calls. */ + _Py_atomic_int calls_to_do; + /* Request for looking at the `async_exc` field of the current + thread state. + Guarded by the GIL. */ + int async_exc; +#define NPENDINGCALLS 32 + struct { + int (*func)(void *); + void *arg; + } calls[NPENDINGCALLS]; + int first; + int last; +}; + +struct _ceval_state { + int recursion_limit; + /* Records whether tracing is on for any thread. Counts the number + of threads for which tstate->c_tracefunc is non-NULL, so if the + value is 0, we know we don't have to check this thread's + c_tracefunc. This speeds up the if statement in + _PyEval_EvalFrameDefault() after fast_next_opcode. */ + int tracing_possible; + /* This single variable consolidates all requests to break out of + the fast path in the eval loop. */ + _Py_atomic_int eval_breaker; + /* Request for dropping the GIL */ + _Py_atomic_int gil_drop_request; + struct _pending_calls pending; +}; + +/* fs_codec.encoding is initialized to NULL. + Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */ +struct _Py_unicode_fs_codec { + char *encoding; // Filesystem encoding (encoded to UTF-8) + int utf8; // encoding=="utf-8"? + char *errors; // Filesystem errors (encoded to UTF-8) + _Py_error_handler error_handler; +}; + +struct _Py_unicode_state { + struct _Py_unicode_fs_codec fs_codec; +}; + + +/* interpreter state */ + +#define _PY_NSMALLPOSINTS 257 +#define _PY_NSMALLNEGINTS 5 + +// The PyInterpreterState typedef is in Include/pystate.h. +struct _is { + + struct _is *next; + struct _ts *tstate_head; + + /* Reference to the _PyRuntime global variable. This field exists + to not have to pass runtime in addition to tstate to a function. + Get runtime from tstate: tstate->interp->runtime. */ + struct pyruntimestate *runtime; + + int64_t id; + int64_t id_refcount; + int requires_idref; + PyThread_type_lock id_mutex; + + int finalizing; + + struct _ceval_state ceval; + struct _gc_runtime_state gc; + + PyObject *modules; + PyObject *modules_by_index; + PyObject *sysdict; + PyObject *builtins; + PyObject *importlib; + + /* Used in Modules/_threadmodule.c. */ + long num_threads; + /* Support for runtime thread stack size tuning. + A value of 0 means using the platform's default stack size + or the size specified by the THREAD_STACK_SIZE macro. */ + /* Used in Python/thread.c. */ + size_t pythread_stacksize; + + PyObject *codec_search_path; + PyObject *codec_search_cache; + PyObject *codec_error_registry; + int codecs_initialized; + + struct _Py_unicode_state unicode; + + PyConfig config; +#ifdef HAVE_DLOPEN + int dlopenflags; +#endif + + PyObject *dict; /* Stores per-interpreter state */ + + PyObject *builtins_copy; + PyObject *import_func; + /* Initialized to PyEval_EvalFrameDefault(). */ + _PyFrameEvalFunction eval_frame; + + Py_ssize_t co_extra_user_count; + freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; + +#ifdef HAVE_FORK + PyObject *before_forkers; + PyObject *after_forkers_parent; + PyObject *after_forkers_child; +#endif + /* AtExit module */ + void (*pyexitfunc)(PyObject *); + PyObject *pyexitmodule; + + uint64_t tstate_next_unique_id; + + struct _warnings_runtime_state warnings; + + PyObject *audit_hooks; + + struct { + struct { + int level; + int atbol; + } listnode; + } parser; + +#if _PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS > 0 + /* Small integers are preallocated in this array so that they + can be shared. + The integers that are preallocated are those in the range + -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (not inclusive). + */ + PyLongObject* small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS]; +#endif +}; + +/* Used by _PyImport_Cleanup() */ +extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp); + +extern PyStatus _PyInterpreterState_SetConfig( + PyInterpreterState *interp, + const PyConfig *config); + + + +/* cross-interpreter data registry */ + +/* For now we use a global registry of shareable classes. An + alternative would be to add a tp_* slot for a class's + crossinterpdatafunc. It would be simpler and more efficient. */ + +struct _xidregitem; + +struct _xidregitem { + PyTypeObject *cls; + crossinterpdatafunc getdata; + struct _xidregitem *next; +}; + +PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(int64_t); + +PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); +PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); +PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_INTERP_H */ + diff --git a/src/external/windows/include/python/internal/pycore_object.h b/src/external/windows/include/python/internal/pycore_object.h index 7a57fa79..15497007 100755 --- a/src/external/windows/include/python/internal/pycore_object.h +++ b/src/external/windows/include/python/internal/pycore_object.h @@ -8,7 +8,9 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_pystate.h" /* _PyRuntime */ +#include "pycore_gc.h" // _PyObject_GC_IS_TRACKED() +#include "pycore_interp.h" // PyInterpreterState.gc +#include "pycore_pystate.h" // _PyThreadState_GET() PyAPI_FUNC(int) _PyType_CheckConsistency(PyTypeObject *type); PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content); @@ -18,7 +20,7 @@ PyAPI_FUNC(int) _PyDict_CheckConsistency(PyObject *mp, int check_content); * NB: While the object is tracked by the collector, it must be safe to call the * ob_traverse method. * - * Internal note: _PyRuntime.gc.generation0->_gc_prev doesn't have any bit flags + * Internal note: interp->gc.generation0->_gc_prev doesn't have any bit flags * because it's not object header. So we don't use _PyGCHead_PREV() and * _PyGCHead_SET_PREV() for it to avoid unnecessary bitwise operations. * @@ -37,11 +39,13 @@ static inline void _PyObject_GC_TRACK_impl(const char *filename, int lineno, "object is in generation which is garbage collected", filename, lineno, "_PyObject_GC_TRACK"); - PyGC_Head *last = (PyGC_Head*)(_PyRuntime.gc.generation0->_gc_prev); + PyThreadState *tstate = _PyThreadState_GET(); + PyGC_Head *generation0 = tstate->interp->gc.generation0; + PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev); _PyGCHead_SET_NEXT(last, gc); _PyGCHead_SET_PREV(gc, last); - _PyGCHead_SET_NEXT(gc, _PyRuntime.gc.generation0); - _PyRuntime.gc.generation0->_gc_prev = (uintptr_t)gc; + _PyGCHead_SET_NEXT(gc, generation0); + generation0->_gc_prev = (uintptr_t)gc; } #define _PyObject_GC_TRACK(op) \ @@ -75,6 +79,41 @@ static inline void _PyObject_GC_UNTRACK_impl(const char *filename, int lineno, #define _PyObject_GC_UNTRACK(op) \ _PyObject_GC_UNTRACK_impl(__FILE__, __LINE__, _PyObject_CAST(op)) +#ifdef Py_REF_DEBUG +extern void _PyDebug_PrintTotalRefs(void); +#endif + +#ifdef Py_TRACE_REFS +extern void _Py_AddToAllObjects(PyObject *op, int force); +extern void _Py_PrintReferences(FILE *); +extern void _Py_PrintReferenceAddresses(FILE *); +#endif + +static inline PyObject ** +_PyObject_GET_WEAKREFS_LISTPTR(PyObject *op) +{ + Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset; + return (PyObject **)((char *)op + offset); +} + +// Fast inlined version of PyType_HasFeature() +static inline int +_PyType_HasFeature(PyTypeObject *type, unsigned long feature) { + return ((type->tp_flags & feature) != 0); +} + +// Fast inlined version of PyObject_IS_GC() +static inline int +_PyObject_IS_GC(PyObject *obj) +{ + return (PyType_IS_GC(Py_TYPE(obj)) + && (Py_TYPE(obj)->tp_is_gc == NULL + || Py_TYPE(obj)->tp_is_gc(obj))); +} + +// Fast inlined version of PyType_IS_GC() +#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pathconfig.h b/src/external/windows/include/python/internal/pycore_pathconfig.h index 887fbe4a..8f706fe6 100755 --- a/src/external/windows/include/python/internal/pycore_pathconfig.h +++ b/src/external/windows/include/python/internal/pycore_pathconfig.h @@ -47,8 +47,6 @@ PyAPI_DATA(wchar_t*) _Py_dll_path; #endif extern void _PyPathConfig_ClearGlobal(void); -extern PyStatus _PyPathConfig_SetGlobal( - const struct _PyPathConfig *pathconfig); extern PyStatus _PyPathConfig_Calculate( _PyPathConfig *pathconfig, @@ -56,11 +54,10 @@ extern PyStatus _PyPathConfig_Calculate( extern int _PyPathConfig_ComputeSysPath0( const PyWideStringList *argv, PyObject **path0); -extern int _Py_FindEnvConfigValue( +extern PyStatus _Py_FindEnvConfigValue( FILE *env_file, const wchar_t *key, - wchar_t *value, - size_t value_size); + wchar_t **value_p); #ifdef MS_WINDOWS extern wchar_t* _Py_GetDLLPath(void); diff --git a/src/external/windows/include/python/internal/pycore_pyerrors.h b/src/external/windows/include/python/internal/pycore_pyerrors.h index 337bb979..6140cf37 100755 --- a/src/external/windows/include/python/internal/pycore_pyerrors.h +++ b/src/external/windows/include/python/internal/pycore_pyerrors.h @@ -10,7 +10,22 @@ extern "C" { static inline PyObject* _PyErr_Occurred(PyThreadState *tstate) { - return tstate == NULL ? NULL : tstate->curexc_type; + assert(tstate != NULL); + return tstate->curexc_type; +} + +static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state) +{ + PyObject *t, *v, *tb; + t = exc_state->exc_type; + v = exc_state->exc_value; + tb = exc_state->exc_traceback; + exc_state->exc_type = NULL; + exc_state->exc_value = NULL; + exc_state->exc_traceback = NULL; + Py_XDECREF(t); + Py_XDECREF(v); + Py_XDECREF(tb); } @@ -35,10 +50,15 @@ PyAPI_FUNC(void) _PyErr_SetObject( PyObject *type, PyObject *value); +PyAPI_FUNC(void) _PyErr_ChainStackItem( + _PyErr_StackItem *exc_info); + PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate); PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception); +PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate); + PyAPI_FUNC(void) _PyErr_SetString( PyThreadState *tstate, PyObject *exception, @@ -56,6 +76,14 @@ PyAPI_FUNC(void) _PyErr_NormalizeException( PyObject **val, PyObject **tb); +PyAPI_FUNC(PyObject *) _PyErr_FormatFromCauseTstate( + PyThreadState *tstate, + PyObject *exception, + const char *format, + ...); + +PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pylifecycle.h b/src/external/windows/include/python/internal/pycore_pylifecycle.h index f4c28d69..89f99a41 100755 --- a/src/external/windows/include/python/internal/pycore_pylifecycle.h +++ b/src/external/windows/include/python/internal/pycore_pylifecycle.h @@ -8,8 +8,9 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pycore_initconfig.h" /* _PyArgv */ -#include "pycore_pystate.h" /* _PyRuntimeState */ +/* Forward declarations */ +struct _PyArgv; +struct pyruntimestate; /* True if the main interpreter thread exited due to an unhandled * KeyboardInterrupt exception, suggesting the user pressed ^C. */ @@ -32,74 +33,69 @@ PyAPI_FUNC(int) _Py_IsLocaleCoercionTarget(const char *ctype_loc); extern PyStatus _PyUnicode_Init(void); extern int _PyStructSequence_Init(void); -extern int _PyLong_Init(void); +extern int _PyLong_Init(PyThreadState *tstate); extern PyStatus _PyFaulthandler_Init(int enable); extern int _PyTraceMalloc_Init(int enable); -extern PyObject * _PyBuiltin_Init(void); +extern PyObject * _PyBuiltin_Init(PyThreadState *tstate); extern PyStatus _PySys_Create( - _PyRuntimeState *runtime, - PyInterpreterState *interp, + PyThreadState *tstate, PyObject **sysmod_p); -extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict); extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options); extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config); -extern int _PySys_InitMain( - _PyRuntimeState *runtime, - PyInterpreterState *interp); -extern PyStatus _PyImport_Init(PyInterpreterState *interp); +extern int _PySys_InitMain(PyThreadState *tstate); extern PyStatus _PyExc_Init(void); extern PyStatus _PyErr_Init(void); extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod); -extern PyStatus _PyImportHooks_Init(void); +extern PyStatus _PyImportHooks_Init(PyThreadState *tstate); extern int _PyFloat_Init(void); extern PyStatus _Py_HashRandomization_Init(const PyConfig *); extern PyStatus _PyTypes_Init(void); -extern PyStatus _PyImportZip_Init(PyInterpreterState *interp); +extern PyStatus _PyTypes_InitSlotDefs(void); +extern PyStatus _PyImportZip_Init(PyThreadState *tstate); +extern PyStatus _PyGC_Init(PyThreadState *tstate); /* Various internal finalizers */ -extern void PyMethod_Fini(void); -extern void PyFrame_Fini(void); -extern void PyCFunction_Fini(void); -extern void PyDict_Fini(void); -extern void PyTuple_Fini(void); -extern void PyList_Fini(void); -extern void PySet_Fini(void); -extern void PyBytes_Fini(void); -extern void PyFloat_Fini(void); +extern void _PyFrame_Fini(void); +extern void _PyDict_Fini(void); +extern void _PyTuple_Fini(void); +extern void _PyList_Fini(void); +extern void _PySet_Fini(void); +extern void _PyBytes_Fini(void); +extern void _PyFloat_Fini(void); +extern void _PySlice_Fini(void); +extern void _PyAsyncGen_Fini(void); + +extern int _PySignal_Init(int install_signal_handlers); extern void PyOS_FiniInterrupts(void); -extern void PySlice_Fini(void); -extern void PyAsyncGen_Fini(void); extern void _PyExc_Fini(void); extern void _PyImport_Fini(void); extern void _PyImport_Fini2(void); -extern void _PyGC_Fini(_PyRuntimeState *runtime); +extern void _PyGC_Fini(PyThreadState *tstate); extern void _PyType_Fini(void); extern void _Py_HashRandomization_Fini(void); -extern void _PyUnicode_Fini(void); -extern void PyLong_Fini(void); +extern void _PyUnicode_Fini(PyThreadState *tstate); +extern void _PyLong_Fini(PyThreadState *tstate); extern void _PyFaulthandler_Fini(void); extern void _PyHash_Fini(void); extern void _PyTraceMalloc_Fini(void); extern void _PyWarnings_Fini(PyInterpreterState *interp); +extern void _PyAST_Fini(void); -extern void _PyGILState_Init( - _PyRuntimeState *runtime, - PyInterpreterState *interp, - PyThreadState *tstate); -extern void _PyGILState_Fini(_PyRuntimeState *runtime); +extern PyStatus _PyGILState_Init(PyThreadState *tstate); +extern void _PyGILState_Fini(PyThreadState *tstate); -PyAPI_FUNC(void) _PyGC_DumpShutdownStats(_PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyGC_DumpShutdownStats(PyThreadState *tstate); PyAPI_FUNC(PyStatus) _Py_PreInitializeFromPyArgv( const PyPreConfig *src_config, - const _PyArgv *args); + const struct _PyArgv *args); PyAPI_FUNC(PyStatus) _Py_PreInitializeFromConfig( const PyConfig *config, - const _PyArgv *args); + const struct _PyArgv *args); PyAPI_FUNC(int) _Py_HandleSystemExit(int *exitcode_p); @@ -110,6 +106,8 @@ PyAPI_FUNC(void) _PyErr_Print(PyThreadState *tstate); PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception, PyObject *value, PyObject *tb); +PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pymem.h b/src/external/windows/include/python/internal/pycore_pymem.h index 9ceb1297..98e25396 100755 --- a/src/external/windows/include/python/internal/pycore_pymem.h +++ b/src/external/windows/include/python/internal/pycore_pymem.h @@ -8,144 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "objimpl.h" -#include "pymem.h" - - -/* GC runtime state */ - -/* If we change this, we need to change the default value in the - signature of gc.collect. */ -#define NUM_GENERATIONS 3 - -/* - NOTE: about the counting of long-lived objects. - - To limit the cost of garbage collection, there are two strategies; - - make each collection faster, e.g. by scanning fewer objects - - do less collections - This heuristic is about the latter strategy. - - In addition to the various configurable thresholds, we only trigger a - full collection if the ratio - long_lived_pending / long_lived_total - is above a given value (hardwired to 25%). - - The reason is that, while "non-full" collections (i.e., collections of - the young and middle generations) will always examine roughly the same - number of objects -- determined by the aforementioned thresholds --, - the cost of a full collection is proportional to the total number of - long-lived objects, which is virtually unbounded. - - Indeed, it has been remarked that doing a full collection every - of object creations entails a dramatic performance - degradation in workloads which consist in creating and storing lots of - long-lived objects (e.g. building a large list of GC-tracked objects would - show quadratic performance, instead of linear as expected: see issue #4074). - - Using the above ratio, instead, yields amortized linear performance in - the total number of objects (the effect of which can be summarized - thusly: "each full garbage collection is more and more costly as the - number of objects grows, but we do fewer and fewer of them"). - - This heuristic was suggested by Martin von Löwis on python-dev in - June 2008. His original analysis and proposal can be found at: - http://mail.python.org/pipermail/python-dev/2008-June/080579.html -*/ - -/* - NOTE: about untracking of mutable objects. - - Certain types of container cannot participate in a reference cycle, and - so do not need to be tracked by the garbage collector. Untracking these - objects reduces the cost of garbage collections. However, determining - which objects may be untracked is not free, and the costs must be - weighed against the benefits for garbage collection. - - There are two possible strategies for when to untrack a container: - - i) When the container is created. - ii) When the container is examined by the garbage collector. - - Tuples containing only immutable objects (integers, strings etc, and - recursively, tuples of immutable objects) do not need to be tracked. - The interpreter creates a large number of tuples, many of which will - not survive until garbage collection. It is therefore not worthwhile - to untrack eligible tuples at creation time. - - Instead, all tuples except the empty tuple are tracked when created. - During garbage collection it is determined whether any surviving tuples - can be untracked. A tuple can be untracked if all of its contents are - already not tracked. Tuples are examined for untracking in all garbage - collection cycles. It may take more than one cycle to untrack a tuple. - - Dictionaries containing only immutable objects also do not need to be - tracked. Dictionaries are untracked when created. If a tracked item is - inserted into a dictionary (either as a key or value), the dictionary - becomes tracked. During a full garbage collection (all generations), - the collector will untrack any dictionaries whose contents are not - tracked. - - The module provides the python function is_tracked(obj), which returns - the CURRENT tracking status of the object. Subsequent garbage - collections may change the tracking status of the object. - - Untracking of certain containers was introduced in issue #4688, and - the algorithm was refined in response to issue #14775. -*/ - -struct gc_generation { - PyGC_Head head; - int threshold; /* collection threshold */ - int count; /* count of allocations or collections of younger - generations */ -}; - -/* Running stats per generation */ -struct gc_generation_stats { - /* total number of collections */ - Py_ssize_t collections; - /* total number of collected objects */ - Py_ssize_t collected; - /* total number of uncollectable objects (put into gc.garbage) */ - Py_ssize_t uncollectable; -}; - -struct _gc_runtime_state { - /* List of objects that still need to be cleaned up, singly linked - * via their gc headers' gc_prev pointers. */ - PyObject *trash_delete_later; - /* Current call-stack depth of tp_dealloc calls. */ - int trash_delete_nesting; - - int enabled; - int debug; - /* linked lists of container objects */ - struct gc_generation generations[NUM_GENERATIONS]; - PyGC_Head *generation0; - /* a permanent generation which won't be collected */ - struct gc_generation permanent_generation; - struct gc_generation_stats generation_stats[NUM_GENERATIONS]; - /* true if we are currently running the collector */ - int collecting; - /* list of uncollectable objects */ - PyObject *garbage; - /* a list of callbacks to be invoked when collection is performed */ - PyObject *callbacks; - /* This is the number of objects that survived the last full - collection. It approximates the number of long lived objects - tracked by the GC. - - (by "full collection", we mean a collection of the oldest - generation). */ - Py_ssize_t long_lived_total; - /* This is the number of objects that survived all "non-full" - collections, and are awaiting to undergo a full collection for - the first time. */ - Py_ssize_t long_lived_pending; -}; - -PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *); +#include "pymem.h" // PyMemAllocatorName /* Set the memory allocator of the specified domain to the default. @@ -179,7 +42,7 @@ PyAPI_FUNC(int) _PyMem_SetDefaultAllocator( fills newly allocated memory with CLEANBYTE (0xCD) and newly freed memory with DEADBYTE (0xDD). Detect also "untouchable bytes" marked with FORBIDDENBYTE (0xFD). */ -static inline int _PyMem_IsPtrFreed(void *ptr) +static inline int _PyMem_IsPtrFreed(const void *ptr) { uintptr_t value = (uintptr_t)ptr; #if SIZEOF_VOID_P == 8 @@ -206,6 +69,35 @@ PyAPI_FUNC(int) _PyMem_GetAllocatorName( PYMEM_ALLOCATOR_NOT_SET does nothing. */ PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator); +/* bpo-35053: Expose _Py_tracemalloc_config for _Py_NewReference() + which access directly _Py_tracemalloc_config.tracing for best + performances. */ +struct _PyTraceMalloc_Config { + /* Module initialized? + Variable protected by the GIL */ + enum { + TRACEMALLOC_NOT_INITIALIZED, + TRACEMALLOC_INITIALIZED, + TRACEMALLOC_FINALIZED + } initialized; + + /* Is tracemalloc tracing memory allocations? + Variable protected by the GIL */ + int tracing; + + /* limit of the number of frames in a traceback, 1 by default. + Variable protected by the GIL. */ + int max_nframe; +}; + +#define _PyTraceMalloc_Config_INIT \ + {.initialized = TRACEMALLOC_NOT_INITIALIZED, \ + .tracing = 0, \ + .max_nframe = 1} + +PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config; + + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/internal/pycore_pystate.h b/src/external/windows/include/python/internal/pycore_pystate.h index 32252278..2088d511 100755 --- a/src/external/windows/include/python/internal/pycore_pystate.h +++ b/src/external/windows/include/python/internal/pycore_pystate.h @@ -8,270 +8,52 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "cpython/initconfig.h" -#include "fileobject.h" -#include "pystate.h" -#include "pythread.h" -#include "sysmodule.h" - -#include "pycore_gil.h" /* _gil_runtime_state */ -#include "pycore_pathconfig.h" -#include "pycore_pymem.h" -#include "pycore_warnings.h" +#include "pycore_runtime.h" /* PyRuntimeState */ -/* ceval state */ - -struct _pending_calls { - int finishing; - PyThread_type_lock lock; - /* Request for running pending calls. */ - _Py_atomic_int calls_to_do; - /* Request for looking at the `async_exc` field of the current - thread state. - Guarded by the GIL. */ - int async_exc; -#define NPENDINGCALLS 32 - struct { - int (*func)(void *); - void *arg; - } calls[NPENDINGCALLS]; - int first; - int last; -}; - -struct _ceval_runtime_state { - int recursion_limit; - /* Records whether tracing is on for any thread. Counts the number - of threads for which tstate->c_tracefunc is non-NULL, so if the - value is 0, we know we don't have to check this thread's - c_tracefunc. This speeds up the if statement in - PyEval_EvalFrameEx() after fast_next_opcode. */ - int tracing_possible; - /* This single variable consolidates all requests to break out of - the fast path in the eval loop. */ - _Py_atomic_int eval_breaker; - /* Request for dropping the GIL */ - _Py_atomic_int gil_drop_request; - struct _pending_calls pending; - /* Request for checking signals. */ - _Py_atomic_int signals_pending; - struct _gil_runtime_state gil; -}; - -/* interpreter state */ - -typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int); - -// The PyInterpreterState typedef is in Include/pystate.h. -struct _is { - - struct _is *next; - struct _ts *tstate_head; - - int64_t id; - int64_t id_refcount; - int requires_idref; - PyThread_type_lock id_mutex; - - int finalizing; - - PyObject *modules; - PyObject *modules_by_index; - PyObject *sysdict; - PyObject *builtins; - PyObject *importlib; - - /* Used in Python/sysmodule.c. */ - int check_interval; - - /* Used in Modules/_threadmodule.c. */ - long num_threads; - /* Support for runtime thread stack size tuning. - A value of 0 means using the platform's default stack size - or the size specified by the THREAD_STACK_SIZE macro. */ - /* Used in Python/thread.c. */ - size_t pythread_stacksize; - - PyObject *codec_search_path; - PyObject *codec_search_cache; - PyObject *codec_error_registry; - int codecs_initialized; - - /* fs_codec.encoding is initialized to NULL. - Later, it is set to a non-NULL string by _PyUnicode_InitEncodings(). */ - struct { - char *encoding; /* Filesystem encoding (encoded to UTF-8) */ - char *errors; /* Filesystem errors (encoded to UTF-8) */ - _Py_error_handler error_handler; - } fs_codec; - - PyConfig config; -#ifdef HAVE_DLOPEN - int dlopenflags; -#endif - - PyObject *dict; /* Stores per-interpreter state */ - - PyObject *builtins_copy; - PyObject *import_func; - /* Initialized to PyEval_EvalFrameDefault(). */ - _PyFrameEvalFunction eval_frame; - - Py_ssize_t co_extra_user_count; - freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS]; - -#ifdef HAVE_FORK - PyObject *before_forkers; - PyObject *after_forkers_parent; - PyObject *after_forkers_child; -#endif - /* AtExit module */ - void (*pyexitfunc)(PyObject *); - PyObject *pyexitmodule; - - uint64_t tstate_next_unique_id; - - struct _warnings_runtime_state warnings; - - PyObject *audit_hooks; -}; - -PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T); - -PyAPI_FUNC(int) _PyInterpreterState_IDInitref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDIncref(struct _is *); -PyAPI_FUNC(void) _PyInterpreterState_IDDecref(struct _is *); +/* Check if the current thread is the main thread. + Use _Py_IsMainInterpreter() to check if it's the main interpreter. */ +static inline int +_Py_IsMainThread(void) +{ + unsigned long thread = PyThread_get_thread_ident(); + return (thread == _PyRuntime.main_thread); +} -/* cross-interpreter data registry */ - -/* For now we use a global registry of shareable classes. An - alternative would be to add a tp_* slot for a class's - crossinterpdatafunc. It would be simpler and more efficient. */ - -struct _xidregitem; - -struct _xidregitem { - PyTypeObject *cls; - crossinterpdatafunc getdata; - struct _xidregitem *next; -}; - -/* runtime audit hook state */ - -typedef struct _Py_AuditHookEntry { - struct _Py_AuditHookEntry *next; - Py_AuditHookFunction hookCFunction; - void *userData; -} _Py_AuditHookEntry; - -/* GIL state */ - -struct _gilstate_runtime_state { - int check_enabled; - /* Assuming the current thread holds the GIL, this is the - PyThreadState for the current thread. */ - _Py_atomic_address tstate_current; - PyThreadFrameGetter getframe; - /* The single PyInterpreterState used by this process' - GILState implementation - */ - /* TODO: Given interp_main, it may be possible to kill this ref */ - PyInterpreterState *autoInterpreterState; - Py_tss_t autoTSSkey; -}; - -/* hook for PyEval_GetFrame(), requested for Psyco */ -#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe - -/* Issue #26558: Flag to disable PyGILState_Check(). - If set to non-zero, PyGILState_Check() always return 1. */ -#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled +static inline int +_Py_IsMainInterpreter(PyThreadState* tstate) +{ + /* Use directly _PyRuntime rather than tstate->interp->runtime, since + this function is used in performance critical code path (ceval) */ + return (tstate->interp == _PyRuntime.interpreters.main); +} -/* Full Python runtime state */ +/* Only handle signals on the main thread of the main interpreter. */ +static inline int +_Py_ThreadCanHandleSignals(PyInterpreterState *interp) +{ + return (_Py_IsMainThread() && interp == _PyRuntime.interpreters.main); +} -typedef struct pyruntimestate { - /* Is running Py_PreInitialize()? */ - int preinitializing; - /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */ - int preinitialized; - - /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */ - int core_initialized; - - /* Is Python fully initialized? Set to 1 by Py_Initialize() */ - int initialized; - - /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize() - is called again. */ - PyThreadState *finalizing; - - struct pyinterpreters { - PyThread_type_lock mutex; - PyInterpreterState *head; - PyInterpreterState *main; - /* _next_interp_id is an auto-numbered sequence of small - integers. It gets initialized in _PyInterpreterState_Init(), - which is called in Py_Initialize(), and used in - PyInterpreterState_New(). A negative interpreter ID - indicates an error occurred. The main interpreter will - always have an ID of 0. Overflow results in a RuntimeError. - If that becomes a problem later then we can adjust, e.g. by - using a Python int. */ - int64_t next_id; - } interpreters; - // XXX Remove this field once we have a tp_* slot. - struct _xidregistry { - PyThread_type_lock mutex; - struct _xidregitem *head; - } xidregistry; - - unsigned long main_thread; - -#define NEXITFUNCS 32 - void (*exitfuncs[NEXITFUNCS])(void); - int nexitfuncs; - - struct _gc_runtime_state gc; - struct _ceval_runtime_state ceval; - struct _gilstate_runtime_state gilstate; - - PyPreConfig preconfig; - - Py_OpenCodeHookFunction open_code_hook; - void *open_code_userdata; - _Py_AuditHookEntry *audit_hook_head; - - // XXX Consolidate globals found via the check-c-globals script. -} _PyRuntimeState; - -#define _PyRuntimeState_INIT \ - {.preinitialized = 0, .core_initialized = 0, .initialized = 0} -/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */ - -PyAPI_DATA(_PyRuntimeState) _PyRuntime; -PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime); -PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime); - -/* Initialize _PyRuntimeState. - Return NULL on success, or return an error message on failure. */ -PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void); - -PyAPI_FUNC(void) _PyRuntime_Finalize(void); - -#define _Py_CURRENTLY_FINALIZING(runtime, tstate) \ - (runtime->finalizing == tstate) +/* Only execute pending calls on the main thread. */ +static inline int +_Py_ThreadCanHandlePendingCalls(void) +{ + return _Py_IsMainThread(); +} /* Variable and macro for in-line access to current thread and interpreter state */ -#define _PyRuntimeState_GetThreadState(runtime) \ - ((PyThreadState*)_Py_atomic_load_relaxed(&(runtime)->gilstate.tstate_current)) +static inline PyThreadState* +_PyRuntimeState_GetThreadState(_PyRuntimeState *runtime) +{ + return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current); +} /* Get the current Python thread state. @@ -282,12 +64,31 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void); The caller must hold the GIL. See also PyThreadState_Get() and PyThreadState_GET(). */ -#define _PyThreadState_GET() _PyRuntimeState_GetThreadState(&_PyRuntime) +static inline PyThreadState* +_PyThreadState_GET(void) +{ + return _PyRuntimeState_GetThreadState(&_PyRuntime); +} /* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */ #undef PyThreadState_GET #define PyThreadState_GET() _PyThreadState_GET() +PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func); + +static inline void +_Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate) +{ + if (tstate == NULL) { + _Py_FatalError_TstateNULL(func); + } +} + +// Call Py_FatalError() if tstate is NULL +#define _Py_EnsureTstateNotNULL(tstate) \ + _Py_EnsureFuncTstateNotNULL(__func__, tstate) + + /* Get the current interpreter state. The macro is unsafe: it does not check for error and it can return NULL. @@ -296,13 +97,18 @@ PyAPI_FUNC(void) _PyRuntime_Finalize(void); See also _PyInterpreterState_Get() and _PyGILState_GetInterpreterStateUnsafe(). */ -#define _PyInterpreterState_GET_UNSAFE() (_PyThreadState_GET()->interp) +static inline PyInterpreterState* _PyInterpreterState_GET(void) { + PyThreadState *tstate = _PyThreadState_GET(); +#ifdef Py_DEBUG + _Py_EnsureTstateNotNULL(tstate); +#endif + return tstate->interp; +} /* Other */ PyAPI_FUNC(void) _PyThreadState_Init( - _PyRuntimeState *runtime, PyThreadState *tstate); PyAPI_FUNC(void) _PyThreadState_DeleteExcept( _PyRuntimeState *runtime, @@ -318,6 +124,12 @@ PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime); PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime); +PyAPI_FUNC(int) _PyState_AddModule( + PyThreadState *tstate, + PyObject* module, + struct PyModuleDef* def); + + PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate); #ifdef __cplusplus diff --git a/src/external/windows/include/python/internal/pycore_runtime.h b/src/external/windows/include/python/internal/pycore_runtime.h new file mode 100755 index 00000000..f0dff829 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_runtime.h @@ -0,0 +1,144 @@ +#ifndef Py_INTERNAL_RUNTIME_H +#define Py_INTERNAL_RUNTIME_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +#include "pycore_atomic.h" /* _Py_atomic_address */ +#include "pycore_gil.h" // struct _gil_runtime_state + +/* ceval state */ + +struct _ceval_runtime_state { + /* Request for checking signals. It is shared by all interpreters (see + bpo-40513). Any thread of any interpreter can receive a signal, but only + the main thread of the main interpreter can handle signals: see + _Py_ThreadCanHandleSignals(). */ + _Py_atomic_int signals_pending; + struct _gil_runtime_state gil; +}; + +/* GIL state */ + +struct _gilstate_runtime_state { + /* bpo-26558: Flag to disable PyGILState_Check(). + If set to non-zero, PyGILState_Check() always return 1. */ + int check_enabled; + /* Assuming the current thread holds the GIL, this is the + PyThreadState for the current thread. */ + _Py_atomic_address tstate_current; + /* The single PyInterpreterState used by this process' + GILState implementation + */ + /* TODO: Given interp_main, it may be possible to kill this ref */ + PyInterpreterState *autoInterpreterState; + Py_tss_t autoTSSkey; +}; + +/* Runtime audit hook state */ + +typedef struct _Py_AuditHookEntry { + struct _Py_AuditHookEntry *next; + Py_AuditHookFunction hookCFunction; + void *userData; +} _Py_AuditHookEntry; + +/* Full Python runtime state */ + +typedef struct pyruntimestate { + /* Is running Py_PreInitialize()? */ + int preinitializing; + + /* Is Python preinitialized? Set to 1 by Py_PreInitialize() */ + int preinitialized; + + /* Is Python core initialized? Set to 1 by _Py_InitializeCore() */ + int core_initialized; + + /* Is Python fully initialized? Set to 1 by Py_Initialize() */ + int initialized; + + /* Set by Py_FinalizeEx(). Only reset to NULL if Py_Initialize() + is called again. + + Use _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing() + to access it, don't access it directly. */ + _Py_atomic_address _finalizing; + + struct pyinterpreters { + PyThread_type_lock mutex; + PyInterpreterState *head; + PyInterpreterState *main; + /* _next_interp_id is an auto-numbered sequence of small + integers. It gets initialized in _PyInterpreterState_Init(), + which is called in Py_Initialize(), and used in + PyInterpreterState_New(). A negative interpreter ID + indicates an error occurred. The main interpreter will + always have an ID of 0. Overflow results in a RuntimeError. + If that becomes a problem later then we can adjust, e.g. by + using a Python int. */ + int64_t next_id; + } interpreters; + // XXX Remove this field once we have a tp_* slot. + struct _xidregistry { + PyThread_type_lock mutex; + struct _xidregitem *head; + } xidregistry; + + unsigned long main_thread; + +#define NEXITFUNCS 32 + void (*exitfuncs[NEXITFUNCS])(void); + int nexitfuncs; + + struct _ceval_runtime_state ceval; + struct _gilstate_runtime_state gilstate; + + PyPreConfig preconfig; + + Py_OpenCodeHookFunction open_code_hook; + void *open_code_userdata; + _Py_AuditHookEntry *audit_hook_head; + + // XXX Consolidate globals found via the check-c-globals script. +} _PyRuntimeState; + +#define _PyRuntimeState_INIT \ + {.preinitialized = 0, .core_initialized = 0, .initialized = 0} +/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */ + + +PyAPI_DATA(_PyRuntimeState) _PyRuntime; + +PyAPI_FUNC(PyStatus) _PyRuntimeState_Init(_PyRuntimeState *runtime); +PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *runtime); + +#ifdef HAVE_FORK +PyAPI_FUNC(void) _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime); +#endif + +/* Initialize _PyRuntimeState. + Return NULL on success, or return an error message on failure. */ +PyAPI_FUNC(PyStatus) _PyRuntime_Initialize(void); + +PyAPI_FUNC(void) _PyRuntime_Finalize(void); + + +static inline PyThreadState* +_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) { + return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->_finalizing); +} + +static inline void +_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) { + _Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate); +} + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_RUNTIME_H */ diff --git a/src/external/windows/include/python/internal/pycore_sysmodule.h b/src/external/windows/include/python/internal/pycore_sysmodule.h new file mode 100755 index 00000000..363eb873 --- /dev/null +++ b/src/external/windows/include/python/internal/pycore_sysmodule.h @@ -0,0 +1,24 @@ +#ifndef Py_INTERNAL_SYSMODULE_H +#define Py_INTERNAL_SYSMODULE_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef Py_BUILD_CORE +# error "this header requires Py_BUILD_CORE define" +#endif + +PyAPI_FUNC(int) _PySys_Audit( + PyThreadState *tstate, + const char *event, + const char *argFormat, + ...); + +/* We want minimal exposure of this function, so use extern rather than + PyAPI_FUNC() to not export the symbol. */ +extern void _PySys_ClearAuditHooks(PyThreadState *tstate); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_INTERNAL_SYSMODULE_H */ diff --git a/src/external/windows/include/python/internal/pycore_traceback.h b/src/external/windows/include/python/internal/pycore_traceback.h index 701a83c1..274e2d0d 100755 --- a/src/external/windows/include/python/internal/pycore_traceback.h +++ b/src/external/windows/include/python/internal/pycore_traceback.h @@ -8,7 +8,8 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "pystate.h" /* PyInterpreterState */ +/* Forward declaration */ +struct _is; /* Write the Python traceback into the file 'fd'. For example: @@ -56,7 +57,7 @@ PyAPI_FUNC(void) _Py_DumpTraceback( PyAPI_FUNC(const char*) _Py_DumpTracebackThreads( int fd, - PyInterpreterState *interp, + struct _is *interp, PyThreadState *current_tstate); /* Write a Unicode object into the file descriptor fd. Encode the string to @@ -88,7 +89,7 @@ PyAPI_FUNC(void) _Py_DumpHexadecimal( PyAPI_FUNC(PyObject*) _PyTraceBack_FromFrame( PyObject *tb_next, - struct _frame *frame); + PyFrameObject *frame); #ifdef __cplusplus } diff --git a/src/external/windows/include/python/internal/pycore_tupleobject.h b/src/external/windows/include/python/internal/pycore_tupleobject.h index 7607921a..10772fe3 100755 --- a/src/external/windows/include/python/internal/pycore_tupleobject.h +++ b/src/external/windows/include/python/internal/pycore_tupleobject.h @@ -8,7 +8,7 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "tupleobject.h" +#include "tupleobject.h" /* _PyTuple_CAST() */ #define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item) PyAPI_FUNC(PyObject *) _PyTuple_FromArray(PyObject *const *, Py_ssize_t); diff --git a/src/external/windows/include/python/internal/pycore_warnings.h b/src/external/windows/include/python/internal/pycore_warnings.h index 94277931..23c50d66 100755 --- a/src/external/windows/include/python/internal/pycore_warnings.h +++ b/src/external/windows/include/python/internal/pycore_warnings.h @@ -8,8 +8,6 @@ extern "C" { # error "this header requires Py_BUILD_CORE define" #endif -#include "object.h" - struct _warnings_runtime_state { /* Both 'filters' and 'onceregistry' can be set in warnings.py; get_warnings_attr() will reset these variables accordingly. */ @@ -19,6 +17,8 @@ struct _warnings_runtime_state { long filters_version; }; +extern PyStatus _PyWarnings_InitState(PyThreadState *tstate); + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/iterobject.h b/src/external/windows/include/python/iterobject.h index 610362ad..8022a6ea 100755 --- a/src/external/windows/include/python/iterobject.h +++ b/src/external/windows/include/python/iterobject.h @@ -7,14 +7,13 @@ extern "C" { PyAPI_DATA(PyTypeObject) PySeqIter_Type; PyAPI_DATA(PyTypeObject) PyCallIter_Type; -PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type; -#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type) +#define PySeqIter_Check(op) Py_IS_TYPE(op, &PySeqIter_Type) PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); -#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type) +#define PyCallIter_Check(op) Py_IS_TYPE(op, &PyCallIter_Type) PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); diff --git a/src/external/windows/include/python/listobject.h b/src/external/windows/include/python/listobject.h index 867f179d..28273493 100755 --- a/src/external/windows/include/python/listobject.h +++ b/src/external/windows/include/python/listobject.h @@ -1,16 +1,14 @@ +/* List object interface -/* List object interface */ + Another generally useful object type is a list of object pointers. + This is a mutable type: the list items can be changed, and items can be + added or removed. Out-of-range indices or non-list objects are ignored. -/* -Another generally useful object type is a list of object pointers. -This is a mutable type: the list items can be changed, and items can be -added or removed. Out-of-range indices or non-list objects are ignored. - -*** WARNING *** PyList_SetItem does not increment the new item's reference -count, but does decrement the reference count of the item it replaces, -if not nil. It does *decrement* the reference count if it is *not* -inserted in the list. Similarly, PyList_GetItem does not increment the -returned item's reference count. + WARNING: PyList_SetItem does not increment the new item's reference count, + but does decrement the reference count of the item it replaces, if not nil. + It does *decrement* the reference count if it is *not* inserted in the list. + Similarly, PyList_GetItem does not increment the returned item's reference + count. */ #ifndef Py_LISTOBJECT_H @@ -19,60 +17,33 @@ returned item's reference count. extern "C" { #endif -#ifndef Py_LIMITED_API -typedef struct { - PyObject_VAR_HEAD - /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ - PyObject **ob_item; - - /* ob_item contains space for 'allocated' elements. The number - * currently in use is ob_size. - * Invariants: - * 0 <= ob_size <= allocated - * len(list) == ob_size - * ob_item == NULL implies ob_size == allocated == 0 - * list.sort() temporarily sets allocated to -1 to detect mutations. - * - * Items must normally not be NULL, except during construction when - * the list is not yet visible outside the function that builds it. - */ - Py_ssize_t allocated; -} PyListObject; -#endif - PyAPI_DATA(PyTypeObject) PyList_Type; PyAPI_DATA(PyTypeObject) PyListIter_Type; PyAPI_DATA(PyTypeObject) PyListRevIter_Type; -PyAPI_DATA(PyTypeObject) PySortWrapper_Type; #define PyList_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS) -#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type) +#define PyList_CheckExact(op) Py_IS_TYPE(op, &PyList_Type) PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *); + PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t); PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *); + PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); + PyAPI_FUNC(int) PyList_Sort(PyObject *); PyAPI_FUNC(int) PyList_Reverse(PyObject *); PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *); -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); -PyAPI_FUNC(int) PyList_ClearFreeList(void); -PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out); -#endif - -/* Macro, trading safety for speed */ #ifndef Py_LIMITED_API -#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) -#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v)) -#define PyList_GET_SIZE(op) (assert(PyList_Check(op)),Py_SIZE(op)) -#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item) +# define Py_CPYTHON_LISTOBJECT_H +# include "cpython/listobject.h" +# undef Py_CPYTHON_LISTOBJECT_H #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/longobject.h b/src/external/windows/include/python/longobject.h index 962e22b5..3ff911a1 100755 --- a/src/external/windows/include/python/longobject.h +++ b/src/external/windows/include/python/longobject.h @@ -13,7 +13,7 @@ PyAPI_DATA(PyTypeObject) PyLong_Type; #define PyLong_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS) -#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type) +#define PyLong_CheckExact(op) Py_IS_TYPE(op, &PyLong_Type) PyAPI_FUNC(PyObject *) PyLong_FromLong(long); PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); @@ -74,7 +74,7 @@ PyAPI_FUNC(int) _PyLong_Size_t_Converter(PyObject *, void *); #endif /* Used by Python/mystrtoul.c, _PyBytes_FromHex(), - _PyBytes_DecodeEscapeRecode(), etc. */ + _PyBytes_DecodeEscape(), etc. */ #ifndef Py_LIMITED_API PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; #endif diff --git a/src/external/windows/include/python/memoryobject.h b/src/external/windows/include/python/memoryobject.h index 82c5f5bd..3a7f2c20 100755 --- a/src/external/windows/include/python/memoryobject.h +++ b/src/external/windows/include/python/memoryobject.h @@ -11,7 +11,7 @@ PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type; #endif PyAPI_DATA(PyTypeObject) PyMemoryView_Type; -#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type) +#define PyMemoryView_Check(op) Py_IS_TYPE(op, &PyMemoryView_Type) #ifndef Py_LIMITED_API /* Get a pointer to the memoryview's private copy of the exporter's buffer. */ diff --git a/src/external/windows/include/python/methodobject.h b/src/external/windows/include/python/methodobject.h index 2e502f04..a90a2b5f 100755 --- a/src/external/windows/include/python/methodobject.h +++ b/src/external/windows/include/python/methodobject.h @@ -13,7 +13,8 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyCFunction_Type; -#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type) +#define PyCFunction_CheckExact(op) Py_IS_TYPE(op, &PyCFunction_Type) +#define PyCFunction_Check(op) PyObject_TypeCheck(op, &PyCFunction_Type) typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t); @@ -22,31 +23,14 @@ typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *, PyObject *const *, Py_ssize_t, PyObject *); -typedef PyObject *(*PyNoArgsFunction)(PyObject *); +typedef PyObject *(*PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, + size_t, PyObject *); PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); -/* Macros for direct access to these values. Type checks are *not* - done, so use with care. */ -#ifndef Py_LIMITED_API -#define PyCFunction_GET_FUNCTION(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_meth) -#define PyCFunction_GET_SELF(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_flags & METH_STATIC ? \ - NULL : ((PyCFunctionObject *)func) -> m_self) -#define PyCFunction_GET_FLAGS(func) \ - (((PyCFunctionObject *)func) -> m_ml -> ml_flags) -#endif -PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); - -#ifndef Py_LIMITED_API -PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); -#endif +Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); struct PyMethodDef { const char *ml_name; /* The name of the built-in function/method */ @@ -61,6 +45,13 @@ typedef struct PyMethodDef PyMethodDef; PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL) +PyAPI_FUNC(PyObject *) PyCMethod_New(PyMethodDef *, PyObject *, + PyObject *, PyTypeObject *); +#endif + + /* Flag passed to newmethodobject */ /* #define METH_OLDARGS 0x0000 -- unsupported now */ #define METH_VARARGS 0x0001 @@ -93,36 +84,24 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, #define METH_STACKLESS 0x0000 #endif -#ifndef Py_LIMITED_API -typedef struct { - PyObject_HEAD - PyMethodDef *m_ml; /* Description of the C function to call */ - PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ - PyObject *m_module; /* The __module__ attribute, can be anything */ - PyObject *m_weakreflist; /* List of weak references */ - vectorcallfunc vectorcall; -} PyCFunctionObject; +/* METH_METHOD means the function stores an + * additional reference to the class that defines it; + * both self and class are passed to it. + * It uses PyCMethodObject instead of PyCFunctionObject. + * May not be combined with METH_NOARGS, METH_O, METH_CLASS or METH_STATIC. + */ -PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict( - PyMethodDef *method, - PyObject *self, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwargs); - -PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords( - PyMethodDef *method, - PyObject *self, - PyObject *const *args, - Py_ssize_t nargs, - PyObject *kwnames); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +#define METH_METHOD 0x0200 #endif -PyAPI_FUNC(int) PyCFunction_ClearFreeList(void); #ifndef Py_LIMITED_API -PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out); -PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out); + +#define Py_CPYTHON_METHODOBJECT_H +#include "cpython/methodobject.h" +#undef Py_CPYTHON_METHODOBJECT_H + #endif #ifdef __cplusplus diff --git a/src/external/windows/include/python/modsupport.h b/src/external/windows/include/python/modsupport.h index 51f112b1..79911626 100755 --- a/src/external/windows/include/python/modsupport.h +++ b/src/external/windows/include/python/modsupport.h @@ -60,9 +60,12 @@ PyAPI_FUNC(int) _PyArg_UnpackStack( ...); PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs); +PyAPI_FUNC(int) _PyArg_NoKwnames(const char *funcname, PyObject *kwnames); PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); #define _PyArg_NoKeywords(funcname, kwargs) \ ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs))) +#define _PyArg_NoKwnames(funcname, kwnames) \ + ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames))) #define _PyArg_NoPositional(funcname, args) \ ((args) == NULL || _PyArg_NoPositional((funcname), (args))) @@ -136,6 +139,10 @@ void _PyArg_Fini(void); PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long); PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +PyAPI_FUNC(int) PyModule_AddType(PyObject *module, PyTypeObject *type); +#endif /* Py_LIMITED_API */ #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c) #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c) diff --git a/src/external/windows/include/python/moduleobject.h b/src/external/windows/include/python/moduleobject.h index bba2d41f..f02e32bb 100755 --- a/src/external/windows/include/python/moduleobject.h +++ b/src/external/windows/include/python/moduleobject.h @@ -10,7 +10,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyModule_Type; #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type) -#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type) +#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type) #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(PyObject *) PyModule_NewObject( diff --git a/src/external/windows/include/python/node.h b/src/external/windows/include/python/node.h index a56e98be..8db6298d 100755 --- a/src/external/windows/include/python/node.h +++ b/src/external/windows/include/python/node.h @@ -31,7 +31,6 @@ PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n); #define NCH(n) ((n)->n_nchildren) #define CHILD(n, i) (&(n)->n_child[i]) -#define RCHILD(n, i) (CHILD(n, NCH(n) + i)) #define TYPE(n) ((n)->n_type) #define STR(n) ((n)->n_str) #define LINENO(n) ((n)->n_lineno) diff --git a/src/external/windows/include/python/object.h b/src/external/windows/include/python/object.h index 090bf58a..b07337f6 100755 --- a/src/external/windows/include/python/object.h +++ b/src/external/windows/include/python/object.h @@ -1,8 +1,6 @@ #ifndef Py_OBJECT_H #define Py_OBJECT_H -#include "pymem.h" /* _Py_tracemalloc_config */ - #ifdef __cplusplus extern "C" { #endif @@ -63,6 +61,9 @@ whose size is determined when the object is allocated. #error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG #endif +/* PyTypeObject structure is defined in cpython/object.h. + In Py_LIMITED_API, PyTypeObject is an opaque structure. */ +typedef struct _typeobject PyTypeObject; #ifdef Py_TRACE_REFS /* Define pointers to support a doubly-linked list of all live heap objects. */ @@ -104,11 +105,12 @@ whose size is determined when the object is allocated. typedef struct _object { _PyObject_HEAD_EXTRA Py_ssize_t ob_refcnt; - struct _typeobject *ob_type; + PyTypeObject *ob_type; } PyObject; /* Cast argument to PyObject* type. */ #define _PyObject_CAST(op) ((PyObject*)(op)) +#define _PyObject_CAST_CONST(op) ((const PyObject*)(op)) typedef struct { PyObject ob_base; @@ -122,6 +124,27 @@ typedef struct { #define Py_TYPE(ob) (_PyObject_CAST(ob)->ob_type) #define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size) +static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { + return ob->ob_type == type; +} +#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type) + +static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) { + ob->ob_refcnt = refcnt; +} +#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt) + +static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { + ob->ob_type = type; +} +#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type) + +static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) { + ob->ob_size = size; +} +#define Py_SET_SIZE(ob, size) _Py_SET_SIZE(_PyVarObject_CAST(ob), size) + + /* Type objects contain a string containing the type name (to help somewhat in debugging), the allocation parameters (see PyObject_New() and @@ -167,15 +190,8 @@ typedef PyObject *(*iternextfunc) (PyObject *); typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); typedef int (*initproc)(PyObject *, PyObject *, PyObject *); -typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *); -typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t); - -#ifdef Py_LIMITED_API -/* In Py_LIMITED_API, PyTypeObject is an opaque structure. */ -typedef struct _typeobject PyTypeObject; -#else -/* PyTypeObject is defined in cpython/object.h */ -#endif +typedef PyObject *(*newfunc)(PyTypeObject *, PyObject *, PyObject *); +typedef PyObject *(*allocfunc)(PyTypeObject *, Py_ssize_t); typedef struct{ int slot; /* slot id, see below */ @@ -195,30 +211,31 @@ PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*); PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*); #endif #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000 -PyAPI_FUNC(void*) PyType_GetSlot(struct _typeobject*, int); +PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int); +#endif +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +PyAPI_FUNC(PyObject*) PyType_FromModuleAndSpec(PyObject *, PyType_Spec *, PyObject *); +PyAPI_FUNC(PyObject *) PyType_GetModule(struct _typeobject *); +PyAPI_FUNC(void *) PyType_GetModuleState(struct _typeobject *); #endif /* Generic type check */ -PyAPI_FUNC(int) PyType_IsSubtype(struct _typeobject *, struct _typeobject *); +PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); #define PyObject_TypeCheck(ob, tp) \ - (Py_TYPE(ob) == (tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) + (Py_IS_TYPE(ob, tp) || PyType_IsSubtype(Py_TYPE(ob), (tp))) -PyAPI_DATA(struct _typeobject) PyType_Type; /* built-in 'type' */ -PyAPI_DATA(struct _typeobject) PyBaseObject_Type; /* built-in 'object' */ -PyAPI_DATA(struct _typeobject) PySuper_Type; /* built-in 'super' */ +PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */ +PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */ +PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */ -PyAPI_FUNC(unsigned long) PyType_GetFlags(struct _typeobject*); +PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*); -#define PyType_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) -#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type) - -PyAPI_FUNC(int) PyType_Ready(struct _typeobject *); -PyAPI_FUNC(PyObject *) PyType_GenericAlloc(struct _typeobject *, Py_ssize_t); -PyAPI_FUNC(PyObject *) PyType_GenericNew(struct _typeobject *, +PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); +PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t); +PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, PyObject *, PyObject *); PyAPI_FUNC(unsigned int) PyType_ClearCache(void); -PyAPI_FUNC(void) PyType_Modified(struct _typeobject *); +PyAPI_FUNC(void) PyType_Modified(PyTypeObject *); /* Generic operations on objects */ PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); @@ -235,8 +252,7 @@ PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); -PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, - PyObject *, PyObject *); +PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *); #endif @@ -290,7 +306,9 @@ given type object has a specified feature. /* Set if the type implements the vectorcall protocol (PEP 590) */ #ifndef Py_LIMITED_API -#define _Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11) +#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11) +// Backwards compatibility alias for API that was provisional in Python 3.8 +#define _Py_TPFLAGS_HAVE_VECTORCALL Py_TPFLAGS_HAVE_VECTORCALL #endif /* Set if the type is 'ready' -- fully initialized */ @@ -337,19 +355,14 @@ given type object has a specified feature. /* NOTE: The following flags reuse lower bits (removed as part of the * Python 3.0 transition). */ -/* The following flag is kept for compatibility. Starting with 3.8, - * binary compatibility of C extensions accross feature releases of +/* The following flag is kept for compatibility. Starting with 3.8, + * binary compatibility of C extensions across feature releases of * Python is not supported anymore, except when using the stable ABI. */ /* Type structure has tp_finalize member (3.4) */ #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) -#ifdef Py_LIMITED_API -# define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) -#endif -#define PyType_FastSubclass(t,f) PyType_HasFeature(t,f) - /* The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement @@ -379,94 +392,33 @@ decision that's up to the implementer of each new type so if you want, you can count such references to the type object.) */ -/* First define a pile of simple helper macros, one set per special - * build symbol. These either expand to the obvious things, or to - * nothing at all when the special mode isn't in effect. The main - * macros can later be defined just once then, yet expand to different - * things depending on which special build options are and aren't in effect. - * Trust me : while painful, this is 20x easier to understand than, - * e.g, defining _Py_NewReference five different times in a maze of nested - * #ifdefs (we used to do that -- it was impenetrable). - */ #ifdef Py_REF_DEBUG PyAPI_DATA(Py_ssize_t) _Py_RefTotal; PyAPI_FUNC(void) _Py_NegativeRefcount(const char *filename, int lineno, PyObject *op); -PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); -#define _Py_INC_REFTOTAL _Py_RefTotal++ -#define _Py_DEC_REFTOTAL _Py_RefTotal-- - -/* Py_REF_DEBUG also controls the display of refcounts and memory block - * allocations at the interactive prompt and at interpreter shutdown - */ -PyAPI_FUNC(void) _PyDebug_PrintTotalRefs(void); -#else -#define _Py_INC_REFTOTAL -#define _Py_DEC_REFTOTAL #endif /* Py_REF_DEBUG */ -#ifdef COUNT_ALLOCS -PyAPI_FUNC(void) _Py_inc_count(struct _typeobject *); -PyAPI_FUNC(void) _Py_dec_count(struct _typeobject *); -#define _Py_INC_TPALLOCS(OP) _Py_inc_count(Py_TYPE(OP)) -#define _Py_INC_TPFREES(OP) _Py_dec_count(Py_TYPE(OP)) -#define _Py_DEC_TPFREES(OP) Py_TYPE(OP)->tp_frees-- -#define _Py_COUNT_ALLOCS_COMMA , -#else -#define _Py_INC_TPALLOCS(OP) -#define _Py_INC_TPFREES(OP) -#define _Py_DEC_TPFREES(OP) -#define _Py_COUNT_ALLOCS_COMMA -#endif /* COUNT_ALLOCS */ - -/* Update the Python traceback of an object. This function must be called - when a memory block is reused from a free list. */ -PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op); - -#ifdef Py_TRACE_REFS -/* Py_TRACE_REFS is such major surgery that we call external routines. */ -PyAPI_FUNC(void) _Py_NewReference(PyObject *); -PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); -PyAPI_FUNC(void) _Py_PrintReferences(FILE *); -PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); -PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); -#else -/* Without Py_TRACE_REFS, there's little enough to do that we expand code - inline. */ -static inline void _Py_NewReference(PyObject *op) -{ - if (_Py_tracemalloc_config.tracing) { - _PyTraceMalloc_NewReference(op); - } - _Py_INC_TPALLOCS(op); - _Py_INC_REFTOTAL; - Py_REFCNT(op) = 1; -} - -static inline void _Py_ForgetReference(PyObject *op) -{ - (void)op; /* may be unused, shut up -Wunused-parameter */ - _Py_INC_TPFREES(op); -} -#endif /* !Py_TRACE_REFS */ - - PyAPI_FUNC(void) _Py_Dealloc(PyObject *); static inline void _Py_INCREF(PyObject *op) { - _Py_INC_REFTOTAL; +#ifdef Py_REF_DEBUG + _Py_RefTotal++; +#endif op->ob_refcnt++; } #define Py_INCREF(op) _Py_INCREF(_PyObject_CAST(op)) -static inline void _Py_DECREF(const char *filename, int lineno, - PyObject *op) +static inline void _Py_DECREF( +#ifdef Py_REF_DEBUG + const char *filename, int lineno, +#endif + PyObject *op) { - (void)filename; /* may be unused, shut up -Wunused-parameter */ - (void)lineno; /* may be unused, shut up -Wunused-parameter */ - _Py_DEC_REFTOTAL; +#ifdef Py_REF_DEBUG + _Py_RefTotal--; +#endif if (--op->ob_refcnt != 0) { #ifdef Py_REF_DEBUG if (op->ob_refcnt < 0) { @@ -479,7 +431,11 @@ static inline void _Py_DECREF(const char *filename, int lineno, } } -#define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) +#ifdef Py_REF_DEBUG +# define Py_DECREF(op) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) +#else +# define Py_DECREF(op) _Py_DECREF(_PyObject_CAST(op)) +#endif /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear @@ -654,99 +610,38 @@ it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at times. */ - -/* Trashcan mechanism, thanks to Christian Tismer. - -When deallocating a container object, it's possible to trigger an unbounded -chain of deallocations, as each Py_DECREF in turn drops the refcount on "the -next" object in the chain to 0. This can easily lead to stack overflows, -especially in threads (which typically have less stack space to work with). - -A container object can avoid this by bracketing the body of its tp_dealloc -function with a pair of macros: - -static void -mytype_dealloc(mytype *p) -{ - ... declarations go here ... - - PyObject_GC_UnTrack(p); // must untrack first - Py_TRASHCAN_BEGIN(p, mytype_dealloc) - ... The body of the deallocator goes here, including all calls ... - ... to Py_DECREF on contained objects. ... - Py_TRASHCAN_END // there should be no code after this -} - -CAUTION: Never return from the middle of the body! If the body needs to -"get out early", put a label immediately before the Py_TRASHCAN_END -call, and goto it. Else the call-depth counter (see below) will stay -above 0 forever, and the trashcan will never get emptied. - -How it works: The BEGIN macro increments a call-depth counter. So long -as this counter is small, the body of the deallocator is run directly without -further ado. But if the counter gets large, it instead adds p to a list of -objects to be deallocated later, skips the body of the deallocator, and -resumes execution after the END macro. The tp_dealloc routine then returns -without deallocating anything (and so unbounded call-stack depth is avoided). - -When the call stack finishes unwinding again, code generated by the END macro -notices this, and calls another routine to deallocate all the objects that -may have been added to the list of deferred deallocations. In effect, a -chain of N deallocations is broken into (N-1)/(PyTrash_UNWIND_LEVEL-1) pieces, -with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. - -Since the tp_dealloc of a subclass typically calls the tp_dealloc of the base -class, we need to ensure that the trashcan is only triggered on the tp_dealloc -of the actual class being deallocated. Otherwise we might end up with a -partially-deallocated object. To check this, the tp_dealloc function must be -passed as second argument to Py_TRASHCAN_BEGIN(). -*/ - -/* The new thread-safe private API, invoked by the macros below. */ -PyAPI_FUNC(void) _PyTrash_thread_deposit_object(PyObject*); -PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void); - -#define PyTrash_UNWIND_LEVEL 50 - -#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \ - do { \ - PyThreadState *_tstate = NULL; \ - /* If "cond" is false, then _tstate remains NULL and the deallocator \ - * is run normally without involving the trashcan */ \ - if (cond) { \ - _tstate = PyThreadState_GET(); \ - if (_tstate->trash_delete_nesting >= PyTrash_UNWIND_LEVEL) { \ - /* Store the object (to be deallocated later) and jump past \ - * Py_TRASHCAN_END, skipping the body of the deallocator */ \ - _PyTrash_thread_deposit_object(_PyObject_CAST(op)); \ - break; \ - } \ - ++_tstate->trash_delete_nesting; \ - } - /* The body of the deallocator is here. */ -#define Py_TRASHCAN_END \ - if (_tstate) { \ - --_tstate->trash_delete_nesting; \ - if (_tstate->trash_delete_later && _tstate->trash_delete_nesting <= 0) \ - _PyTrash_thread_destroy_chain(); \ - } \ - } while (0); - -#define Py_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_BEGIN_CONDITION(op, \ - Py_TYPE(op)->tp_dealloc == (destructor)(dealloc)) - -/* For backwards compatibility, these macros enable the trashcan - * unconditionally */ -#define Py_TRASHCAN_SAFE_BEGIN(op) Py_TRASHCAN_BEGIN_CONDITION(op, 1) -#define Py_TRASHCAN_SAFE_END(op) Py_TRASHCAN_END - - #ifndef Py_LIMITED_API # define Py_CPYTHON_OBJECT_H # include "cpython/object.h" # undef Py_CPYTHON_OBJECT_H #endif + +static inline int +PyType_HasFeature(PyTypeObject *type, unsigned long feature) +{ + unsigned long flags; +#ifdef Py_LIMITED_API + // PyTypeObject is opaque in the limited C API + flags = PyType_GetFlags(type); +#else + flags = type->tp_flags; +#endif + return ((flags & feature) != 0); +} + +#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag) + +static inline int _PyType_Check(PyObject *op) { + return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS); +} +#define PyType_Check(op) _PyType_Check(_PyObject_CAST(op)) + +static inline int _PyType_CheckExact(PyObject *op) { + return Py_IS_TYPE(op, &PyType_Type); +} +#define PyType_CheckExact(op) _PyType_CheckExact(_PyObject_CAST(op)) + #ifdef __cplusplus } #endif diff --git a/src/external/windows/include/python/objimpl.h b/src/external/windows/include/python/objimpl.h index 02f460b6..3045213e 100755 --- a/src/external/windows/include/python/objimpl.h +++ b/src/external/windows/include/python/objimpl.h @@ -122,103 +122,32 @@ PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); -#define PyObject_New(type, typeobj) \ - ( (type *) _PyObject_New(typeobj) ) +#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj)) + +// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly +// PyObject_MALLOC() with _PyObject_SIZE(). +#define PyObject_NEW(type, typeobj) PyObject_New(type, typeobj) + #define PyObject_NewVar(type, typeobj, n) \ ( (type *) _PyObject_NewVar((typeobj), (n)) ) -/* Inline functions trading binary compatibility for speed: - PyObject_INIT() is the fast version of PyObject_Init(), and - PyObject_INIT_VAR() is the fast version of PyObject_InitVar. - See also pymem.h. +// Alias to PyObject_New(). In Python 3.8, PyObject_NEW() called directly +// PyObject_MALLOC() with _PyObject_VAR_SIZE(). +#define PyObject_NEW_VAR(type, typeobj, n) PyObject_NewVar(type, typeobj, n) - These inline functions expect non-NULL object pointers. */ -static inline PyObject* -_PyObject_INIT(PyObject *op, PyTypeObject *typeobj) -{ - assert(op != NULL); - Py_TYPE(op) = typeobj; - if (PyType_GetFlags(typeobj) & Py_TPFLAGS_HEAPTYPE) { - Py_INCREF(typeobj); - } - _Py_NewReference(op); - return op; -} -#define PyObject_INIT(op, typeobj) \ - _PyObject_INIT(_PyObject_CAST(op), (typeobj)) - -static inline PyVarObject* -_PyObject_INIT_VAR(PyVarObject *op, PyTypeObject *typeobj, Py_ssize_t size) -{ - assert(op != NULL); - Py_SIZE(op) = size; - PyObject_INIT((PyObject *)op, typeobj); - return op; -} - -#define PyObject_INIT_VAR(op, typeobj, size) \ - _PyObject_INIT_VAR(_PyVarObject_CAST(op), (typeobj), (size)) - -#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) - -/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a - vrbl-size object with nitems items, exclusive of gc overhead (if any). The - value is rounded up to the closest multiple of sizeof(void *), in order to - ensure that pointer fields at the end of the object are correctly aligned - for the platform (this is of special importance for subclasses of, e.g., - str or int, so that pointers can be stored after the embedded data). - - Note that there's no memory wastage in doing this, as malloc has to - return (at worst) pointer-aligned memory anyway. -*/ -#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 -# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" +#ifdef Py_LIMITED_API +/* Define PyObject_INIT() and PyObject_INIT_VAR() as aliases to PyObject_Init() + and PyObject_InitVar() in the limited C API for compatibility with the + CPython C API. */ +# define PyObject_INIT(op, typeobj) \ + PyObject_Init(_PyObject_CAST(op), (typeobj)) +# define PyObject_INIT_VAR(op, typeobj, size) \ + PyObject_InitVar(_PyVarObject_CAST(op), (typeobj), (size)) +#else +/* PyObject_INIT() and PyObject_INIT_VAR() are defined in cpython/objimpl.h */ #endif -#define _PyObject_VAR_SIZE(typeobj, nitems) \ - _Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \ - (nitems)*(typeobj)->tp_itemsize, \ - SIZEOF_VOID_P) - -#define PyObject_NEW(type, typeobj) \ -( (type *) PyObject_Init( \ - (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) ) - -#define PyObject_NEW_VAR(type, typeobj, n) \ -( (type *) PyObject_InitVar( \ - (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\ - (typeobj), (n)) ) - -/* This example code implements an object constructor with a custom - allocator, where PyObject_New is inlined, and shows the important - distinction between two steps (at least): - 1) the actual allocation of the object storage; - 2) the initialization of the Python specific fields - in this storage with PyObject_{Init, InitVar}. - - PyObject * - YourObject_New(...) - { - PyObject *op; - - op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); - if (op == NULL) - return PyErr_NoMemory(); - - PyObject_Init(op, &YourTypeStruct); - - op->ob_field = value; - ... - return op; - } - - Note that in C++, the use of the new operator usually implies that - the 1st step is performed automatically for you, so in a C++ class - constructor you would start directly with PyObject_Init/InitVar -*/ - - /* * Garbage Collection Support @@ -257,6 +186,8 @@ PyAPI_FUNC(void) PyObject_GC_Del(void *); #define PyObject_GC_NewVar(type, typeobj, n) \ ( (type *) _PyObject_GC_NewVar((typeobj), (n)) ) +PyAPI_FUNC(int) PyObject_GC_IsTracked(PyObject *); +PyAPI_FUNC(int) PyObject_GC_IsFinalized(PyObject *); /* Utility macro to help write tp_traverse functions. * To use this macro, the tp_traverse function must name its arguments diff --git a/src/external/windows/include/python/odictobject.h b/src/external/windows/include/python/odictobject.h index a5570cba..881e7ebc 100755 --- a/src/external/windows/include/python/odictobject.h +++ b/src/external/windows/include/python/odictobject.h @@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyODictItems_Type; PyAPI_DATA(PyTypeObject) PyODictValues_Type; #define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type) -#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type) +#define PyODict_CheckExact(op) Py_IS_TYPE(op, &PyODict_Type) #define PyODict_SIZE(op) PyDict_GET_SIZE((op)) PyAPI_FUNC(PyObject *) PyODict_New(void); diff --git a/src/external/windows/include/python/opcode.h b/src/external/windows/include/python/opcode.h index cd8f3ad1..f86c2f93 100755 --- a/src/external/windows/include/python/opcode.h +++ b/src/external/windows/include/python/opcode.h @@ -30,10 +30,11 @@ extern "C" { #define BINARY_TRUE_DIVIDE 27 #define INPLACE_FLOOR_DIVIDE 28 #define INPLACE_TRUE_DIVIDE 29 +#define RERAISE 48 +#define WITH_EXCEPT_START 49 #define GET_AITER 50 #define GET_ANEXT 51 #define BEFORE_ASYNC_WITH 52 -#define BEGIN_FINALLY 53 #define END_ASYNC_FOR 54 #define INPLACE_ADD 55 #define INPLACE_SUBTRACT 56 @@ -53,19 +54,18 @@ extern "C" { #define LOAD_BUILD_CLASS 71 #define YIELD_FROM 72 #define GET_AWAITABLE 73 +#define LOAD_ASSERTION_ERROR 74 #define INPLACE_LSHIFT 75 #define INPLACE_RSHIFT 76 #define INPLACE_AND 77 #define INPLACE_XOR 78 #define INPLACE_OR 79 -#define WITH_CLEANUP_START 81 -#define WITH_CLEANUP_FINISH 82 +#define LIST_TO_TUPLE 82 #define RETURN_VALUE 83 #define IMPORT_STAR 84 #define SETUP_ANNOTATIONS 85 #define YIELD_VALUE 86 #define POP_BLOCK 87 -#define END_FINALLY 88 #define POP_EXCEPT 89 #define HAVE_ARGUMENT 90 #define STORE_NAME 90 @@ -94,6 +94,9 @@ extern "C" { #define POP_JUMP_IF_FALSE 114 #define POP_JUMP_IF_TRUE 115 #define LOAD_GLOBAL 116 +#define IS_OP 117 +#define CONTAINS_OP 118 +#define JUMP_IF_NOT_EXC_MATCH 121 #define SETUP_FINALLY 122 #define LOAD_FAST 124 #define STORE_FAST 125 @@ -114,20 +117,16 @@ extern "C" { #define SET_ADD 146 #define MAP_ADD 147 #define LOAD_CLASSDEREF 148 -#define BUILD_LIST_UNPACK 149 -#define BUILD_MAP_UNPACK 150 -#define BUILD_MAP_UNPACK_WITH_CALL 151 -#define BUILD_TUPLE_UNPACK 152 -#define BUILD_SET_UNPACK 153 #define SETUP_ASYNC_WITH 154 #define FORMAT_VALUE 155 #define BUILD_CONST_KEY_MAP 156 #define BUILD_STRING 157 -#define BUILD_TUPLE_UNPACK_WITH_CALL 158 #define LOAD_METHOD 160 #define CALL_METHOD 161 -#define CALL_FINALLY 162 -#define POP_FINALLY 163 +#define LIST_EXTEND 162 +#define SET_UPDATE 163 +#define DICT_MERGE 164 +#define DICT_UPDATE 165 /* EXCEPT_HANDLER is a special, implicit block type which is created when entering an except handler. It is not an opcode but we define it here @@ -135,11 +134,6 @@ extern "C" { remaining private.*/ #define EXCEPT_HANDLER 257 - -enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE, - PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN, - PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; - #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) #ifdef __cplusplus diff --git a/src/external/windows/include/python/patchlevel.h b/src/external/windows/include/python/patchlevel.h index 627a5337..afb4c012 100755 --- a/src/external/windows/include/python/patchlevel.h +++ b/src/external/windows/include/python/patchlevel.h @@ -17,13 +17,13 @@ /* Version parsed out into numeric values */ /*--start constants--*/ #define PY_MAJOR_VERSION 3 -#define PY_MINOR_VERSION 8 -#define PY_MICRO_VERSION 5 +#define PY_MINOR_VERSION 9 +#define PY_MICRO_VERSION 7 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.8.5" +#define PY_VERSION "3.9.7" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/src/external/windows/include/python/picklebufobject.h b/src/external/windows/include/python/picklebufobject.h index 1f13a98a..5d0b0cfa 100755 --- a/src/external/windows/include/python/picklebufobject.h +++ b/src/external/windows/include/python/picklebufobject.h @@ -12,7 +12,7 @@ extern "C" { PyAPI_DATA(PyTypeObject) PyPickleBuffer_Type; -#define PyPickleBuffer_Check(op) (Py_TYPE(op) == &PyPickleBuffer_Type) +#define PyPickleBuffer_Check(op) Py_IS_TYPE(op, &PyPickleBuffer_Type) /* Create a PickleBuffer redirecting to the given buffer-enabled object */ PyAPI_FUNC(PyObject *) PyPickleBuffer_FromObject(PyObject *); diff --git a/src/external/windows/include/python/py_curses.h b/src/external/windows/include/python/py_curses.h index 4bcd27ea..b65aaa7b 100755 --- a/src/external/windows/include/python/py_curses.h +++ b/src/external/windows/include/python/py_curses.h @@ -64,7 +64,7 @@ typedef struct { char *encoding; } PyCursesWindowObject; -#define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type) +#define PyCursesWindow_Check(v) Py_IS_TYPE(v, &PyCursesWindow_Type) #define PyCurses_CAPSULE_NAME "_curses._C_API" @@ -97,4 +97,3 @@ static const char catchall_NULL[] = "curses function returned NULL"; #endif /* !defined(Py_CURSES_H) */ - diff --git a/src/external/windows/include/python/pycapsule.h b/src/external/windows/include/python/pycapsule.h index 358501e3..9387a1c7 100755 --- a/src/external/windows/include/python/pycapsule.h +++ b/src/external/windows/include/python/pycapsule.h @@ -22,7 +22,7 @@ PyAPI_DATA(PyTypeObject) PyCapsule_Type; typedef void (*PyCapsule_Destructor)(PyObject *); -#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type) +#define PyCapsule_CheckExact(op) Py_IS_TYPE(op, &PyCapsule_Type) PyAPI_FUNC(PyObject *) PyCapsule_New( diff --git a/src/external/windows/include/python/pyconfig.h b/src/external/windows/include/python/pyconfig.h index 8c77b4f7..0d5ac77f 100755 --- a/src/external/windows/include/python/pyconfig.h +++ b/src/external/windows/include/python/pyconfig.h @@ -135,9 +135,9 @@ WIN32 is still required for the locale module. #endif /* MS_WIN64 */ /* set the version macros for the windows headers */ -/* Python 3.5+ requires Windows Vista or greater */ -#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */ -#define Py_NTDDI NTDDI_VISTA +/* Python 3.9+ requires Windows 8 or greater */ +#define Py_WINVER 0x0602 /* _WIN32_WINNT_WIN8 */ +#define Py_NTDDI NTDDI_WIN8 /* We only set these values when building Python - we don't want to force these values on extensions, as that will affect the prototypes and @@ -193,12 +193,6 @@ typedef int pid_t; #define Py_IS_NAN _isnan #define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X)) #define Py_IS_FINITE(X) _finite(X) -#define copysign _copysign - -/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/ -#if _MSC_VER >= 1400 && _MSC_VER < 1600 -#define HAVE_SXS 1 -#endif /* define some ANSI types that are not defined in earlier Win headers */ #if _MSC_VER >= 1200 @@ -274,11 +268,11 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ file in their Makefile (other compilers are generally taken care of by distutils.) */ # if defined(_DEBUG) -# pragma comment(lib,"python38_d.lib") +# pragma comment(lib,"python39_d.lib") # elif defined(Py_LIMITED_API) # pragma comment(lib,"python3.lib") # else -# pragma comment(lib,"python38.lib") +# pragma comment(lib,"python39.lib") # endif /* _DEBUG */ # endif /* _MSC_VER */ # endif /* Py_BUILD_CORE */ @@ -296,7 +290,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ # define SIZEOF_HKEY 8 # define SIZEOF_SIZE_T 8 /* configure.ac defines HAVE_LARGEFILE_SUPPORT iff - sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t). + sizeof(off_t) > sizeof(long), and sizeof(long long) >= sizeof(off_t). On Win64 the second condition is not true, but if fpos_t replaces off_t then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64 should define this. */ @@ -688,4 +682,6 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */ #define HAVE_X509_VERIFY_PARAM_SET1_HOST 1 +#define PLATLIBDIR "lib" + #endif /* !Py_CONFIG_H */ diff --git a/src/external/windows/include/python/pyctype.h b/src/external/windows/include/python/pyctype.h index ee22795a..8f4bd79c 100755 --- a/src/external/windows/include/python/pyctype.h +++ b/src/external/windows/include/python/pyctype.h @@ -1,6 +1,9 @@ #ifndef Py_LIMITED_API #ifndef PYCTYPE_H #define PYCTYPE_H +#ifdef __cplusplus +extern "C" { +#endif #define PY_CTF_LOWER 0x01 #define PY_CTF_UPPER 0x02 @@ -29,5 +32,8 @@ PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256]; #define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)]) #define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)]) +#ifdef __cplusplus +} +#endif #endif /* !PYCTYPE_H */ #endif /* !Py_LIMITED_API */ diff --git a/src/external/windows/include/python/pydebug.h b/src/external/windows/include/python/pydebug.h index c983d0a9..e34cf907 100755 --- a/src/external/windows/include/python/pydebug.h +++ b/src/external/windows/include/python/pydebug.h @@ -5,8 +5,6 @@ extern "C" { #endif -/* These global variable are defined in pylifecycle.c */ -/* XXX (ncoghlan): move these declarations to pylifecycle.h? */ PyAPI_DATA(int) Py_DebugFlag; PyAPI_DATA(int) Py_VerboseFlag; PyAPI_DATA(int) Py_QuietFlag; diff --git a/src/external/windows/include/python/pyerrors.h b/src/external/windows/include/python/pyerrors.h index 6b7895f4..bd634e71 100755 --- a/src/external/windows/include/python/pyerrors.h +++ b/src/external/windows/include/python/pyerrors.h @@ -4,6 +4,8 @@ extern "C" { #endif +#include // va_list + /* Error handling definitions */ PyAPI_FUNC(void) PyErr_SetNone(PyObject *); @@ -21,7 +23,11 @@ PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **); PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *); #endif -/* Defined in Python/pylifecycle.c */ +/* Defined in Python/pylifecycle.c + + The Py_FatalError() function is replaced with a macro which logs + automatically the name of the current function, unless the Py_LIMITED_API + macro is defined. */ PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message); #if defined(Py_DEBUG) || defined(Py_LIMITED_API) @@ -54,11 +60,11 @@ PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *); PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)) #define PyExceptionInstance_Check(x) \ - PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) + PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS) PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *); -#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) +#define PyExceptionInstance_Class(x) ((PyObject*)Py_TYPE(x)) /* Predefined exceptions */ @@ -303,21 +309,6 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( const char *reason /* UTF-8 encoded string */ ); -/* These APIs aren't really part of the error implementation, but - often needed to format error messages; the native C lib APIs are - not available on all platforms, which is why we provide emulations - for those platforms in Python/mysnprintf.c, - WARNING: The return value of snprintf varies across platforms; do - not rely on any particular behavior; eventually the C99 defn may - be reliable. -*/ -#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF) -# define HAVE_SNPRINTF -# define snprintf _snprintf -# define vsnprintf _vsnprintf -#endif - -#include PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) Py_GCC_ATTRIBUTE((format(printf, 3, 4))); PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) diff --git a/src/external/windows/include/python/pyfpe.h b/src/external/windows/include/python/pyfpe.h index 30baacaa..d5a52617 100755 --- a/src/external/windows/include/python/pyfpe.h +++ b/src/external/windows/include/python/pyfpe.h @@ -1,5 +1,7 @@ #ifndef Py_PYFPE_H #define Py_PYFPE_H +/* Header excluded from the stable API */ +#ifndef Py_LIMITED_API /* These macros used to do something when Python was built with --with-fpectl, * but support for that was dropped in 3.7. We continue to define them though, @@ -9,4 +11,5 @@ #define PyFPE_START_PROTECT(err_string, leave_stmt) #define PyFPE_END_PROTECT(v) +#endif /* !defined(Py_LIMITED_API) */ #endif /* !Py_PYFPE_H */ diff --git a/src/external/windows/include/python/pyframe.h b/src/external/windows/include/python/pyframe.h new file mode 100755 index 00000000..a2576902 --- /dev/null +++ b/src/external/windows/include/python/pyframe.h @@ -0,0 +1,22 @@ +/* Limited C API of PyFrame API + * + * Include "frameobject.h" to get the PyFrameObject structure. + */ + +#ifndef Py_PYFRAME_H +#define Py_PYFRAME_H +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _frame PyFrameObject; + +/* Return the line of code the frame is currently executing. */ +PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *); + +PyAPI_FUNC(PyCodeObject *) PyFrame_GetCode(PyFrameObject *frame); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYFRAME_H */ diff --git a/src/external/windows/include/python/pyhash.h b/src/external/windows/include/python/pyhash.h index c6a14ffb..fe42fa8c 100755 --- a/src/external/windows/include/python/pyhash.h +++ b/src/external/windows/include/python/pyhash.h @@ -8,7 +8,9 @@ extern "C" { /* Helpers for hash functions */ #ifndef Py_LIMITED_API PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double); -PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*); +PyAPI_FUNC(Py_hash_t) _Py_HashPointer(const void*); +// Similar to _Py_HashPointer(), but don't replace -1 with -2 +PyAPI_FUNC(Py_hash_t) _Py_HashPointerRaw(const void*); PyAPI_FUNC(Py_hash_t) _Py_HashBytes(const void*, Py_ssize_t); #endif diff --git a/src/external/windows/include/python/pylifecycle.h b/src/external/windows/include/python/pylifecycle.h index d1b79ae6..2084b26b 100755 --- a/src/external/windows/include/python/pylifecycle.h +++ b/src/external/windows/include/python/pylifecycle.h @@ -32,6 +32,8 @@ PyAPI_FUNC(void) _Py_NO_RETURN Py_Exit(int); /* Bootstrap __main__ (defined in Modules/main.c) */ PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv); +PyAPI_FUNC(int) Py_FrozenMain(int argc, char **argv); + PyAPI_FUNC(int) Py_BytesMain(int argc, char **argv); /* In pathconfig.c */ diff --git a/src/external/windows/include/python/pymacro.h b/src/external/windows/include/python/pymacro.h index acd14da4..7bfee70e 100755 --- a/src/external/windows/include/python/pymacro.h +++ b/src/external/windows/include/python/pymacro.h @@ -100,7 +100,33 @@ # define Py_UNUSED(name) _unused_ ## name #endif -#define Py_UNREACHABLE() \ +#if defined(RANDALL_WAS_HERE) +# define Py_UNREACHABLE() \ + Py_FatalError( \ + "If you're seeing this, the code is in what I thought was\n" \ + "an unreachable state.\n\n" \ + "I could give you advice for what to do, but honestly, why\n" \ + "should you trust me? I clearly screwed this up. I'm writing\n" \ + "a message that should never appear, yet I know it will\n" \ + "probably appear someday.\n\n" \ + "On a deep level, I know I'm not up to this task.\n" \ + "I'm so sorry.\n" \ + "https://xkcd.com/2200") +#elif defined(Py_DEBUG) +# define Py_UNREACHABLE() \ + Py_FatalError( \ + "We've reached an unreachable state. Anything is possible.\n" \ + "The limits were in our heads all along. Follow your dreams.\n" \ + "https://xkcd.com/2200") +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define Py_UNREACHABLE() __builtin_unreachable() +#elif defined(__clang__) || defined(__INTEL_COMPILER) +# define Py_UNREACHABLE() __builtin_unreachable() +#elif defined(_MSC_VER) +# define Py_UNREACHABLE() __assume(0) +#else +# define Py_UNREACHABLE() \ Py_FatalError("Unreachable C code path reached") +#endif #endif /* Py_PYMACRO_H */ diff --git a/src/external/windows/include/python/pymath.h b/src/external/windows/include/python/pymath.h index f4a7f852..4d305990 100755 --- a/src/external/windows/include/python/pymath.h +++ b/src/external/windows/include/python/pymath.h @@ -125,7 +125,7 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); /* Py_IS_FINITE(X) * Return 1 if float or double arg is neither infinite nor NAN, else 0. - * Some compilers (e.g. VisualStudio) have intrisics for this, so a special + * Some compilers (e.g. VisualStudio) have intrinsics for this, so a special * macro for this particular test is useful * Note: PC/pyconfig.h defines Py_IS_FINITE as _finite */ @@ -227,4 +227,12 @@ PyAPI_FUNC(void) _Py_set_387controlword(unsigned short); * behavior. */ #define _Py_InIntegralTypeRange(type, v) (_Py_IntegralTypeMin(type) <= v && v <= _Py_IntegralTypeMax(type)) +/* Return the smallest integer k such that n < 2**k, or 0 if n == 0. + * Equivalent to floor(log2(x))+1. Also equivalent to: bitwidth_of_type - + * count_leading_zero_bits(x) + */ +#ifndef Py_LIMITED_API +PyAPI_FUNC(unsigned int) _Py_bit_length(unsigned long d); +#endif + #endif /* Py_PYMATH_H */ diff --git a/src/external/windows/include/python/pymem.h b/src/external/windows/include/python/pymem.h index c1837db7..a2c8c255 100755 --- a/src/external/windows/include/python/pymem.h +++ b/src/external/windows/include/python/pymem.h @@ -101,41 +101,6 @@ PyAPI_FUNC(void) PyMem_Free(void *ptr); #define PyMem_Del PyMem_Free #define PyMem_DEL PyMem_FREE -/* bpo-35053: expose _Py_tracemalloc_config for performance: - _Py_NewReference() needs an efficient check to test if tracemalloc is - tracing. - - It has to be defined in pymem.h, before object.h is included. */ -struct _PyTraceMalloc_Config { - /* Module initialized? - Variable protected by the GIL */ - enum { - TRACEMALLOC_NOT_INITIALIZED, - TRACEMALLOC_INITIALIZED, - TRACEMALLOC_FINALIZED - } initialized; - - /* Is tracemalloc tracing memory allocations? - Variable protected by the GIL */ - int tracing; - - /* limit of the number of frames in a traceback, 1 by default. - Variable protected by the GIL. */ - int max_nframe; - - /* use domain in trace key? - Variable protected by the GIL. */ - int use_domain; -}; - -PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config; - -#define _PyTraceMalloc_Config_INIT \ - {.initialized = TRACEMALLOC_NOT_INITIALIZED, \ - .tracing = 0, \ - .max_nframe = 1, \ - .use_domain = 0} - #ifndef Py_LIMITED_API # define Py_CPYTHON_PYMEM_H diff --git a/src/external/windows/include/python/pyport.h b/src/external/windows/include/python/pyport.h index 471cb7f1..49a67d90 100755 --- a/src/external/windows/include/python/pyport.h +++ b/src/external/windows/include/python/pyport.h @@ -133,8 +133,9 @@ typedef int Py_ssize_clean_t; /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf * format to convert an argument with the width of a size_t or Py_ssize_t. - * C99 introduced "z" for this purpose, but not all platforms support that; - * e.g., MS compilers use "I" instead. + * C99 introduced "z" for this purpose, but old MSVCs had not supported it. + * Since MSVC supports "z" since (at least) 2015, we can just use "z" + * for new code. * * These "high level" Python format functions interpret "z" correctly on * all platforms (Python interprets the format string itself, and does whatever @@ -152,19 +153,11 @@ typedef int Py_ssize_clean_t; * Py_ssize_t index; * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); * - * That will expand to %ld, or %Id, or to something else correct for a - * Py_ssize_t on the platform. + * That will expand to %zd or to something else correct for a Py_ssize_t on + * the platform. */ #ifndef PY_FORMAT_SIZE_T -# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) -# define PY_FORMAT_SIZE_T "" -# elif SIZEOF_SIZE_T == SIZEOF_LONG -# define PY_FORMAT_SIZE_T "l" -# elif defined(MS_WINDOWS) -# define PY_FORMAT_SIZE_T "I" -# else -# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" -# endif +# define PY_FORMAT_SIZE_T "z" #endif /* Py_LOCAL can be used instead of static to get the fastest possible calling @@ -520,6 +513,26 @@ extern "C" { #define Py_DEPRECATED(VERSION_UNUSED) #endif +#if defined(__clang__) +#define _Py_COMP_DIAG_PUSH _Pragma("clang diagnostic push") +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#define _Py_COMP_DIAG_POP _Pragma("clang diagnostic pop") +#elif defined(__GNUC__) \ + && ((__GNUC__ >= 5) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) +#define _Py_COMP_DIAG_PUSH _Pragma("GCC diagnostic push") +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#define _Py_COMP_DIAG_POP _Pragma("GCC diagnostic pop") +#elif defined(_MSC_VER) +#define _Py_COMP_DIAG_PUSH __pragma(warning(push)) +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS __pragma(warning(disable: 4996)) +#define _Py_COMP_DIAG_POP __pragma(warning(pop)) +#else +#define _Py_COMP_DIAG_PUSH +#define _Py_COMP_DIAG_IGNORE_DEPR_DECLS +#define _Py_COMP_DIAG_POP +#endif /* _Py_HOT_FUNCTION * The hot attribute on a function is used to inform the compiler that the @@ -645,16 +658,18 @@ extern char * _getpty(int *, int, mode_t, int); # define HAVE_DECLSPEC_DLL #endif +#include "exports.h" + /* only get special linkage if built as shared or platform is Cygwin */ #if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) # if defined(HAVE_DECLSPEC_DLL) # if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) -# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE -# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE /* module init functions inside the core need no external linkage */ /* except for Cygwin to handle embedding */ # if defined(__CYGWIN__) -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # else /* __CYGWIN__ */ # define PyMODINIT_FUNC PyObject* # endif /* __CYGWIN__ */ @@ -665,14 +680,14 @@ extern char * _getpty(int *, int, mode_t, int); /* failures similar to those described at the bottom of 4.1: */ /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ # if !defined(__CYGWIN__) -# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE +# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE # endif /* !__CYGWIN__ */ -# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE +# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE /* module init functions outside the core must be exported */ # if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* # else /* __cplusplus */ -# define PyMODINIT_FUNC __declspec(dllexport) PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # endif /* __cplusplus */ # endif /* Py_BUILD_CORE */ # endif /* HAVE_DECLSPEC_DLL */ @@ -680,16 +695,16 @@ extern char * _getpty(int *, int, mode_t, int); /* If no external linkage macros defined by now, create defaults */ #ifndef PyAPI_FUNC -# define PyAPI_FUNC(RTYPE) RTYPE +# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE #endif #ifndef PyAPI_DATA -# define PyAPI_DATA(RTYPE) extern RTYPE +# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE #endif #ifndef PyMODINIT_FUNC # if defined(__cplusplus) -# define PyMODINIT_FUNC extern "C" PyObject* +# define PyMODINIT_FUNC extern "C" Py_EXPORTED_SYMBOL PyObject* # else /* __cplusplus */ -# define PyMODINIT_FUNC PyObject* +# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* # endif /* __cplusplus */ #endif @@ -773,11 +788,11 @@ extern char * _getpty(int *, int, mode_t, int); */ #ifdef WORDS_BIGENDIAN -#define PY_BIG_ENDIAN 1 -#define PY_LITTLE_ENDIAN 0 +# define PY_BIG_ENDIAN 1 +# define PY_LITTLE_ENDIAN 0 #else -#define PY_BIG_ENDIAN 0 -#define PY_LITTLE_ENDIAN 1 +# define PY_BIG_ENDIAN 0 +# define PY_LITTLE_ENDIAN 1 #endif #ifdef Py_BUILD_CORE @@ -834,8 +849,9 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; #endif /* Mark a function which cannot return. Example: + PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); - PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void); */ + XLC support is intentionally omitted due to bpo-40244 */ #if defined(__clang__) || \ (defined(__GNUC__) && \ ((__GNUC__ >= 3) || \ @@ -847,4 +863,16 @@ extern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; # define _Py_NO_RETURN #endif + +// Preprocessor check for a builtin preprocessor function. Always return 0 +// if __has_builtin() macro is not defined. +// +// __has_builtin() is available on clang and GCC 10. +#ifdef __has_builtin +# define _Py__has_builtin(x) __has_builtin(x) +#else +# define _Py__has_builtin(x) 0 +#endif + + #endif /* Py_PYPORT_H */ diff --git a/src/external/windows/include/python/pystate.h b/src/external/windows/include/python/pystate.h index 956fc2e8..d9f31e36 100755 --- a/src/external/windows/include/python/pystate.h +++ b/src/external/windows/include/python/pystate.h @@ -7,27 +7,35 @@ extern "C" { #endif -#include "pythread.h" - /* This limitation is for performance and simplicity. If needed it can be removed (with effort). */ #define MAX_CO_EXTRA_USERS 255 /* Forward declarations for PyFrameObject, PyThreadState and PyInterpreterState */ -struct _frame; struct _ts; struct _is; /* struct _ts is defined in cpython/pystate.h */ typedef struct _ts PyThreadState; -/* struct _is is defined in internal/pycore_pystate.h */ +/* struct _is is defined in internal/pycore_interp.h */ typedef struct _is PyInterpreterState; PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void); PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *); PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +/* Get the current interpreter state. + + Issue a fatal error if there no current Python thread state or no current + interpreter. It cannot return NULL. + + The caller must hold the GIL. */ +PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Get(void); +#endif + #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000 /* New in 3.8 */ PyAPI_FUNC(PyObject *) PyInterpreterState_GetDict(PyInterpreterState *); @@ -50,7 +58,6 @@ PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*); PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); -PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); /* Get the current thread state. @@ -77,6 +84,13 @@ PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *); PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void); PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *); +#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000 +/* New in 3.9 */ +PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate); +PyAPI_FUNC(PyFrameObject*) PyThreadState_GetFrame(PyThreadState *tstate); +PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate); +#endif + typedef enum {PyGILState_LOCKED, PyGILState_UNLOCKED} PyGILState_STATE; diff --git a/src/external/windows/include/python/pythonrun.h b/src/external/windows/include/python/pythonrun.h index 8e86c402..ecd35c60 100755 --- a/src/external/windows/include/python/pythonrun.h +++ b/src/external/windows/include/python/pythonrun.h @@ -72,16 +72,23 @@ PyAPI_FUNC(struct _mod *) PyParser_ASTFromFileObject( #define PyParser_SimpleParseFile(FP, S, B) \ PyParser_SimpleParseFileFlags(FP, S, B, 0) #endif -PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, - int); + +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, int); #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000 +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlagsFilename(const char *, const char *, int, int); #endif -PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, - int, int); - +#ifndef Py_BUILD_CORE +Py_DEPRECATED(3.9) +#endif +PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, int, int); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, PyObject *, PyCompilerFlags *); diff --git a/src/external/windows/include/python/pythread.h b/src/external/windows/include/python/pythread.h index c9d73ded..739594a8 100755 --- a/src/external/windows/include/python/pythread.h +++ b/src/external/windows/include/python/pythread.h @@ -3,7 +3,6 @@ #define Py_PYTHREAD_H typedef void *PyThread_type_lock; -typedef void *PyThread_type_sema; #ifdef __cplusplus extern "C" { @@ -37,6 +36,15 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #define WAIT_LOCK 1 #define NOWAIT_LOCK 0 +#ifndef Py_LIMITED_API +#ifdef HAVE_FORK +/* Private function to reinitialize a lock at fork in the child process. + Reset the lock to the unlocked state. + Return 0 on success, return -1 on error. */ +PyAPI_FUNC(int) _PyThread_at_fork_reinit(PyThread_type_lock *lock); +#endif /* HAVE_FORK */ +#endif /* !Py_LIMITED_API */ + /* PY_TIMEOUT_T is the integral type used to specify timeouts when waiting on a lock (see PyThread_acquire_lock_timed() below). PY_TIMEOUT_MAX is the highest usable value (in microseconds) of that @@ -51,16 +59,16 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #if defined(_POSIX_THREADS) /* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000), convert microseconds to nanoseconds. */ -# define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000) +# define PY_TIMEOUT_MAX (LLONG_MAX / 1000) #elif defined (NT_THREADS) /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ -# if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX +# if 0xFFFFFFFFLL * 1000 < LLONG_MAX # define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000) # else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX # endif #else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX #endif diff --git a/src/external/windows/include/python/rangeobject.h b/src/external/windows/include/python/rangeobject.h index b9a136d0..d2105d02 100755 --- a/src/external/windows/include/python/rangeobject.h +++ b/src/external/windows/include/python/rangeobject.h @@ -19,7 +19,7 @@ PyAPI_DATA(PyTypeObject) PyRange_Type; PyAPI_DATA(PyTypeObject) PyRangeIter_Type; PyAPI_DATA(PyTypeObject) PyLongRangeIter_Type; -#define PyRange_Check(op) (Py_TYPE(op) == &PyRange_Type) +#define PyRange_Check(op) Py_IS_TYPE(op, &PyRange_Type) #ifdef __cplusplus } diff --git a/src/external/windows/include/python/setobject.h b/src/external/windows/include/python/setobject.h index b2f79639..24ae8f4d 100755 --- a/src/external/windows/include/python/setobject.h +++ b/src/external/windows/include/python/setobject.h @@ -70,7 +70,6 @@ PyAPI_DATA(PyObject *) _PySet_Dummy; PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash); PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); -PyAPI_FUNC(int) PySet_ClearFreeList(void); #endif /* Section excluded by Py_LIMITED_API */ @@ -88,18 +87,18 @@ PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key); PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set); PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset); -#define PyFrozenSet_CheckExact(ob) (Py_TYPE(ob) == &PyFrozenSet_Type) +#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE(ob, &PyFrozenSet_Type) #define PyAnySet_CheckExact(ob) \ - (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type) + (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type)) #define PyAnySet_Check(ob) \ - (Py_TYPE(ob) == &PySet_Type || Py_TYPE(ob) == &PyFrozenSet_Type || \ + (Py_IS_TYPE(ob, &PySet_Type) || Py_IS_TYPE(ob, &PyFrozenSet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) #define PySet_Check(ob) \ - (Py_TYPE(ob) == &PySet_Type || \ + (Py_IS_TYPE(ob, &PySet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PySet_Type)) #define PyFrozenSet_Check(ob) \ - (Py_TYPE(ob) == &PyFrozenSet_Type || \ + (Py_IS_TYPE(ob, &PyFrozenSet_Type) || \ PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type)) #ifdef __cplusplus diff --git a/src/external/windows/include/python/sliceobject.h b/src/external/windows/include/python/sliceobject.h index 7c778a55..c4150604 100755 --- a/src/external/windows/include/python/sliceobject.h +++ b/src/external/windows/include/python/sliceobject.h @@ -28,7 +28,7 @@ typedef struct { PyAPI_DATA(PyTypeObject) PySlice_Type; PyAPI_DATA(PyTypeObject) PyEllipsis_Type; -#define PySlice_Check(op) (Py_TYPE(op) == &PySlice_Type) +#define PySlice_Check(op) Py_IS_TYPE(op, &PySlice_Type) PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, PyObject* step); diff --git a/src/external/windows/include/python/structseq.h b/src/external/windows/include/python/structseq.h index 3a6b2693..e67bfda7 100755 --- a/src/external/windows/include/python/structseq.h +++ b/src/external/windows/include/python/structseq.h @@ -19,7 +19,7 @@ typedef struct PyStructSequence_Desc { int n_in_sequence; } PyStructSequence_Desc; -extern char* PyStructSequence_UnnamedField; +extern const char * const PyStructSequence_UnnamedField; #ifndef Py_LIMITED_API PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, diff --git a/src/external/windows/include/python/symtable.h b/src/external/windows/include/python/symtable.h index f1331722..5f490df2 100755 --- a/src/external/windows/include/python/symtable.h +++ b/src/external/windows/include/python/symtable.h @@ -69,7 +69,7 @@ typedef struct _symtable_entry { PyAPI_DATA(PyTypeObject) PySTEntry_Type; -#define PySTEntry_Check(op) (Py_TYPE(op) == &PySTEntry_Type) +#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type) PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *); diff --git a/src/external/windows/include/python/token.h b/src/external/windows/include/python/token.h index 092eebf3..80c3e251 100755 --- a/src/external/windows/include/python/token.h +++ b/src/external/windows/include/python/token.h @@ -78,6 +78,10 @@ extern "C" { #define ISTERMINAL(x) ((x) < NT_OFFSET) #define ISNONTERMINAL(x) ((x) >= NT_OFFSET) #define ISEOF(x) ((x) == ENDMARKER) +#define ISWHITESPACE(x) ((x) == ENDMARKER || \ + (x) == NEWLINE || \ + (x) == INDENT || \ + (x) == DEDENT) PyAPI_DATA(const char * const) _PyParser_TokenNames[]; /* Token names */ diff --git a/src/external/windows/include/python/traceback.h b/src/external/windows/include/python/traceback.h index 39eadf92..b4466f51 100755 --- a/src/external/windows/include/python/traceback.h +++ b/src/external/windows/include/python/traceback.h @@ -4,16 +4,14 @@ extern "C" { #endif -struct _frame; - /* Traceback interface */ -PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); +PyAPI_FUNC(int) PyTraceBack_Here(PyFrameObject *); PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); /* Reveal traceback type so we can typecheck traceback objects */ PyAPI_DATA(PyTypeObject) PyTraceBack_Type; -#define PyTraceBack_Check(v) (Py_TYPE(v) == &PyTraceBack_Type) +#define PyTraceBack_Check(v) Py_IS_TYPE(v, &PyTraceBack_Type) #ifndef Py_LIMITED_API diff --git a/src/external/windows/include/python/tupleobject.h b/src/external/windows/include/python/tupleobject.h index 4e0d1f12..19f9997e 100755 --- a/src/external/windows/include/python/tupleobject.h +++ b/src/external/windows/include/python/tupleobject.h @@ -25,7 +25,7 @@ PyAPI_DATA(PyTypeObject) PyTupleIter_Type; #define PyTuple_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS) -#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type) +#define PyTuple_CheckExact(op) Py_IS_TYPE(op, &PyTuple_Type) PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); @@ -34,8 +34,6 @@ PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); -PyAPI_FUNC(int) PyTuple_ClearFreeList(void); - #ifndef Py_LIMITED_API # define Py_CPYTHON_TUPLEOBJECT_H # include "cpython/tupleobject.h" diff --git a/src/external/windows/include/python/typeslots.h b/src/external/windows/include/python/typeslots.h index bf382f07..29111f94 100755 --- a/src/external/windows/include/python/typeslots.h +++ b/src/external/windows/include/python/typeslots.h @@ -1,7 +1,12 @@ /* Do not renumber the file; these numbers are part of the stable ABI. */ +#if defined(Py_LIMITED_API) /* Disabled, see #10181 */ #undef Py_bf_getbuffer #undef Py_bf_releasebuffer +#else +#define Py_bf_getbuffer 1 +#define Py_bf_releasebuffer 2 +#endif #define Py_mp_ass_subscript 3 #define Py_mp_length 4 #define Py_mp_subscript 5 diff --git a/src/external/windows/include/python/unicodeobject.h b/src/external/windows/include/python/unicodeobject.h index 28c600b6..4213945b 100755 --- a/src/external/windows/include/python/unicodeobject.h +++ b/src/external/windows/include/python/unicodeobject.h @@ -113,7 +113,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type; #define PyUnicode_Check(op) \ PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS) -#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type) +#define PyUnicode_CheckExact(op) Py_IS_TYPE(op, &PyUnicode_Type) /* --- Constants ---------------------------------------------------------- */ @@ -328,17 +328,6 @@ PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); -/* --- Free-list management ----------------------------------------------- */ - -/* Clear the free list used by the Unicode implementation. - - This can be used to release memory used for objects on the free - list back to the Python memory allocator. - -*/ - -PyAPI_FUNC(int) PyUnicode_ClearFreeList(void); - /* === Builtin Codecs ===================================================== Many of these APIs take two arguments encoding and errors. These diff --git a/src/external/windows/include/python/weakrefobject.h b/src/external/windows/include/python/weakrefobject.h index 87acf95c..36890820 100755 --- a/src/external/windows/include/python/weakrefobject.h +++ b/src/external/windows/include/python/weakrefobject.h @@ -46,10 +46,10 @@ PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; #define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) #define PyWeakref_CheckRefExact(op) \ - (Py_TYPE(op) == &_PyWeakref_RefType) + Py_IS_TYPE(op, &_PyWeakref_RefType) #define PyWeakref_CheckProxy(op) \ - ((Py_TYPE(op) == &_PyWeakref_ProxyType) || \ - (Py_TYPE(op) == &_PyWeakref_CallableProxyType)) + (Py_IS_TYPE(op, &_PyWeakref_ProxyType) || \ + Py_IS_TYPE(op, &_PyWeakref_CallableProxyType)) #define PyWeakref_Check(op) \ (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) diff --git a/src/external/windows/lib/Win32/python38.lib b/src/external/windows/lib/Win32/python38.lib deleted file mode 100755 index 42bdb7d64288321d3a5fe75b57cf3b665395660c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364100 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⁢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
Twzvh9! zx;e}W3dZo1rOYXD7NVsbYEV*Dcu!MIyQr@;IA7j}D|d^DgTt=`S%fB^itTgfYj6?M*^vLafAPP9YH*xHl088Zo4@%Z6{h+<#y^qJipGW%!@HJ`PdOQ{CkL4+X)ZfaSqpZtd;6j z1am#AvJ>}1O$F9i#*sWJ)pE7Q7AX%dS-uISjJ8sJs$fh*+4WT;W}igfT~;2{(gn4W zusxGUHdUhSxtriY>SqRWujm+pc&O~)v1@>Mk3qBsZQL9x;ussV>;y&}_eOH)0EeGP zR0v+V;fW@!P>nZu;50M^3UR5D>X$4bJwKC(If6U>bQoif2}YjjgR=k$IxpbiJoBgH zwKLS08~Re!FZksq8WMul7Ok~Vv0L55jrxn*_Zb}6`LK>Q#couMy!G=3c3_P>rW2wh zYuR3>q{*pWp%Gun9~a@eP72d4AwTzSp<=jO`!Cpv=MJ$Q9Dk@*%orAa8lew4H+`a4 zHSdq0r7QEz+mf3^Y5JS~nhMl(hnXa$WWyC@K^}FV^^rFJNxaV*NAaXAnE5Yhil}cO za>F0D?=8ou_yLA%4{;pf<9E!K3dR8O!3ZMsli;TD1~XC=e@NOO95(nhCq!|~a`Rdp z%I{y=f1!Tf5O3HxeDqm?IT6s3NSZqCJw;WP?@74&EY^Dy49T;I;sQU3h{YWx8w#+J z_E4Avp{X;AF|52RN!3d>oqBK&))o@OBuIuCgT~9DVwgu0i>so5GugzUUGM(^gmzE{ diff --git a/src/external/windows/lib/Win32/python38_d.lib b/src/external/windows/lib/Win32/python38_d.lib deleted file mode 100755 index da93addd820a4d97e6cccd2db103927b13ac4a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368706 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

d2gIoWse{N}i`WJ}TsA+cIVB^nHOG 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

< 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

WccWHUdyWu%vNRTTJb8! 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%0AcZw&XIRR!y+ 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�#2Q5ijQ{pL1pEmXz!eW4P9H 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 literal 0 HcmV?d00001 diff --git a/src/external/windows/lib/Win32/python39_d.lib b/src/external/windows/lib/Win32/python39_d.lib new file mode 100755 index 0000000000000000000000000000000000000000..06e781b8b20eb39b43bbf45a93ffa2d0e46e2df2 GIT binary patch literal 373976 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 literal 0 HcmV?d00001 diff --git a/src/external/windows/lib/x64/python38.lib b/src/external/windows/lib/x64/python38.lib deleted file mode 100755 index daa1122ac06d963c65ac8b4f531607c5ae89f21a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356214 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%0DNE*9wlrm=Ha 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 diff --git a/src/external/windows/lib/x64/python38_d.lib b/src/external/windows/lib/x64/python38_d.lib deleted file mode 100755 index c0867c19ab200c46de24e65cf1f8227a5cc09908..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360790 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%0ACNJ#c@B+(WzMKf_Vwkiq#dmTf&-MEgt{l9vm z6iq@sFRF}-FQlFq`DUIRCh)!ar2}WvsLs+eW%(oEdsn`E^K9C`%{CAvc_biXjcUb* zNya$_BI_V6!5g8Q9;?24_aMnQS5FMQ(q?rHMQeAB&z%=3V>S;G<(wp-%+--s+Z?6L z)qEpYroRVsS~>0e^K@ReAUs!&%>WH<^Uy?o7jmJVEz9?T-O$-uCzsJ~Xi=M=nGO$0Z;_*tT}icJk&+`4}=% zF0+1|f)igoK$i1{TJ3mFw?M}WBs%bAL~$<2+V>h3b=t<{EYxvXtr%-;Y1Q+fx~b@! z9xkCA@-o1~V#=7!Z#T?YL$kSDN2UCLsjNhNRDlI5kG0-O7FeX?u^~0#grx&>nCUvT z)y8NmbhKE-mFdf}JcmG6f3DGkpL?v-@d61KJc&|9b=0;f2*>KD?7ifRI&P0|hHOPqG`BtYT^mg?6a@bgQLMBj$fDK_ zRy_yWzs!2I&kowZYz>lF+!8@@QPX;>L^O_bHeb7g#&KJa7$;>M(Y}7giwBoc?65t^ zN^%Uq({k+?jVgWM9Q)RRNbUJ)_x!5Pxokv{@f@f z)t^b-eN3T>6gl6XQfUpzxmVqXDb%z;;$0T7A8V0))kd!UK9bJ>f6?V2;;K#f zD}LWU80qO3bE0H>TIFi{jtF4645TVLIlKnttXn4=57j2AoT9u983SoB>?Ns1xbUVT}2%?Xt4-YFL-WgT8APf475Mb+)6;l<=A41bUX5Wcj_RLHgDcJj(N9sPoks$L`fx?%jksYl9tC$P?Zc;@{pXXq*<2}#Cdbls`LHG6<1P!VD&l= z#d$zXah(MoA#P=Tz8|S%rL1>X5E9@F>|rS30fg4ziM)U!71$R#G_( zQ;vNiE2+Kd(_=P9u3{j|=t_f57tYizL<#W+iXwe&2JyZHRShgj;|W&H29X;|Xw|${OJsYmD0iBy+#Fan ztM1;tnIfO-uA~=+1D*#32EsFl@-9pIFFi>6%j>y}@$5Q1#RdGmU&|VU-twsZT|z#c zNL35*BHcN;AjK=XdZ07m!#!^(pflm>AzFoHuNB73W)B}%!$gS<&h z%`*jL1Gi{t>@kNNw`n+qZ2)0h=tiGTI<;8{5Fc#>H>DGH_Mq}S({pd2>is7Xo=yBeD=fsC|y&Aq>zBWY1!fgK;4cUVA_eWar9SduTOpq^GevH718BEFH@EemLaoV%quKtL4e5hXvAA zet-W3lI}ho4H}5Bbg1Uox3qo{oisJp^2⋙#?5Dr=Rv8py>U69XE`NmqLtKzGW*B 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%0A-D7(# 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 x1H$!*1zVcf99Wb(n)jW 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 literal 0 HcmV?d00001 diff --git a/src/external/windows/lib/x64/python39_d.lib b/src/external/windows/lib/x64/python39_d.lib new file mode 100755 index 0000000000000000000000000000000000000000..40d93645f5d07938984f097226acb454a2334329 GIT binary patch literal 365940 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 n9L791?J7s+zm2dcjI@h$%Wyl Tuple[Any, ...]: +def get_binding_values() -> tuple[Any, ...]: return ( ba.app, # kApp tuple(), # kEmptyTuple diff --git a/src/meta/bameta/python_embedded/bootstrap.py b/src/meta/bameta/python_embedded/bootstrap.py index e42f9a5a..8688d2db 100644 --- a/src/meta/bameta/python_embedded/bootstrap.py +++ b/src/meta/bameta/python_embedded/bootstrap.py @@ -11,14 +11,14 @@ from typing import TYPE_CHECKING import _ba if TYPE_CHECKING: - from typing import Any, TextIO, Callable, List + from typing import Any, TextIO, Callable class _BAConsoleRedirect: def __init__(self, original: TextIO, call: Callable[[str], None]) -> None: self._lock = threading.Lock() - self._linebits: List[str] = [] + self._linebits: list[str] = [] self._original = original self._call = call self._pending_ship = False diff --git a/tests/test_efro/test_dataclassio.py b/tests/test_efro/test_dataclassio.py index c275b26b..5b53a1a0 100644 --- a/tests/test_efro/test_dataclassio.py +++ b/tests/test_efro/test_dataclassio.py @@ -7,10 +7,8 @@ from __future__ import annotations from enum import Enum import datetime from dataclasses import field, dataclass -from typing import (TYPE_CHECKING, Optional, List, Set, Any, Dict, Sequence, - Union, Tuple) +from typing import TYPE_CHECKING, Optional, Any, Sequence, Union, Annotated -from typing_extensions import Annotated import pytest from efro.util import utc_now @@ -50,7 +48,7 @@ class _BadEnum2(Enum): class _NestedClass: ival: int = 0 sval: str = 'foo' - dval: Dict[int, str] = field(default_factory=dict) + dval: dict[int, str] = field(default_factory=dict) def test_assign() -> None: @@ -72,15 +70,15 @@ def test_assign() -> None: obval: Optional[bool] = None ofval: Optional[float] = None oenval: Optional[_EnumTest] = _EnumTest.TEST1 - lsval: List[str] = field(default_factory=list) - lival: List[int] = field(default_factory=list) - lbval: List[bool] = field(default_factory=list) - lfval: List[float] = field(default_factory=list) - lenval: List[_EnumTest] = field(default_factory=list) - ssval: Set[str] = field(default_factory=set) + lsval: list[str] = field(default_factory=list) + lival: list[int] = field(default_factory=list) + lbval: list[bool] = field(default_factory=list) + lfval: list[float] = field(default_factory=list) + lenval: list[_EnumTest] = field(default_factory=list) + ssval: set[str] = field(default_factory=set) anyval: Any = 1 - dictval: Dict[int, str] = field(default_factory=dict) - tupleval: Tuple[int, str, bool] = (1, 'foo', False) + dictval: dict[int, str] = field(default_factory=dict) + tupleval: tuple[int, str, bool] = (1, 'foo', False) datetimeval: Optional[datetime.datetime] = None class _TestClass2: @@ -367,36 +365,36 @@ def test_prep() -> None: @ioprepped @dataclass class _TestClass7: - dval: Dict[float, int] + dval: dict[float, int] @ioprepped @dataclass class _TestClass8: - dval: Dict[str, int] + dval: dict[str, int] @ioprepped @dataclass class _TestClass9: - dval: Dict[_GoodEnum, int] + dval: dict[_GoodEnum, int] @ioprepped @dataclass class _TestClass10: - dval: Dict[_GoodEnum2, int] + dval: dict[_GoodEnum2, int] with pytest.raises(TypeError): @ioprepped @dataclass class _TestClass11: - dval: Dict[_BadEnum1, int] + dval: dict[_BadEnum1, int] with pytest.raises(TypeError): @ioprepped @dataclass class _TestClass12: - dval: Dict[_BadEnum2, int] + dval: dict[_BadEnum2, int] def test_validate() -> None: @@ -468,7 +466,7 @@ def test_ioattrs() -> None: @ioprepped @dataclass class _TestClass: - dval: Annotated[Dict, IOAttrs('d')] + dval: Annotated[dict, IOAttrs('d')] obj = _TestClass(dval={'foo': 'bar'}) @@ -482,12 +480,12 @@ def test_ioattrs() -> None: @ioprepped @dataclass class _TestClass2: - dval: Annotated[Dict, IOAttrs('d', store_default=False)] + dval: Annotated[dict, IOAttrs('d', store_default=False)] @ioprepped @dataclass class _TestClass3: - dval: Annotated[Dict, IOAttrs('d', store_default=False)] = field( + dval: Annotated[dict, IOAttrs('d', store_default=False)] = field( default_factory=dict) ival: Annotated[int, IOAttrs('i', store_default=False)] = 123 @@ -584,7 +582,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass2: - dval: Dict[int, float] + dval: dict[int, float] obj2 = _TestClass2(dval={1: 2.34}) out = dataclass_to_dict(obj2) @@ -599,7 +597,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass3: - dval: Dict[_GoodEnum, int] + dval: dict[_GoodEnum, int] obj3 = _TestClass3(dval={_GoodEnum.VAL1: 123}) out = dataclass_to_dict(obj3) @@ -611,7 +609,7 @@ def test_dict() -> None: @ioprepped @dataclass class _TestClass4: - dval: Dict[_GoodEnum2, int] + dval: dict[_GoodEnum2, int] obj4 = _TestClass4(dval={_GoodEnum2.VAL1: 125}) out = dataclass_to_dict(obj4) diff --git a/tests/test_efro/test_message.py b/tests/test_efro/test_message.py index 5efd7760..cf8eb7aa 100644 --- a/tests/test_efro/test_message.py +++ b/tests/test_efro/test_message.py @@ -19,7 +19,7 @@ from efro.message import (Message, Response, MessageProtocol, MessageSender, BoundMessageReceiver) if TYPE_CHECKING: - from typing import List, Type, Any, Callable, Optional, Awaitable + from typing import Any, Callable, Optional, Awaitable @ioprepped @@ -29,7 +29,7 @@ class _TMsg1(Message): ival: int @classmethod - def get_response_types(cls) -> List[Type[Response]]: + def get_response_types(cls) -> list[type[Response]]: return [_TResp1] @@ -40,7 +40,7 @@ class _TMsg2(Message): sval: str @classmethod - def get_response_types(cls) -> List[Type[Response]]: + def get_response_types(cls) -> list[type[Response]]: return [_TResp1, _TResp2] diff --git a/tools/bacloud b/tools/bacloud index c9424b09..9a50cdd4 100755 --- a/tools/bacloud +++ b/tools/bacloud @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """A tool for interacting with ballistica's cloud services. @@ -22,7 +22,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import Optional, Dict, Tuple, List, BinaryIO + from typing import Optional, BinaryIO # Version is sent to the master-server with all commands. Can be incremented # if we need to change behavior server-side to go along with client changes. @@ -86,16 +86,16 @@ class Response: login: Optional[str] = None logout: bool = False dir_manifest: Optional[str] = None - uploads: Optional[Tuple[List[str], str, Dict]] = None - uploads_inline: Optional[List[str]] = None - downloads_inline: Optional[Dict[str, str]] = None - deletes: Optional[List[str]] = None + uploads: Optional[tuple[list[str], str, dict]] = None + uploads_inline: Optional[list[str]] = None + downloads_inline: Optional[dict[str, str]] = None + deletes: Optional[list[str]] = None dir_prune_empty: Optional[str] = None open_url: Optional[str] = None - input_prompt: Optional[Tuple[str, bool]] = None + input_prompt: Optional[tuple[str, bool]] = None end_message: Optional[str] = None end_message_end: str = '\n' - end_command: Optional[Tuple[str, Dict]] = None + end_command: Optional[tuple[str, dict]] = None def get_tz_offset_seconds() -> float: @@ -120,7 +120,7 @@ class DirManifest: def __init__(self) -> None: self.path = Path('') - self.files: Dict[str, DirManifestFile] = {} + self.files: dict[str, DirManifestFile] = {} @classmethod def load_from_disk(cls, path: Path) -> DirManifest: @@ -129,7 +129,7 @@ class DirManifest: package.path = path packagepathstr = str(path) - paths: List[str] = [] + paths: list[str] = [] # Simply return empty manifests if the given path isn't a dir. # (the server may intend to create it and is just asking what's @@ -146,7 +146,7 @@ class DirManifest: from concurrent.futures import ThreadPoolExecutor from multiprocessing import cpu_count - def _get_file_info(filepath: str) -> Tuple[str, DirManifestFile]: + def _get_file_info(filepath: str) -> tuple[str, DirManifestFile]: sha = hashlib.sha256() fullfilepath = os.path.join(packagepathstr, filepath) if not os.path.isfile(fullfilepath): @@ -172,7 +172,7 @@ class App: def __init__(self) -> None: self._state = StateData() self._project_root: Optional[Path] = None - self._end_command_args: Dict = {} + self._end_command_args: dict = {} def run(self) -> None: """Run the tool.""" @@ -231,8 +231,8 @@ class App: def _servercmd(self, cmd: str, - data: Dict, - files: Dict[str, BinaryIO] = None) -> Response: + data: dict, + files: dict[str, BinaryIO] = None) -> Response: """Issue a command to the server and get a response.""" response_raw_2 = requests.post( @@ -267,7 +267,7 @@ class App: return response - def _upload_file(self, filename: str, call: str, args: Dict) -> None: + def _upload_file(self, filename: str, call: str, args: dict) -> None: print(f'{Clr.BLU}Uploading {filename}{Clr.RST}', flush=True) with tempfile.TemporaryDirectory() as tempdir: srcpath = Path(filename) @@ -276,7 +276,7 @@ class App: shell=True, check=True) with open(gzpath, 'rb') as infile: - putfiles: Dict = {'file': infile} + putfiles: dict = {'file': infile} _response = self._servercmd( call, args, @@ -293,7 +293,7 @@ class App: for key, val in manifest.files.items()} } - def _handle_uploads(self, uploads: Tuple[List[str], str, Dict]) -> None: + def _handle_uploads(self, uploads: tuple[list[str], str, dict]) -> None: from concurrent.futures import ThreadPoolExecutor assert len(uploads) == 3 filenames, uploadcmd, uploadargs = uploads @@ -312,7 +312,7 @@ class App: # exceptions that occurred. list(executor.map(_do_filename, filenames)) - def _handle_downloads_inline(self, downloads_inline: Dict[str, + def _handle_downloads_inline(self, downloads_inline: dict[str, str]) -> None: """Handle inline file data to be saved to the client.""" import base64 @@ -326,16 +326,16 @@ class App: with open(fname, 'wb') as outfile: outfile.write(data) - def _handle_deletes(self, deletes: List[str]) -> None: + def _handle_deletes(self, deletes: list[str]) -> None: """Handle file deletes.""" for fname in deletes: os.unlink(fname) - def _handle_uploads_inline(self, uploads_inline: List[str]) -> None: + def _handle_uploads_inline(self, uploads_inline: list[str]) -> None: """Handle uploading files inline.""" import base64 import zlib - files: Dict[str, str] = {} + files: dict[str, str] = {} for filepath in uploads_inline: if not os.path.exists(filepath): raise CleanError(f'File not found: {filepath}') @@ -373,11 +373,11 @@ class App: print(prompt, end='', flush=True) self._end_command_args['input'] = input() - def run_user_command(self, args: List[str]) -> None: + def run_user_command(self, args: list[str]) -> None: """Run a single user command to completion.""" # pylint: disable=too-many-branches - nextcall: Optional[Tuple[str, Dict]] = ('user', {'a': args}) + nextcall: Optional[tuple[str, dict]] = ('user', {'a': args}) # Now talk to the server in a loop until there's nothing left to do. while nextcall is not None: diff --git a/tools/bacommon/assets.py b/tools/bacommon/assets.py index e3f572c7..311852d4 100644 --- a/tools/bacommon/assets.py +++ b/tools/bacommon/assets.py @@ -5,11 +5,9 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import TYPE_CHECKING, Dict, Optional, List +from typing import TYPE_CHECKING, Optional, Annotated from enum import Enum -from typing_extensions import Annotated - from efro.dataclassio import ioprepped, IOAttrs if TYPE_CHECKING: @@ -40,7 +38,7 @@ class AssetType(Enum): @dataclass class AssetPackageFlavorManifest: """A manifest of asset info for a specific flavor of an asset package.""" - assetfiles: Annotated[Dict[str, str], + assetfiles: Annotated[dict[str, str], IOAttrs('assetfiles')] = field(default_factory=dict) @@ -50,7 +48,7 @@ class AssetPackageBuildState: """Contains info about an in-progress asset cloud build.""" # Asset names still being built. - in_progress_builds: Annotated[List[str], + in_progress_builds: Annotated[list[str], IOAttrs('b')] = field(default_factory=list) # The initial number of assets needing to be built. diff --git a/tools/bacommon/net.py b/tools/bacommon/net.py index 6a1f6335..bd4ef1c9 100644 --- a/tools/bacommon/net.py +++ b/tools/bacommon/net.py @@ -4,11 +4,9 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Optional, List, Dict, Any, Tuple +from typing import TYPE_CHECKING, Optional, Any, Annotated from dataclasses import dataclass, field -from typing_extensions import Annotated - from efro.dataclassio import ioprepped, IOAttrs if TYPE_CHECKING: @@ -33,7 +31,7 @@ class ServerNodeQueryResponse: error: Annotated[Optional[str], IOAttrs('e', store_default=False)] = None # The set of servernodes. - servers: Annotated[List[ServerNodeEntry], + servers: Annotated[list[ServerNodeEntry], IOAttrs('s', store_default=False)] = field( default_factory=list) @@ -57,10 +55,10 @@ class PrivateHostingConfig: playlist_name: str = 'Unknown' randomize: bool = False tutorial: bool = False - custom_team_names: Optional[Tuple[str, str]] = None - custom_team_colors: Optional[Tuple[Tuple[float, float, float], - Tuple[float, float, float]]] = None - playlist: Optional[List[Dict[str, Any]]] = None + custom_team_names: Optional[tuple[str, str]] = None + custom_team_colors: Optional[tuple[tuple[float, float, float], + tuple[float, float, float]]] = None + playlist: Optional[list[dict[str, Any]]] = None exit_minutes: float = 120.0 exit_minutes_unclean: float = 180.0 exit_minutes_idle: float = 10.0 diff --git a/tools/bacommon/servermanager.py b/tools/bacommon/servermanager.py index 0ae3005c..b767006a 100644 --- a/tools/bacommon/servermanager.py +++ b/tools/bacommon/servermanager.py @@ -5,7 +5,7 @@ from __future__ import annotations from enum import Enum from dataclasses import field, dataclass -from typing import TYPE_CHECKING, List, Optional, Tuple, Dict, Any +from typing import TYPE_CHECKING, Optional, Any from efro.dataclassio import ioprepped @@ -33,7 +33,7 @@ class ServerConfig: # IDs of server admins. Server admins are not kickable through the default # kick vote system and they are able to kick players without a vote. To get # your account id, enter 'getaccountid' in settings->advanced->enter-code. - admins: List[str] = field(default_factory=list) + admins: list[str] = field(default_factory=list) # Whether the default kick-voting system is enabled. enable_default_kick_voting: bool = True @@ -64,7 +64,7 @@ class ServerConfig: # Alternately, you can embed playlist data here instead of using codes. # Make sure to set session_type to the correct type for the data here. - playlist_inline: Optional[List[Dict[str, Any]]] = None + playlist_inline: Optional[list[dict[str, Any]]] = None # Whether to shuffle the playlist or play its games in designated order. playlist_shuffle: bool = True @@ -131,11 +131,11 @@ class ServerConfig: show_tutorial: bool = False # Team names (teams mode only). - team_names: Optional[Tuple[str, str]] = None + team_names: Optional[tuple[str, str]] = None # Team colors (teams mode only). - team_colors: Optional[Tuple[Tuple[float, float, float], - Tuple[float, float, float]]] = None + team_colors: Optional[tuple[tuple[float, float, float], + tuple[float, float, float]]] = None # (internal) stress-testing mode. stress_test_players: Optional[int] = None @@ -171,15 +171,15 @@ class ShutdownCommand(ServerCommand): class ChatMessageCommand(ServerCommand): """Chat message from the server.""" message: str - clients: Optional[List[int]] + clients: Optional[list[int]] @dataclass class ScreenMessageCommand(ServerCommand): """Screen-message from the server.""" message: str - color: Optional[Tuple[float, float, float]] - clients: Optional[List[int]] + color: Optional[tuple[float, float, float]] + clients: Optional[list[int]] @dataclass diff --git a/tools/batools/android.py b/tools/batools/android.py index e7d640fa..9bc3144b 100644 --- a/tools/batools/android.py +++ b/tools/batools/android.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING import efrotools if TYPE_CHECKING: - from typing import List, Optional, Set + pass def androidaddr(archive_dir: str, arch: str, addr: str) -> None: diff --git a/tools/batools/androidsdkutils.py b/tools/batools/androidsdkutils.py index 5bfcebe5..5c1aaf5e 100755 --- a/tools/batools/androidsdkutils.py +++ b/tools/batools/androidsdkutils.py @@ -11,7 +11,7 @@ from typing import TYPE_CHECKING from efro.error import CleanError if TYPE_CHECKING: - from typing import List + pass def _parse_lprop_file(local_properties_path: str) -> str: @@ -76,7 +76,7 @@ def _gen_lprop_file(local_properties_path: str) -> str: return sdk_dir -def run(projroot: str, args: List[str]) -> None: +def run(projroot: str, args: list[str]) -> None: """Main script entry point.""" # pylint: disable=too-many-branches # pylint: disable=too-many-locals diff --git a/tools/batools/assetsmakefile.py b/tools/batools/assetsmakefile.py index e64065e4..f6604ac9 100755 --- a/tools/batools/assetsmakefile.py +++ b/tools/batools/assetsmakefile.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """Updates assets/Makefile based on source assets present.""" @@ -13,15 +13,15 @@ from typing import TYPE_CHECKING from efro.terminal import Clr if TYPE_CHECKING: - from typing import List, Set + pass -PYC_SUFFIX = '.cpython-38.opt-1.pyc' +PYC_SUFFIX = '.cpython-39.opt-1.pyc' def _get_targets(varname: str, inext: str, outext: str, - all_targets: Set, + all_targets: set, limit_to_prefix: str = None) -> str: """Generic function to map source extension to dst files.""" @@ -48,14 +48,14 @@ def _get_targets(varname: str, return '\n' + varname + ' = \\\n ' + ' \\\n '.join(sorted(targets)) -def _get_py_targets(src: str, dst: str, py_targets: List[str], - pyc_targets: List[str], all_targets: Set[str], +def _get_py_targets(src: str, dst: str, py_targets: list[str], + pyc_targets: list[str], all_targets: set[str], subset: str) -> None: # pylint: disable=too-many-branches py_generated_root = 'assets/src/ba_data/python/ba/_generated' - def _do_get_targets(root: str, fnames: List[str]) -> None: + def _do_get_targets(root: str, fnames: list[str]) -> None: # Special case: ignore temp py files in data src. if root == 'assets/src/ba_data/data/maps': return @@ -122,7 +122,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str], # Now create targets for any of our dynamically generated stuff that # lives under this dir. - meta_targets: List[str] = [] + meta_targets: list[str] = [] for mantype in ['public', 'private']: with open(f'src/meta/.meta_manifest_{mantype}.json', encoding='utf-8') as infile: @@ -137,7 +137,7 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str], fnames=[os.path.basename(target)]) -def _get_py_targets_subset(all_targets: Set[str], subset: str, +def _get_py_targets_subset(all_targets: set[str], subset: str, suffix: str) -> str: if subset == 'public_tools': src = 'tools' @@ -149,8 +149,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str, copyrule = 'build/%.py : src/%.py' # Separate these into '1' and '2'. - py_targets: List[str] = [] - pyc_targets: List[str] = [] + py_targets: list[str] = [] + pyc_targets: list[str] = [] _get_py_targets(src, dst, @@ -213,8 +213,8 @@ def _get_py_targets_subset(all_targets: Set[str], subset: str, return out -def _get_extras_targets_win(all_targets: Set[str], platform: str) -> str: - targets: List[str] = [] +def _get_extras_targets_win(all_targets: set[str], platform: str) -> str: + targets: list[str] = [] base = 'assets/src/windows' dstbase = 'build/windows' for root, _dnames, fnames in os.walk(base): @@ -292,8 +292,8 @@ def update_assets_makefile(projroot: str, check: bool) -> None: auto_start_private = lines.index('#__AUTOGENERATED_PRIVATE_BEGIN__') auto_end_private = lines.index('#__AUTOGENERATED_PRIVATE_END__') - all_targets_public: Set[str] = set() - all_targets_private: Set[str] = set() + all_targets_public: set[str] = set() + all_targets_private: set[str] = set() # We always auto-generate the public section. our_lines_public = [ @@ -380,7 +380,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None: all_targets_private, check) -def _write_manifest(manifest_path: str, all_targets: Set[str], +def _write_manifest(manifest_path: str, all_targets: set[str], check: bool) -> None: # Lastly, write a simple manifest of the things we expect to have # in build. We can use this to clear out orphaned files as part of builds. diff --git a/tools/batools/assetstaging.py b/tools/batools/assetstaging.py index d5f18435..9c231bc7 100755 --- a/tools/batools/assetstaging.py +++ b/tools/batools/assetstaging.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3.8 +#!/usr/bin/env python3.9 # Released under the MIT License. See LICENSE for details. # """Stage assets for a build.""" @@ -15,7 +15,7 @@ from typing import TYPE_CHECKING from efrotools import PYVER if TYPE_CHECKING: - from typing import Optional, List + from typing import Optional from pathlib import Path # Suffix for the pyc files we include in stagings. @@ -53,7 +53,7 @@ class Config: self.is_payload_full = False self.debug: Optional[bool] = None - def _parse_android_args(self, args: List[str]) -> None: + def _parse_android_args(self, args: list[str]) -> None: # On Android we get nitpicky with what # we want to copy in since we can speed up # iterations by installing stripped down @@ -100,7 +100,7 @@ class Config: elif arg == '-audio': self.include_audio = True - def _parse_win_platform(self, platform: str, args: List[str]) -> None: + def _parse_win_platform(self, platform: str, args: list[str]) -> None: """Parse sub-args in the windows platform string.""" winempty, wintype, winplt, wincfg = platform.split('-') self.win_platform = winplt @@ -133,7 +133,7 @@ class Config: else: raise RuntimeError(f'Invalid wincfg: "{wincfg}"') - def parse_args(self, args: List[str]) -> None: + def parse_args(self, args: list[str]) -> None: """Parse args and apply to the cfg.""" if len(args) < 1: raise RuntimeError('Expected a platform argument.') @@ -275,7 +275,7 @@ def _sync_windows_extras(cfg: Config) -> None: # We could technically copy everything over but this keeps staging # dirs a bit tidier. dbgsfx = '_d' if cfg.debug else '' - toplevelfiles: List[str] = [f'python38{dbgsfx}.dll'] + toplevelfiles: list[str] = [f'python39{dbgsfx}.dll'] if cfg.win_type == 'win': toplevelfiles += [ @@ -469,7 +469,7 @@ def stage_server_file(projroot: str, mode: str, infilename: str, raise RuntimeError(f"Unknown server file for staging: '{basename}'.") -def main(projroot: str, args: Optional[List[str]] = None) -> None: +def main(projroot: str, args: Optional[list[str]] = None) -> None: """Stage assets for a build.""" if args is None: diff --git a/tools/batools/build.py b/tools/batools/build.py index 7c914573..f3c6a63a 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -16,7 +16,7 @@ from efro.error import CleanError from efro.terminal import Clr if TYPE_CHECKING: - from typing import List, Sequence, Optional, Any, Dict + from typing import Sequence, Optional, Any # Python pip packages we require for this project. @@ -24,7 +24,7 @@ if TYPE_CHECKING: class PipRequirement: """A pip package required by our project.""" modulename: Optional[str] = None - minversion: Optional[List[int]] = None # None implies no min version. + minversion: Optional[list[int]] = None # None implies no min version. pipname: Optional[str] = None # None implies same as modulename. @@ -50,7 +50,7 @@ PIP_REQUIREMENTS = [ # Parts of full-tests suite we only run on particular days. # (This runs in listed order so should be randomized by hand to avoid # clustering similar tests too much) -SPARSE_TEST_BUILDS: List[List[str]] = [ +SPARSE_TEST_BUILDS: list[list[str]] = [ ['ios.pylibs.debug', 'android.pylibs.arm'], ['linux.package', 'android.pylibs.arm64'], ['windows.package', 'mac.pylibs'], @@ -88,7 +88,7 @@ class PrefabTarget(Enum): SERVER_RELEASE = 'server-release' -def _lazybuild_check_paths(inpaths: List[str], category: SourceCategory, +def _lazybuild_check_paths(inpaths: list[str], category: SourceCategory, target: str) -> bool: # pylint: disable=too-many-branches @@ -170,7 +170,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None: Note that target's mod-time will *always* be updated to match the newest source regardless of whether the build itself was triggered. """ - paths: List[str] + paths: list[str] # Everything possibly affecting meta builds. if category is SourceCategory.META: @@ -214,7 +214,7 @@ def lazybuild(target: str, category: SourceCategory, command: str) -> None: def archive_old_builds(ssh_server: str, builds_dir: str, - ssh_args: List[str]) -> None: + ssh_args: list[str]) -> None: """Stuff our old public builds into the 'old' dir. (called after we push newer ones) @@ -295,7 +295,8 @@ def gen_fulltest_buildfile_android() -> None: cspre = 'tools/cloudshell linbeast --env android --' # This is currently broken; turning off. - do_py_android = False + # Update: should be working again; hooray! + do_py_android = True for extra in extras: if extra == 'android.pylibs.arm': @@ -347,7 +348,7 @@ def gen_fulltest_buildfile_windows() -> None: dayoffset = datetime.datetime.now().timetuple().tm_yday - lines: List[str] = [] + lines: list[str] = [] # We want to do one regular, one headless, and one oculus build, # but let's switch up 32 or 64 bit based on the day. @@ -571,7 +572,7 @@ def checkenv() -> None: assert 'Package' in piplist[0] and 'Version' in piplist[0] assert '--------' in piplist[1] piplist = piplist[2:] - pipvers: Dict[str, List[int]] = {} + pipvers: dict[str, list[int]] = {} for line in piplist: pname, pverraw = line.split()[:2] pver = [int(x) if x.isdigit() else 0 for x in pverraw.split('.')] @@ -648,9 +649,9 @@ def checkenv() -> None: print(f'{Clr.BLD}Environment ok.{Clr.RST}', flush=True) -def get_pip_reqs() -> List[str]: +def get_pip_reqs() -> list[str]: """Return the pip requirements needed to build/run stuff.""" - out: List[str] = [] + out: list[str] = [] for req in PIP_REQUIREMENTS: name = req.modulename if req.pipname is None else req.pipname assert isinstance(name, str) @@ -712,7 +713,7 @@ def _get_server_config_template_yaml(projroot: str) -> str: # pylint: disable=too-many-branches import yaml lines_in = _get_server_config_raw_contents(projroot).splitlines() - lines_out: List[str] = [] + lines_out: list[str] = [] ignore_vars = {'stress_test_players'} for line in lines_in: if any(line.startswith(f'{var}:') for var in ignore_vars): @@ -869,7 +870,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None: name: str current_value: str - entries: List[Entry] = [] + entries: list[Entry] = [] # Start fresh if cmake version changes. cmake_ver_output = subprocess.run(['cmake', '--version'], @@ -911,7 +912,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None: verfilename = os.path.join(dirname, '.ba_cmake_env') title = 'cmake_prep_dir' - versions: Dict[str, str] + versions: dict[str, str] if os.path.isfile(verfilename): with open(verfilename, encoding='utf-8') as infile: versions = json.loads(infile.read()) diff --git a/tools/batools/docs.py b/tools/batools/docs.py index 6beed9b6..7e840575 100755 --- a/tools/batools/docs.py +++ b/tools/batools/docs.py @@ -11,7 +11,7 @@ import datetime import inspect import subprocess from dataclasses import dataclass -from typing import TYPE_CHECKING, List, Union, cast +from typing import TYPE_CHECKING, Union, cast from enum import Enum from efro.error import CleanError @@ -19,8 +19,7 @@ from efro.terminal import Clr if TYPE_CHECKING: from types import ModuleType - from typing import (Type, Optional, Tuple, Callable, Dict, Any, Sequence, - Set) + from typing import Optional, Callable, Any, Sequence CATEGORY_STRING = 'Category:' @@ -61,15 +60,15 @@ class ClassInfo: """Info about a class of functions/classes.""" name: str category: str - methods: List[FunctionInfo] - inherited_methods: List[FunctionInfo] - attributes: List[AttributeInfo] - parents: List[str] + methods: list[FunctionInfo] + inherited_methods: list[FunctionInfo] + attributes: list[AttributeInfo] + parents: list[str] docs: Optional[str] - enum_values: Optional[List[str]] + enum_values: Optional[list[str]] -def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str: +def parse_docs_attrs(attrs: list[AttributeInfo], docs: str) -> str: """Given a docs str, parses attribute descriptions contained within.""" docs_lines = docs.splitlines() attr_line = None @@ -115,14 +114,14 @@ def parse_docs_attrs(attrs: List[AttributeInfo], docs: str) -> str: return docs -def _get_defining_class(cls: Type, name: str) -> Optional[Type]: +def _get_defining_class(cls: type, name: str) -> Optional[type]: for i in cls.mro()[1:]: if hasattr(i, name): return i return None -def _get_bases(cls: Type) -> List[str]: +def _get_bases(cls: type) -> list[str]: bases = [] for par in cls.mro()[1:]: if par is not object: @@ -199,7 +198,7 @@ def _split_into_paragraphs(docs: str, filter_type: str, indent: int) -> str: return docs -def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]: +def _filter_type_settings(filter_type: str) -> tuple[Optional[Callable], int]: get_category_href_func = None if filter_type == 'class': indent = 30 @@ -216,7 +215,7 @@ def _filter_type_settings(filter_type: str) -> Tuple[Optional[Callable], int]: return get_category_href_func, indent -def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]: +def _get_defining_class_backwards(cls: type, name: str) -> Optional[type]: mro = cls.mro() mro.reverse() for i in mro: @@ -225,7 +224,7 @@ def _get_defining_class_backwards(cls: Type, name: str) -> Optional[Type]: return None -def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]: +def _get_module_classes(module: ModuleType) -> list[tuple[str, type]]: names = dir(module) # Look for all public classes in the provided module. @@ -250,7 +249,7 @@ def _get_module_classes(module: ModuleType) -> List[Tuple[str, Type]]: return classes_by_name -def _is_inherited(cls: Type, name: str) -> bool: +def _is_inherited(cls: type, name: str) -> bool: method = getattr(cls, name) @@ -314,7 +313,7 @@ def _get_category(docs: str, category_type: CategoryType) -> str: return category -def _print_child_classes(category_classes: List[ClassInfo], parent: str, +def _print_child_classes(category_classes: list[ClassInfo], parent: str, indent: int) -> str: out = '' valid_classes = [] @@ -349,8 +348,8 @@ def _print_child_classes(category_classes: List[ClassInfo], parent: str, return out -def _add_inner_classes(class_objs: Sequence[Type], - classes_by_name: List[Tuple[str, Type]]) -> None: +def _add_inner_classes(class_objs: Sequence[type], + classes_by_name: list[tuple[str, type]]) -> None: # Ok, now go through all existing classes and look for classes # defined within. @@ -371,21 +370,21 @@ class Generator: """class which handles docs generation.""" def __init__(self) -> None: - self._index_keys: List[str] = [] + self._index_keys: list[str] = [] # Make a list of missing stuff so we can warn about it in one # big chunk at the end (so the user can batch their corrections). - self._errors: List[Any] = [] - self._index: Dict[str, Tuple[str, Union[ClassInfo, FunctionInfo, + self._errors: list[Any] = [] + self._index: dict[str, tuple[str, Union[ClassInfo, FunctionInfo, AttributeInfo]]] = {} self._out = '' - self._classes: List[ClassInfo] = [] - self._functions: List[FunctionInfo] = [] - self._merged_categories: List[Tuple[str, str, - List[Union[ClassInfo, + self._classes: list[ClassInfo] = [] + self._functions: list[FunctionInfo] = [] + self._merged_categories: list[tuple[str, str, + list[Union[ClassInfo, FunctionInfo]]]] = [] - def name_variants(self, name: str) -> List[str]: + def name_variants(self, name: str) -> list[str]: """Return variants of a word (such as plural) for linking.""" # Do 'ies' plural for words ending in y. # (but not things like foo.y or display or prey) @@ -397,7 +396,7 @@ class Generator: def _add_index_links(self, docs: str, - ignore_links: Optional[List[str]] = None) -> str: + ignore_links: Optional[list[str]] = None) -> str: """Add links to indexed classes/methods/etc found in a docstr.""" sub_num = 0 subs = {} @@ -446,14 +445,14 @@ class Generator: docs = docs.replace(sub_name, sub_val) return docs - def _get_all_attrs_for_class(self, cls: Type, - docs: str) -> Tuple[str, List[AttributeInfo]]: + def _get_all_attrs_for_class(self, cls: type, + docs: str) -> tuple[str, list[AttributeInfo]]: """ if there's an 'Attributes' section in the docs, strip it out and create attributes entries out of it. Returns the stripped down docs as well as detected attrs. """ - attrs: List[AttributeInfo] = [] + attrs: list[AttributeInfo] = [] # Start by pulling any type info we find in the doc str. # (necessary in many non-property cases since there's no other way @@ -473,7 +472,7 @@ class Generator: return docs, attrs def _get_class_level_types_for_doc_attrs( - self, cls: Type, attrs: List[AttributeInfo]) -> None: + self, cls: type, attrs: list[AttributeInfo]) -> None: # Take note of all the attrs that we're aware of already; # these are the ones we can potentially provide type info for. existing_attrs_by_name = {a.name: a for a in attrs} @@ -494,8 +493,8 @@ class Generator: ' should just have one') existing_attrs_by_name[aname].attr_type = aval - def _get_property_attrs_for_class(self, cls: Type, - attrs: List[AttributeInfo]) -> None: + def _get_property_attrs_for_class(self, cls: type, + attrs: list[AttributeInfo]) -> None: for attrname in dir(cls): attr = getattr(cls, attrname) @@ -527,7 +526,7 @@ class Generator: docs=attrdocs, attr_type=attrtype)) - def _get_base_docs_for_class(self, cls: Type) -> str: + def _get_base_docs_for_class(self, cls: type) -> str: if cls.__doc__ is not None: docs = cls.__doc__ docs_lines = docs.splitlines() @@ -556,13 +555,13 @@ class Generator: self._errors.append(f'base docs for class {cls}') return docs - def _get_enum_values_for_class(self, cls: Type) -> Optional[List[str]]: + def _get_enum_values_for_class(self, cls: type) -> Optional[list[str]]: if issubclass(cls, Enum): return [val.name for val in cls] return None def _get_methods_for_class( - self, cls: Type) -> Tuple[List[FunctionInfo], List[FunctionInfo]]: + self, cls: type) -> tuple[list[FunctionInfo], list[FunctionInfo]]: import types method_types = [ @@ -576,8 +575,8 @@ class Generator: and '_no_init' not in name ] - methods: List[FunctionInfo] = [] - inherited_methods: List[FunctionInfo] = [] + methods: list[FunctionInfo] = [] + inherited_methods: list[FunctionInfo] = [] for mth in methods_raw: # Protocols seem to give this... @@ -616,8 +615,8 @@ class Generator: is_class_method=is_class_method)) return methods, inherited_methods - def _python_method_docs(self, cls: Type, - mth: Callable) -> Tuple[str, bool]: + def _python_method_docs(self, cls: type, + mth: Callable) -> tuple[str, bool]: import pydoc mdocs_lines = pydoc.plain(pydoc.render_doc(mth)).splitlines()[2:] @@ -664,9 +663,9 @@ class Generator: mdocs = '\n'.join(mdocs_lines) return mdocs, is_class_method - def _handle_single_line_method_docs(self, cls: Type, - mdocs_lines: List[str], - mth: Callable) -> List[str]: + def _handle_single_line_method_docs(self, cls: type, + mdocs_lines: list[str], + mth: Callable) -> list[str]: import pydoc for testclass in cls.mro()[1:]: testm = getattr(testclass, mth.__name__, None) @@ -734,7 +733,7 @@ class Generator: # ones are searched first (such as nested classes like ba.Foo.Bar). self._index_keys.reverse() - def _write_inherited_attrs(self, inherited_attrs: Dict[str, str]) -> None: + def _write_inherited_attrs(self, inherited_attrs: dict[str, str]) -> None: style = (' style="padding-left: 0px;"' if DO_STYLES else '') self._out += f'Attributes Inherited:\n' style = (' style="padding-left: 30px;"' if DO_STYLES else '') @@ -749,7 +748,7 @@ class Generator: self._out += '\n' def _write_attrs(self, cls: ClassInfo, - attributes: List[AttributeInfo]) -> None: + attributes: list[AttributeInfo]) -> None: # Include a block of links to our attrs if we have more # than one. if len(attributes) > 1: @@ -788,8 +787,8 @@ class Generator: self._out += '

\n' def _write_class_attrs_all(self, cls: ClassInfo, - attributes: List[AttributeInfo], - inherited_attrs: Dict[str, str]) -> None: + attributes: list[AttributeInfo], + inherited_attrs: dict[str, str]) -> None: # If this class has no non-inherited attrs, just print a link to # the base class instead of repeating everything. # Nevermind for now; we never have many attrs so this isn't as @@ -852,7 +851,7 @@ class Generator: self._out += '\n' def _write_methods_for_class(self, cls: ClassInfo, - methods: List[FunctionInfo]) -> None: + methods: list[FunctionInfo]) -> None: """Dump methods for a class.""" if cls.methods: # Just say "methods" if we had no inherited ones. @@ -973,8 +972,8 @@ class Generator: '<top level class>\n') def _get_inherited_attrs(self, cls: ClassInfo, - attr_name_set: Set[str]) -> Dict[str, str]: - inherited_attrs: Dict[str, str] = {} + attr_name_set: set[str]) -> dict[str, str]: + inherited_attrs: dict[str, str] = {} for par in cls.parents: if par in self._index: parent_class = self._index[par][1] @@ -1110,7 +1109,7 @@ class Generator: self._out += (f'

' + cname + '

\n') - classes_sorted = cast(List[ClassInfo], cmembers) + classes_sorted = cast(list[ClassInfo], cmembers) classes_sorted.sort(key=lambda x: x.name.lower()) pcc = _print_child_classes(classes_sorted, '', 0) self._out += pcc @@ -1121,7 +1120,7 @@ class Generator: _get_function_category_href(cname) + '">' + cname + '\n' '